ERC-721
Overview
Max Total Supply
616 PIXCRE
Holders
394
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 PIXCRELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PixelCreatures
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-03 */ // SPDX-License-Identifier: MIT // File: contracts/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: contracts/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/IERC721A.sol // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/ERC721A.sol // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (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 auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux } packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed; } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP); ownership.burned = packed & BITMASK_BURNED != 0; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.code.length != 0) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } } // File: contracts/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: contracts/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: contracts/PixelCreatures.sol pragma solidity >=0.8.9 <0.9.0; contract PixelCreatures is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; string public uriPrefix = ''; string public uriSuffix = '.json'; string public hiddenMetadataUri; uint256 public cost = 0.0025 ether; uint256 public maxSupply = 10000; uint256 public txnMax = 30; uint256 public maxFreeMintEach = 1; bool public revealed = true; bool public paused = true; constructor( string memory _tokenName, string memory _tokenSymbol, string memory _hiddenMetadataUri ) ERC721A(_tokenName, _tokenSymbol) { setHiddenMetadataUri(_hiddenMetadataUri); } modifier mintCompliance(uint256 _mintAmount) { require(!paused, "Minting has not started."); require(_mintAmount > 0 && _mintAmount <= txnMax, "You can only mint up to 30 NFTs per transaction."); require(totalSupply() + _mintAmount <= maxSupply, "No NFT lefts"); require(tx.origin == msg.sender, "No smart contract minting."); _; } modifier mintPriceCompliance(uint256 _mintAmount) { uint256 realCost = 0; if (numberMinted(msg.sender) < maxFreeMintEach) { uint256 freeMintsLeft = maxFreeMintEach - numberMinted(msg.sender); realCost = cost * freeMintsLeft; } require(msg.value >= cost * _mintAmount - realCost, "Insufficient/incorrect funds."); _; } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) { _safeMint(_msgSender(), _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public onlyOwner { require(totalSupply() + _mintAmount <= maxSupply, "Max supply exceeded!"); _safeMint(_receiver, _mintAmount); } function _startTokenId() internal view virtual override returns (uint256) { return 1; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ''; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setmaxFreeMintEach(uint256 _maxFreeMintEach) public onlyOwner { maxFreeMintEach = _maxFreeMintEach; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner nonReentrant { (bool withdrawFunds, ) = payable(owner()).call{value: address(this).balance}(""); require(withdrawFunds); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMintEach","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreeMintEach","type":"uint256"}],"name":"setmaxFreeMintEach","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":"txnMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600a90805190602001906200002b92919062000338565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200007992919062000338565b506608e1bc9bf04000600d55612710600e55601e600f5560016010556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff021916908315150217905550348015620000d857600080fd5b5060405162004202380380620042028339818101604052810190620000fe919062000585565b828281600290805190602001906200011892919062000338565b5080600390805190602001906200013192919062000338565b50620001426200018c60201b60201c565b60008190555050506200016a6200015e6200019560201b60201c565b6200019d60201b60201c565b600160098190555062000183816200026360201b60201c565b50505062000726565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002736200019560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002996200030e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e9906200069f565b60405180910390fd5b80600c90805190602001906200030a92919062000338565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034690620006f0565b90600052602060002090601f0160209004810192826200036a5760008555620003b6565b82601f106200038557805160ff1916838001178555620003b6565b82800160010185558215620003b6579182015b82811115620003b557825182559160200191906001019062000398565b5b509050620003c59190620003c9565b5090565b5b80821115620003e4576000816000905550600101620003ca565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004518262000406565b810181811067ffffffffffffffff8211171562000473576200047262000417565b5b80604052505050565b600062000488620003e8565b905062000496828262000446565b919050565b600067ffffffffffffffff821115620004b957620004b862000417565b5b620004c48262000406565b9050602081019050919050565b60005b83811015620004f1578082015181840152602081019050620004d4565b8381111562000501576000848401525b50505050565b60006200051e62000518846200049b565b6200047c565b9050828152602081018484840111156200053d576200053c62000401565b5b6200054a848285620004d1565b509392505050565b600082601f8301126200056a5762000569620003fc565b5b81516200057c84826020860162000507565b91505092915050565b600080600060608486031215620005a157620005a0620003f2565b5b600084015167ffffffffffffffff811115620005c257620005c1620003f7565b5b620005d08682870162000552565b935050602084015167ffffffffffffffff811115620005f457620005f3620003f7565b5b620006028682870162000552565b925050604084015167ffffffffffffffff811115620006265762000625620003f7565b5b620006348682870162000552565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620006876020836200063e565b915062000694826200064f565b602082019050919050565b60006020820190508181036000830152620006ba8162000678565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200070957607f821691505b6020821081141562000720576200071f620006c1565b5b50919050565b613acc80620007366000396000f3fe60806040526004361061021a5760003560e01c806370a0823111610123578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c51461079e578063ebe2e3aa146107db578063efbd73f414610804578063f2fde38b1461082d578063f9308cc5146108565761021a565b8063b88d4fde146106a7578063c87b56dd146106d0578063d5abeb011461070d578063dc33e68114610738578063e0a80853146107755761021a565b80638da5cb5b116100f25780638da5cb5b146105e157806395d89b411461060c578063a0712d6814610637578063a22cb46514610653578063a45ba8e71461067c5761021a565b806370a0823114610539578063715018a6146105765780637ec4a6591461058d5780638a68d451146105b65761021a565b80633ccfd60b116101a6578063518302271161017557806351830227146104505780635503a0e81461047b5780635c975abb146104a657806362b99ad4146104d15780636352211e146104fc5761021a565b80633ccfd60b146103be57806342842e0e146103d557806344a0d68a146103fe5780634fdd43cb146104275761021a565b806313faede6116101ed57806313faede6146102ed57806316ba10e01461031857806316c38b3c1461034157806318160ddd1461036a57806323b872dd146103955761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612a97565b610881565b6040516102539190612adf565b60405180910390f35b34801561026857600080fd5b50610271610913565b60405161027e9190612b93565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612beb565b6109a5565b6040516102bb9190612c59565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190612ca0565b610a21565b005b3480156102f957600080fd5b50610302610bc8565b60405161030f9190612cef565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612e3f565b610bce565b005b34801561034d57600080fd5b5061036860048036038101906103639190612eb4565b610c64565b005b34801561037657600080fd5b5061037f610cfd565b60405161038c9190612cef565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190612ee1565b610d14565b005b3480156103ca57600080fd5b506103d3610d24565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612ee1565b610e76565b005b34801561040a57600080fd5b5061042560048036038101906104209190612beb565b610e96565b005b34801561043357600080fd5b5061044e60048036038101906104499190612e3f565b610f1c565b005b34801561045c57600080fd5b50610465610fb2565b6040516104729190612adf565b60405180910390f35b34801561048757600080fd5b50610490610fc5565b60405161049d9190612b93565b60405180910390f35b3480156104b257600080fd5b506104bb611053565b6040516104c89190612adf565b60405180910390f35b3480156104dd57600080fd5b506104e6611066565b6040516104f39190612b93565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190612beb565b6110f4565b6040516105309190612c59565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190612f34565b611106565b60405161056d9190612cef565b60405180910390f35b34801561058257600080fd5b5061058b6111bf565b005b34801561059957600080fd5b506105b460048036038101906105af9190612e3f565b611247565b005b3480156105c257600080fd5b506105cb6112dd565b6040516105d89190612cef565b60405180910390f35b3480156105ed57600080fd5b506105f66112e3565b6040516106039190612c59565b60405180910390f35b34801561061857600080fd5b5061062161130d565b60405161062e9190612b93565b60405180910390f35b610651600480360381019061064c9190612beb565b61139f565b005b34801561065f57600080fd5b5061067a60048036038101906106759190612f61565b6115b9565b005b34801561068857600080fd5b50610691611731565b60405161069e9190612b93565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613042565b6117bf565b005b3480156106dc57600080fd5b506106f760048036038101906106f29190612beb565b611832565b6040516107049190612b93565b60405180910390f35b34801561071957600080fd5b5061072261198b565b60405161072f9190612cef565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190612f34565b611991565b60405161076c9190612cef565b60405180910390f35b34801561078157600080fd5b5061079c60048036038101906107979190612eb4565b6119a3565b005b3480156107aa57600080fd5b506107c560048036038101906107c091906130c5565b611a3c565b6040516107d29190612adf565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190612beb565b611ad0565b005b34801561081057600080fd5b5061082b60048036038101906108269190613105565b611b56565b005b34801561083957600080fd5b50610854600480360381019061084f9190612f34565b611c37565b005b34801561086257600080fd5b5061086b611d2f565b6040516108789190612cef565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108dc57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461092290613174565b80601f016020809104026020016040519081016040528092919081815260200182805461094e90613174565b801561099b5780601f106109705761010080835404028352916020019161099b565b820191906000526020600020905b81548152906001019060200180831161097e57829003601f168201915b5050505050905090565b60006109b082611d35565b6109e6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2c82611d94565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a94576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ab3611e62565b73ffffffffffffffffffffffffffffffffffffffff1614610b1657610adf81610ada611e62565b611a3c565b610b15576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600d5481565b610bd6611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610bf46112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c41906131f2565b60405180910390fd5b80600b9080519060200190610c60929190612988565b5050565b610c6c611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610c8a6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd7906131f2565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b6000610d07611e72565b6001546000540303905090565b610d1f838383611e7b565b505050565b610d2c611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610d4a6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d97906131f2565b60405180910390fd5b60026009541415610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd9061325e565b60405180910390fd5b60026009819055506000610df86112e3565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e1b906132af565b60006040518083038185875af1925050503d8060008114610e58576040519150601f19603f3d011682016040523d82523d6000602084013e610e5d565b606091505b5050905080610e6b57600080fd5b506001600981905550565b610e91838383604051806020016040528060008152506117bf565b505050565b610e9e611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610ebc6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f09906131f2565b60405180910390fd5b80600d8190555050565b610f24611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610f426112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f906131f2565b60405180910390fd5b80600c9080519060200190610fae929190612988565b5050565b601160009054906101000a900460ff1681565b600b8054610fd290613174565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90613174565b801561104b5780601f106110205761010080835404028352916020019161104b565b820191906000526020600020905b81548152906001019060200180831161102e57829003601f168201915b505050505081565b601160019054906101000a900460ff1681565b600a805461107390613174565b80601f016020809104026020016040519081016040528092919081815260200182805461109f90613174565b80156110ec5780601f106110c1576101008083540402835291602001916110ec565b820191906000526020600020905b8154815290600101906020018083116110cf57829003601f168201915b505050505081565b60006110ff82611d94565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561116e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111c7611e6a565b73ffffffffffffffffffffffffffffffffffffffff166111e56112e3565b73ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906131f2565b60405180910390fd5b6112456000612225565b565b61124f611e6a565b73ffffffffffffffffffffffffffffffffffffffff1661126d6112e3565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba906131f2565b60405180910390fd5b80600a90805190602001906112d9929190612988565b5050565b60105481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461131c90613174565b80601f016020809104026020016040519081016040528092919081815260200182805461134890613174565b80156113955780601f1061136a57610100808354040283529160200191611395565b820191906000526020600020905b81548152906001019060200180831161137857829003601f168201915b5050505050905090565b80601160019054906101000a900460ff16156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e790613310565b60405180910390fd5b6000811180156114025750600f548111155b611441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611438906133a2565b60405180910390fd5b600e548161144d610cfd565b61145791906133f1565b1115611498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148f90613493565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd906134ff565b60405180910390fd5b81600060105461151533611991565b101561154757600061152633611991565b601054611533919061351f565b905080600d546115439190613553565b9150505b8082600d546115569190613553565b611560919061351f565b3410156115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906135f9565b60405180910390fd5b6115b36115ad611e6a565b856122eb565b50505050565b6115c1611e62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611626576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611633611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116e0611e62565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117259190612adf565b60405180910390a35050565b600c805461173e90613174565b80601f016020809104026020016040519081016040528092919081815260200182805461176a90613174565b80156117b75780601f1061178c576101008083540402835291602001916117b7565b820191906000526020600020905b81548152906001019060200180831161179a57829003601f168201915b505050505081565b6117ca848484611e7b565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461182c576117f584848484612309565b61182b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606061183d82611d35565b61187c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118739061368b565b60405180910390fd5b60001515601160009054906101000a900460ff161515141561192a57600c80546118a590613174565b80601f01602080910402602001604051908101604052809291908181526020018280546118d190613174565b801561191e5780601f106118f35761010080835404028352916020019161191e565b820191906000526020600020905b81548152906001019060200180831161190157829003601f168201915b50505050509050611986565b6000611934612469565b905060008151116119545760405180602001604052806000815250611982565b8061195e846124fb565b600b6040516020016119729392919061377b565b6040516020818303038152906040525b9150505b919050565b600e5481565b600061199c8261265c565b9050919050565b6119ab611e6a565b73ffffffffffffffffffffffffffffffffffffffff166119c96112e3565b73ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906131f2565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ad8611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611af66112e3565b73ffffffffffffffffffffffffffffffffffffffff1614611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b43906131f2565b60405180910390fd5b8060108190555050565b611b5e611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611b7c6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc9906131f2565b60405180910390fd5b600e5482611bde610cfd565b611be891906133f1565b1115611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906137f8565b60405180910390fd5b611c3381836122eb565b5050565b611c3f611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611c5d6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa906131f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a9061388a565b60405180910390fd5b611d2c81612225565b50565b600f5481565b600081611d40611e72565b11158015611d4f575060005482105b8015611d8d575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60008082905080611da3611e72565b11611e2b57600054811015611e2a5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611e28575b6000811415611e1e576004600083600190039350838152602001908152602001600020549050611df3565b8092505050611e5d565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b60006001905090565b6000611e8682611d94565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611eed576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611f0e611e62565b73ffffffffffffffffffffffffffffffffffffffff161480611f3d5750611f3c85611f37611e62565b611a3c565b5b80611f825750611f4b611e62565b73ffffffffffffffffffffffffffffffffffffffff16611f6a846109a5565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611fbb576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612022576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61202f85858560016126b3565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61212c866126b9565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831614156121b65760006001840190506000600460008381526020019081526020016000205414156121b45760005481146121b3578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461221e85858560016126c3565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123058282604051806020016040528060008152506126c9565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261232f611e62565b8786866040518563ffffffff1660e01b815260040161235194939291906138ff565b602060405180830381600087803b15801561236b57600080fd5b505af192505050801561239c57506040513d601f19601f820116820180604052508101906123999190613960565b60015b612416573d80600081146123cc576040519150601f19603f3d011682016040523d82523d6000602084013e6123d1565b606091505b5060008151141561240e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461247890613174565b80601f01602080910402602001604051908101604052809291908181526020018280546124a490613174565b80156124f15780601f106124c6576101008083540402835291602001916124f1565b820191906000526020600020905b8154815290600101906020018083116124d457829003601f168201915b5050505050905090565b60606000821415612543576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612657565b600082905060005b6000821461257557808061255e9061398d565b915050600a8261256e9190613a05565b915061254b565b60008167ffffffffffffffff81111561259157612590612d14565b5b6040519080825280601f01601f1916602001820160405280156125c35781602001600182028036833780820191505090505b5090505b60008514612650576001826125dc919061351f565b9150600a856125eb9190613a36565b60306125f791906133f1565b60f81b81838151811061260d5761260c613a67565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126499190613a05565b94506125c7565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612736576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612771576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61277e60008583866126b3565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16127e36001851461297e565b901b60a042901b6127f3866126b9565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146128f7575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128a76000878480600101955087612309565b6128dd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106128385782600054146128f257600080fd5b612962565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106128f8575b81600081905550505061297860008583866126c3565b50505050565b6000819050919050565b82805461299490613174565b90600052602060002090601f0160209004810192826129b657600085556129fd565b82601f106129cf57805160ff19168380011785556129fd565b828001600101855582156129fd579182015b828111156129fc5782518255916020019190600101906129e1565b5b509050612a0a9190612a0e565b5090565b5b80821115612a27576000816000905550600101612a0f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a7481612a3f565b8114612a7f57600080fd5b50565b600081359050612a9181612a6b565b92915050565b600060208284031215612aad57612aac612a35565b5b6000612abb84828501612a82565b91505092915050565b60008115159050919050565b612ad981612ac4565b82525050565b6000602082019050612af46000830184612ad0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b34578082015181840152602081019050612b19565b83811115612b43576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b6582612afa565b612b6f8185612b05565b9350612b7f818560208601612b16565b612b8881612b49565b840191505092915050565b60006020820190508181036000830152612bad8184612b5a565b905092915050565b6000819050919050565b612bc881612bb5565b8114612bd357600080fd5b50565b600081359050612be581612bbf565b92915050565b600060208284031215612c0157612c00612a35565b5b6000612c0f84828501612bd6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4382612c18565b9050919050565b612c5381612c38565b82525050565b6000602082019050612c6e6000830184612c4a565b92915050565b612c7d81612c38565b8114612c8857600080fd5b50565b600081359050612c9a81612c74565b92915050565b60008060408385031215612cb757612cb6612a35565b5b6000612cc585828601612c8b565b9250506020612cd685828601612bd6565b9150509250929050565b612ce981612bb5565b82525050565b6000602082019050612d046000830184612ce0565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d4c82612b49565b810181811067ffffffffffffffff82111715612d6b57612d6a612d14565b5b80604052505050565b6000612d7e612a2b565b9050612d8a8282612d43565b919050565b600067ffffffffffffffff821115612daa57612da9612d14565b5b612db382612b49565b9050602081019050919050565b82818337600083830152505050565b6000612de2612ddd84612d8f565b612d74565b905082815260208101848484011115612dfe57612dfd612d0f565b5b612e09848285612dc0565b509392505050565b600082601f830112612e2657612e25612d0a565b5b8135612e36848260208601612dcf565b91505092915050565b600060208284031215612e5557612e54612a35565b5b600082013567ffffffffffffffff811115612e7357612e72612a3a565b5b612e7f84828501612e11565b91505092915050565b612e9181612ac4565b8114612e9c57600080fd5b50565b600081359050612eae81612e88565b92915050565b600060208284031215612eca57612ec9612a35565b5b6000612ed884828501612e9f565b91505092915050565b600080600060608486031215612efa57612ef9612a35565b5b6000612f0886828701612c8b565b9350506020612f1986828701612c8b565b9250506040612f2a86828701612bd6565b9150509250925092565b600060208284031215612f4a57612f49612a35565b5b6000612f5884828501612c8b565b91505092915050565b60008060408385031215612f7857612f77612a35565b5b6000612f8685828601612c8b565b9250506020612f9785828601612e9f565b9150509250929050565b600067ffffffffffffffff821115612fbc57612fbb612d14565b5b612fc582612b49565b9050602081019050919050565b6000612fe5612fe084612fa1565b612d74565b90508281526020810184848401111561300157613000612d0f565b5b61300c848285612dc0565b509392505050565b600082601f83011261302957613028612d0a565b5b8135613039848260208601612fd2565b91505092915050565b6000806000806080858703121561305c5761305b612a35565b5b600061306a87828801612c8b565b945050602061307b87828801612c8b565b935050604061308c87828801612bd6565b925050606085013567ffffffffffffffff8111156130ad576130ac612a3a565b5b6130b987828801613014565b91505092959194509250565b600080604083850312156130dc576130db612a35565b5b60006130ea85828601612c8b565b92505060206130fb85828601612c8b565b9150509250929050565b6000806040838503121561311c5761311b612a35565b5b600061312a85828601612bd6565b925050602061313b85828601612c8b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061318c57607f821691505b602082108114156131a05761319f613145565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131dc602083612b05565b91506131e7826131a6565b602082019050919050565b6000602082019050818103600083015261320b816131cf565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613248601f83612b05565b915061325382613212565b602082019050919050565b600060208201905081810360008301526132778161323b565b9050919050565b600081905092915050565b50565b600061329960008361327e565b91506132a482613289565b600082019050919050565b60006132ba8261328c565b9150819050919050565b7f4d696e74696e6720686173206e6f7420737461727465642e0000000000000000600082015250565b60006132fa601883612b05565b9150613305826132c4565b602082019050919050565b60006020820190508181036000830152613329816132ed565b9050919050565b7f596f752063616e206f6e6c79206d696e7420757020746f203330204e4654732060008201527f706572207472616e73616374696f6e2e00000000000000000000000000000000602082015250565b600061338c603083612b05565b915061339782613330565b604082019050919050565b600060208201905081810360008301526133bb8161337f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133fc82612bb5565b915061340783612bb5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561343c5761343b6133c2565b5b828201905092915050565b7f4e6f204e4654206c656674730000000000000000000000000000000000000000600082015250565b600061347d600c83612b05565b915061348882613447565b602082019050919050565b600060208201905081810360008301526134ac81613470565b9050919050565b7f4e6f20736d61727420636f6e7472616374206d696e74696e672e000000000000600082015250565b60006134e9601a83612b05565b91506134f4826134b3565b602082019050919050565b60006020820190508181036000830152613518816134dc565b9050919050565b600061352a82612bb5565b915061353583612bb5565b925082821015613548576135476133c2565b5b828203905092915050565b600061355e82612bb5565b915061356983612bb5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135a2576135a16133c2565b5b828202905092915050565b7f496e73756666696369656e742f696e636f72726563742066756e64732e000000600082015250565b60006135e3601d83612b05565b91506135ee826135ad565b602082019050919050565b60006020820190508181036000830152613612816135d6565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613675602f83612b05565b915061368082613619565b604082019050919050565b600060208201905081810360008301526136a481613668565b9050919050565b600081905092915050565b60006136c182612afa565b6136cb81856136ab565b93506136db818560208601612b16565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461370981613174565b61371381866136ab565b9450600182166000811461372e576001811461373f57613772565b60ff19831686528186019350613772565b613748856136e7565b60005b8381101561376a5781548189015260018201915060208101905061374b565b838801955050505b50505092915050565b600061378782866136b6565b915061379382856136b6565b915061379f82846136fc565b9150819050949350505050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006137e2601483612b05565b91506137ed826137ac565b602082019050919050565b60006020820190508181036000830152613811816137d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613874602683612b05565b915061387f82613818565b604082019050919050565b600060208201905081810360008301526138a381613867565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006138d1826138aa565b6138db81856138b5565b93506138eb818560208601612b16565b6138f481612b49565b840191505092915050565b60006080820190506139146000830187612c4a565b6139216020830186612c4a565b61392e6040830185612ce0565b818103606083015261394081846138c6565b905095945050505050565b60008151905061395a81612a6b565b92915050565b60006020828403121561397657613975612a35565b5b60006139848482850161394b565b91505092915050565b600061399882612bb5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139cb576139ca6133c2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a1082612bb5565b9150613a1b83612bb5565b925082613a2b57613a2a6139d6565b5b828204905092915050565b6000613a4182612bb5565b9150613a4c83612bb5565b925082613a5c57613a5b6139d6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212200b43a9e7102415ed4d091c1f2ad7bcb3c4c8717c964f20cb6a8addcd6b80fb4e64736f6c63430008090033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f506978656c204372656174757265730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000650495843524500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656965726f366434666e6a6c373473776f6f747570757661737176716b6c686e6c6269326535776f346f366c623367617963727677712f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061021a5760003560e01c806370a0823111610123578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c51461079e578063ebe2e3aa146107db578063efbd73f414610804578063f2fde38b1461082d578063f9308cc5146108565761021a565b8063b88d4fde146106a7578063c87b56dd146106d0578063d5abeb011461070d578063dc33e68114610738578063e0a80853146107755761021a565b80638da5cb5b116100f25780638da5cb5b146105e157806395d89b411461060c578063a0712d6814610637578063a22cb46514610653578063a45ba8e71461067c5761021a565b806370a0823114610539578063715018a6146105765780637ec4a6591461058d5780638a68d451146105b65761021a565b80633ccfd60b116101a6578063518302271161017557806351830227146104505780635503a0e81461047b5780635c975abb146104a657806362b99ad4146104d15780636352211e146104fc5761021a565b80633ccfd60b146103be57806342842e0e146103d557806344a0d68a146103fe5780634fdd43cb146104275761021a565b806313faede6116101ed57806313faede6146102ed57806316ba10e01461031857806316c38b3c1461034157806318160ddd1461036a57806323b872dd146103955761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612a97565b610881565b6040516102539190612adf565b60405180910390f35b34801561026857600080fd5b50610271610913565b60405161027e9190612b93565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612beb565b6109a5565b6040516102bb9190612c59565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190612ca0565b610a21565b005b3480156102f957600080fd5b50610302610bc8565b60405161030f9190612cef565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190612e3f565b610bce565b005b34801561034d57600080fd5b5061036860048036038101906103639190612eb4565b610c64565b005b34801561037657600080fd5b5061037f610cfd565b60405161038c9190612cef565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190612ee1565b610d14565b005b3480156103ca57600080fd5b506103d3610d24565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612ee1565b610e76565b005b34801561040a57600080fd5b5061042560048036038101906104209190612beb565b610e96565b005b34801561043357600080fd5b5061044e60048036038101906104499190612e3f565b610f1c565b005b34801561045c57600080fd5b50610465610fb2565b6040516104729190612adf565b60405180910390f35b34801561048757600080fd5b50610490610fc5565b60405161049d9190612b93565b60405180910390f35b3480156104b257600080fd5b506104bb611053565b6040516104c89190612adf565b60405180910390f35b3480156104dd57600080fd5b506104e6611066565b6040516104f39190612b93565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190612beb565b6110f4565b6040516105309190612c59565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190612f34565b611106565b60405161056d9190612cef565b60405180910390f35b34801561058257600080fd5b5061058b6111bf565b005b34801561059957600080fd5b506105b460048036038101906105af9190612e3f565b611247565b005b3480156105c257600080fd5b506105cb6112dd565b6040516105d89190612cef565b60405180910390f35b3480156105ed57600080fd5b506105f66112e3565b6040516106039190612c59565b60405180910390f35b34801561061857600080fd5b5061062161130d565b60405161062e9190612b93565b60405180910390f35b610651600480360381019061064c9190612beb565b61139f565b005b34801561065f57600080fd5b5061067a60048036038101906106759190612f61565b6115b9565b005b34801561068857600080fd5b50610691611731565b60405161069e9190612b93565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613042565b6117bf565b005b3480156106dc57600080fd5b506106f760048036038101906106f29190612beb565b611832565b6040516107049190612b93565b60405180910390f35b34801561071957600080fd5b5061072261198b565b60405161072f9190612cef565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190612f34565b611991565b60405161076c9190612cef565b60405180910390f35b34801561078157600080fd5b5061079c60048036038101906107979190612eb4565b6119a3565b005b3480156107aa57600080fd5b506107c560048036038101906107c091906130c5565b611a3c565b6040516107d29190612adf565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190612beb565b611ad0565b005b34801561081057600080fd5b5061082b60048036038101906108269190613105565b611b56565b005b34801561083957600080fd5b50610854600480360381019061084f9190612f34565b611c37565b005b34801561086257600080fd5b5061086b611d2f565b6040516108789190612cef565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108dc57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461092290613174565b80601f016020809104026020016040519081016040528092919081815260200182805461094e90613174565b801561099b5780601f106109705761010080835404028352916020019161099b565b820191906000526020600020905b81548152906001019060200180831161097e57829003601f168201915b5050505050905090565b60006109b082611d35565b6109e6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2c82611d94565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a94576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ab3611e62565b73ffffffffffffffffffffffffffffffffffffffff1614610b1657610adf81610ada611e62565b611a3c565b610b15576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600d5481565b610bd6611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610bf46112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c41906131f2565b60405180910390fd5b80600b9080519060200190610c60929190612988565b5050565b610c6c611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610c8a6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd7906131f2565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b6000610d07611e72565b6001546000540303905090565b610d1f838383611e7b565b505050565b610d2c611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610d4a6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d97906131f2565b60405180910390fd5b60026009541415610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd9061325e565b60405180910390fd5b60026009819055506000610df86112e3565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e1b906132af565b60006040518083038185875af1925050503d8060008114610e58576040519150601f19603f3d011682016040523d82523d6000602084013e610e5d565b606091505b5050905080610e6b57600080fd5b506001600981905550565b610e91838383604051806020016040528060008152506117bf565b505050565b610e9e611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610ebc6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f09906131f2565b60405180910390fd5b80600d8190555050565b610f24611e6a565b73ffffffffffffffffffffffffffffffffffffffff16610f426112e3565b73ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f906131f2565b60405180910390fd5b80600c9080519060200190610fae929190612988565b5050565b601160009054906101000a900460ff1681565b600b8054610fd290613174565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90613174565b801561104b5780601f106110205761010080835404028352916020019161104b565b820191906000526020600020905b81548152906001019060200180831161102e57829003601f168201915b505050505081565b601160019054906101000a900460ff1681565b600a805461107390613174565b80601f016020809104026020016040519081016040528092919081815260200182805461109f90613174565b80156110ec5780601f106110c1576101008083540402835291602001916110ec565b820191906000526020600020905b8154815290600101906020018083116110cf57829003601f168201915b505050505081565b60006110ff82611d94565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561116e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111c7611e6a565b73ffffffffffffffffffffffffffffffffffffffff166111e56112e3565b73ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906131f2565b60405180910390fd5b6112456000612225565b565b61124f611e6a565b73ffffffffffffffffffffffffffffffffffffffff1661126d6112e3565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba906131f2565b60405180910390fd5b80600a90805190602001906112d9929190612988565b5050565b60105481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461131c90613174565b80601f016020809104026020016040519081016040528092919081815260200182805461134890613174565b80156113955780601f1061136a57610100808354040283529160200191611395565b820191906000526020600020905b81548152906001019060200180831161137857829003601f168201915b5050505050905090565b80601160019054906101000a900460ff16156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e790613310565b60405180910390fd5b6000811180156114025750600f548111155b611441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611438906133a2565b60405180910390fd5b600e548161144d610cfd565b61145791906133f1565b1115611498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148f90613493565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd906134ff565b60405180910390fd5b81600060105461151533611991565b101561154757600061152633611991565b601054611533919061351f565b905080600d546115439190613553565b9150505b8082600d546115569190613553565b611560919061351f565b3410156115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906135f9565b60405180910390fd5b6115b36115ad611e6a565b856122eb565b50505050565b6115c1611e62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611626576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611633611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116e0611e62565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117259190612adf565b60405180910390a35050565b600c805461173e90613174565b80601f016020809104026020016040519081016040528092919081815260200182805461176a90613174565b80156117b75780601f1061178c576101008083540402835291602001916117b7565b820191906000526020600020905b81548152906001019060200180831161179a57829003601f168201915b505050505081565b6117ca848484611e7b565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461182c576117f584848484612309565b61182b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606061183d82611d35565b61187c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118739061368b565b60405180910390fd5b60001515601160009054906101000a900460ff161515141561192a57600c80546118a590613174565b80601f01602080910402602001604051908101604052809291908181526020018280546118d190613174565b801561191e5780601f106118f35761010080835404028352916020019161191e565b820191906000526020600020905b81548152906001019060200180831161190157829003601f168201915b50505050509050611986565b6000611934612469565b905060008151116119545760405180602001604052806000815250611982565b8061195e846124fb565b600b6040516020016119729392919061377b565b6040516020818303038152906040525b9150505b919050565b600e5481565b600061199c8261265c565b9050919050565b6119ab611e6a565b73ffffffffffffffffffffffffffffffffffffffff166119c96112e3565b73ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906131f2565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ad8611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611af66112e3565b73ffffffffffffffffffffffffffffffffffffffff1614611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b43906131f2565b60405180910390fd5b8060108190555050565b611b5e611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611b7c6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc9906131f2565b60405180910390fd5b600e5482611bde610cfd565b611be891906133f1565b1115611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906137f8565b60405180910390fd5b611c3381836122eb565b5050565b611c3f611e6a565b73ffffffffffffffffffffffffffffffffffffffff16611c5d6112e3565b73ffffffffffffffffffffffffffffffffffffffff1614611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa906131f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a9061388a565b60405180910390fd5b611d2c81612225565b50565b600f5481565b600081611d40611e72565b11158015611d4f575060005482105b8015611d8d575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60008082905080611da3611e72565b11611e2b57600054811015611e2a5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611e28575b6000811415611e1e576004600083600190039350838152602001908152602001600020549050611df3565b8092505050611e5d565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600033905090565b60006001905090565b6000611e8682611d94565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611eed576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611f0e611e62565b73ffffffffffffffffffffffffffffffffffffffff161480611f3d5750611f3c85611f37611e62565b611a3c565b5b80611f825750611f4b611e62565b73ffffffffffffffffffffffffffffffffffffffff16611f6a846109a5565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611fbb576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612022576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61202f85858560016126b3565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61212c866126b9565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831614156121b65760006001840190506000600460008381526020019081526020016000205414156121b45760005481146121b3578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461221e85858560016126c3565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123058282604051806020016040528060008152506126c9565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261232f611e62565b8786866040518563ffffffff1660e01b815260040161235194939291906138ff565b602060405180830381600087803b15801561236b57600080fd5b505af192505050801561239c57506040513d601f19601f820116820180604052508101906123999190613960565b60015b612416573d80600081146123cc576040519150601f19603f3d011682016040523d82523d6000602084013e6123d1565b606091505b5060008151141561240e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461247890613174565b80601f01602080910402602001604051908101604052809291908181526020018280546124a490613174565b80156124f15780601f106124c6576101008083540402835291602001916124f1565b820191906000526020600020905b8154815290600101906020018083116124d457829003601f168201915b5050505050905090565b60606000821415612543576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612657565b600082905060005b6000821461257557808061255e9061398d565b915050600a8261256e9190613a05565b915061254b565b60008167ffffffffffffffff81111561259157612590612d14565b5b6040519080825280601f01601f1916602001820160405280156125c35781602001600182028036833780820191505090505b5090505b60008514612650576001826125dc919061351f565b9150600a856125eb9190613a36565b60306125f791906133f1565b60f81b81838151811061260d5761260c613a67565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126499190613a05565b94506125c7565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612736576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612771576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61277e60008583866126b3565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16127e36001851461297e565b901b60a042901b6127f3866126b9565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146128f7575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128a76000878480600101955087612309565b6128dd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106128385782600054146128f257600080fd5b612962565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106128f8575b81600081905550505061297860008583866126c3565b50505050565b6000819050919050565b82805461299490613174565b90600052602060002090601f0160209004810192826129b657600085556129fd565b82601f106129cf57805160ff19168380011785556129fd565b828001600101855582156129fd579182015b828111156129fc5782518255916020019190600101906129e1565b5b509050612a0a9190612a0e565b5090565b5b80821115612a27576000816000905550600101612a0f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a7481612a3f565b8114612a7f57600080fd5b50565b600081359050612a9181612a6b565b92915050565b600060208284031215612aad57612aac612a35565b5b6000612abb84828501612a82565b91505092915050565b60008115159050919050565b612ad981612ac4565b82525050565b6000602082019050612af46000830184612ad0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b34578082015181840152602081019050612b19565b83811115612b43576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b6582612afa565b612b6f8185612b05565b9350612b7f818560208601612b16565b612b8881612b49565b840191505092915050565b60006020820190508181036000830152612bad8184612b5a565b905092915050565b6000819050919050565b612bc881612bb5565b8114612bd357600080fd5b50565b600081359050612be581612bbf565b92915050565b600060208284031215612c0157612c00612a35565b5b6000612c0f84828501612bd6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4382612c18565b9050919050565b612c5381612c38565b82525050565b6000602082019050612c6e6000830184612c4a565b92915050565b612c7d81612c38565b8114612c8857600080fd5b50565b600081359050612c9a81612c74565b92915050565b60008060408385031215612cb757612cb6612a35565b5b6000612cc585828601612c8b565b9250506020612cd685828601612bd6565b9150509250929050565b612ce981612bb5565b82525050565b6000602082019050612d046000830184612ce0565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d4c82612b49565b810181811067ffffffffffffffff82111715612d6b57612d6a612d14565b5b80604052505050565b6000612d7e612a2b565b9050612d8a8282612d43565b919050565b600067ffffffffffffffff821115612daa57612da9612d14565b5b612db382612b49565b9050602081019050919050565b82818337600083830152505050565b6000612de2612ddd84612d8f565b612d74565b905082815260208101848484011115612dfe57612dfd612d0f565b5b612e09848285612dc0565b509392505050565b600082601f830112612e2657612e25612d0a565b5b8135612e36848260208601612dcf565b91505092915050565b600060208284031215612e5557612e54612a35565b5b600082013567ffffffffffffffff811115612e7357612e72612a3a565b5b612e7f84828501612e11565b91505092915050565b612e9181612ac4565b8114612e9c57600080fd5b50565b600081359050612eae81612e88565b92915050565b600060208284031215612eca57612ec9612a35565b5b6000612ed884828501612e9f565b91505092915050565b600080600060608486031215612efa57612ef9612a35565b5b6000612f0886828701612c8b565b9350506020612f1986828701612c8b565b9250506040612f2a86828701612bd6565b9150509250925092565b600060208284031215612f4a57612f49612a35565b5b6000612f5884828501612c8b565b91505092915050565b60008060408385031215612f7857612f77612a35565b5b6000612f8685828601612c8b565b9250506020612f9785828601612e9f565b9150509250929050565b600067ffffffffffffffff821115612fbc57612fbb612d14565b5b612fc582612b49565b9050602081019050919050565b6000612fe5612fe084612fa1565b612d74565b90508281526020810184848401111561300157613000612d0f565b5b61300c848285612dc0565b509392505050565b600082601f83011261302957613028612d0a565b5b8135613039848260208601612fd2565b91505092915050565b6000806000806080858703121561305c5761305b612a35565b5b600061306a87828801612c8b565b945050602061307b87828801612c8b565b935050604061308c87828801612bd6565b925050606085013567ffffffffffffffff8111156130ad576130ac612a3a565b5b6130b987828801613014565b91505092959194509250565b600080604083850312156130dc576130db612a35565b5b60006130ea85828601612c8b565b92505060206130fb85828601612c8b565b9150509250929050565b6000806040838503121561311c5761311b612a35565b5b600061312a85828601612bd6565b925050602061313b85828601612c8b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061318c57607f821691505b602082108114156131a05761319f613145565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131dc602083612b05565b91506131e7826131a6565b602082019050919050565b6000602082019050818103600083015261320b816131cf565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613248601f83612b05565b915061325382613212565b602082019050919050565b600060208201905081810360008301526132778161323b565b9050919050565b600081905092915050565b50565b600061329960008361327e565b91506132a482613289565b600082019050919050565b60006132ba8261328c565b9150819050919050565b7f4d696e74696e6720686173206e6f7420737461727465642e0000000000000000600082015250565b60006132fa601883612b05565b9150613305826132c4565b602082019050919050565b60006020820190508181036000830152613329816132ed565b9050919050565b7f596f752063616e206f6e6c79206d696e7420757020746f203330204e4654732060008201527f706572207472616e73616374696f6e2e00000000000000000000000000000000602082015250565b600061338c603083612b05565b915061339782613330565b604082019050919050565b600060208201905081810360008301526133bb8161337f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133fc82612bb5565b915061340783612bb5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561343c5761343b6133c2565b5b828201905092915050565b7f4e6f204e4654206c656674730000000000000000000000000000000000000000600082015250565b600061347d600c83612b05565b915061348882613447565b602082019050919050565b600060208201905081810360008301526134ac81613470565b9050919050565b7f4e6f20736d61727420636f6e7472616374206d696e74696e672e000000000000600082015250565b60006134e9601a83612b05565b91506134f4826134b3565b602082019050919050565b60006020820190508181036000830152613518816134dc565b9050919050565b600061352a82612bb5565b915061353583612bb5565b925082821015613548576135476133c2565b5b828203905092915050565b600061355e82612bb5565b915061356983612bb5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135a2576135a16133c2565b5b828202905092915050565b7f496e73756666696369656e742f696e636f72726563742066756e64732e000000600082015250565b60006135e3601d83612b05565b91506135ee826135ad565b602082019050919050565b60006020820190508181036000830152613612816135d6565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613675602f83612b05565b915061368082613619565b604082019050919050565b600060208201905081810360008301526136a481613668565b9050919050565b600081905092915050565b60006136c182612afa565b6136cb81856136ab565b93506136db818560208601612b16565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461370981613174565b61371381866136ab565b9450600182166000811461372e576001811461373f57613772565b60ff19831686528186019350613772565b613748856136e7565b60005b8381101561376a5781548189015260018201915060208101905061374b565b838801955050505b50505092915050565b600061378782866136b6565b915061379382856136b6565b915061379f82846136fc565b9150819050949350505050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006137e2601483612b05565b91506137ed826137ac565b602082019050919050565b60006020820190508181036000830152613811816137d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613874602683612b05565b915061387f82613818565b604082019050919050565b600060208201905081810360008301526138a381613867565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006138d1826138aa565b6138db81856138b5565b93506138eb818560208601612b16565b6138f481612b49565b840191505092915050565b60006080820190506139146000830187612c4a565b6139216020830186612c4a565b61392e6040830185612ce0565b818103606083015261394081846138c6565b905095945050505050565b60008151905061395a81612a6b565b92915050565b60006020828403121561397657613975612a35565b5b60006139848482850161394b565b91505092915050565b600061399882612bb5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139cb576139ca6133c2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a1082612bb5565b9150613a1b83612bb5565b925082613a2b57613a2a6139d6565b5b828204905092915050565b6000613a4182612bb5565b9150613a4c83612bb5565b925082613a5c57613a5b6139d6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212200b43a9e7102415ed4d091c1f2ad7bcb3c4c8717c964f20cb6a8addcd6b80fb4e64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f506978656c204372656174757265730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000650495843524500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656965726f366434666e6a6c373473776f6f747570757661737176716b6c686e6c6269326535776f346f366c623367617963727677712f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): Pixel Creatures
Arg [1] : _tokenSymbol (string): PIXCRE
Arg [2] : _hiddenMetadataUri (string): ipfs://bafybeiero6d4fnjl74swootupuvasqvqklhnlbi2e5wo4o6lb3gaycrvwq/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 506978656c204372656174757265730000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 5049584352450000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [8] : 697066733a2f2f6261667962656965726f366434666e6a6c373473776f6f7475
Arg [9] : 70757661737176716b6c686e6c6269326535776f346f366c6233676179637276
Arg [10] : 77712f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46662:3429:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16466:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21479:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23547:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23007:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46869:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49504:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49610:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15520:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24433:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49693:172;;;;;;;;;;;;;:::i;:::-;;24674:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48968:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49260:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47017:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46793:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47049:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46760:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21268:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17145:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2596:103;;;;;;;;;;;;;:::i;:::-;;49398:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46976:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1945:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21648:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48035:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23823:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46831:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24930:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48517:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46908:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49871:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49172:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24202:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49048:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48203:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2854:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46945:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16466:615;16551:4;16866:10;16851:25;;:11;:25;;;;:102;;;;16943:10;16928:25;;:11;:25;;;;16851:102;:179;;;;17020:10;17005:25;;:11;:25;;;;16851:179;16831:199;;16466:615;;;:::o;21479:100::-;21533:13;21566:5;21559:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21479:100;:::o;23547:204::-;23615:7;23640:16;23648:7;23640;:16::i;:::-;23635:64;;23665:34;;;;;;;;;;;;;;23635:64;23719:15;:24;23735:7;23719:24;;;;;;;;;;;;;;;;;;;;;23712:31;;23547:204;;;:::o;23007:474::-;23080:13;23112:27;23131:7;23112:18;:27::i;:::-;23080:61;;23162:5;23156:11;;:2;:11;;;23152:48;;;23176:24;;;;;;;;;;;;;;23152:48;23240:5;23217:28;;:19;:17;:19::i;:::-;:28;;;23213:175;;23265:44;23282:5;23289:19;:17;:19::i;:::-;23265:16;:44::i;:::-;23260:128;;23337:35;;;;;;;;;;;;;;23260:128;23213:175;23427:2;23400:15;:24;23416:7;23400:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23465:7;23461:2;23445:28;;23454:5;23445:28;;;;;;;;;;;;23069:412;23007:474;;:::o;46869:34::-;;;;:::o;49504:100::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49588:10:::1;49576:9;:22;;;;;;;;;;;;:::i;:::-;;49504:100:::0;:::o;49610:77::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49675:6:::1;49666;;:15;;;;;;;;;;;;;;;;;;49610:77:::0;:::o;15520:315::-;15573:7;15801:15;:13;:15::i;:::-;15786:12;;15770:13;;:28;:46;15763:53;;15520:315;:::o;24433:170::-;24567:28;24577:4;24583:2;24587:7;24567:9;:28::i;:::-;24433:170;;;:::o;49693:172::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45629:1:::1;46227:7;;:19;;46219:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45629:1;46360:7;:18;;;;49751::::2;49783:7;:5;:7::i;:::-;49775:21;;49804;49775:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49750:80;;;49845:13;49837:22;;;::::0;::::2;;49743:122;45585:1:::1;46539:7;:22;;;;49693:172::o:0;24674:185::-;24812:39;24829:4;24835:2;24839:7;24812:39;;;;;;;;;;;;:16;:39::i;:::-;24674:185;;;:::o;48968:74::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49031:5:::1;49024:4;:12;;;;48968:74:::0;:::o;49260:132::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49368:18:::1;49348:17;:38;;;;;;;;;;;;:::i;:::-;;49260:132:::0;:::o;47017:27::-;;;;;;;;;;;;;:::o;46793:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47049:25::-;;;;;;;;;;;;;:::o;46760:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21268:144::-;21332:7;21375:27;21394:7;21375:18;:27::i;:::-;21352:52;;21268:144;;;:::o;17145:224::-;17209:7;17250:1;17233:19;;:5;:19;;;17229:60;;;17261:28;;;;;;;;;;;;;;17229:60;12484:13;17307:18;:25;17326:5;17307:25;;;;;;;;;;;;;;;;:54;17300:61;;17145:224;;;:::o;2596:103::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2661:30:::1;2688:1;2661:18;:30::i;:::-;2596:103::o:0;49398:100::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49482:10:::1;49470:9;:22;;;;;;;;;;;;:::i;:::-;;49398:100:::0;:::o;46976:34::-;;;;:::o;1945:87::-;1991:7;2018:6;;;;;;;;;;;2011:13;;1945:87;:::o;21648:104::-;21704:13;21737:7;21730:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21648:104;:::o;48035:160::-;48100:11;47355:6;;;;;;;;;;;47354:7;47346:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;47419:1;47405:11;:15;:40;;;;;47439:6;;47424:11;:21;;47405:40;47397:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;47544:9;;47529:11;47513:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;47505:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;47598:10;47585:23;;:9;:23;;;47577:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48133:11:::1;47716:16;47780:15;;47753:24;47766:10;47753:12;:24::i;:::-;:42;47749:171;;;47806:21;47848:24;47861:10;47848:12;:24::i;:::-;47830:15;;:42;;;;:::i;:::-;47806:66;;47899:13;47892:4;;:20;;;;:::i;:::-;47881:31;;47797:123;47749:171;47973:8;47959:11;47952:4;;:18;;;;:::i;:::-;:29;;;;:::i;:::-;47939:9;:42;;47931:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;48153:36:::2;48163:12;:10;:12::i;:::-;48177:11;48153:9;:36::i;:::-;47709:320:::1;47646:1;48035:160:::0;;:::o;23823:308::-;23934:19;:17;:19::i;:::-;23922:31;;:8;:31;;;23918:61;;;23962:17;;;;;;;;;;;;;;23918:61;24044:8;23992:18;:39;24011:19;:17;:19::i;:::-;23992:39;;;;;;;;;;;;;;;:49;24032:8;23992:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;24104:8;24068:55;;24083:19;:17;:19::i;:::-;24068:55;;;24114:8;24068:55;;;;;;:::i;:::-;;;;;;;;23823:308;;:::o;46831:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24930:396::-;25097:28;25107:4;25113:2;25117:7;25097:9;:28::i;:::-;25158:1;25140:2;:14;;;:19;25136:183;;25179:56;25210:4;25216:2;25220:7;25229:5;25179:30;:56::i;:::-;25174:145;;25263:40;;;;;;;;;;;;;;25174:145;25136:183;24930:396;;;;:::o;48517:445::-;48591:13;48621:17;48629:8;48621:7;:17::i;:::-;48613:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48715:5;48703:17;;:8;;;;;;;;;;;:17;;;48699:64;;;48738:17;48731:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48699:64;48771:28;48802:10;:8;:10::i;:::-;48771:41;;48857:1;48832:14;48826:28;:32;:130;;;;;;;;;;;;;;;;;48894:14;48910:19;:8;:17;:19::i;:::-;48931:9;48877:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48826:130;48819:137;;;48517:445;;;;:::o;46908:32::-;;;;:::o;49871:107::-;49929:7;49952:20;49966:5;49952:13;:20::i;:::-;49945:27;;49871:107;;;:::o;49172:81::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49241:6:::1;49230:8;;:17;;;;;;;;;;;;;;;;;;49172:81:::0;:::o;24202:164::-;24299:4;24323:18;:25;24342:5;24323:25;;;;;;;;;;;;;;;:35;24349:8;24323:35;;;;;;;;;;;;;;;;;;;;;;;;;24316:42;;24202:164;;;;:::o;49048:118::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49144:16:::1;49126:15;:34;;;;49048:118:::0;:::o;48203:207::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48330:9:::1;;48315:11;48299:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;48291:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48371:33;48381:9;48392:11;48371:9;:33::i;:::-;48203:207:::0;;:::o;2854:201::-;2176:12;:10;:12::i;:::-;2165:23;;:7;:5;:7::i;:::-;:23;;;2157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2963:1:::1;2943:22;;:8;:22;;;;2935:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3019:28;3038:8;3019:18;:28::i;:::-;2854:201:::0;:::o;46945:26::-;;;;:::o;25581:273::-;25638:4;25694:7;25675:15;:13;:15::i;:::-;:26;;:66;;;;;25728:13;;25718:7;:23;25675:66;:152;;;;;25826:1;13254:8;25779:17;:26;25797:7;25779:26;;;;;;;;;;;;:43;:48;25675:152;25655:172;;25581:273;;;:::o;18783:1129::-;18850:7;18870:12;18885:7;18870:22;;18953:4;18934:15;:13;:15::i;:::-;:23;18930:915;;18987:13;;18980:4;:20;18976:869;;;19025:14;19042:17;:23;19060:4;19042:23;;;;;;;;;;;;19025:40;;19158:1;13254:8;19131:6;:23;:28;19127:699;;;19650:113;19667:1;19657:6;:11;19650:113;;;19710:17;:25;19728:6;;;;;;;19710:25;;;;;;;;;;;;19701:34;;19650:113;;;19796:6;19789:13;;;;;;19127:699;19002:843;18976:869;18930:915;19873:31;;;;;;;;;;;;;;18783:1129;;;;:::o;39563:105::-;39623:7;39650:10;39643:17;;39563:105;:::o;692:98::-;745:7;772:10;765:17;;692:98;:::o;48416:95::-;48481:7;48504:1;48497:8;;48416:95;:::o;30820:2515::-;30935:27;30965;30984:7;30965:18;:27::i;:::-;30935:57;;31050:4;31009:45;;31025:19;31009:45;;;31005:86;;31063:28;;;;;;;;;;;;;;31005:86;31104:22;31153:4;31130:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;31174:43;31191:4;31197:19;:17;:19::i;:::-;31174:16;:43::i;:::-;31130:87;:147;;;;31258:19;:17;:19::i;:::-;31234:43;;:20;31246:7;31234:11;:20::i;:::-;:43;;;31130:147;31104:174;;31296:17;31291:66;;31322:35;;;;;;;;;;;;;;31291:66;31386:1;31372:16;;:2;:16;;;31368:52;;;31397:23;;;;;;;;;;;;;;31368:52;31433:43;31455:4;31461:2;31465:7;31474:1;31433:21;:43::i;:::-;31549:15;:24;31565:7;31549:24;;;;;;;;;;;;31542:31;;;;;;;;;;;31941:18;:24;31960:4;31941:24;;;;;;;;;;;;;;;;31939:26;;;;;;;;;;;;32010:18;:22;32029:2;32010:22;;;;;;;;;;;;;;;;32008:24;;;;;;;;;;;13536:8;13138:3;32391:15;:41;;32349:21;32367:2;32349:17;:21::i;:::-;:84;:128;32303:17;:26;32321:7;32303:26;;;;;;;;;;;:174;;;;32647:1;13536:8;32597:19;:46;:51;32593:626;;;32669:19;32701:1;32691:7;:11;32669:33;;32858:1;32824:17;:30;32842:11;32824:30;;;;;;;;;;;;:35;32820:384;;;32962:13;;32947:11;:28;32943:242;;33142:19;33109:17;:30;33127:11;33109:30;;;;;;;;;;;:52;;;;32943:242;32820:384;32650:569;32593:626;33266:7;33262:2;33247:27;;33256:4;33247:27;;;;;;;;;;;;33285:42;33306:4;33312:2;33316:7;33325:1;33285:20;:42::i;:::-;30924:2411;;30820:2515;;;:::o;3215:191::-;3289:16;3308:6;;;;;;;;;;;3289:25;;3334:8;3325:6;;:17;;;;;;;;;;;;;;;;;;3389:8;3358:40;;3379:8;3358:40;;;;;;;;;;;;3278:128;3215:191;:::o;25938:104::-;26007:27;26017:2;26021:8;26007:27;;;;;;;;;;;;:9;:27::i;:::-;25938:104;;:::o;37032:716::-;37195:4;37241:2;37216:45;;;37262:19;:17;:19::i;:::-;37283:4;37289:7;37298:5;37216:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37212:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37516:1;37499:6;:13;:18;37495:235;;;37545:40;;;;;;;;;;;;;;37495:235;37688:6;37682:13;37673:6;37669:2;37665:15;37658:38;37212:529;37385:54;;;37375:64;;;:6;:64;;;;37368:71;;;37032:716;;;;;;:::o;49984:104::-;50044:13;50073:9;50066:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49984:104;:::o;42083:723::-;42139:13;42369:1;42360:5;:10;42356:53;;;42387:10;;;;;;;;;;;;;;;;;;;;;42356:53;42419:12;42434:5;42419:20;;42450:14;42475:78;42490:1;42482:4;:9;42475:78;;42508:8;;;;;:::i;:::-;;;;42539:2;42531:10;;;;;:::i;:::-;;;42475:78;;;42563:19;42595:6;42585:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42563:39;;42613:154;42629:1;42620:5;:10;42613:154;;42657:1;42647:11;;;;;:::i;:::-;;;42724:2;42716:5;:10;;;;:::i;:::-;42703:2;:24;;;;:::i;:::-;42690:39;;42673:6;42680;42673:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;42753:2;42744:11;;;;;:::i;:::-;;;42613:154;;;42791:6;42777:21;;;;;42083:723;;;;:::o;17451:176::-;17512:7;12484:13;12621:2;17540:18;:25;17559:5;17540:25;;;;;;;;;;;;;;;;:49;;17539:80;17532:87;;17451:176;;;:::o;38396:159::-;;;;;:::o;22568:148::-;22632:14;22693:5;22683:15;;22568:148;;;:::o;39214:158::-;;;;;:::o;26415:2236::-;26538:20;26561:13;;26538:36;;26603:1;26589:16;;:2;:16;;;26585:48;;;26614:19;;;;;;;;;;;;;;26585:48;26660:1;26648:8;:13;26644:44;;;26670:18;;;;;;;;;;;;;;26644:44;26701:61;26731:1;26735:2;26739:12;26753:8;26701:21;:61::i;:::-;27305:1;12621:2;27276:1;:25;;27275:31;27263:8;:44;27237:18;:22;27256:2;27237:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;13401:3;27706:29;27733:1;27721:8;:13;27706:14;:29::i;:::-;:56;;13138:3;27643:15;:41;;27601:21;27619:2;27601:17;:21::i;:::-;:84;:162;27550:17;:31;27568:12;27550:31;;;;;;;;;;;:213;;;;27780:20;27803:12;27780:35;;27830:11;27859:8;27844:12;:23;27830:37;;27906:1;27888:2;:14;;;:19;27884:635;;27928:313;27984:12;27980:2;27959:38;;27976:1;27959:38;;;;;;;;;;;;28025:69;28064:1;28068:2;28072:14;;;;;;28088:5;28025:30;:69::i;:::-;28020:174;;28130:40;;;;;;;;;;;;;;28020:174;28236:3;28221:12;:18;27928:313;;28322:12;28305:13;;:29;28301:43;;28336:8;;;28301:43;27884:635;;;28385:119;28441:14;;;;;;28437:2;28416:40;;28433:1;28416:40;;;;;;;;;;;;28499:3;28484:12;:18;28385:119;;27884:635;28549:12;28533:13;:28;;;;27014:1559;;28583:60;28612:1;28616:2;28620:12;28634:8;28583:20;:60::i;:::-;26527:2124;26415:2236;;;:::o;22803:142::-;22861:14;22922:5;22912:15;;22803:142;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:117::-;5399:1;5396;5389:12;5413:117;5522:1;5519;5512:12;5536:180;5584:77;5581:1;5574:88;5681:4;5678:1;5671:15;5705:4;5702:1;5695:15;5722:281;5805:27;5827:4;5805:27;:::i;:::-;5797:6;5793:40;5935:6;5923:10;5920:22;5899:18;5887:10;5884:34;5881:62;5878:88;;;5946:18;;:::i;:::-;5878:88;5986:10;5982:2;5975:22;5765:238;5722:281;;:::o;6009:129::-;6043:6;6070:20;;:::i;:::-;6060:30;;6099:33;6127:4;6119:6;6099:33;:::i;:::-;6009:129;;;:::o;6144:308::-;6206:4;6296:18;6288:6;6285:30;6282:56;;;6318:18;;:::i;:::-;6282:56;6356:29;6378:6;6356:29;:::i;:::-;6348:37;;6440:4;6434;6430:15;6422:23;;6144:308;;;:::o;6458:154::-;6542:6;6537:3;6532;6519:30;6604:1;6595:6;6590:3;6586:16;6579:27;6458:154;;;:::o;6618:412::-;6696:5;6721:66;6737:49;6779:6;6737:49;:::i;:::-;6721:66;:::i;:::-;6712:75;;6810:6;6803:5;6796:21;6848:4;6841:5;6837:16;6886:3;6877:6;6872:3;6868:16;6865:25;6862:112;;;6893:79;;:::i;:::-;6862:112;6983:41;7017:6;7012:3;7007;6983:41;:::i;:::-;6702:328;6618:412;;;;;:::o;7050:340::-;7106:5;7155:3;7148:4;7140:6;7136:17;7132:27;7122:122;;7163:79;;:::i;:::-;7122:122;7280:6;7267:20;7305:79;7380:3;7372:6;7365:4;7357:6;7353:17;7305:79;:::i;:::-;7296:88;;7112:278;7050:340;;;;:::o;7396:509::-;7465:6;7514:2;7502:9;7493:7;7489:23;7485:32;7482:119;;;7520:79;;:::i;:::-;7482:119;7668:1;7657:9;7653:17;7640:31;7698:18;7690:6;7687:30;7684:117;;;7720:79;;:::i;:::-;7684:117;7825:63;7880:7;7871:6;7860:9;7856:22;7825:63;:::i;:::-;7815:73;;7611:287;7396:509;;;;:::o;7911:116::-;7981:21;7996:5;7981:21;:::i;:::-;7974:5;7971:32;7961:60;;8017:1;8014;8007:12;7961:60;7911:116;:::o;8033:133::-;8076:5;8114:6;8101:20;8092:29;;8130:30;8154:5;8130:30;:::i;:::-;8033:133;;;;:::o;8172:323::-;8228:6;8277:2;8265:9;8256:7;8252:23;8248:32;8245:119;;;8283:79;;:::i;:::-;8245:119;8403:1;8428:50;8470:7;8461:6;8450:9;8446:22;8428:50;:::i;:::-;8418:60;;8374:114;8172:323;;;;:::o;8501:619::-;8578:6;8586;8594;8643:2;8631:9;8622:7;8618:23;8614:32;8611:119;;;8649:79;;:::i;:::-;8611:119;8769:1;8794:53;8839:7;8830:6;8819:9;8815:22;8794:53;:::i;:::-;8784:63;;8740:117;8896:2;8922:53;8967:7;8958:6;8947:9;8943:22;8922:53;:::i;:::-;8912:63;;8867:118;9024:2;9050:53;9095:7;9086:6;9075:9;9071:22;9050:53;:::i;:::-;9040:63;;8995:118;8501:619;;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:474::-;12038:6;12046;12095:2;12083:9;12074:7;12070:23;12066:32;12063:119;;;12101:79;;:::i;:::-;12063:119;12221:1;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12192:117;12348:2;12374:53;12419:7;12410:6;12399:9;12395:22;12374:53;:::i;:::-;12364:63;;12319:118;11970:474;;;;;:::o;12450:::-;12518:6;12526;12575:2;12563:9;12554:7;12550:23;12546:32;12543:119;;;12581:79;;:::i;:::-;12543:119;12701:1;12726:53;12771:7;12762:6;12751:9;12747:22;12726:53;:::i;:::-;12716:63;;12672:117;12828:2;12854:53;12899:7;12890:6;12879:9;12875:22;12854:53;:::i;:::-;12844:63;;12799:118;12450:474;;;;;:::o;12930:180::-;12978:77;12975:1;12968:88;13075:4;13072:1;13065:15;13099:4;13096:1;13089:15;13116:320;13160:6;13197:1;13191:4;13187:12;13177:22;;13244:1;13238:4;13234:12;13265:18;13255:81;;13321:4;13313:6;13309:17;13299:27;;13255:81;13383:2;13375:6;13372:14;13352:18;13349:38;13346:84;;;13402:18;;:::i;:::-;13346:84;13167:269;13116:320;;;:::o;13442:182::-;13582:34;13578:1;13570:6;13566:14;13559:58;13442:182;:::o;13630:366::-;13772:3;13793:67;13857:2;13852:3;13793:67;:::i;:::-;13786:74;;13869:93;13958:3;13869:93;:::i;:::-;13987:2;13982:3;13978:12;13971:19;;13630:366;;;:::o;14002:419::-;14168:4;14206:2;14195:9;14191:18;14183:26;;14255:9;14249:4;14245:20;14241:1;14230:9;14226:17;14219:47;14283:131;14409:4;14283:131;:::i;:::-;14275:139;;14002:419;;;:::o;14427:181::-;14567:33;14563:1;14555:6;14551:14;14544:57;14427:181;:::o;14614:366::-;14756:3;14777:67;14841:2;14836:3;14777:67;:::i;:::-;14770:74;;14853:93;14942:3;14853:93;:::i;:::-;14971:2;14966:3;14962:12;14955:19;;14614:366;;;:::o;14986:419::-;15152:4;15190:2;15179:9;15175:18;15167:26;;15239:9;15233:4;15229:20;15225:1;15214:9;15210:17;15203:47;15267:131;15393:4;15267:131;:::i;:::-;15259:139;;14986:419;;;:::o;15411:147::-;15512:11;15549:3;15534:18;;15411:147;;;;:::o;15564:114::-;;:::o;15684:398::-;15843:3;15864:83;15945:1;15940:3;15864:83;:::i;:::-;15857:90;;15956:93;16045:3;15956:93;:::i;:::-;16074:1;16069:3;16065:11;16058:18;;15684:398;;;:::o;16088:379::-;16272:3;16294:147;16437:3;16294:147;:::i;:::-;16287:154;;16458:3;16451:10;;16088:379;;;:::o;16473:174::-;16613:26;16609:1;16601:6;16597:14;16590:50;16473:174;:::o;16653:366::-;16795:3;16816:67;16880:2;16875:3;16816:67;:::i;:::-;16809:74;;16892:93;16981:3;16892:93;:::i;:::-;17010:2;17005:3;17001:12;16994:19;;16653:366;;;:::o;17025:419::-;17191:4;17229:2;17218:9;17214:18;17206:26;;17278:9;17272:4;17268:20;17264:1;17253:9;17249:17;17242:47;17306:131;17432:4;17306:131;:::i;:::-;17298:139;;17025:419;;;:::o;17450:235::-;17590:34;17586:1;17578:6;17574:14;17567:58;17659:18;17654:2;17646:6;17642:15;17635:43;17450:235;:::o;17691:366::-;17833:3;17854:67;17918:2;17913:3;17854:67;:::i;:::-;17847:74;;17930:93;18019:3;17930:93;:::i;:::-;18048:2;18043:3;18039:12;18032:19;;17691:366;;;:::o;18063:419::-;18229:4;18267:2;18256:9;18252:18;18244:26;;18316:9;18310:4;18306:20;18302:1;18291:9;18287:17;18280:47;18344:131;18470:4;18344:131;:::i;:::-;18336:139;;18063:419;;;:::o;18488:180::-;18536:77;18533:1;18526:88;18633:4;18630:1;18623:15;18657:4;18654:1;18647:15;18674:305;18714:3;18733:20;18751:1;18733:20;:::i;:::-;18728:25;;18767:20;18785:1;18767:20;:::i;:::-;18762:25;;18921:1;18853:66;18849:74;18846:1;18843:81;18840:107;;;18927:18;;:::i;:::-;18840:107;18971:1;18968;18964:9;18957:16;;18674:305;;;;:::o;18985:162::-;19125:14;19121:1;19113:6;19109:14;19102:38;18985:162;:::o;19153:366::-;19295:3;19316:67;19380:2;19375:3;19316:67;:::i;:::-;19309:74;;19392:93;19481:3;19392:93;:::i;:::-;19510:2;19505:3;19501:12;19494:19;;19153:366;;;:::o;19525:419::-;19691:4;19729:2;19718:9;19714:18;19706:26;;19778:9;19772:4;19768:20;19764:1;19753:9;19749:17;19742:47;19806:131;19932:4;19806:131;:::i;:::-;19798:139;;19525:419;;;:::o;19950:176::-;20090:28;20086:1;20078:6;20074:14;20067:52;19950:176;:::o;20132:366::-;20274:3;20295:67;20359:2;20354:3;20295:67;:::i;:::-;20288:74;;20371:93;20460:3;20371:93;:::i;:::-;20489:2;20484:3;20480:12;20473:19;;20132:366;;;:::o;20504:419::-;20670:4;20708:2;20697:9;20693:18;20685:26;;20757:9;20751:4;20747:20;20743:1;20732:9;20728:17;20721:47;20785:131;20911:4;20785:131;:::i;:::-;20777:139;;20504:419;;;:::o;20929:191::-;20969:4;20989:20;21007:1;20989:20;:::i;:::-;20984:25;;21023:20;21041:1;21023:20;:::i;:::-;21018:25;;21062:1;21059;21056:8;21053:34;;;21067:18;;:::i;:::-;21053:34;21112:1;21109;21105:9;21097:17;;20929:191;;;;:::o;21126:348::-;21166:7;21189:20;21207:1;21189:20;:::i;:::-;21184:25;;21223:20;21241:1;21223:20;:::i;:::-;21218:25;;21411:1;21343:66;21339:74;21336:1;21333:81;21328:1;21321:9;21314:17;21310:105;21307:131;;;21418:18;;:::i;:::-;21307:131;21466:1;21463;21459:9;21448:20;;21126:348;;;;:::o;21480:179::-;21620:31;21616:1;21608:6;21604:14;21597:55;21480:179;:::o;21665:366::-;21807:3;21828:67;21892:2;21887:3;21828:67;:::i;:::-;21821:74;;21904:93;21993:3;21904:93;:::i;:::-;22022:2;22017:3;22013:12;22006:19;;21665:366;;;:::o;22037:419::-;22203:4;22241:2;22230:9;22226:18;22218:26;;22290:9;22284:4;22280:20;22276:1;22265:9;22261:17;22254:47;22318:131;22444:4;22318:131;:::i;:::-;22310:139;;22037:419;;;:::o;22462:234::-;22602:34;22598:1;22590:6;22586:14;22579:58;22671:17;22666:2;22658:6;22654:15;22647:42;22462:234;:::o;22702:366::-;22844:3;22865:67;22929:2;22924:3;22865:67;:::i;:::-;22858:74;;22941:93;23030:3;22941:93;:::i;:::-;23059:2;23054:3;23050:12;23043:19;;22702:366;;;:::o;23074:419::-;23240:4;23278:2;23267:9;23263:18;23255:26;;23327:9;23321:4;23317:20;23313:1;23302:9;23298:17;23291:47;23355:131;23481:4;23355:131;:::i;:::-;23347:139;;23074:419;;;:::o;23499:148::-;23601:11;23638:3;23623:18;;23499:148;;;;:::o;23653:377::-;23759:3;23787:39;23820:5;23787:39;:::i;:::-;23842:89;23924:6;23919:3;23842:89;:::i;:::-;23835:96;;23940:52;23985:6;23980:3;23973:4;23966:5;23962:16;23940:52;:::i;:::-;24017:6;24012:3;24008:16;24001:23;;23763:267;23653:377;;;;:::o;24036:141::-;24085:4;24108:3;24100:11;;24131:3;24128:1;24121:14;24165:4;24162:1;24152:18;24144:26;;24036:141;;;:::o;24207:845::-;24310:3;24347:5;24341:12;24376:36;24402:9;24376:36;:::i;:::-;24428:89;24510:6;24505:3;24428:89;:::i;:::-;24421:96;;24548:1;24537:9;24533:17;24564:1;24559:137;;;;24710:1;24705:341;;;;24526:520;;24559:137;24643:4;24639:9;24628;24624:25;24619:3;24612:38;24679:6;24674:3;24670:16;24663:23;;24559:137;;24705:341;24772:38;24804:5;24772:38;:::i;:::-;24832:1;24846:154;24860:6;24857:1;24854:13;24846:154;;;24934:7;24928:14;24924:1;24919:3;24915:11;24908:35;24984:1;24975:7;24971:15;24960:26;;24882:4;24879:1;24875:12;24870:17;;24846:154;;;25029:6;25024:3;25020:16;25013:23;;24712:334;;24526:520;;24314:738;;24207:845;;;;:::o;25058:589::-;25283:3;25305:95;25396:3;25387:6;25305:95;:::i;:::-;25298:102;;25417:95;25508:3;25499:6;25417:95;:::i;:::-;25410:102;;25529:92;25617:3;25608:6;25529:92;:::i;:::-;25522:99;;25638:3;25631:10;;25058:589;;;;;;:::o;25653:170::-;25793:22;25789:1;25781:6;25777:14;25770:46;25653:170;:::o;25829:366::-;25971:3;25992:67;26056:2;26051:3;25992:67;:::i;:::-;25985:74;;26068:93;26157:3;26068:93;:::i;:::-;26186:2;26181:3;26177:12;26170:19;;25829:366;;;:::o;26201:419::-;26367:4;26405:2;26394:9;26390:18;26382:26;;26454:9;26448:4;26444:20;26440:1;26429:9;26425:17;26418:47;26482:131;26608:4;26482:131;:::i;:::-;26474:139;;26201:419;;;:::o;26626:225::-;26766:34;26762:1;26754:6;26750:14;26743:58;26835:8;26830:2;26822:6;26818:15;26811:33;26626:225;:::o;26857:366::-;26999:3;27020:67;27084:2;27079:3;27020:67;:::i;:::-;27013:74;;27096:93;27185:3;27096:93;:::i;:::-;27214:2;27209:3;27205:12;27198:19;;26857:366;;;:::o;27229:419::-;27395:4;27433:2;27422:9;27418:18;27410:26;;27482:9;27476:4;27472:20;27468:1;27457:9;27453:17;27446:47;27510:131;27636:4;27510:131;:::i;:::-;27502:139;;27229:419;;;:::o;27654:98::-;27705:6;27739:5;27733:12;27723:22;;27654:98;;;:::o;27758:168::-;27841:11;27875:6;27870:3;27863:19;27915:4;27910:3;27906:14;27891:29;;27758:168;;;;:::o;27932:360::-;28018:3;28046:38;28078:5;28046:38;:::i;:::-;28100:70;28163:6;28158:3;28100:70;:::i;:::-;28093:77;;28179:52;28224:6;28219:3;28212:4;28205:5;28201:16;28179:52;:::i;:::-;28256:29;28278:6;28256:29;:::i;:::-;28251:3;28247:39;28240:46;;28022:270;27932:360;;;;:::o;28298:640::-;28493:4;28531:3;28520:9;28516:19;28508:27;;28545:71;28613:1;28602:9;28598:17;28589:6;28545:71;:::i;:::-;28626:72;28694:2;28683:9;28679:18;28670:6;28626:72;:::i;:::-;28708;28776:2;28765:9;28761:18;28752:6;28708:72;:::i;:::-;28827:9;28821:4;28817:20;28812:2;28801:9;28797:18;28790:48;28855:76;28926:4;28917:6;28855:76;:::i;:::-;28847:84;;28298:640;;;;;;;:::o;28944:141::-;29000:5;29031:6;29025:13;29016:22;;29047:32;29073:5;29047:32;:::i;:::-;28944:141;;;;:::o;29091:349::-;29160:6;29209:2;29197:9;29188:7;29184:23;29180:32;29177:119;;;29215:79;;:::i;:::-;29177:119;29335:1;29360:63;29415:7;29406:6;29395:9;29391:22;29360:63;:::i;:::-;29350:73;;29306:127;29091:349;;;;:::o;29446:233::-;29485:3;29508:24;29526:5;29508:24;:::i;:::-;29499:33;;29554:66;29547:5;29544:77;29541:103;;;29624:18;;:::i;:::-;29541:103;29671:1;29664:5;29660:13;29653:20;;29446:233;;;:::o;29685:180::-;29733:77;29730:1;29723:88;29830:4;29827:1;29820:15;29854:4;29851:1;29844:15;29871:185;29911:1;29928:20;29946:1;29928:20;:::i;:::-;29923:25;;29962:20;29980:1;29962:20;:::i;:::-;29957:25;;30001:1;29991:35;;30006:18;;:::i;:::-;29991:35;30048:1;30045;30041:9;30036:14;;29871:185;;;;:::o;30062:176::-;30094:1;30111:20;30129:1;30111:20;:::i;:::-;30106:25;;30145:20;30163:1;30145:20;:::i;:::-;30140:25;;30184:1;30174:35;;30189:18;;:::i;:::-;30174:35;30230:1;30227;30223:9;30218:14;;30062:176;;;;:::o;30244:180::-;30292:77;30289:1;30282:88;30389:4;30386:1;30379:15;30413:4;30410:1;30403:15
Swarm Source
ipfs://0b43a9e7102415ed4d091c1f2ad7bcb3c4c8717c964f20cb6a8addcd6b80fb4e
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.