Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
10,000 RAG
Holders
3,102
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 RAGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RareApepeGrlzYC
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-14 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: erc721a/contracts/IERC721A.sol // ERC721A Contracts v4.1.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(); /** * 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(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); 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; // Arbitrary data similar to `startTimestamp` that can be set through `_extraData`. uint24 extraData; } /** * @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); // ============================== // IERC2309 // ============================== /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` (inclusive) is transferred from `from` to `to`, * as defined in the ERC2309 standard. See `_mintERC2309` for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } // File: erc721a/contracts/ERC721A.sol // ERC721A Contracts v4.1.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 bit position of `extraData` in packed ownership. uint256 private constant BITPOS_EXTRA_DATA = 232; // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`. uint256 private constant BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; // The mask of the lower 160 bits for addresses. uint256 private constant BITMASK_ADDRESS = (1 << 160) - 1; // The maximum `quantity` that can be minted with `_mintERC2309`. // This limit is to prevent overflows on the address data entries. // For a limit of 5000, a total of 3.689e15 calls to `_mintERC2309` // is required to cause an overflow, which is unrealistic. uint256 private constant MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; // 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` // - [232..255] `extraData` 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 (owner == address(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 auxiliary 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 auxiliary 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; // Cast `aux` with assembly to avoid redundant masking. assembly { 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; ownership.extraData = uint24(packed >> BITPOS_EXTRA_DATA); } /** * 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 Packs ownership data into a single uint256. */ function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, BITMASK_ADDRESS) // `owner | (block.timestamp << BITPOS_START_TIMESTAMP) | flags`. result := or(owner, or(shl(BITPOS_START_TIMESTAMP, timestamp()), flags)) } } /** * @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, it can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Returns the `nextInitialized` flag set if `quantity` equals 1. */ function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) { // For branchless setting of the `nextInitialized` flag. assembly { // `(quantity == 1) << BITPOS_NEXT_INITIALIZED`. result := shl(BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ownerOf(tokenId); 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-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 { transferFrom(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. * * See {_mint}. * * Emits a {Transfer} event for each mint. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if (!_checkContractOnERC721Received(address(0), to, index++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); // Reentrancy protection. if (_currentIndex != end) revert(); } } } /** * @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 for each mint. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // `balance` and `numberMinted` have a maximum limit of 2**64. // `tokenId` has a maximum limit of 2**256. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _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] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 tokenId = startTokenId; uint256 end = startTokenId + quantity; do { emit Transfer(address(0), to, tokenId++); } while (tokenId < end); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * This function is intended for efficient minting only during contract creation. * * It emits only one {ConsecutiveTransfer} as defined in * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309), * instead of a sequence of {Transfer} event(s). * * Calling this function outside of contract creation WILL make your contract * non-compliant with the ERC721 standard. * For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309 * {ConsecutiveTransfer} event is only permissible during contract creation. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {ConsecutiveTransfer} event. */ function _mintERC2309(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are unrealistic due to the above check for `quantity` to be below the limit. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _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] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Returns the storage slot and value for the approved address of `tokenId`. */ function _getApprovedAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { mapping(uint256 => address) storage tokenApprovalsPtr = _tokenApprovals; // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId]`. assembly { // Compute the slot. mstore(0x00, tokenId) mstore(0x20, tokenApprovalsPtr.slot) approvedAddressSlot := keccak256(0x00, 0x40) // Load the slot's value from storage. approvedAddress := sload(approvedAddressSlot) } } /** * @dev Returns whether the `approvedAddress` is equals to `from` or `msgSender`. */ function _isOwnerOrApproved( address approvedAddress, address from, address msgSender ) private pure returns (bool result) { assembly { // Mask `from` to the lower 160 bits, in case the upper bits somehow aren't clean. from := and(from, BITMASK_ADDRESS) // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean. msgSender := and(msgSender, BITMASK_ADDRESS) // `msgSender == from || msgSender == approvedAddress`. result := or(eq(msgSender, from), eq(msgSender, approvedAddress)) } } /** * @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 transferFrom( address from, address to, uint256 tokenId ) public virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId); // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // 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] = _packOwnershipData( to, BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); // 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)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId); if (approvalCheck) { // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // 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] = _packOwnershipData( from, (BITMASK_BURNED | BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); // 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 Directly sets the extra data for the ownership data `index`. */ function _setExtraDataAt(uint256 index, uint24 extraData) internal { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; // Cast `extraData` with assembly to avoid redundant masking. assembly { extraDataCasted := extraData } packed = (packed & BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } /** * @dev Returns the next extra data for the packed ownership data. * The returned result is shifted into position. */ function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << BITPOS_EXTRA_DATA; } /** * @dev Called during each token transfer to set the 24bit `extraData` field. * Intended to be overridden by the cosumer contract. * * `previousExtraData` - the value of `extraData` before transfer. * * 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 _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} /** * @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: contracts/StrangeMeInNFT.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); } } pragma solidity ^0.8.0; contract RareApepeGrlzYC is ERC721A, Ownable { using Strings for uint; uint public constant MINT_PRICE = 0.003 ether; uint public constant MAX_NFT_PER_TRAN = 10; uint public constant MAX_PER_WALLET = 100; uint public maxSupply = 10000; uint public MAX_FREE_PER_WALLET = 2; bool public isPaused = true; bool public isMetadataFinal; string private _baseURL = "ipfs://bafybeigf75fku4axlj47ri4glvf7b53dtkwbur2gmcybjqpkkiqsvto5zm/"; string public prerevealURL = ''; mapping(address => uint) private _walletMintedCount; constructor() // Name ERC721A('RareApepeGrlzYC', 'RAG') { } function _baseURI() internal view override returns (string memory) { return _baseURL; } function _startTokenId() internal pure override returns (uint) { return 1; } function contractURI() public pure returns (string memory) { return ""; } function finalizeMetadata() external onlyOwner { isMetadataFinal = true; } function reveal(string memory url) external onlyOwner { require(!isMetadataFinal, "Metadata is finalized"); _baseURL = url; } function mintedCount(address owner) external view returns (uint) { return _walletMintedCount[owner]; } function setPause(bool value) external onlyOwner { isPaused = value; } function withdraw() external onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } function devMint(address to, uint count) external onlyOwner { require( _totalMinted() + count <= maxSupply, 'Exceeds max supply' ); _safeMint(to, count); } function setMaxSupply(uint newMaxSupply) external onlyOwner { maxSupply = newMaxSupply; } function tokenURI(uint tokenId) public view override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return bytes(_baseURI()).length > 0 ? string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")) : prerevealURL; } function setFreeMintNumPerWallet(uint256 _limit) external onlyOwner { MAX_FREE_PER_WALLET = _limit; } function mint(uint count) external payable { require(!isPaused, 'Sales are off'); require(count <= MAX_NFT_PER_TRAN,'Exceeds NFT per transaction limit'); require(_totalMinted() + count <= maxSupply,'Exceeds max supply'); require(_walletMintedCount[msg.sender] + count <= MAX_PER_WALLET,'Exceeds max per wallet'); uint payForCount = count; uint mintedSoFar = _walletMintedCount[msg.sender]; if(mintedSoFar < MAX_FREE_PER_WALLET) { uint remainingFreeMints = MAX_FREE_PER_WALLET - mintedSoFar; if(count > remainingFreeMints) { payForCount = count - remainingFreeMints; } else { payForCount = 0; } } require( msg.value >= payForCount * MINT_PRICE, 'Ether value sent is not sufficient' ); _walletMintedCount[msg.sender] += count; _safeMint(msg.sender, count); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":[],"name":"MAX_FREE_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFT_PER_TRAN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","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":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizeMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMetadataFinal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"mintedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prerevealURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"url","type":"string"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setFreeMintNumPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526127106009556002600a556001600b60006101000a81548160ff021916908315150217905550604051806080016040528060438152602001620036fd60439139600c90805190602001906200005b92919062000245565b5060405180602001604052806000815250600d90805190602001906200008392919062000245565b503480156200009157600080fd5b506040518060400160405280600f81526020017f52617265417065706547726c7a594300000000000000000000000000000000008152506040518060400160405280600381526020017f524147000000000000000000000000000000000000000000000000000000000081525081600290805190602001906200011692919062000245565b5080600390805190602001906200012f92919062000245565b50620001406200016e60201b60201c565b6000819055505050620001686200015c6200017760201b60201c565b6200017f60201b60201c565b6200035a565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025390620002f5565b90600052602060002090601f016020900481019282620002775760008555620002c3565b82601f106200029257805160ff1916838001178555620002c3565b82800160010185558215620002c3579182015b82811115620002c2578251825591602001919060010190620002a5565b5b509050620002d29190620002d6565b5090565b5b80821115620002f1576000816000905550600101620002d7565b5090565b600060028204905060018216806200030e57607f821691505b602082108114156200032557620003246200032b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613393806200036a6000396000f3fe6080604052600436106102045760003560e01c806395d89b4111610118578063c87b56dd116100a0578063e8a3d4851161006f578063e8a3d48514610722578063e985e9c51461074d578063f2fde38b1461078a578063f4a560a5146107b3578063fddcb5ea146107ca57610204565b8063c87b56dd14610664578063d5abeb01146106a1578063d8210482146106cc578063e193e7e2146106f757610204565b8063b187bd26116100e7578063b187bd2614610593578063b88d4fde146105be578063bedb86fb146105e7578063c002d23d14610610578063c1e3a4331461063b57610204565b806395d89b41146104f857806398710d1e14610523578063a0712d681461054e578063a22cb4651461056a57610204565b80633ccfd60b1161019b5780636352211e1161016a5780636352211e146104135780636f8b44b01461045057806370a0823114610479578063715018a6146104b65780638da5cb5b146104cd57610204565b80633ccfd60b1461038157806342842e0e146103985780634c261247146103c1578063627804af146103ea57610204565b80630de76de4116101d75780630de76de4146102d75780630f2cdd6c1461030257806318160ddd1461032d57806323b872dd1461035857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906126fb565b610807565b60405161023d9190612ac7565b60405180910390f35b34801561025257600080fd5b5061025b610899565b6040516102689190612ae2565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061279e565b61092b565b6040516102a59190612a60565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061268e565b6109a7565b005b3480156102e357600080fd5b506102ec610ae8565b6040516102f99190612ac7565b60405180910390f35b34801561030e57600080fd5b50610317610afb565b6040516103249190612c24565b60405180910390f35b34801561033957600080fd5b50610342610b00565b60405161034f9190612c24565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190612578565b610b17565b005b34801561038d57600080fd5b50610396610e3c565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612578565b610ebd565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612755565b610edd565b005b3480156103f657600080fd5b50610411600480360381019061040c919061268e565b610f4f565b005b34801561041f57600080fd5b5061043a6004803603810190610435919061279e565b610fbc565b6040516104479190612a60565b60405180910390f35b34801561045c57600080fd5b506104776004803603810190610472919061279e565b610fce565b005b34801561048557600080fd5b506104a0600480360381019061049b919061250b565b610fe0565b6040516104ad9190612c24565b60405180910390f35b3480156104c257600080fd5b506104cb611099565b005b3480156104d957600080fd5b506104e26110ad565b6040516104ef9190612a60565b60405180910390f35b34801561050457600080fd5b5061050d6110d7565b60405161051a9190612ae2565b60405180910390f35b34801561052f57600080fd5b50610538611169565b6040516105459190612c24565b60405180910390f35b6105686004803603810190610563919061279e565b61116f565b005b34801561057657600080fd5b50610591600480360381019061058c919061264e565b611429565b005b34801561059f57600080fd5b506105a86115a1565b6040516105b59190612ac7565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e091906125cb565b6115b4565b005b3480156105f357600080fd5b5061060e600480360381019061060991906126ce565b611627565b005b34801561061c57600080fd5b5061062561164c565b6040516106329190612c24565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d919061279e565b611657565b005b34801561067057600080fd5b5061068b6004803603810190610686919061279e565b611669565b6040516106989190612ae2565b60405180910390f35b3480156106ad57600080fd5b506106b661178c565b6040516106c39190612c24565b60405180910390f35b3480156106d857600080fd5b506106e1611792565b6040516106ee9190612ae2565b60405180910390f35b34801561070357600080fd5b5061070c611820565b6040516107199190612c24565b60405180910390f35b34801561072e57600080fd5b50610737611825565b6040516107449190612ae2565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190612538565b61183c565b6040516107819190612ac7565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac919061250b565b6118d0565b005b3480156107bf57600080fd5b506107c8611954565b005b3480156107d657600080fd5b506107f160048036038101906107ec919061250b565b611979565b6040516107fe9190612c24565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108925750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546108a890612edf565b80601f01602080910402602001604051908101604052809291908181526020018280546108d490612edf565b80156109215780601f106108f657610100808354040283529160200191610921565b820191906000526020600020905b81548152906001019060200180831161090457829003601f168201915b5050505050905090565b6000610936826119c2565b61096c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b282610fbc565b90508073ffffffffffffffffffffffffffffffffffffffff166109d3611a21565b73ffffffffffffffffffffffffffffffffffffffff1614610a36576109ff816109fa611a21565b61183c565b610a35576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600b60019054906101000a900460ff1681565b606481565b6000610b0a611a29565b6001546000540303905090565b6000610b2282611a32565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b89576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610b9584611b00565b91509150610bab8187610ba6611a21565b611b22565b610bf757610bc086610bbb611a21565b61183c565b610bf6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610c5e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6b8686866001611b66565b8015610c7657600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610d4485610d20888887611b6c565b7c020000000000000000000000000000000000000000000000000000000017611b94565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610dcc576000600185019050600060046000838152602001908152602001600020541415610dca576000548114610dc9578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610e348686866001611bbf565b505050505050565b610e44611bc5565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e6a90612a4b565b60006040518083038185875af1925050503d8060008114610ea7576040519150601f19603f3d011682016040523d82523d6000602084013e610eac565b606091505b5050905080610eba57600080fd5b50565b610ed8838383604051806020016040528060008152506115b4565b505050565b610ee5611bc5565b600b60019054906101000a900460ff1615610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90612b04565b60405180910390fd5b80600c9080519060200190610f4b92919061231f565b5050565b610f57611bc5565b60095481610f63611c43565b610f6d9190612d14565b1115610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590612b84565b60405180910390fd5b610fb88282611c56565b5050565b6000610fc782611a32565b9050919050565b610fd6611bc5565b8060098190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611048576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110a1611bc5565b6110ab6000611c74565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546110e690612edf565b80601f016020809104026020016040519081016040528092919081815260200182805461111290612edf565b801561115f5780601f106111345761010080835404028352916020019161115f565b820191906000526020600020905b81548152906001019060200180831161114257829003601f168201915b5050505050905090565b600a5481565b600b60009054906101000a900460ff16156111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690612b64565b60405180910390fd5b600a811115611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90612b44565b60405180910390fd5b6009548161120f611c43565b6112199190612d14565b111561125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190612b84565b60405180910390fd5b606481600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112a79190612d14565b11156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90612c04565b60405180910390fd5b60008190506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600a5481101561136f57600081600a5461134b9190612df5565b9050808411156113685780846113619190612df5565b925061136d565b600092505b505b660aa87bee538000826113829190612d9b565b3410156113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90612ba4565b60405180910390fd5b82600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114139190612d14565b925050819055506114243384611c56565b505050565b611431611a21565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611496576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114a3611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611550611a21565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115959190612ac7565b60405180910390a35050565b600b60009054906101000a900460ff1681565b6115bf848484610b17565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611621576115ea84848484611d3a565b611620576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b61162f611bc5565b80600b60006101000a81548160ff02191690831515021790555050565b660aa87bee53800081565b61165f611bc5565b80600a8190555050565b6060611674826119c2565b6116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90612be4565b60405180910390fd5b60006116bd611e9a565b511161175357600d80546116d090612edf565b80601f01602080910402602001604051908101604052809291908181526020018280546116fc90612edf565b80156117495780601f1061171e57610100808354040283529160200191611749565b820191906000526020600020905b81548152906001019060200180831161172c57829003601f168201915b5050505050611785565b61175b611e9a565b61176483611f2c565b604051602001611775929190612a1c565b6040516020818303038152906040525b9050919050565b60095481565b600d805461179f90612edf565b80601f01602080910402602001604051908101604052809291908181526020018280546117cb90612edf565b80156118185780601f106117ed57610100808354040283529160200191611818565b820191906000526020600020905b8154815290600101906020018083116117fb57829003601f168201915b505050505081565b600a81565b606060405180602001604052806000815250905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118d8611bc5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90612b24565b60405180910390fd5b61195181611c74565b50565b61195c611bc5565b6001600b60016101000a81548160ff021916908315150217905550565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000816119cd611a29565b111580156119dc575060005482105b8015611a1a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b60008082905080611a41611a29565b11611ac957600054811015611ac85760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611ac6575b6000811415611abc576004600083600190039350838152602001908152602001600020549050611a91565b8092505050611afb565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611b8386868461208d565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b611bcd612096565b73ffffffffffffffffffffffffffffffffffffffff16611beb6110ad565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890612bc4565b60405180910390fd5b565b6000611c4d611a29565b60005403905090565b611c7082826040518060200160405280600081525061209e565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d60611a21565b8786866040518563ffffffff1660e01b8152600401611d829493929190612a7b565b602060405180830381600087803b158015611d9c57600080fd5b505af1925050508015611dcd57506040513d601f19601f82011682018060405250810190611dca9190612728565b60015b611e47573d8060008114611dfd576040519150601f19603f3d011682016040523d82523d6000602084013e611e02565b606091505b50600081511415611e3f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c8054611ea990612edf565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed590612edf565b8015611f225780601f10611ef757610100808354040283529160200191611f22565b820191906000526020600020905b815481529060010190602001808311611f0557829003601f168201915b5050505050905090565b60606000821415611f74576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612088565b600082905060005b60008214611fa6578080611f8f90612f42565b915050600a82611f9f9190612d6a565b9150611f7c565b60008167ffffffffffffffff811115611fc257611fc1613078565b5b6040519080825280601f01601f191660200182016040528015611ff45781602001600182028036833780820191505090505b5090505b600085146120815760018261200d9190612df5565b9150600a8561201c9190612f8b565b60306120289190612d14565b60f81b81838151811061203e5761203d613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561207a9190612d6a565b9450611ff8565b8093505050505b919050565b60009392505050565b600033905090565b6120a8838361213b565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461213657600080549050600083820390505b6120e86000868380600101945086611d3a565b61211e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106120d557816000541461213357600080fd5b50505b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a8576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214156121e3576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121f06000848385611b66565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612267836122586000866000611b6c565b6122618561230f565b17611b94565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061228b5780600081905550505061230a6000848385611bbf565b505050565b60006001821460e11b9050919050565b82805461232b90612edf565b90600052602060002090601f01602090048101928261234d5760008555612394565b82601f1061236657805160ff1916838001178555612394565b82800160010185558215612394579182015b82811115612393578251825591602001919060010190612378565b5b5090506123a191906123a5565b5090565b5b808211156123be5760008160009055506001016123a6565b5090565b60006123d56123d084612c64565b612c3f565b9050828152602081018484840111156123f1576123f06130ac565b5b6123fc848285612e9d565b509392505050565b600061241761241284612c95565b612c3f565b905082815260208101848484011115612433576124326130ac565b5b61243e848285612e9d565b509392505050565b60008135905061245581613301565b92915050565b60008135905061246a81613318565b92915050565b60008135905061247f8161332f565b92915050565b6000815190506124948161332f565b92915050565b600082601f8301126124af576124ae6130a7565b5b81356124bf8482602086016123c2565b91505092915050565b600082601f8301126124dd576124dc6130a7565b5b81356124ed848260208601612404565b91505092915050565b60008135905061250581613346565b92915050565b600060208284031215612521576125206130b6565b5b600061252f84828501612446565b91505092915050565b6000806040838503121561254f5761254e6130b6565b5b600061255d85828601612446565b925050602061256e85828601612446565b9150509250929050565b600080600060608486031215612591576125906130b6565b5b600061259f86828701612446565b93505060206125b086828701612446565b92505060406125c1868287016124f6565b9150509250925092565b600080600080608085870312156125e5576125e46130b6565b5b60006125f387828801612446565b945050602061260487828801612446565b9350506040612615878288016124f6565b925050606085013567ffffffffffffffff811115612636576126356130b1565b5b6126428782880161249a565b91505092959194509250565b60008060408385031215612665576126646130b6565b5b600061267385828601612446565b92505060206126848582860161245b565b9150509250929050565b600080604083850312156126a5576126a46130b6565b5b60006126b385828601612446565b92505060206126c4858286016124f6565b9150509250929050565b6000602082840312156126e4576126e36130b6565b5b60006126f28482850161245b565b91505092915050565b600060208284031215612711576127106130b6565b5b600061271f84828501612470565b91505092915050565b60006020828403121561273e5761273d6130b6565b5b600061274c84828501612485565b91505092915050565b60006020828403121561276b5761276a6130b6565b5b600082013567ffffffffffffffff811115612789576127886130b1565b5b612795848285016124c8565b91505092915050565b6000602082840312156127b4576127b36130b6565b5b60006127c2848285016124f6565b91505092915050565b6127d481612e29565b82525050565b6127e381612e3b565b82525050565b60006127f482612cc6565b6127fe8185612cdc565b935061280e818560208601612eac565b612817816130bb565b840191505092915050565b600061282d82612cd1565b6128378185612cf8565b9350612847818560208601612eac565b612850816130bb565b840191505092915050565b600061286682612cd1565b6128708185612d09565b9350612880818560208601612eac565b80840191505092915050565b6000612899601583612cf8565b91506128a4826130cc565b602082019050919050565b60006128bc602683612cf8565b91506128c7826130f5565b604082019050919050565b60006128df602183612cf8565b91506128ea82613144565b604082019050919050565b6000612902600d83612cf8565b915061290d82613193565b602082019050919050565b6000612925601283612cf8565b9150612930826131bc565b602082019050919050565b6000612948602283612cf8565b9150612953826131e5565b604082019050919050565b600061296b600583612d09565b915061297682613234565b600582019050919050565b600061298e602083612cf8565b91506129998261325d565b602082019050919050565b60006129b1602f83612cf8565b91506129bc82613286565b604082019050919050565b60006129d4600083612ced565b91506129df826132d5565b600082019050919050565b60006129f7601683612cf8565b9150612a02826132d8565b602082019050919050565b612a1681612e93565b82525050565b6000612a28828561285b565b9150612a34828461285b565b9150612a3f8261295e565b91508190509392505050565b6000612a56826129c7565b9150819050919050565b6000602082019050612a7560008301846127cb565b92915050565b6000608082019050612a9060008301876127cb565b612a9d60208301866127cb565b612aaa6040830185612a0d565b8181036060830152612abc81846127e9565b905095945050505050565b6000602082019050612adc60008301846127da565b92915050565b60006020820190508181036000830152612afc8184612822565b905092915050565b60006020820190508181036000830152612b1d8161288c565b9050919050565b60006020820190508181036000830152612b3d816128af565b9050919050565b60006020820190508181036000830152612b5d816128d2565b9050919050565b60006020820190508181036000830152612b7d816128f5565b9050919050565b60006020820190508181036000830152612b9d81612918565b9050919050565b60006020820190508181036000830152612bbd8161293b565b9050919050565b60006020820190508181036000830152612bdd81612981565b9050919050565b60006020820190508181036000830152612bfd816129a4565b9050919050565b60006020820190508181036000830152612c1d816129ea565b9050919050565b6000602082019050612c396000830184612a0d565b92915050565b6000612c49612c5a565b9050612c558282612f11565b919050565b6000604051905090565b600067ffffffffffffffff821115612c7f57612c7e613078565b5b612c88826130bb565b9050602081019050919050565b600067ffffffffffffffff821115612cb057612caf613078565b5b612cb9826130bb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d1f82612e93565b9150612d2a83612e93565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d5f57612d5e612fbc565b5b828201905092915050565b6000612d7582612e93565b9150612d8083612e93565b925082612d9057612d8f612feb565b5b828204905092915050565b6000612da682612e93565b9150612db183612e93565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dea57612de9612fbc565b5b828202905092915050565b6000612e0082612e93565b9150612e0b83612e93565b925082821015612e1e57612e1d612fbc565b5b828203905092915050565b6000612e3482612e73565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612eca578082015181840152602081019050612eaf565b83811115612ed9576000848401525b50505050565b60006002820490506001821680612ef757607f821691505b60208210811415612f0b57612f0a61301a565b5b50919050565b612f1a826130bb565b810181811067ffffffffffffffff82111715612f3957612f38613078565b5b80604052505050565b6000612f4d82612e93565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f8057612f7f612fbc565b5b600182019050919050565b6000612f9682612e93565b9150612fa183612e93565b925082612fb157612fb0612feb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d657461646174612069732066696e616c697a65640000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473204e465420706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c657320617265206f666600000000000000000000000000000000000000600082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420737566666963696560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f45786365656473206d6178207065722077616c6c657400000000000000000000600082015250565b61330a81612e29565b811461331557600080fd5b50565b61332181612e3b565b811461332c57600080fd5b50565b61333881612e47565b811461334357600080fd5b50565b61334f81612e93565b811461335a57600080fd5b5056fea264697066735822122093330f90dfeaef632dc18f37f6569031bf780a44623b3d1568384abecac964dd64736f6c63430008070033697066733a2f2f6261667962656967663735666b753461786c6a3437726934676c76663762353364746b7762757232676d6379626a71706b6b69717376746f357a6d2f
Deployed Bytecode
0x6080604052600436106102045760003560e01c806395d89b4111610118578063c87b56dd116100a0578063e8a3d4851161006f578063e8a3d48514610722578063e985e9c51461074d578063f2fde38b1461078a578063f4a560a5146107b3578063fddcb5ea146107ca57610204565b8063c87b56dd14610664578063d5abeb01146106a1578063d8210482146106cc578063e193e7e2146106f757610204565b8063b187bd26116100e7578063b187bd2614610593578063b88d4fde146105be578063bedb86fb146105e7578063c002d23d14610610578063c1e3a4331461063b57610204565b806395d89b41146104f857806398710d1e14610523578063a0712d681461054e578063a22cb4651461056a57610204565b80633ccfd60b1161019b5780636352211e1161016a5780636352211e146104135780636f8b44b01461045057806370a0823114610479578063715018a6146104b65780638da5cb5b146104cd57610204565b80633ccfd60b1461038157806342842e0e146103985780634c261247146103c1578063627804af146103ea57610204565b80630de76de4116101d75780630de76de4146102d75780630f2cdd6c1461030257806318160ddd1461032d57806323b872dd1461035857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906126fb565b610807565b60405161023d9190612ac7565b60405180910390f35b34801561025257600080fd5b5061025b610899565b6040516102689190612ae2565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061279e565b61092b565b6040516102a59190612a60565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061268e565b6109a7565b005b3480156102e357600080fd5b506102ec610ae8565b6040516102f99190612ac7565b60405180910390f35b34801561030e57600080fd5b50610317610afb565b6040516103249190612c24565b60405180910390f35b34801561033957600080fd5b50610342610b00565b60405161034f9190612c24565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190612578565b610b17565b005b34801561038d57600080fd5b50610396610e3c565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612578565b610ebd565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612755565b610edd565b005b3480156103f657600080fd5b50610411600480360381019061040c919061268e565b610f4f565b005b34801561041f57600080fd5b5061043a6004803603810190610435919061279e565b610fbc565b6040516104479190612a60565b60405180910390f35b34801561045c57600080fd5b506104776004803603810190610472919061279e565b610fce565b005b34801561048557600080fd5b506104a0600480360381019061049b919061250b565b610fe0565b6040516104ad9190612c24565b60405180910390f35b3480156104c257600080fd5b506104cb611099565b005b3480156104d957600080fd5b506104e26110ad565b6040516104ef9190612a60565b60405180910390f35b34801561050457600080fd5b5061050d6110d7565b60405161051a9190612ae2565b60405180910390f35b34801561052f57600080fd5b50610538611169565b6040516105459190612c24565b60405180910390f35b6105686004803603810190610563919061279e565b61116f565b005b34801561057657600080fd5b50610591600480360381019061058c919061264e565b611429565b005b34801561059f57600080fd5b506105a86115a1565b6040516105b59190612ac7565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e091906125cb565b6115b4565b005b3480156105f357600080fd5b5061060e600480360381019061060991906126ce565b611627565b005b34801561061c57600080fd5b5061062561164c565b6040516106329190612c24565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d919061279e565b611657565b005b34801561067057600080fd5b5061068b6004803603810190610686919061279e565b611669565b6040516106989190612ae2565b60405180910390f35b3480156106ad57600080fd5b506106b661178c565b6040516106c39190612c24565b60405180910390f35b3480156106d857600080fd5b506106e1611792565b6040516106ee9190612ae2565b60405180910390f35b34801561070357600080fd5b5061070c611820565b6040516107199190612c24565b60405180910390f35b34801561072e57600080fd5b50610737611825565b6040516107449190612ae2565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190612538565b61183c565b6040516107819190612ac7565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac919061250b565b6118d0565b005b3480156107bf57600080fd5b506107c8611954565b005b3480156107d657600080fd5b506107f160048036038101906107ec919061250b565b611979565b6040516107fe9190612c24565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108925750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546108a890612edf565b80601f01602080910402602001604051908101604052809291908181526020018280546108d490612edf565b80156109215780601f106108f657610100808354040283529160200191610921565b820191906000526020600020905b81548152906001019060200180831161090457829003601f168201915b5050505050905090565b6000610936826119c2565b61096c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b282610fbc565b90508073ffffffffffffffffffffffffffffffffffffffff166109d3611a21565b73ffffffffffffffffffffffffffffffffffffffff1614610a36576109ff816109fa611a21565b61183c565b610a35576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600b60019054906101000a900460ff1681565b606481565b6000610b0a611a29565b6001546000540303905090565b6000610b2282611a32565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b89576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610b9584611b00565b91509150610bab8187610ba6611a21565b611b22565b610bf757610bc086610bbb611a21565b61183c565b610bf6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610c5e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6b8686866001611b66565b8015610c7657600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610d4485610d20888887611b6c565b7c020000000000000000000000000000000000000000000000000000000017611b94565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610dcc576000600185019050600060046000838152602001908152602001600020541415610dca576000548114610dc9578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610e348686866001611bbf565b505050505050565b610e44611bc5565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e6a90612a4b565b60006040518083038185875af1925050503d8060008114610ea7576040519150601f19603f3d011682016040523d82523d6000602084013e610eac565b606091505b5050905080610eba57600080fd5b50565b610ed8838383604051806020016040528060008152506115b4565b505050565b610ee5611bc5565b600b60019054906101000a900460ff1615610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90612b04565b60405180910390fd5b80600c9080519060200190610f4b92919061231f565b5050565b610f57611bc5565b60095481610f63611c43565b610f6d9190612d14565b1115610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590612b84565b60405180910390fd5b610fb88282611c56565b5050565b6000610fc782611a32565b9050919050565b610fd6611bc5565b8060098190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611048576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110a1611bc5565b6110ab6000611c74565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546110e690612edf565b80601f016020809104026020016040519081016040528092919081815260200182805461111290612edf565b801561115f5780601f106111345761010080835404028352916020019161115f565b820191906000526020600020905b81548152906001019060200180831161114257829003601f168201915b5050505050905090565b600a5481565b600b60009054906101000a900460ff16156111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690612b64565b60405180910390fd5b600a811115611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90612b44565b60405180910390fd5b6009548161120f611c43565b6112199190612d14565b111561125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190612b84565b60405180910390fd5b606481600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112a79190612d14565b11156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90612c04565b60405180910390fd5b60008190506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600a5481101561136f57600081600a5461134b9190612df5565b9050808411156113685780846113619190612df5565b925061136d565b600092505b505b660aa87bee538000826113829190612d9b565b3410156113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90612ba4565b60405180910390fd5b82600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114139190612d14565b925050819055506114243384611c56565b505050565b611431611a21565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611496576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114a3611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611550611a21565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115959190612ac7565b60405180910390a35050565b600b60009054906101000a900460ff1681565b6115bf848484610b17565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611621576115ea84848484611d3a565b611620576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b61162f611bc5565b80600b60006101000a81548160ff02191690831515021790555050565b660aa87bee53800081565b61165f611bc5565b80600a8190555050565b6060611674826119c2565b6116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90612be4565b60405180910390fd5b60006116bd611e9a565b511161175357600d80546116d090612edf565b80601f01602080910402602001604051908101604052809291908181526020018280546116fc90612edf565b80156117495780601f1061171e57610100808354040283529160200191611749565b820191906000526020600020905b81548152906001019060200180831161172c57829003601f168201915b5050505050611785565b61175b611e9a565b61176483611f2c565b604051602001611775929190612a1c565b6040516020818303038152906040525b9050919050565b60095481565b600d805461179f90612edf565b80601f01602080910402602001604051908101604052809291908181526020018280546117cb90612edf565b80156118185780601f106117ed57610100808354040283529160200191611818565b820191906000526020600020905b8154815290600101906020018083116117fb57829003601f168201915b505050505081565b600a81565b606060405180602001604052806000815250905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118d8611bc5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90612b24565b60405180910390fd5b61195181611c74565b50565b61195c611bc5565b6001600b60016101000a81548160ff021916908315150217905550565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000816119cd611a29565b111580156119dc575060005482105b8015611a1a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b60008082905080611a41611a29565b11611ac957600054811015611ac85760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611ac6575b6000811415611abc576004600083600190039350838152602001908152602001600020549050611a91565b8092505050611afb565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611b8386868461208d565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b611bcd612096565b73ffffffffffffffffffffffffffffffffffffffff16611beb6110ad565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890612bc4565b60405180910390fd5b565b6000611c4d611a29565b60005403905090565b611c7082826040518060200160405280600081525061209e565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d60611a21565b8786866040518563ffffffff1660e01b8152600401611d829493929190612a7b565b602060405180830381600087803b158015611d9c57600080fd5b505af1925050508015611dcd57506040513d601f19601f82011682018060405250810190611dca9190612728565b60015b611e47573d8060008114611dfd576040519150601f19603f3d011682016040523d82523d6000602084013e611e02565b606091505b50600081511415611e3f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c8054611ea990612edf565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed590612edf565b8015611f225780601f10611ef757610100808354040283529160200191611f22565b820191906000526020600020905b815481529060010190602001808311611f0557829003601f168201915b5050505050905090565b60606000821415611f74576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612088565b600082905060005b60008214611fa6578080611f8f90612f42565b915050600a82611f9f9190612d6a565b9150611f7c565b60008167ffffffffffffffff811115611fc257611fc1613078565b5b6040519080825280601f01601f191660200182016040528015611ff45781602001600182028036833780820191505090505b5090505b600085146120815760018261200d9190612df5565b9150600a8561201c9190612f8b565b60306120289190612d14565b60f81b81838151811061203e5761203d613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561207a9190612d6a565b9450611ff8565b8093505050505b919050565b60009392505050565b600033905090565b6120a8838361213b565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461213657600080549050600083820390505b6120e86000868380600101945086611d3a565b61211e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106120d557816000541461213357600080fd5b50505b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a8576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214156121e3576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121f06000848385611b66565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612267836122586000866000611b6c565b6122618561230f565b17611b94565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061228b5780600081905550505061230a6000848385611bbf565b505050565b60006001821460e11b9050919050565b82805461232b90612edf565b90600052602060002090601f01602090048101928261234d5760008555612394565b82601f1061236657805160ff1916838001178555612394565b82800160010185558215612394579182015b82811115612393578251825591602001919060010190612378565b5b5090506123a191906123a5565b5090565b5b808211156123be5760008160009055506001016123a6565b5090565b60006123d56123d084612c64565b612c3f565b9050828152602081018484840111156123f1576123f06130ac565b5b6123fc848285612e9d565b509392505050565b600061241761241284612c95565b612c3f565b905082815260208101848484011115612433576124326130ac565b5b61243e848285612e9d565b509392505050565b60008135905061245581613301565b92915050565b60008135905061246a81613318565b92915050565b60008135905061247f8161332f565b92915050565b6000815190506124948161332f565b92915050565b600082601f8301126124af576124ae6130a7565b5b81356124bf8482602086016123c2565b91505092915050565b600082601f8301126124dd576124dc6130a7565b5b81356124ed848260208601612404565b91505092915050565b60008135905061250581613346565b92915050565b600060208284031215612521576125206130b6565b5b600061252f84828501612446565b91505092915050565b6000806040838503121561254f5761254e6130b6565b5b600061255d85828601612446565b925050602061256e85828601612446565b9150509250929050565b600080600060608486031215612591576125906130b6565b5b600061259f86828701612446565b93505060206125b086828701612446565b92505060406125c1868287016124f6565b9150509250925092565b600080600080608085870312156125e5576125e46130b6565b5b60006125f387828801612446565b945050602061260487828801612446565b9350506040612615878288016124f6565b925050606085013567ffffffffffffffff811115612636576126356130b1565b5b6126428782880161249a565b91505092959194509250565b60008060408385031215612665576126646130b6565b5b600061267385828601612446565b92505060206126848582860161245b565b9150509250929050565b600080604083850312156126a5576126a46130b6565b5b60006126b385828601612446565b92505060206126c4858286016124f6565b9150509250929050565b6000602082840312156126e4576126e36130b6565b5b60006126f28482850161245b565b91505092915050565b600060208284031215612711576127106130b6565b5b600061271f84828501612470565b91505092915050565b60006020828403121561273e5761273d6130b6565b5b600061274c84828501612485565b91505092915050565b60006020828403121561276b5761276a6130b6565b5b600082013567ffffffffffffffff811115612789576127886130b1565b5b612795848285016124c8565b91505092915050565b6000602082840312156127b4576127b36130b6565b5b60006127c2848285016124f6565b91505092915050565b6127d481612e29565b82525050565b6127e381612e3b565b82525050565b60006127f482612cc6565b6127fe8185612cdc565b935061280e818560208601612eac565b612817816130bb565b840191505092915050565b600061282d82612cd1565b6128378185612cf8565b9350612847818560208601612eac565b612850816130bb565b840191505092915050565b600061286682612cd1565b6128708185612d09565b9350612880818560208601612eac565b80840191505092915050565b6000612899601583612cf8565b91506128a4826130cc565b602082019050919050565b60006128bc602683612cf8565b91506128c7826130f5565b604082019050919050565b60006128df602183612cf8565b91506128ea82613144565b604082019050919050565b6000612902600d83612cf8565b915061290d82613193565b602082019050919050565b6000612925601283612cf8565b9150612930826131bc565b602082019050919050565b6000612948602283612cf8565b9150612953826131e5565b604082019050919050565b600061296b600583612d09565b915061297682613234565b600582019050919050565b600061298e602083612cf8565b91506129998261325d565b602082019050919050565b60006129b1602f83612cf8565b91506129bc82613286565b604082019050919050565b60006129d4600083612ced565b91506129df826132d5565b600082019050919050565b60006129f7601683612cf8565b9150612a02826132d8565b602082019050919050565b612a1681612e93565b82525050565b6000612a28828561285b565b9150612a34828461285b565b9150612a3f8261295e565b91508190509392505050565b6000612a56826129c7565b9150819050919050565b6000602082019050612a7560008301846127cb565b92915050565b6000608082019050612a9060008301876127cb565b612a9d60208301866127cb565b612aaa6040830185612a0d565b8181036060830152612abc81846127e9565b905095945050505050565b6000602082019050612adc60008301846127da565b92915050565b60006020820190508181036000830152612afc8184612822565b905092915050565b60006020820190508181036000830152612b1d8161288c565b9050919050565b60006020820190508181036000830152612b3d816128af565b9050919050565b60006020820190508181036000830152612b5d816128d2565b9050919050565b60006020820190508181036000830152612b7d816128f5565b9050919050565b60006020820190508181036000830152612b9d81612918565b9050919050565b60006020820190508181036000830152612bbd8161293b565b9050919050565b60006020820190508181036000830152612bdd81612981565b9050919050565b60006020820190508181036000830152612bfd816129a4565b9050919050565b60006020820190508181036000830152612c1d816129ea565b9050919050565b6000602082019050612c396000830184612a0d565b92915050565b6000612c49612c5a565b9050612c558282612f11565b919050565b6000604051905090565b600067ffffffffffffffff821115612c7f57612c7e613078565b5b612c88826130bb565b9050602081019050919050565b600067ffffffffffffffff821115612cb057612caf613078565b5b612cb9826130bb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d1f82612e93565b9150612d2a83612e93565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d5f57612d5e612fbc565b5b828201905092915050565b6000612d7582612e93565b9150612d8083612e93565b925082612d9057612d8f612feb565b5b828204905092915050565b6000612da682612e93565b9150612db183612e93565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dea57612de9612fbc565b5b828202905092915050565b6000612e0082612e93565b9150612e0b83612e93565b925082821015612e1e57612e1d612fbc565b5b828203905092915050565b6000612e3482612e73565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612eca578082015181840152602081019050612eaf565b83811115612ed9576000848401525b50505050565b60006002820490506001821680612ef757607f821691505b60208210811415612f0b57612f0a61301a565b5b50919050565b612f1a826130bb565b810181811067ffffffffffffffff82111715612f3957612f38613078565b5b80604052505050565b6000612f4d82612e93565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f8057612f7f612fbc565b5b600182019050919050565b6000612f9682612e93565b9150612fa183612e93565b925082612fb157612fb0612feb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d657461646174612069732066696e616c697a65640000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473204e465420706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c657320617265206f666600000000000000000000000000000000000000600082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420737566666963696560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f45786365656473206d6178207065722077616c6c657400000000000000000000600082015250565b61330a81612e29565b811461331557600080fd5b50565b61332181612e3b565b811461332c57600080fd5b50565b61333881612e47565b811461334357600080fd5b50565b61334f81612e93565b811461335a57600080fd5b5056fea264697066735822122093330f90dfeaef632dc18f37f6569031bf780a44623b3d1568384abecac964dd64736f6c63430008070033
Deployed Bytecode Sourcemap
50444:3218:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18218:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23865:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25811:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25359:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50775:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50619:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17272:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35076:2800;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51786:177;;;;;;;;;;;;;:::i;:::-;;26701:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51438:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51968:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23654:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52147:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18897:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2809:103;;;;;;;;;;;;;:::i;:::-;;2161:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24034:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50700:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52720:937;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26087:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50741:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26957:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51706:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50521:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52595:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52246:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50664:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50908:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50570:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51259:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26466:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3067:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51345:88;;;;;;;;;;;;;:::i;:::-;;51585:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18218:615;18303:4;18618:10;18603:25;;:11;:25;;;;:102;;;;18695:10;18680:25;;:11;:25;;;;18603:102;:179;;;;18772:10;18757:25;;:11;:25;;;;18603:179;18583:199;;18218:615;;;:::o;23865:100::-;23919:13;23952:5;23945:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23865:100;:::o;25811:204::-;25879:7;25904:16;25912:7;25904;:16::i;:::-;25899:64;;25929:34;;;;;;;;;;;;;;25899:64;25983:15;:24;25999:7;25983:24;;;;;;;;;;;;;;;;;;;;;25976:31;;25811:204;;;:::o;25359:386::-;25432:13;25448:16;25456:7;25448;:16::i;:::-;25432:32;;25504:5;25481:28;;:19;:17;:19::i;:::-;:28;;;25477:175;;25529:44;25546:5;25553:19;:17;:19::i;:::-;25529:16;:44::i;:::-;25524:128;;25601:35;;;;;;;;;;;;;;25524:128;25477:175;25691:2;25664:15;:24;25680:7;25664:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25729:7;25725:2;25709:28;;25718:5;25709:28;;;;;;;;;;;;25421:324;25359:386;;:::o;50775:27::-;;;;;;;;;;;;;:::o;50619:41::-;50657:3;50619:41;:::o;17272:315::-;17325:7;17553:15;:13;:15::i;:::-;17538:12;;17522:13;;:28;:46;17515:53;;17272:315;:::o;35076:2800::-;35210:27;35240;35259:7;35240:18;:27::i;:::-;35210:57;;35325:4;35284:45;;35300:19;35284:45;;;35280:86;;35338:28;;;;;;;;;;;;;;35280:86;35380:27;35409:23;35436:28;35456:7;35436:19;:28::i;:::-;35379:85;;;;35564:62;35583:15;35600:4;35606:19;:17;:19::i;:::-;35564:18;:62::i;:::-;35559:174;;35646:43;35663:4;35669:19;:17;:19::i;:::-;35646:16;:43::i;:::-;35641:92;;35698:35;;;;;;;;;;;;;;35641:92;35559:174;35764:1;35750:16;;:2;:16;;;35746:52;;;35775:23;;;;;;;;;;;;;;35746:52;35811:43;35833:4;35839:2;35843:7;35852:1;35811:21;:43::i;:::-;35947:15;35944:160;;;36087:1;36066:19;36059:30;35944:160;36482:18;:24;36501:4;36482:24;;;;;;;;;;;;;;;;36480:26;;;;;;;;;;;;36551:18;:22;36570:2;36551:22;;;;;;;;;;;;;;;;36549:24;;;;;;;;;;;36873:145;36910:2;36958:45;36973:4;36979:2;36983:19;36958:14;:45::i;:::-;14500:8;36931:72;36873:18;:145::i;:::-;36844:17;:26;36862:7;36844:26;;;;;;;;;;;:174;;;;37188:1;14500:8;37138:19;:46;:51;37134:626;;;37210:19;37242:1;37232:7;:11;37210:33;;37399:1;37365:17;:30;37383:11;37365:30;;;;;;;;;;;;:35;37361:384;;;37503:13;;37488:11;:28;37484:242;;37683:19;37650:17;:30;37668:11;37650:30;;;;;;;;;;;:52;;;;37484:242;37361:384;37191:569;37134:626;37807:7;37803:2;37788:27;;37797:4;37788:27;;;;;;;;;;;;37826:42;37847:4;37853:2;37857:7;37866:1;37826:20;:42::i;:::-;35199:2677;;;35076:2800;;;:::o;51786:177::-;2047:13;:11;:13::i;:::-;51831:12:::1;51857:10;51849:24;;51895:21;51849:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51830:101;;;51950:7;51942:16;;;::::0;::::1;;51825:138;51786:177::o:0;26701:185::-;26839:39;26856:4;26862:2;26866:7;26839:39;;;;;;;;;;;;:16;:39::i;:::-;26701:185;;;:::o;51438:139::-;2047:13;:11;:13::i;:::-;51512:15:::1;;;;;;;;;;;51511:16;51503:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;51569:3;51558:8;:14;;;;;;;;;;;;:::i;:::-;;51438:139:::0;:::o;51968:174::-;2047:13;:11;:13::i;:::-;52072:9:::1;;52063:5;52046:14;:12;:14::i;:::-;:22;;;;:::i;:::-;:35;;52033:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;52117:20;52127:2;52131:5;52117:9;:20::i;:::-;51968:174:::0;;:::o;23654:144::-;23718:7;23761:27;23780:7;23761:18;:27::i;:::-;23738:52;;23654:144;;;:::o;52147:94::-;2047:13;:11;:13::i;:::-;52224:12:::1;52212:9;:24;;;;52147:94:::0;:::o;18897:224::-;18961:7;19002:1;18985:19;;:5;:19;;;18981:60;;;19013:28;;;;;;;;;;;;;;18981:60;13452:13;19059:18;:25;19078:5;19059:25;;;;;;;;;;;;;;;;:54;19052:61;;18897:224;;;:::o;2809:103::-;2047:13;:11;:13::i;:::-;2874:30:::1;2901:1;2874:18;:30::i;:::-;2809:103::o:0;2161:87::-;2207:7;2234:6;;;;;;;;;;;2227:13;;2161:87;:::o;24034:104::-;24090:13;24123:7;24116:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24034:104;:::o;50700:35::-;;;;:::o;52720:937::-;52777:8;;;;;;;;;;;52776:9;52768:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;50610:2;52816:5;:25;;52808:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;52917:9;;52908:5;52891:14;:12;:14::i;:::-;:22;;;;:::i;:::-;:35;;52883:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50657:3;53000:5;52967:18;:30;52986:10;52967:30;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:56;;52959:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;53062:16;53081:5;53062:24;;53097:16;53116:18;:30;53135:10;53116:30;;;;;;;;;;;;;;;;53097:49;;53174:19;;53160:11;:33;53157:313;;;53210:23;53258:11;53236:19;;:33;;;;:::i;:::-;53210:59;;53295:18;53287:5;:26;53284:175;;;53356:18;53348:5;:26;;;;:::i;:::-;53334:40;;53284:175;;;53442:1;53428:15;;53284:175;53195:275;53157:313;50555:11;53502;:24;;;;:::i;:::-;53489:9;:37;;53476:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;53614:5;53580:18;:30;53599:10;53580:30;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;53624:28;53634:10;53646:5;53624:9;:28::i;:::-;52763:894;;52720:937;:::o;26087:308::-;26198:19;:17;:19::i;:::-;26186:31;;:8;:31;;;26182:61;;;26226:17;;;;;;;;;;;;;;26182:61;26308:8;26256:18;:39;26275:19;:17;:19::i;:::-;26256:39;;;;;;;;;;;;;;;:49;26296:8;26256:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;26368:8;26332:55;;26347:19;:17;:19::i;:::-;26332:55;;;26378:8;26332:55;;;;;;:::i;:::-;;;;;;;;26087:308;;:::o;50741:27::-;;;;;;;;;;;;;:::o;26957:399::-;27124:31;27137:4;27143:2;27147:7;27124:12;:31::i;:::-;27188:1;27170:2;:14;;;:19;27166:183;;27209:56;27240:4;27246:2;27250:7;27259:5;27209:30;:56::i;:::-;27204:145;;27293:40;;;;;;;;;;;;;;27204:145;27166:183;26957:399;;;;:::o;51706:75::-;2047:13;:11;:13::i;:::-;51771:5:::1;51760:8;;:16;;;;;;;;;;;;;;;;;;51706:75:::0;:::o;50521:45::-;50555:11;50521:45;:::o;52595:120::-;2047:13;:11;:13::i;:::-;52701:6:::1;52679:19;:28;;;;52595:120:::0;:::o;52246:341::-;52320:13;52356:16;52364:7;52356;:16::i;:::-;52348:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;52471:1;52450:10;:8;:10::i;:::-;52444:24;:28;:138;;52570:12;52444:138;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52513:10;:8;:10::i;:::-;52525:18;:7;:16;:18::i;:::-;52496:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52444:138;52437:145;;52246:341;;;:::o;50664:29::-;;;;:::o;50908:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50570:42::-;50610:2;50570:42;:::o;51259:78::-;51303:13;51323:9;;;;;;;;;;;;;;51259:78;:::o;26466:164::-;26563:4;26587:18;:25;26606:5;26587:25;;;;;;;;;;;;;;;:35;26613:8;26587:35;;;;;;;;;;;;;;;;;;;;;;;;;26580:42;;26466:164;;;;:::o;3067:201::-;2047:13;:11;:13::i;:::-;3176:1:::1;3156:22;;:8;:22;;;;3148:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3232:28;3251:8;3232:18;:28::i;:::-;3067:201:::0;:::o;51345:88::-;2047:13;:11;:13::i;:::-;51421:4:::1;51403:15;;:22;;;;;;;;;;;;;;;;;;51345:88::o:0;51585:116::-;51644:4;51668:18;:25;51687:5;51668:25;;;;;;;;;;;;;;;;51661:32;;51585:116;;;:::o;27611:273::-;27668:4;27724:7;27705:15;:13;:15::i;:::-;:26;;:66;;;;;27758:13;;27748:7;:23;27705:66;:152;;;;;27856:1;14222:8;27809:17;:26;27827:7;27809:26;;;;;;;;;;;;:43;:48;27705:152;27685:172;;27611:273;;;:::o;46172:105::-;46232:7;46259:10;46252:17;;46172:105;:::o;51173:81::-;51230:4;51248:1;51241:8;;51173:81;:::o;20571:1129::-;20638:7;20658:12;20673:7;20658:22;;20741:4;20722:15;:13;:15::i;:::-;:23;20718:915;;20775:13;;20768:4;:20;20764:869;;;20813:14;20830:17;:23;20848:4;20830:23;;;;;;;;;;;;20813:40;;20946:1;14222:8;20919:6;:23;:28;20915:699;;;21438:113;21455:1;21445:6;:11;21438:113;;;21498:17;:25;21516:6;;;;;;;21498:25;;;;;;;;;;;;21489:34;;21438:113;;;21584:6;21577:13;;;;;;20915:699;20790:843;20764:869;20718:915;21661:31;;;;;;;;;;;;;;20571:1129;;;;:::o;33412:652::-;33507:27;33536:23;33577:53;33633:15;33577:71;;33819:7;33813:4;33806:21;33854:22;33848:4;33841:36;33930:4;33924;33914:21;33891:44;;34026:19;34020:26;34001:45;;33757:300;33412:652;;;:::o;34177:645::-;34319:11;34481:15;34475:4;34471:26;34463:34;;34640:15;34629:9;34625:31;34612:44;;34787:15;34776:9;34773:30;34766:4;34755:9;34752:19;34749:55;34739:65;;34177:645;;;;;:::o;45005:159::-;;;;;:::o;43317:309::-;43452:7;43472:16;14623:3;43498:19;:40;;43472:67;;14623:3;43565:31;43576:4;43582:2;43586:9;43565:10;:31::i;:::-;43557:40;;:61;;43550:68;;;43317:309;;;;;:::o;23145:447::-;23225:14;23393:15;23386:5;23382:27;23373:36;;23567:5;23553:11;23529:22;23525:40;23522:51;23515:5;23512:62;23502:72;;23145:447;;;;:::o;45823:158::-;;;;;:::o;2326:132::-;2401:12;:10;:12::i;:::-;2390:23;;:7;:5;:7::i;:::-;:23;;;2382:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2326:132::o;17685:285::-;17732:7;17936:15;:13;:15::i;:::-;17920:13;;:31;17913:38;;17685:285;:::o;27968:104::-;28037:27;28047:2;28051:8;28037:27;;;;;;;;;;;;:9;:27::i;:::-;27968:104;;:::o;3428:191::-;3502:16;3521:6;;;;;;;;;;;3502:25;;3547:8;3538:6;;:17;;;;;;;;;;;;;;;;;;3602:8;3571:40;;3592:8;3571:40;;;;;;;;;;;;3491:128;3428:191;:::o;41827:716::-;41990:4;42036:2;42011:45;;;42057:19;:17;:19::i;:::-;42078:4;42084:7;42093:5;42011:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42007:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42311:1;42294:6;:13;:18;42290:235;;;42340:40;;;;;;;;;;;;;;42290:235;42483:6;42477:13;42468:6;42464:2;42460:15;42453:38;42007:529;42180:54;;;42170:64;;;:6;:64;;;;42163:71;;;41827:716;;;;;;:::o;51076:92::-;51128:13;51155:8;51148:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51076:92;:::o;48648:723::-;48704:13;48934:1;48925:5;:10;48921:53;;;48952:10;;;;;;;;;;;;;;;;;;;;;48921:53;48984:12;48999:5;48984:20;;49015:14;49040:78;49055:1;49047:4;:9;49040:78;;49073:8;;;;;:::i;:::-;;;;49104:2;49096:10;;;;;:::i;:::-;;;49040:78;;;49128:19;49160:6;49150:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49128:39;;49178:154;49194:1;49185:5;:10;49178:154;;49222:1;49212:11;;;;;:::i;:::-;;;49289:2;49281:5;:10;;;;:::i;:::-;49268:2;:24;;;;:::i;:::-;49255:39;;49238:6;49245;49238:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;49318:2;49309:11;;;;;:::i;:::-;;;49178:154;;;49356:6;49342:21;;;;;48648:723;;;;:::o;44202:147::-;44339:6;44202:147;;;;;:::o;712:98::-;765:7;792:10;785:17;;712:98;:::o;28488:681::-;28611:19;28617:2;28621:8;28611:5;:19::i;:::-;28690:1;28672:2;:14;;;:19;28668:483;;28712:11;28726:13;;28712:27;;28758:13;28780:8;28774:3;:14;28758:30;;28807:233;28838:62;28877:1;28881:2;28885:7;;;;;;28894:5;28838:30;:62::i;:::-;28833:167;;28936:40;;;;;;;;;;;;;;28833:167;29035:3;29027:5;:11;28807:233;;29122:3;29105:13;;:20;29101:34;;29127:8;;;29101:34;28693:458;;28668:483;28488:681;;;:::o;29442:1529::-;29507:20;29530:13;;29507:36;;29572:1;29558:16;;:2;:16;;;29554:48;;;29583:19;;;;;;;;;;;;;;29554:48;29629:1;29617:8;:13;29613:44;;;29639:18;;;;;;;;;;;;;;29613:44;29670:61;29700:1;29704:2;29708:12;29722:8;29670:21;:61::i;:::-;30213:1;13589:2;30184:1;:25;;30183:31;30171:8;:44;30145:18;:22;30164:2;30145:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;30492:139;30529:2;30583:33;30606:1;30610:2;30614:1;30583:14;:33::i;:::-;30550:30;30571:8;30550:20;:30::i;:::-;:66;30492:18;:139::i;:::-;30458:17;:31;30476:12;30458:31;;;;;;;;;;;:173;;;;30648:15;30666:12;30648:30;;30693:11;30722:8;30707:12;:23;30693:37;;30745:101;30797:9;;;;;;30793:2;30772:35;;30789:1;30772:35;;;;;;;;;;;;30841:3;30831:7;:13;30745:101;;30878:3;30862:13;:19;;;;29919:974;;30903:60;30932:1;30936:2;30940:12;30954:8;30903:20;:60::i;:::-;29496:1475;29442:1529;;:::o;24975:322::-;25045:14;25276:1;25266:8;25263:15;25238:23;25234:45;25224:55;;24975:322;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8845:366::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:::-;10475:3;10496:67;10560:2;10555:3;10496:67;:::i;:::-;10489:74;;10572:93;10661:3;10572:93;:::i;:::-;10690:2;10685:3;10681:12;10674:19;;10333:366;;;:::o;10705:::-;10847:3;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10944:93;11033:3;10944:93;:::i;:::-;11062:2;11057:3;11053:12;11046:19;;10705:366;;;:::o;11077:400::-;11237:3;11258:84;11340:1;11335:3;11258:84;:::i;:::-;11251:91;;11351:93;11440:3;11351:93;:::i;:::-;11469:1;11464:3;11460:11;11453:18;;11077:400;;;:::o;11483:366::-;11625:3;11646:67;11710:2;11705:3;11646:67;:::i;:::-;11639:74;;11722:93;11811:3;11722:93;:::i;:::-;11840:2;11835:3;11831:12;11824:19;;11483:366;;;:::o;11855:::-;11997:3;12018:67;12082:2;12077:3;12018:67;:::i;:::-;12011:74;;12094:93;12183:3;12094:93;:::i;:::-;12212:2;12207:3;12203:12;12196:19;;11855:366;;;:::o;12227:398::-;12386:3;12407:83;12488:1;12483:3;12407:83;:::i;:::-;12400:90;;12499:93;12588:3;12499:93;:::i;:::-;12617:1;12612:3;12608:11;12601:18;;12227:398;;;:::o;12631:366::-;12773:3;12794:67;12858:2;12853:3;12794:67;:::i;:::-;12787:74;;12870:93;12959:3;12870:93;:::i;:::-;12988:2;12983:3;12979:12;12972:19;;12631:366;;;:::o;13003:118::-;13090:24;13108:5;13090:24;:::i;:::-;13085:3;13078:37;13003:118;;:::o;13127:701::-;13408:3;13430:95;13521:3;13512:6;13430:95;:::i;:::-;13423:102;;13542:95;13633:3;13624:6;13542:95;:::i;:::-;13535:102;;13654:148;13798:3;13654:148;:::i;:::-;13647:155;;13819:3;13812:10;;13127:701;;;;;:::o;13834:379::-;14018:3;14040:147;14183:3;14040:147;:::i;:::-;14033:154;;14204:3;14197:10;;13834:379;;;:::o;14219:222::-;14312:4;14350:2;14339:9;14335:18;14327:26;;14363:71;14431:1;14420:9;14416:17;14407:6;14363:71;:::i;:::-;14219:222;;;;:::o;14447:640::-;14642:4;14680:3;14669:9;14665:19;14657:27;;14694:71;14762:1;14751:9;14747:17;14738:6;14694:71;:::i;:::-;14775:72;14843:2;14832:9;14828:18;14819:6;14775:72;:::i;:::-;14857;14925:2;14914:9;14910:18;14901:6;14857:72;:::i;:::-;14976:9;14970:4;14966:20;14961:2;14950:9;14946:18;14939:48;15004:76;15075:4;15066:6;15004:76;:::i;:::-;14996:84;;14447:640;;;;;;;:::o;15093:210::-;15180:4;15218:2;15207:9;15203:18;15195:26;;15231:65;15293:1;15282:9;15278:17;15269:6;15231:65;:::i;:::-;15093:210;;;;:::o;15309:313::-;15422:4;15460:2;15449:9;15445:18;15437:26;;15509:9;15503:4;15499:20;15495:1;15484:9;15480:17;15473:47;15537:78;15610:4;15601:6;15537:78;:::i;:::-;15529:86;;15309:313;;;;:::o;15628:419::-;15794:4;15832:2;15821:9;15817:18;15809:26;;15881:9;15875:4;15871:20;15867:1;15856:9;15852:17;15845:47;15909:131;16035:4;15909:131;:::i;:::-;15901:139;;15628:419;;;:::o;16053:::-;16219:4;16257:2;16246:9;16242:18;16234:26;;16306:9;16300:4;16296:20;16292:1;16281:9;16277:17;16270:47;16334:131;16460:4;16334:131;:::i;:::-;16326:139;;16053:419;;;:::o;16478:::-;16644:4;16682:2;16671:9;16667:18;16659:26;;16731:9;16725:4;16721:20;16717:1;16706:9;16702:17;16695:47;16759:131;16885:4;16759:131;:::i;:::-;16751:139;;16478:419;;;:::o;16903:::-;17069:4;17107:2;17096:9;17092:18;17084:26;;17156:9;17150:4;17146:20;17142:1;17131:9;17127:17;17120:47;17184:131;17310:4;17184:131;:::i;:::-;17176:139;;16903:419;;;:::o;17328:::-;17494:4;17532:2;17521:9;17517:18;17509:26;;17581:9;17575:4;17571:20;17567:1;17556:9;17552:17;17545:47;17609:131;17735:4;17609:131;:::i;:::-;17601:139;;17328:419;;;:::o;17753:::-;17919:4;17957:2;17946:9;17942:18;17934:26;;18006:9;18000:4;17996:20;17992:1;17981:9;17977:17;17970:47;18034:131;18160:4;18034:131;:::i;:::-;18026:139;;17753:419;;;:::o;18178:::-;18344:4;18382:2;18371:9;18367:18;18359:26;;18431:9;18425:4;18421:20;18417:1;18406:9;18402:17;18395:47;18459:131;18585:4;18459:131;:::i;:::-;18451:139;;18178:419;;;:::o;18603:::-;18769:4;18807:2;18796:9;18792:18;18784:26;;18856:9;18850:4;18846:20;18842:1;18831:9;18827:17;18820:47;18884:131;19010:4;18884:131;:::i;:::-;18876:139;;18603:419;;;:::o;19028:::-;19194:4;19232:2;19221:9;19217:18;19209:26;;19281:9;19275:4;19271:20;19267:1;19256:9;19252:17;19245:47;19309:131;19435:4;19309:131;:::i;:::-;19301:139;;19028:419;;;:::o;19453:222::-;19546:4;19584:2;19573:9;19569:18;19561:26;;19597:71;19665:1;19654:9;19650:17;19641:6;19597:71;:::i;:::-;19453:222;;;;:::o;19681:129::-;19715:6;19742:20;;:::i;:::-;19732:30;;19771:33;19799:4;19791:6;19771:33;:::i;:::-;19681:129;;;:::o;19816:75::-;19849:6;19882:2;19876:9;19866:19;;19816:75;:::o;19897:307::-;19958:4;20048:18;20040:6;20037:30;20034:56;;;20070:18;;:::i;:::-;20034:56;20108:29;20130:6;20108:29;:::i;:::-;20100:37;;20192:4;20186;20182:15;20174:23;;19897:307;;;:::o;20210:308::-;20272:4;20362:18;20354:6;20351:30;20348:56;;;20384:18;;:::i;:::-;20348:56;20422:29;20444:6;20422:29;:::i;:::-;20414:37;;20506:4;20500;20496:15;20488:23;;20210:308;;;:::o;20524:98::-;20575:6;20609:5;20603:12;20593:22;;20524:98;;;:::o;20628:99::-;20680:6;20714:5;20708:12;20698:22;;20628:99;;;:::o;20733:168::-;20816:11;20850:6;20845:3;20838:19;20890:4;20885:3;20881:14;20866:29;;20733:168;;;;:::o;20907:147::-;21008:11;21045:3;21030:18;;20907:147;;;;:::o;21060:169::-;21144:11;21178:6;21173:3;21166:19;21218:4;21213:3;21209:14;21194:29;;21060:169;;;;:::o;21235:148::-;21337:11;21374:3;21359:18;;21235:148;;;;:::o;21389:305::-;21429:3;21448:20;21466:1;21448:20;:::i;:::-;21443:25;;21482:20;21500:1;21482:20;:::i;:::-;21477:25;;21636:1;21568:66;21564:74;21561:1;21558:81;21555:107;;;21642:18;;:::i;:::-;21555:107;21686:1;21683;21679:9;21672:16;;21389:305;;;;:::o;21700:185::-;21740:1;21757:20;21775:1;21757:20;:::i;:::-;21752:25;;21791:20;21809:1;21791:20;:::i;:::-;21786:25;;21830:1;21820:35;;21835:18;;:::i;:::-;21820:35;21877:1;21874;21870:9;21865:14;;21700:185;;;;:::o;21891:348::-;21931:7;21954:20;21972:1;21954:20;:::i;:::-;21949:25;;21988:20;22006:1;21988:20;:::i;:::-;21983:25;;22176:1;22108:66;22104:74;22101:1;22098:81;22093:1;22086:9;22079:17;22075:105;22072:131;;;22183:18;;:::i;:::-;22072:131;22231:1;22228;22224:9;22213:20;;21891:348;;;;:::o;22245:191::-;22285:4;22305:20;22323:1;22305:20;:::i;:::-;22300:25;;22339:20;22357:1;22339:20;:::i;:::-;22334:25;;22378:1;22375;22372:8;22369:34;;;22383:18;;:::i;:::-;22369:34;22428:1;22425;22421:9;22413:17;;22245:191;;;;:::o;22442:96::-;22479:7;22508:24;22526:5;22508:24;:::i;:::-;22497:35;;22442:96;;;:::o;22544:90::-;22578:7;22621:5;22614:13;22607:21;22596:32;;22544:90;;;:::o;22640:149::-;22676:7;22716:66;22709:5;22705:78;22694:89;;22640:149;;;:::o;22795:126::-;22832:7;22872:42;22865:5;22861:54;22850:65;;22795:126;;;:::o;22927:77::-;22964:7;22993:5;22982:16;;22927:77;;;:::o;23010:154::-;23094:6;23089:3;23084;23071:30;23156:1;23147:6;23142:3;23138:16;23131:27;23010:154;;;:::o;23170:307::-;23238:1;23248:113;23262:6;23259:1;23256:13;23248:113;;;23347:1;23342:3;23338:11;23332:18;23328:1;23323:3;23319:11;23312:39;23284:2;23281:1;23277:10;23272:15;;23248:113;;;23379:6;23376:1;23373:13;23370:101;;;23459:1;23450:6;23445:3;23441:16;23434:27;23370:101;23219:258;23170:307;;;:::o;23483:320::-;23527:6;23564:1;23558:4;23554:12;23544:22;;23611:1;23605:4;23601:12;23632:18;23622:81;;23688:4;23680:6;23676:17;23666:27;;23622:81;23750:2;23742:6;23739:14;23719:18;23716:38;23713:84;;;23769:18;;:::i;:::-;23713:84;23534:269;23483:320;;;:::o;23809:281::-;23892:27;23914:4;23892:27;:::i;:::-;23884:6;23880:40;24022:6;24010:10;24007:22;23986:18;23974:10;23971:34;23968:62;23965:88;;;24033:18;;:::i;:::-;23965:88;24073:10;24069:2;24062:22;23852:238;23809:281;;:::o;24096:233::-;24135:3;24158:24;24176:5;24158:24;:::i;:::-;24149:33;;24204:66;24197:5;24194:77;24191:103;;;24274:18;;:::i;:::-;24191:103;24321:1;24314:5;24310:13;24303:20;;24096:233;;;:::o;24335:176::-;24367:1;24384:20;24402:1;24384:20;:::i;:::-;24379:25;;24418:20;24436:1;24418:20;:::i;:::-;24413:25;;24457:1;24447:35;;24462:18;;:::i;:::-;24447:35;24503:1;24500;24496:9;24491:14;;24335:176;;;;:::o;24517:180::-;24565:77;24562:1;24555:88;24662:4;24659:1;24652:15;24686:4;24683:1;24676:15;24703:180;24751:77;24748:1;24741:88;24848:4;24845:1;24838:15;24872:4;24869:1;24862:15;24889:180;24937:77;24934:1;24927:88;25034:4;25031:1;25024:15;25058:4;25055:1;25048:15;25075:180;25123:77;25120:1;25113:88;25220:4;25217:1;25210:15;25244:4;25241:1;25234:15;25261:180;25309:77;25306:1;25299:88;25406:4;25403:1;25396:15;25430:4;25427:1;25420:15;25447:117;25556:1;25553;25546:12;25570:117;25679:1;25676;25669:12;25693:117;25802:1;25799;25792:12;25816:117;25925:1;25922;25915:12;25939:102;25980:6;26031:2;26027:7;26022:2;26015:5;26011:14;26007:28;25997:38;;25939:102;;;:::o;26047:171::-;26187:23;26183:1;26175:6;26171:14;26164:47;26047:171;:::o;26224:225::-;26364:34;26360:1;26352:6;26348:14;26341:58;26433:8;26428:2;26420:6;26416:15;26409:33;26224:225;:::o;26455:220::-;26595:34;26591:1;26583:6;26579:14;26572:58;26664:3;26659:2;26651:6;26647:15;26640:28;26455:220;:::o;26681:163::-;26821:15;26817:1;26809:6;26805:14;26798:39;26681:163;:::o;26850:168::-;26990:20;26986:1;26978:6;26974:14;26967:44;26850:168;:::o;27024:221::-;27164:34;27160:1;27152:6;27148:14;27141:58;27233:4;27228:2;27220:6;27216:15;27209:29;27024:221;:::o;27251:155::-;27391:7;27387:1;27379:6;27375:14;27368:31;27251:155;:::o;27412:182::-;27552:34;27548:1;27540:6;27536:14;27529:58;27412:182;:::o;27600:234::-;27740:34;27736:1;27728:6;27724:14;27717:58;27809:17;27804:2;27796:6;27792:15;27785:42;27600:234;:::o;27840:114::-;;:::o;27960:172::-;28100:24;28096:1;28088:6;28084:14;28077:48;27960:172;:::o;28138:122::-;28211:24;28229:5;28211:24;:::i;:::-;28204:5;28201:35;28191:63;;28250:1;28247;28240:12;28191:63;28138:122;:::o;28266:116::-;28336:21;28351:5;28336:21;:::i;:::-;28329:5;28326:32;28316:60;;28372:1;28369;28362:12;28316:60;28266:116;:::o;28388:120::-;28460:23;28477:5;28460:23;:::i;:::-;28453:5;28450:34;28440:62;;28498:1;28495;28488:12;28440:62;28388:120;:::o;28514:122::-;28587:24;28605:5;28587:24;:::i;:::-;28580:5;28577:35;28567:63;;28626:1;28623;28616:12;28567:63;28514:122;:::o
Swarm Source
ipfs://93330f90dfeaef632dc18f37f6569031bf780a44623b3d1568384abecac964dd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.