Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 65 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 19305443 | 313 days ago | IN | 0 ETH | 0.0009554 | ||||
Set Approval For... | 16267988 | 739 days ago | IN | 0 ETH | 0.00057358 | ||||
Set Approval For... | 15757623 | 811 days ago | IN | 0 ETH | 0.00064601 | ||||
Mint | 15312573 | 877 days ago | IN | 0 ETH | 0.00149286 | ||||
Set Approval For... | 15145015 | 904 days ago | IN | 0 ETH | 0.00096226 | ||||
Set Approval For... | 15111951 | 909 days ago | IN | 0 ETH | 0.00061617 | ||||
Set Approval For... | 15039060 | 920 days ago | IN | 0 ETH | 0.00149491 | ||||
Set Approval For... | 15037813 | 921 days ago | IN | 0 ETH | 0.00139388 | ||||
Mint | 15035708 | 921 days ago | IN | 0 ETH | 0.00488469 | ||||
Mint | 15035704 | 921 days ago | IN | 0 ETH | 0.00541478 | ||||
Set Approval For... | 15035509 | 921 days ago | IN | 0 ETH | 0.00551475 | ||||
Mint | 15035452 | 921 days ago | IN | 0 ETH | 0.00948693 | ||||
Mint | 15035426 | 921 days ago | IN | 0 ETH | 0.00707984 | ||||
Mint | 15035421 | 921 days ago | IN | 0 ETH | 0.00564024 | ||||
Mint | 15035420 | 921 days ago | IN | 0 ETH | 0.00550689 | ||||
Mint | 15035415 | 921 days ago | IN | 0 ETH | 0.00522686 | ||||
Mint | 15035414 | 921 days ago | IN | 0 ETH | 0.00567154 | ||||
Mint | 15035409 | 921 days ago | IN | 0 ETH | 0.00659532 | ||||
Set Approval For... | 15035402 | 921 days ago | IN | 0 ETH | 0.00357317 | ||||
Mint | 15035396 | 921 days ago | IN | 0 ETH | 0.00543299 | ||||
Mint | 15035395 | 921 days ago | IN | 0 ETH | 0.00461276 | ||||
Mint | 15035394 | 921 days ago | IN | 0 ETH | 0.00532595 | ||||
Set Approval For... | 15035379 | 921 days ago | IN | 0 ETH | 0.00371392 | ||||
Mint | 15035304 | 921 days ago | IN | 0 ETH | 0.01024623 | ||||
Set Approval For... | 15035304 | 921 days ago | IN | 0 ETH | 0.00532403 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UndefinedOnes
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-27 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/IERC721A.sol // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/ERC721A.sol // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (_addressToUint256(owner) == 0) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux } packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed; } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP); ownership.burned = packed & BITMASK_BURNED != 0; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (_addressToUint256(to) == 0) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.code.length != 0) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (_addressToUint256(to) == 0) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); address approvedAddress = _tokenApprovals[tokenId]; bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || approvedAddress == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (_addressToUint256(to) == 0) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. if (_addressToUint256(approvedAddress) != 0) { delete _tokenApprovals[tokenId]; } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); address approvedAddress = _tokenApprovals[tokenId]; if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || approvedAddress == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. if (_addressToUint256(approvedAddress) != 0) { delete _tokenApprovals[tokenId]; } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } } // File: contracts/UndefinedOnes.sol pragma solidity ^0.8.4; contract UndefinedOnes is ERC721A, Ownable { using Strings for uint256; string private baseURI; string public baseExtension = ".json"; uint256 public maxSupply = 10000; uint256 public maxMintOneTime = 5; struct SaleConfig { uint32 freeMintCount; uint64 publicSalePriceWei; uint256 saleStartingTime; } SaleConfig public saleConfig = SaleConfig( 2000, 0.02 ether, 1656345600 ); constructor( string memory _initBaseURI ) ERC721A("UndefinedOnes","UO") { setBaseURI(_initBaseURI); _safeMint(msg.sender,1); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(block.timestamp > saleConfig.saleStartingTime,"sales not start."); require(_mintAmount > 0,"mint amount greater than zero."); require(_mintAmount <= maxMintOneTime,"can not mint this many one time"); uint256 freeMintCount = saleConfig.freeMintCount; if(supply < freeMintCount){ require(supply <= saleConfig.freeMintCount,"free mint not enough"); _safeMint(_to,_mintAmount); }else{ uint256 publicSalePriceWei = saleConfig.publicSalePriceWei; require(supply + _mintAmount <= maxSupply,"reached max supply"); require(msg.value >= _mintAmount * publicSalePriceWei,"not enough money"); _safeMint(_to,_mintAmount); } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setStartingTime(uint256 _saleStartingTime) public onlyOwner { saleConfig.saleStartingTime = _saleStartingTime; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintOneTime","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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleConfig","outputs":[{"internalType":"uint32","name":"freeMintCount","type":"uint32"},{"internalType":"uint64","name":"publicSalePriceWei","type":"uint64"},{"internalType":"uint256","name":"saleStartingTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_saleStartingTime","type":"uint256"}],"name":"setStartingTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a9080519060200190620000519291906200085e565b50612710600b556005600c5560405180606001604052806107d063ffffffff16815260200166470de4df82000067ffffffffffffffff1681526020016362b9d400815250600d60008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151816001015550503480156200010657600080fd5b5060405162003fa938038062003fa983398181016040528101906200012c9190620009d5565b6040518060400160405280600d81526020017f556e646566696e65644f6e6573000000000000000000000000000000000000008152506040518060400160405280600281526020017f554f0000000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001b09291906200085e565b508060039080519060200190620001c99291906200085e565b50620001da6200022d60201b60201c565b600081905550505062000202620001f66200023260201b60201c565b6200023a60201b60201c565b62000213816200030060201b60201c565b62000226336001620003ab60201b60201c565b5062000d84565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003106200023260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000336620003d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200038f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003869062000b04565b60405180910390fd5b8060099080519060200190620003a79291906200085e565b5050565b620003cd828260405180602001604052806000815250620003fb60201b60201c565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054905060006200041485620006c460201b60201c565b14156200044d576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141562000489576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200049e6000858386620006ce60201b60201c565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16200050b60018514620006d460201b60201c565b901b60a042901b6200052386620006c460201b60201c565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b1462000634575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620005e06000878480600101955087620006de60201b60201c565b62000617576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210620005695782600054146200062e57600080fd5b620006a0565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821062000635575b816000819055505050620006be60008583866200085060201b60201c565b50505050565b6000819050919050565b50505050565b6000819050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200070c6200085660201b60201c565b8786866040518563ffffffff1660e01b815260040162000730949392919062000ab0565b602060405180830381600087803b1580156200074b57600080fd5b505af19250505080156200077f57506040513d601f19601f820116820180604052508101906200077c9190620009a3565b60015b620007fd573d8060008114620007b2576040519150601f19603f3d011682016040523d82523d6000602084013e620007b7565b606091505b50600081511415620007f5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b600033905090565b8280546200086c9062000c52565b90600052602060002090601f016020900481019282620008905760008555620008dc565b82601f10620008ab57805160ff1916838001178555620008dc565b82800160010185558215620008dc579182015b82811115620008db578251825591602001919060010190620008be565b5b509050620008eb9190620008ef565b5090565b5b808211156200090a576000816000905550600101620008f0565b5090565b6000620009256200091f8462000b4f565b62000b26565b90508281526020810184848401111562000944576200094362000d21565b5b6200095184828562000c1c565b509392505050565b6000815190506200096a8162000d6a565b92915050565b600082601f83011262000988576200098762000d1c565b5b81516200099a8482602086016200090e565b91505092915050565b600060208284031215620009bc57620009bb62000d2b565b5b6000620009cc8482850162000959565b91505092915050565b600060208284031215620009ee57620009ed62000d2b565b5b600082015167ffffffffffffffff81111562000a0f5762000a0e62000d26565b5b62000a1d8482850162000970565b91505092915050565b62000a318162000bb2565b82525050565b600062000a448262000b85565b62000a50818562000b90565b935062000a6281856020860162000c1c565b62000a6d8162000d30565b840191505092915050565b600062000a8760208362000ba1565b915062000a948262000d41565b602082019050919050565b62000aaa8162000c12565b82525050565b600060808201905062000ac7600083018762000a26565b62000ad6602083018662000a26565b62000ae5604083018562000a9f565b818103606083015262000af9818462000a37565b905095945050505050565b6000602082019050818103600083015262000b1f8162000a78565b9050919050565b600062000b3262000b45565b905062000b40828262000c88565b919050565b6000604051905090565b600067ffffffffffffffff82111562000b6d5762000b6c62000ced565b5b62000b788262000d30565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000bbf8262000bf2565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000c3c57808201518184015260208101905062000c1f565b8381111562000c4c576000848401525b50505050565b6000600282049050600182168062000c6b57607f821691505b6020821081141562000c825762000c8162000cbe565b5b50919050565b62000c938262000d30565b810181811067ffffffffffffffff8211171562000cb55762000cb462000ced565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000d758162000bc6565b811462000d8157600080fd5b50565b6132158062000d946000396000f3fe6080604052600436106101815760003560e01c8063715018a6116100d1578063c66828621161008a578063da3ef23f11610064578063da3ef23f14610542578063e985e9c51461056b578063f2840c48146105a8578063f2fde38b146105d357610181565b8063c6682862146104af578063c87b56dd146104da578063d5abeb011461051757610181565b8063715018a6146103c35780638da5cb5b146103da57806390aa0b0f1461040557806395d89b4114610432578063a22cb4651461045d578063b88d4fde1461048657610181565b80633ccfd60b1161013e57806342842e0e1161011857806342842e0e146102f757806355f804b3146103205780636352211e1461034957806370a082311461038657610181565b80633ccfd60b146102a85780633f52e589146102b257806340c10f19146102db57610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b57806318160ddd1461025457806323b872dd1461027f575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612506565b6105fc565b6040516101ba919061294e565b60405180910390f35b3480156101cf57600080fd5b506101d861068e565b6040516101e59190612969565b60405180910390f35b3480156101fa57600080fd5b50610215600480360381019061021091906125a9565b610720565b60405161022291906128e7565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d91906124c6565b61079c565b005b34801561026057600080fd5b50610269610943565b6040516102769190612aab565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a191906123b0565b61095a565b005b6102b061096a565b005b3480156102be57600080fd5b506102d960048036038101906102d491906125a9565b610a66565b005b6102f560048036038101906102f091906124c6565b610aef565b005b34801561030357600080fd5b5061031e600480360381019061031991906123b0565b610d37565b005b34801561032c57600080fd5b5061034760048036038101906103429190612560565b610d57565b005b34801561035557600080fd5b50610370600480360381019061036b91906125a9565b610ded565b60405161037d91906128e7565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612343565b610dff565b6040516103ba9190612aab565b60405180910390f35b3480156103cf57600080fd5b506103d8610e94565b005b3480156103e657600080fd5b506103ef610f1c565b6040516103fc91906128e7565b60405180910390f35b34801561041157600080fd5b5061041a610f46565b60405161042993929190612ac6565b60405180910390f35b34801561043e57600080fd5b50610447610f82565b6040516104549190612969565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190612486565b611014565b005b34801561049257600080fd5b506104ad60048036038101906104a89190612403565b61118c565b005b3480156104bb57600080fd5b506104c46111ff565b6040516104d19190612969565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906125a9565b61128d565b60405161050e9190612969565b60405180910390f35b34801561052357600080fd5b5061052c611337565b6040516105399190612aab565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190612560565b61133d565b005b34801561057757600080fd5b50610592600480360381019061058d9190612370565b6113d3565b60405161059f919061294e565b60405180910390f35b3480156105b457600080fd5b506105bd611467565b6040516105ca9190612aab565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190612343565b61146d565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065757506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106875750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461069d90612dd6565b80601f01602080910402602001604051908101604052809291908181526020018280546106c990612dd6565b80156107165780601f106106eb57610100808354040283529160200191610716565b820191906000526020600020905b8154815290600101906020018083116106f957829003601f168201915b5050505050905090565b600061072b82611565565b610761576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a7826115c4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561080f576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661082e611692565b73ffffffffffffffffffffffffffffffffffffffff16146108915761085a81610855611692565b6113d3565b610890576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061094d61169a565b6001546000540303905090565b61096583838361169f565b505050565b610972611a67565b73ffffffffffffffffffffffffffffffffffffffff16610990610f1c565b73ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd906129eb565b60405180910390fd5b60006109f0610f1c565b73ffffffffffffffffffffffffffffffffffffffff1647604051610a13906128d2565b60006040518083038185875af1925050503d8060008114610a50576040519150601f19603f3d011682016040523d82523d6000602084013e610a55565b606091505b5050905080610a6357600080fd5b50565b610a6e611a67565b73ffffffffffffffffffffffffffffffffffffffff16610a8c610f1c565b73ffffffffffffffffffffffffffffffffffffffff1614610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad9906129eb565b60405180910390fd5b80600d6001018190555050565b6000610af9610943565b9050600d600101544211610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990612a4b565b60405180910390fd5b60008211610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90612a6b565b60405180910390fd5b600c54821115610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc19061298b565b60405180910390fd5b6000600d60000160009054906101000a900463ffffffff1663ffffffff16905080821015610c5f57600d60000160009054906101000a900463ffffffff1663ffffffff16821115610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790612a8b565b60405180910390fd5b610c5a8484611a6f565b610d31565b6000600d60000160049054906101000a900467ffffffffffffffff1667ffffffffffffffff169050600b548484610c969190612be7565b1115610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce906129cb565b60405180910390fd5b8084610ce39190612c6e565b341015610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90612a2b565b60405180910390fd5b610d2f8585611a6f565b505b50505050565b610d528383836040518060200160405280600081525061118c565b505050565b610d5f611a67565b73ffffffffffffffffffffffffffffffffffffffff16610d7d610f1c565b73ffffffffffffffffffffffffffffffffffffffff1614610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca906129eb565b60405180910390fd5b8060099080519060200190610de9929190612157565b5050565b6000610df8826115c4565b9050919050565b600080610e0b83611a8d565b1415610e43576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610e9c611a67565b73ffffffffffffffffffffffffffffffffffffffff16610eba610f1c565b73ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906129eb565b60405180910390fd5b610f1a6000611a97565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d8060000160009054906101000a900463ffffffff16908060000160049054906101000a900467ffffffffffffffff16908060010154905083565b606060038054610f9190612dd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbd90612dd6565b801561100a5780601f10610fdf5761010080835404028352916020019161100a565b820191906000526020600020905b815481529060010190602001808311610fed57829003601f168201915b5050505050905090565b61101c611692565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611081576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061108e611692565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661113b611692565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611180919061294e565b60405180910390a35050565b61119784848461169f565b60008373ffffffffffffffffffffffffffffffffffffffff163b146111f9576111c284848484611b5d565b6111f8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600a805461120c90612dd6565b80601f016020809104026020016040519081016040528092919081815260200182805461123890612dd6565b80156112855780601f1061125a57610100808354040283529160200191611285565b820191906000526020600020905b81548152906001019060200180831161126857829003601f168201915b505050505081565b606061129882611565565b6112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90612a0b565b60405180910390fd5b60006112e1611cbd565b90506000815111611301576040518060200160405280600081525061132f565b8061130b84611d4f565b600a60405160200161131f939291906128a1565b6040516020818303038152906040525b915050919050565b600b5481565b611345611a67565b73ffffffffffffffffffffffffffffffffffffffff16611363610f1c565b73ffffffffffffffffffffffffffffffffffffffff16146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906129eb565b60405180910390fd5b80600a90805190602001906113cf929190612157565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b611475611a67565b73ffffffffffffffffffffffffffffffffffffffff16611493610f1c565b73ffffffffffffffffffffffffffffffffffffffff16146114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906129eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611559576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611550906129ab565b60405180910390fd5b61156281611a97565b50565b60008161157061169a565b1115801561157f575060005482105b80156115bd575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806115d361169a565b1161165b5760005481101561165a5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611658575b600081141561164e576004600083600190039350838152602001908152602001600020549050611623565b809250505061168d565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600090565b60006116aa826115c4565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611711576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff1661176a611692565b73ffffffffffffffffffffffffffffffffffffffff161480611799575061179886611793611692565b6113d3565b5b806117d657506117a7611692565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b90508061180f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061181a86611a8d565b1415611852576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61185f8686866001611eb0565b600061186a83611a8d565b146118a6576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61196d87611a8d565b1717600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841614156119f75760006001850190506000600460008381526020019081526020016000205414156119f55760005481146119f4578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a5f8686866001611eb6565b505050505050565b600033905090565b611a89828260405180602001604052806000815250611ebc565b5050565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b83611692565b8786866040518563ffffffff1660e01b8152600401611ba59493929190612902565b602060405180830381600087803b158015611bbf57600080fd5b505af1925050508015611bf057506040513d601f19601f82011682018060405250810190611bed9190612533565b60015b611c6a573d8060008114611c20576040519150601f19603f3d011682016040523d82523d6000602084013e611c25565b606091505b50600081511415611c62576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054611ccc90612dd6565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf890612dd6565b8015611d455780601f10611d1a57610100808354040283529160200191611d45565b820191906000526020600020905b815481529060010190602001808311611d2857829003601f168201915b5050505050905090565b60606000821415611d97576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611eab565b600082905060005b60008214611dc9578080611db290612e39565b915050600a82611dc29190612c3d565b9150611d9f565b60008167ffffffffffffffff811115611de557611de4612f6f565b5b6040519080825280601f01601f191660200182016040528015611e175781602001600182028036833780820191505090505b5090505b60008514611ea457600182611e309190612cc8565b9150600a85611e3f9190612e82565b6030611e4b9190612be7565b60f81b818381518110611e6157611e60612f40565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e9d9190612c3d565b9450611e1b565b8093505050505b919050565b50505050565b50505050565b6000805490506000611ecd85611a8d565b1415611f05576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415611f40576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4d6000858386611eb0565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1611fb26001851461214d565b901b60a042901b611fc286611a8d565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146120c6575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120766000878480600101955087611b5d565b6120ac576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106120075782600054146120c157600080fd5b612131565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106120c7575b8160008190555050506121476000858386611eb6565b50505050565b6000819050919050565b82805461216390612dd6565b90600052602060002090601f01602090048101928261218557600085556121cc565b82601f1061219e57805160ff19168380011785556121cc565b828001600101855582156121cc579182015b828111156121cb5782518255916020019190600101906121b0565b5b5090506121d991906121dd565b5090565b5b808211156121f65760008160009055506001016121de565b5090565b600061220d61220884612b22565b612afd565b90508281526020810184848401111561222957612228612fa3565b5b612234848285612d94565b509392505050565b600061224f61224a84612b53565b612afd565b90508281526020810184848401111561226b5761226a612fa3565b5b612276848285612d94565b509392505050565b60008135905061228d81613183565b92915050565b6000813590506122a28161319a565b92915050565b6000813590506122b7816131b1565b92915050565b6000815190506122cc816131b1565b92915050565b600082601f8301126122e7576122e6612f9e565b5b81356122f78482602086016121fa565b91505092915050565b600082601f83011261231557612314612f9e565b5b813561232584826020860161223c565b91505092915050565b60008135905061233d816131c8565b92915050565b60006020828403121561235957612358612fad565b5b60006123678482850161227e565b91505092915050565b6000806040838503121561238757612386612fad565b5b60006123958582860161227e565b92505060206123a68582860161227e565b9150509250929050565b6000806000606084860312156123c9576123c8612fad565b5b60006123d78682870161227e565b93505060206123e88682870161227e565b92505060406123f98682870161232e565b9150509250925092565b6000806000806080858703121561241d5761241c612fad565b5b600061242b8782880161227e565b945050602061243c8782880161227e565b935050604061244d8782880161232e565b925050606085013567ffffffffffffffff81111561246e5761246d612fa8565b5b61247a878288016122d2565b91505092959194509250565b6000806040838503121561249d5761249c612fad565b5b60006124ab8582860161227e565b92505060206124bc85828601612293565b9150509250929050565b600080604083850312156124dd576124dc612fad565b5b60006124eb8582860161227e565b92505060206124fc8582860161232e565b9150509250929050565b60006020828403121561251c5761251b612fad565b5b600061252a848285016122a8565b91505092915050565b60006020828403121561254957612548612fad565b5b6000612557848285016122bd565b91505092915050565b60006020828403121561257657612575612fad565b5b600082013567ffffffffffffffff81111561259457612593612fa8565b5b6125a084828501612300565b91505092915050565b6000602082840312156125bf576125be612fad565b5b60006125cd8482850161232e565b91505092915050565b6125df81612cfc565b82525050565b6125ee81612d0e565b82525050565b60006125ff82612b99565b6126098185612baf565b9350612619818560208601612da3565b61262281612fb2565b840191505092915050565b600061263882612ba4565b6126428185612bcb565b9350612652818560208601612da3565b61265b81612fb2565b840191505092915050565b600061267182612ba4565b61267b8185612bdc565b935061268b818560208601612da3565b80840191505092915050565b600081546126a481612dd6565b6126ae8186612bdc565b945060018216600081146126c957600181146126da5761270d565b60ff1983168652818601935061270d565b6126e385612b84565b60005b83811015612705578154818901526001820191506020810190506126e6565b838801955050505b50505092915050565b6000612723601f83612bcb565b915061272e82612fc3565b602082019050919050565b6000612746602683612bcb565b915061275182612fec565b604082019050919050565b6000612769601283612bcb565b91506127748261303b565b602082019050919050565b600061278c602083612bcb565b915061279782613064565b602082019050919050565b60006127af602f83612bcb565b91506127ba8261308d565b604082019050919050565b60006127d2601083612bcb565b91506127dd826130dc565b602082019050919050565b60006127f5601083612bcb565b915061280082613105565b602082019050919050565b6000612818600083612bc0565b91506128238261312e565b600082019050919050565b600061283b601e83612bcb565b915061284682613131565b602082019050919050565b600061285e601483612bcb565b91506128698261315a565b602082019050919050565b61287d81612d66565b82525050565b61288c81612d70565b82525050565b61289b81612d80565b82525050565b60006128ad8286612666565b91506128b98285612666565b91506128c58284612697565b9150819050949350505050565b60006128dd8261280b565b9150819050919050565b60006020820190506128fc60008301846125d6565b92915050565b600060808201905061291760008301876125d6565b61292460208301866125d6565b6129316040830185612874565b818103606083015261294381846125f4565b905095945050505050565b600060208201905061296360008301846125e5565b92915050565b60006020820190508181036000830152612983818461262d565b905092915050565b600060208201905081810360008301526129a481612716565b9050919050565b600060208201905081810360008301526129c481612739565b9050919050565b600060208201905081810360008301526129e48161275c565b9050919050565b60006020820190508181036000830152612a048161277f565b9050919050565b60006020820190508181036000830152612a24816127a2565b9050919050565b60006020820190508181036000830152612a44816127c5565b9050919050565b60006020820190508181036000830152612a64816127e8565b9050919050565b60006020820190508181036000830152612a848161282e565b9050919050565b60006020820190508181036000830152612aa481612851565b9050919050565b6000602082019050612ac06000830184612874565b92915050565b6000606082019050612adb6000830186612883565b612ae86020830185612892565b612af56040830184612874565b949350505050565b6000612b07612b18565b9050612b138282612e08565b919050565b6000604051905090565b600067ffffffffffffffff821115612b3d57612b3c612f6f565b5b612b4682612fb2565b9050602081019050919050565b600067ffffffffffffffff821115612b6e57612b6d612f6f565b5b612b7782612fb2565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612bf282612d66565b9150612bfd83612d66565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c3257612c31612eb3565b5b828201905092915050565b6000612c4882612d66565b9150612c5383612d66565b925082612c6357612c62612ee2565b5b828204905092915050565b6000612c7982612d66565b9150612c8483612d66565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cbd57612cbc612eb3565b5b828202905092915050565b6000612cd382612d66565b9150612cde83612d66565b925082821015612cf157612cf0612eb3565b5b828203905092915050565b6000612d0782612d46565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015612dc1578082015181840152602081019050612da6565b83811115612dd0576000848401525b50505050565b60006002820490506001821680612dee57607f821691505b60208210811415612e0257612e01612f11565b5b50919050565b612e1182612fb2565b810181811067ffffffffffffffff82111715612e3057612e2f612f6f565b5b80604052505050565b6000612e4482612d66565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e7757612e76612eb3565b5b600182019050919050565b6000612e8d82612d66565b9150612e9883612d66565b925082612ea857612ea7612ee2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f63616e206e6f74206d696e742074686973206d616e79206f6e652074696d6500600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d6f6e657900000000000000000000000000000000600082015250565b7f73616c6573206e6f742073746172742e00000000000000000000000000000000600082015250565b50565b7f6d696e7420616d6f756e742067726561746572207468616e207a65726f2e0000600082015250565b7f66726565206d696e74206e6f7420656e6f756768000000000000000000000000600082015250565b61318c81612cfc565b811461319757600080fd5b50565b6131a381612d0e565b81146131ae57600080fd5b50565b6131ba81612d1a565b81146131c557600080fd5b50565b6131d181612d66565b81146131dc57600080fd5b5056fea26469706673582212209fad87fbeec5c881a0feaa74172b61241b0d4e22962e94cad07502fd3c6ec4fb64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d623972564d41637a6a6b5243534d374d6e41587143787132507853473850633757796f5342446254714e51352f00000000000000000000
Deployed Bytecode
0x6080604052600436106101815760003560e01c8063715018a6116100d1578063c66828621161008a578063da3ef23f11610064578063da3ef23f14610542578063e985e9c51461056b578063f2840c48146105a8578063f2fde38b146105d357610181565b8063c6682862146104af578063c87b56dd146104da578063d5abeb011461051757610181565b8063715018a6146103c35780638da5cb5b146103da57806390aa0b0f1461040557806395d89b4114610432578063a22cb4651461045d578063b88d4fde1461048657610181565b80633ccfd60b1161013e57806342842e0e1161011857806342842e0e146102f757806355f804b3146103205780636352211e1461034957806370a082311461038657610181565b80633ccfd60b146102a85780633f52e589146102b257806340c10f19146102db57610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b57806318160ddd1461025457806323b872dd1461027f575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612506565b6105fc565b6040516101ba919061294e565b60405180910390f35b3480156101cf57600080fd5b506101d861068e565b6040516101e59190612969565b60405180910390f35b3480156101fa57600080fd5b50610215600480360381019061021091906125a9565b610720565b60405161022291906128e7565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d91906124c6565b61079c565b005b34801561026057600080fd5b50610269610943565b6040516102769190612aab565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a191906123b0565b61095a565b005b6102b061096a565b005b3480156102be57600080fd5b506102d960048036038101906102d491906125a9565b610a66565b005b6102f560048036038101906102f091906124c6565b610aef565b005b34801561030357600080fd5b5061031e600480360381019061031991906123b0565b610d37565b005b34801561032c57600080fd5b5061034760048036038101906103429190612560565b610d57565b005b34801561035557600080fd5b50610370600480360381019061036b91906125a9565b610ded565b60405161037d91906128e7565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612343565b610dff565b6040516103ba9190612aab565b60405180910390f35b3480156103cf57600080fd5b506103d8610e94565b005b3480156103e657600080fd5b506103ef610f1c565b6040516103fc91906128e7565b60405180910390f35b34801561041157600080fd5b5061041a610f46565b60405161042993929190612ac6565b60405180910390f35b34801561043e57600080fd5b50610447610f82565b6040516104549190612969565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190612486565b611014565b005b34801561049257600080fd5b506104ad60048036038101906104a89190612403565b61118c565b005b3480156104bb57600080fd5b506104c46111ff565b6040516104d19190612969565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906125a9565b61128d565b60405161050e9190612969565b60405180910390f35b34801561052357600080fd5b5061052c611337565b6040516105399190612aab565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190612560565b61133d565b005b34801561057757600080fd5b50610592600480360381019061058d9190612370565b6113d3565b60405161059f919061294e565b60405180910390f35b3480156105b457600080fd5b506105bd611467565b6040516105ca9190612aab565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190612343565b61146d565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065757506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106875750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461069d90612dd6565b80601f01602080910402602001604051908101604052809291908181526020018280546106c990612dd6565b80156107165780601f106106eb57610100808354040283529160200191610716565b820191906000526020600020905b8154815290600101906020018083116106f957829003601f168201915b5050505050905090565b600061072b82611565565b610761576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a7826115c4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561080f576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661082e611692565b73ffffffffffffffffffffffffffffffffffffffff16146108915761085a81610855611692565b6113d3565b610890576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061094d61169a565b6001546000540303905090565b61096583838361169f565b505050565b610972611a67565b73ffffffffffffffffffffffffffffffffffffffff16610990610f1c565b73ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd906129eb565b60405180910390fd5b60006109f0610f1c565b73ffffffffffffffffffffffffffffffffffffffff1647604051610a13906128d2565b60006040518083038185875af1925050503d8060008114610a50576040519150601f19603f3d011682016040523d82523d6000602084013e610a55565b606091505b5050905080610a6357600080fd5b50565b610a6e611a67565b73ffffffffffffffffffffffffffffffffffffffff16610a8c610f1c565b73ffffffffffffffffffffffffffffffffffffffff1614610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad9906129eb565b60405180910390fd5b80600d6001018190555050565b6000610af9610943565b9050600d600101544211610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990612a4b565b60405180910390fd5b60008211610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90612a6b565b60405180910390fd5b600c54821115610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc19061298b565b60405180910390fd5b6000600d60000160009054906101000a900463ffffffff1663ffffffff16905080821015610c5f57600d60000160009054906101000a900463ffffffff1663ffffffff16821115610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790612a8b565b60405180910390fd5b610c5a8484611a6f565b610d31565b6000600d60000160049054906101000a900467ffffffffffffffff1667ffffffffffffffff169050600b548484610c969190612be7565b1115610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce906129cb565b60405180910390fd5b8084610ce39190612c6e565b341015610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90612a2b565b60405180910390fd5b610d2f8585611a6f565b505b50505050565b610d528383836040518060200160405280600081525061118c565b505050565b610d5f611a67565b73ffffffffffffffffffffffffffffffffffffffff16610d7d610f1c565b73ffffffffffffffffffffffffffffffffffffffff1614610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca906129eb565b60405180910390fd5b8060099080519060200190610de9929190612157565b5050565b6000610df8826115c4565b9050919050565b600080610e0b83611a8d565b1415610e43576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610e9c611a67565b73ffffffffffffffffffffffffffffffffffffffff16610eba610f1c565b73ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906129eb565b60405180910390fd5b610f1a6000611a97565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d8060000160009054906101000a900463ffffffff16908060000160049054906101000a900467ffffffffffffffff16908060010154905083565b606060038054610f9190612dd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbd90612dd6565b801561100a5780601f10610fdf5761010080835404028352916020019161100a565b820191906000526020600020905b815481529060010190602001808311610fed57829003601f168201915b5050505050905090565b61101c611692565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611081576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061108e611692565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661113b611692565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611180919061294e565b60405180910390a35050565b61119784848461169f565b60008373ffffffffffffffffffffffffffffffffffffffff163b146111f9576111c284848484611b5d565b6111f8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600a805461120c90612dd6565b80601f016020809104026020016040519081016040528092919081815260200182805461123890612dd6565b80156112855780601f1061125a57610100808354040283529160200191611285565b820191906000526020600020905b81548152906001019060200180831161126857829003601f168201915b505050505081565b606061129882611565565b6112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90612a0b565b60405180910390fd5b60006112e1611cbd565b90506000815111611301576040518060200160405280600081525061132f565b8061130b84611d4f565b600a60405160200161131f939291906128a1565b6040516020818303038152906040525b915050919050565b600b5481565b611345611a67565b73ffffffffffffffffffffffffffffffffffffffff16611363610f1c565b73ffffffffffffffffffffffffffffffffffffffff16146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906129eb565b60405180910390fd5b80600a90805190602001906113cf929190612157565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b611475611a67565b73ffffffffffffffffffffffffffffffffffffffff16611493610f1c565b73ffffffffffffffffffffffffffffffffffffffff16146114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906129eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611559576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611550906129ab565b60405180910390fd5b61156281611a97565b50565b60008161157061169a565b1115801561157f575060005482105b80156115bd575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806115d361169a565b1161165b5760005481101561165a5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611658575b600081141561164e576004600083600190039350838152602001908152602001600020549050611623565b809250505061168d565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600090565b60006116aa826115c4565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611711576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff1661176a611692565b73ffffffffffffffffffffffffffffffffffffffff161480611799575061179886611793611692565b6113d3565b5b806117d657506117a7611692565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b90508061180f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061181a86611a8d565b1415611852576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61185f8686866001611eb0565b600061186a83611a8d565b146118a6576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61196d87611a8d565b1717600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841614156119f75760006001850190506000600460008381526020019081526020016000205414156119f55760005481146119f4578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a5f8686866001611eb6565b505050505050565b600033905090565b611a89828260405180602001604052806000815250611ebc565b5050565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b83611692565b8786866040518563ffffffff1660e01b8152600401611ba59493929190612902565b602060405180830381600087803b158015611bbf57600080fd5b505af1925050508015611bf057506040513d601f19601f82011682018060405250810190611bed9190612533565b60015b611c6a573d8060008114611c20576040519150601f19603f3d011682016040523d82523d6000602084013e611c25565b606091505b50600081511415611c62576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054611ccc90612dd6565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf890612dd6565b8015611d455780601f10611d1a57610100808354040283529160200191611d45565b820191906000526020600020905b815481529060010190602001808311611d2857829003601f168201915b5050505050905090565b60606000821415611d97576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611eab565b600082905060005b60008214611dc9578080611db290612e39565b915050600a82611dc29190612c3d565b9150611d9f565b60008167ffffffffffffffff811115611de557611de4612f6f565b5b6040519080825280601f01601f191660200182016040528015611e175781602001600182028036833780820191505090505b5090505b60008514611ea457600182611e309190612cc8565b9150600a85611e3f9190612e82565b6030611e4b9190612be7565b60f81b818381518110611e6157611e60612f40565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e9d9190612c3d565b9450611e1b565b8093505050505b919050565b50505050565b50505050565b6000805490506000611ecd85611a8d565b1415611f05576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415611f40576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4d6000858386611eb0565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1611fb26001851461214d565b901b60a042901b611fc286611a8d565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146120c6575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120766000878480600101955087611b5d565b6120ac576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106120075782600054146120c157600080fd5b612131565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106120c7575b8160008190555050506121476000858386611eb6565b50505050565b6000819050919050565b82805461216390612dd6565b90600052602060002090601f01602090048101928261218557600085556121cc565b82601f1061219e57805160ff19168380011785556121cc565b828001600101855582156121cc579182015b828111156121cb5782518255916020019190600101906121b0565b5b5090506121d991906121dd565b5090565b5b808211156121f65760008160009055506001016121de565b5090565b600061220d61220884612b22565b612afd565b90508281526020810184848401111561222957612228612fa3565b5b612234848285612d94565b509392505050565b600061224f61224a84612b53565b612afd565b90508281526020810184848401111561226b5761226a612fa3565b5b612276848285612d94565b509392505050565b60008135905061228d81613183565b92915050565b6000813590506122a28161319a565b92915050565b6000813590506122b7816131b1565b92915050565b6000815190506122cc816131b1565b92915050565b600082601f8301126122e7576122e6612f9e565b5b81356122f78482602086016121fa565b91505092915050565b600082601f83011261231557612314612f9e565b5b813561232584826020860161223c565b91505092915050565b60008135905061233d816131c8565b92915050565b60006020828403121561235957612358612fad565b5b60006123678482850161227e565b91505092915050565b6000806040838503121561238757612386612fad565b5b60006123958582860161227e565b92505060206123a68582860161227e565b9150509250929050565b6000806000606084860312156123c9576123c8612fad565b5b60006123d78682870161227e565b93505060206123e88682870161227e565b92505060406123f98682870161232e565b9150509250925092565b6000806000806080858703121561241d5761241c612fad565b5b600061242b8782880161227e565b945050602061243c8782880161227e565b935050604061244d8782880161232e565b925050606085013567ffffffffffffffff81111561246e5761246d612fa8565b5b61247a878288016122d2565b91505092959194509250565b6000806040838503121561249d5761249c612fad565b5b60006124ab8582860161227e565b92505060206124bc85828601612293565b9150509250929050565b600080604083850312156124dd576124dc612fad565b5b60006124eb8582860161227e565b92505060206124fc8582860161232e565b9150509250929050565b60006020828403121561251c5761251b612fad565b5b600061252a848285016122a8565b91505092915050565b60006020828403121561254957612548612fad565b5b6000612557848285016122bd565b91505092915050565b60006020828403121561257657612575612fad565b5b600082013567ffffffffffffffff81111561259457612593612fa8565b5b6125a084828501612300565b91505092915050565b6000602082840312156125bf576125be612fad565b5b60006125cd8482850161232e565b91505092915050565b6125df81612cfc565b82525050565b6125ee81612d0e565b82525050565b60006125ff82612b99565b6126098185612baf565b9350612619818560208601612da3565b61262281612fb2565b840191505092915050565b600061263882612ba4565b6126428185612bcb565b9350612652818560208601612da3565b61265b81612fb2565b840191505092915050565b600061267182612ba4565b61267b8185612bdc565b935061268b818560208601612da3565b80840191505092915050565b600081546126a481612dd6565b6126ae8186612bdc565b945060018216600081146126c957600181146126da5761270d565b60ff1983168652818601935061270d565b6126e385612b84565b60005b83811015612705578154818901526001820191506020810190506126e6565b838801955050505b50505092915050565b6000612723601f83612bcb565b915061272e82612fc3565b602082019050919050565b6000612746602683612bcb565b915061275182612fec565b604082019050919050565b6000612769601283612bcb565b91506127748261303b565b602082019050919050565b600061278c602083612bcb565b915061279782613064565b602082019050919050565b60006127af602f83612bcb565b91506127ba8261308d565b604082019050919050565b60006127d2601083612bcb565b91506127dd826130dc565b602082019050919050565b60006127f5601083612bcb565b915061280082613105565b602082019050919050565b6000612818600083612bc0565b91506128238261312e565b600082019050919050565b600061283b601e83612bcb565b915061284682613131565b602082019050919050565b600061285e601483612bcb565b91506128698261315a565b602082019050919050565b61287d81612d66565b82525050565b61288c81612d70565b82525050565b61289b81612d80565b82525050565b60006128ad8286612666565b91506128b98285612666565b91506128c58284612697565b9150819050949350505050565b60006128dd8261280b565b9150819050919050565b60006020820190506128fc60008301846125d6565b92915050565b600060808201905061291760008301876125d6565b61292460208301866125d6565b6129316040830185612874565b818103606083015261294381846125f4565b905095945050505050565b600060208201905061296360008301846125e5565b92915050565b60006020820190508181036000830152612983818461262d565b905092915050565b600060208201905081810360008301526129a481612716565b9050919050565b600060208201905081810360008301526129c481612739565b9050919050565b600060208201905081810360008301526129e48161275c565b9050919050565b60006020820190508181036000830152612a048161277f565b9050919050565b60006020820190508181036000830152612a24816127a2565b9050919050565b60006020820190508181036000830152612a44816127c5565b9050919050565b60006020820190508181036000830152612a64816127e8565b9050919050565b60006020820190508181036000830152612a848161282e565b9050919050565b60006020820190508181036000830152612aa481612851565b9050919050565b6000602082019050612ac06000830184612874565b92915050565b6000606082019050612adb6000830186612883565b612ae86020830185612892565b612af56040830184612874565b949350505050565b6000612b07612b18565b9050612b138282612e08565b919050565b6000604051905090565b600067ffffffffffffffff821115612b3d57612b3c612f6f565b5b612b4682612fb2565b9050602081019050919050565b600067ffffffffffffffff821115612b6e57612b6d612f6f565b5b612b7782612fb2565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612bf282612d66565b9150612bfd83612d66565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c3257612c31612eb3565b5b828201905092915050565b6000612c4882612d66565b9150612c5383612d66565b925082612c6357612c62612ee2565b5b828204905092915050565b6000612c7982612d66565b9150612c8483612d66565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cbd57612cbc612eb3565b5b828202905092915050565b6000612cd382612d66565b9150612cde83612d66565b925082821015612cf157612cf0612eb3565b5b828203905092915050565b6000612d0782612d46565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015612dc1578082015181840152602081019050612da6565b83811115612dd0576000848401525b50505050565b60006002820490506001821680612dee57607f821691505b60208210811415612e0257612e01612f11565b5b50919050565b612e1182612fb2565b810181811067ffffffffffffffff82111715612e3057612e2f612f6f565b5b80604052505050565b6000612e4482612d66565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e7757612e76612eb3565b5b600182019050919050565b6000612e8d82612d66565b9150612e9883612d66565b925082612ea857612ea7612ee2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f63616e206e6f74206d696e742074686973206d616e79206f6e652074696d6500600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d6f6e657900000000000000000000000000000000600082015250565b7f73616c6573206e6f742073746172742e00000000000000000000000000000000600082015250565b50565b7f6d696e7420616d6f756e742067726561746572207468616e207a65726f2e0000600082015250565b7f66726565206d696e74206e6f7420656e6f756768000000000000000000000000600082015250565b61318c81612cfc565b811461319757600080fd5b50565b6131a381612d0e565b81146131ae57600080fd5b50565b6131ba81612d1a565b81146131c557600080fd5b50565b6131d181612d66565b81146131dc57600080fd5b5056fea26469706673582212209fad87fbeec5c881a0feaa74172b61241b0d4e22962e94cad07502fd3c6ec4fb64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d623972564d41637a6a6b5243534d374d6e41587143787132507853473850633757796f5342446254714e51352f00000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://Qmb9rVMAczjkRCSM7MnAXqCxq2PxSG8Pc7WyoSBDbTqNQ5/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d623972564d41637a6a6b5243534d374d6e415871437871
Arg [3] : 32507853473850633757796f5342446254714e51352f00000000000000000000
Deployed Bytecode Sourcemap
44222:2503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18596:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23619:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25687:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25147:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17650:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26573:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46577:145;;;:::i;:::-;;46210:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44943:814;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26814:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46345:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23408:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19275:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44566:97;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;23788:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25963:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27070:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44329:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45767:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44371:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46449:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26342:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44408:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18596:615;18681:4;18996:10;18981:25;;:11;:25;;;;:102;;;;19073:10;19058:25;;:11;:25;;;;18981:102;:179;;;;19150:10;19135:25;;:11;:25;;;;18981:179;18961:199;;18596:615;;;:::o;23619:100::-;23673:13;23706:5;23699:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23619:100;:::o;25687:204::-;25755:7;25780:16;25788:7;25780;:16::i;:::-;25775:64;;25805:34;;;;;;;;;;;;;;25775:64;25859:15;:24;25875:7;25859:24;;;;;;;;;;;;;;;;;;;;;25852:31;;25687:204;;;:::o;25147:474::-;25220:13;25252:27;25271:7;25252:18;:27::i;:::-;25220:61;;25302:5;25296:11;;:2;:11;;;25292:48;;;25316:24;;;;;;;;;;;;;;25292:48;25380:5;25357:28;;:19;:17;:19::i;:::-;:28;;;25353:175;;25405:44;25422:5;25429:19;:17;:19::i;:::-;25405:16;:44::i;:::-;25400:128;;25477:35;;;;;;;;;;;;;;25400:128;25353:175;25567:2;25540:15;:24;25556:7;25540:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25605:7;25601:2;25585:28;;25594:5;25585:28;;;;;;;;;;;;25209:412;25147:474;;:::o;17650:315::-;17703:7;17931:15;:13;:15::i;:::-;17916:12;;17900:13;;:28;:46;17893:53;;17650:315;:::o;26573:170::-;26707:28;26717:4;26723:2;26727:7;26707:9;:28::i;:::-;26573:170;;;:::o;46577:145::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46630:7:::1;46651;:5;:7::i;:::-;46643:21;;46672;46643:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46629:69;;;46713:2;46705:11;;;::::0;::::1;;46622:100;46577:145::o:0;46210:129::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46316:17:::1;46286:10;:27;;:47;;;;46210:129:::0;:::o;44943:814::-;45013:14;45030:13;:11;:13::i;:::-;45013:30;;45076:10;:27;;;45058:15;:45;45050:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45152:1;45138:11;:15;45130:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45217:14;;45202:11;:29;;45194:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;45273:21;45297:10;:24;;;;;;;;;;;;45273:48;;;;45340:13;45331:6;:22;45328:424;;;45383:10;:24;;;;;;;;;;;;45373:34;;:6;:34;;45365:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45442:26;45452:3;45456:11;45442:9;:26::i;:::-;45328:424;;;45491:26;45520:10;:29;;;;;;;;;;;;45491:58;;;;45592:9;;45577:11;45568:6;:20;;;;:::i;:::-;:33;;45560:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45669:18;45655:11;:32;;;;:::i;:::-;45642:9;:45;;45634:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45718:26;45728:3;45732:11;45718:9;:26::i;:::-;45480:272;45328:424;45006:751;;44943:814;;:::o;26814:185::-;26952:39;26969:4;26975:2;26979:7;26952:39;;;;;;;;;;;;:16;:39::i;:::-;26814:185;;;:::o;46345:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46426:11:::1;46416:7;:21;;;;;;;;;;;;:::i;:::-;;46345:98:::0;:::o;23408:144::-;23472:7;23515:27;23534:7;23515:18;:27::i;:::-;23492:52;;23408:144;;;:::o;19275:234::-;19339:7;19391:1;19363:24;19381:5;19363:17;:24::i;:::-;:29;19359:70;;;19401:28;;;;;;;;;;;;;;19359:70;14620:13;19447:18;:25;19466:5;19447:25;;;;;;;;;;;;;;;;:54;19440:61;;19275:234;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;44566:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23788:104::-;23844:13;23877:7;23870:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23788:104;:::o;25963:308::-;26074:19;:17;:19::i;:::-;26062:31;;:8;:31;;;26058:61;;;26102:17;;;;;;;;;;;;;;26058:61;26184:8;26132:18;:39;26151:19;:17;:19::i;:::-;26132:39;;;;;;;;;;;;;;;:49;26172:8;26132:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;26244:8;26208:55;;26223:19;:17;:19::i;:::-;26208:55;;;26254:8;26208:55;;;;;;:::i;:::-;;;;;;;;25963:308;;:::o;27070:396::-;27237:28;27247:4;27253:2;27257:7;27237:9;:28::i;:::-;27298:1;27280:2;:14;;;:19;27276:183;;27319:56;27350:4;27356:2;27360:7;27369:5;27319:30;:56::i;:::-;27314:145;;27403:40;;;;;;;;;;;;;;27314:145;27276:183;27070:396;;;;:::o;44329:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45767:421::-;45865:13;45906:16;45914:7;45906;:16::i;:::-;45890:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45994:28;46025:10;:8;:10::i;:::-;45994:41;;46080:1;46055:14;46049:28;:32;:133;;;;;;;;;;;;;;;;;46117:14;46133:18;:7;:16;:18::i;:::-;46153:13;46100:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46049:133;46042:140;;;45767:421;;;:::o;44371:32::-;;;;:::o;46449:122::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46548:17:::1;46532:13;:33;;;;;;;;;;;;:::i;:::-;;46449:122:::0;:::o;26342:164::-;26439:4;26463:18;:25;26482:5;26463:25;;;;;;;;;;;;;;;:35;26489:8;26463:35;;;;;;;;;;;;;;;;;;;;;;;;;26456:42;;26342:164;;;;:::o;44408:33::-;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;27721:273::-;27778:4;27834:7;27815:15;:13;:15::i;:::-;:26;;:66;;;;;27868:13;;27858:7;:23;27815:66;:152;;;;;27966:1;15390:8;27919:17;:26;27937:7;27919:26;;;;;;;;;;;;:43;:48;27815:152;27795:172;;27721:273;;;:::o;20923:1129::-;20990:7;21010:12;21025:7;21010:22;;21093:4;21074:15;:13;:15::i;:::-;:23;21070:915;;21127:13;;21120:4;:20;21116:869;;;21165:14;21182:17;:23;21200:4;21182:23;;;;;;;;;;;;21165:40;;21298:1;15390:8;21271:6;:23;:28;21267:699;;;21790:113;21807:1;21797:6;:11;21790:113;;;21850:17;:25;21868:6;;;;;;;21850:25;;;;;;;;;;;;21841:34;;21790:113;;;21936:6;21929:13;;;;;;21267:699;21142:843;21116:869;21070:915;22013:31;;;;;;;;;;;;;;20923:1129;;;;:::o;41988:105::-;42048:7;42075:10;42068:17;;41988:105;:::o;17174:92::-;17230:7;17174:92;:::o;32980:2654::-;33095:27;33125;33144:7;33125:18;:27::i;:::-;33095:57;;33210:4;33169:45;;33185:19;33169:45;;;33165:86;;33223:28;;;;;;;;;;;;;;33165:86;33264:23;33290:15;:24;33306:7;33290:24;;;;;;;;;;;;;;;;;;;;;33264:50;;33327:22;33376:4;33353:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;33397:43;33414:4;33420:19;:17;:19::i;:::-;33397:16;:43::i;:::-;33353:87;:142;;;;33476:19;:17;:19::i;:::-;33457:38;;:15;:38;;;33353:142;33327:169;;33514:17;33509:66;;33540:35;;;;;;;;;;;;;;33509:66;33615:1;33590:21;33608:2;33590:17;:21::i;:::-;:26;33586:62;;;33625:23;;;;;;;;;;;;;;33586:62;33661:43;33683:4;33689:2;33693:7;33702:1;33661:21;:43::i;:::-;33812:1;33774:34;33792:15;33774:17;:34::i;:::-;:39;33770:103;;33837:15;:24;33853:7;33837:24;;;;;;;;;;;;33830:31;;;;;;;;;;;33770:103;34240:18;:24;34259:4;34240:24;;;;;;;;;;;;;;;;34238:26;;;;;;;;;;;;34309:18;:22;34328:2;34309:22;;;;;;;;;;;;;;;;34307:24;;;;;;;;;;;15668:8;15274:3;34690:15;:41;;34648:21;34666:2;34648:17;:21::i;:::-;:84;:128;34602:17;:26;34620:7;34602:26;;;;;;;;;;;:174;;;;34946:1;15668:8;34896:19;:46;:51;34892:626;;;34968:19;35000:1;34990:7;:11;34968:33;;35157:1;35123:17;:30;35141:11;35123:30;;;;;;;;;;;;:35;35119:384;;;35261:13;;35246:11;:28;35242:242;;35441:19;35408:17;:30;35426:11;35408:30;;;;;;;;;;;:52;;;;35242:242;35119:384;34949:569;34892:626;35565:7;35561:2;35546:27;;35555:4;35546:27;;;;;;;;;;;;35584:42;35605:4;35611:2;35615:7;35624:1;35584:20;:42::i;:::-;33084:2550;;;32980:2654;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;28078:104::-;28147:27;28157:2;28161:8;28147:27;;;;;;;;;;;;:9;:27::i;:::-;28078:104;;:::o;24708:148::-;24772:14;24833:5;24823:15;;24708:148;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;39457:716::-;39620:4;39666:2;39641:45;;;39687:19;:17;:19::i;:::-;39708:4;39714:7;39723:5;39641:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39637:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39941:1;39924:6;:13;:18;39920:235;;;39970:40;;;;;;;;;;;;;;39920:235;40113:6;40107:13;40098:6;40094:2;40090:15;40083:38;39637:529;39810:54;;;39800:64;;;:6;:64;;;;39793:71;;;39457:716;;;;;;:::o;44823:102::-;44883:13;44912:7;44905:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44823:102;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;40821:159::-;;;;;:::o;41639:158::-;;;;;:::o;28555:2246::-;28678:20;28701:13;;28678:36;;28754:1;28729:21;28747:2;28729:17;:21::i;:::-;:26;28725:58;;;28764:19;;;;;;;;;;;;;;28725:58;28810:1;28798:8;:13;28794:44;;;28820:18;;;;;;;;;;;;;;28794:44;28851:61;28881:1;28885:2;28889:12;28903:8;28851:21;:61::i;:::-;29455:1;14757:2;29426:1;:25;;29425:31;29413:8;:44;29387:18;:22;29406:2;29387:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;15533:3;29856:29;29883:1;29871:8;:13;29856:14;:29::i;:::-;:56;;15274:3;29793:15;:41;;29751:21;29769:2;29751:17;:21::i;:::-;:84;:162;29700:17;:31;29718:12;29700:31;;;;;;;;;;;:213;;;;29930:20;29953:12;29930:35;;29980:11;30009:8;29994:12;:23;29980:37;;30056:1;30038:2;:14;;;:19;30034:635;;30078:313;30134:12;30130:2;30109:38;;30126:1;30109:38;;;;;;;;;;;;30175:69;30214:1;30218:2;30222:14;;;;;;30238:5;30175:30;:69::i;:::-;30170:174;;30280:40;;;;;;;;;;;;;;30170:174;30386:3;30371:12;:18;30078:313;;30472:12;30455:13;;:29;30451:43;;30486:8;;;30451:43;30034:635;;;30535:119;30591:14;;;;;;30587:2;30566:40;;30583:1;30566:40;;;;;;;;;;;;30649:3;30634:12;:18;30535:119;;30034:635;30699:12;30683:13;:28;;;;29164:1559;;30733:60;30762:1;30766:2;30770:12;30784:8;30733:20;:60::i;:::-;28667:2134;28555:2246;;;:::o;24943:142::-;25001:14;25062:5;25052:15;;24943:142;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8540:845::-;8643:3;8680:5;8674:12;8709:36;8735:9;8709:36;:::i;:::-;8761:89;8843:6;8838:3;8761:89;:::i;:::-;8754:96;;8881:1;8870:9;8866:17;8897:1;8892:137;;;;9043:1;9038:341;;;;8859:520;;8892:137;8976:4;8972:9;8961;8957:25;8952:3;8945:38;9012:6;9007:3;9003:16;8996:23;;8892:137;;9038:341;9105:38;9137:5;9105:38;:::i;:::-;9165:1;9179:154;9193:6;9190:1;9187:13;9179:154;;;9267:7;9261:14;9257:1;9252:3;9248:11;9241:35;9317:1;9308:7;9304:15;9293:26;;9215:4;9212:1;9208:12;9203:17;;9179:154;;;9362:6;9357:3;9353:16;9346:23;;9045:334;;8859:520;;8647:738;;8540:845;;;;:::o;9391:366::-;9533:3;9554:67;9618:2;9613:3;9554:67;:::i;:::-;9547:74;;9630:93;9719:3;9630:93;:::i;:::-;9748:2;9743:3;9739:12;9732:19;;9391:366;;;:::o;9763:::-;9905:3;9926:67;9990:2;9985:3;9926:67;:::i;:::-;9919:74;;10002:93;10091:3;10002:93;:::i;:::-;10120:2;10115:3;10111:12;10104:19;;9763:366;;;:::o;10135:::-;10277:3;10298:67;10362:2;10357:3;10298:67;:::i;:::-;10291:74;;10374:93;10463:3;10374:93;:::i;:::-;10492:2;10487:3;10483:12;10476:19;;10135:366;;;:::o;10507:::-;10649:3;10670:67;10734:2;10729:3;10670:67;:::i;:::-;10663:74;;10746:93;10835:3;10746:93;:::i;:::-;10864:2;10859:3;10855:12;10848:19;;10507:366;;;:::o;10879:::-;11021:3;11042:67;11106:2;11101:3;11042:67;:::i;:::-;11035:74;;11118:93;11207:3;11118:93;:::i;:::-;11236:2;11231:3;11227:12;11220:19;;10879:366;;;:::o;11251:::-;11393:3;11414:67;11478:2;11473:3;11414:67;:::i;:::-;11407:74;;11490:93;11579:3;11490:93;:::i;:::-;11608:2;11603:3;11599:12;11592:19;;11251:366;;;:::o;11623:::-;11765:3;11786:67;11850:2;11845:3;11786:67;:::i;:::-;11779:74;;11862:93;11951:3;11862:93;:::i;:::-;11980:2;11975:3;11971:12;11964:19;;11623:366;;;:::o;11995:398::-;12154:3;12175:83;12256:1;12251:3;12175:83;:::i;:::-;12168:90;;12267:93;12356:3;12267:93;:::i;:::-;12385:1;12380:3;12376:11;12369:18;;11995:398;;;:::o;12399:366::-;12541:3;12562:67;12626:2;12621:3;12562:67;:::i;:::-;12555:74;;12638:93;12727:3;12638:93;:::i;:::-;12756:2;12751:3;12747:12;12740:19;;12399:366;;;:::o;12771:::-;12913:3;12934:67;12998:2;12993:3;12934:67;:::i;:::-;12927:74;;13010:93;13099:3;13010:93;:::i;:::-;13128:2;13123:3;13119:12;13112:19;;12771:366;;;:::o;13143:118::-;13230:24;13248:5;13230:24;:::i;:::-;13225:3;13218:37;13143:118;;:::o;13267:115::-;13352:23;13369:5;13352:23;:::i;:::-;13347:3;13340:36;13267:115;;:::o;13388:::-;13473:23;13490:5;13473:23;:::i;:::-;13468:3;13461:36;13388:115;;:::o;13509:589::-;13734:3;13756:95;13847:3;13838:6;13756:95;:::i;:::-;13749:102;;13868:95;13959:3;13950:6;13868:95;:::i;:::-;13861:102;;13980:92;14068:3;14059:6;13980:92;:::i;:::-;13973:99;;14089:3;14082:10;;13509:589;;;;;;:::o;14104:379::-;14288:3;14310:147;14453:3;14310:147;:::i;:::-;14303:154;;14474:3;14467:10;;14104:379;;;:::o;14489:222::-;14582:4;14620:2;14609:9;14605:18;14597:26;;14633:71;14701:1;14690:9;14686:17;14677:6;14633:71;:::i;:::-;14489:222;;;;:::o;14717:640::-;14912:4;14950:3;14939:9;14935:19;14927:27;;14964:71;15032:1;15021:9;15017:17;15008:6;14964:71;:::i;:::-;15045:72;15113:2;15102:9;15098:18;15089:6;15045:72;:::i;:::-;15127;15195:2;15184:9;15180:18;15171:6;15127:72;:::i;:::-;15246:9;15240:4;15236:20;15231:2;15220:9;15216:18;15209:48;15274:76;15345:4;15336:6;15274:76;:::i;:::-;15266:84;;14717:640;;;;;;;:::o;15363:210::-;15450:4;15488:2;15477:9;15473:18;15465:26;;15501:65;15563:1;15552:9;15548:17;15539:6;15501:65;:::i;:::-;15363:210;;;;:::o;15579:313::-;15692:4;15730:2;15719:9;15715:18;15707:26;;15779:9;15773:4;15769:20;15765:1;15754:9;15750:17;15743:47;15807:78;15880:4;15871:6;15807:78;:::i;:::-;15799:86;;15579:313;;;;:::o;15898:419::-;16064:4;16102:2;16091:9;16087:18;16079:26;;16151:9;16145:4;16141:20;16137:1;16126:9;16122:17;16115:47;16179:131;16305:4;16179:131;:::i;:::-;16171:139;;15898:419;;;:::o;16323:::-;16489:4;16527:2;16516:9;16512:18;16504:26;;16576:9;16570:4;16566:20;16562:1;16551:9;16547:17;16540:47;16604:131;16730:4;16604:131;:::i;:::-;16596:139;;16323:419;;;:::o;16748:::-;16914:4;16952:2;16941:9;16937:18;16929:26;;17001:9;16995:4;16991:20;16987:1;16976:9;16972:17;16965:47;17029:131;17155:4;17029:131;:::i;:::-;17021:139;;16748:419;;;:::o;17173:::-;17339:4;17377:2;17366:9;17362:18;17354:26;;17426:9;17420:4;17416:20;17412:1;17401:9;17397:17;17390:47;17454:131;17580:4;17454:131;:::i;:::-;17446:139;;17173:419;;;:::o;17598:::-;17764:4;17802:2;17791:9;17787:18;17779:26;;17851:9;17845:4;17841:20;17837:1;17826:9;17822:17;17815:47;17879:131;18005:4;17879:131;:::i;:::-;17871:139;;17598:419;;;:::o;18023:::-;18189:4;18227:2;18216:9;18212:18;18204:26;;18276:9;18270:4;18266:20;18262:1;18251:9;18247:17;18240:47;18304:131;18430:4;18304:131;:::i;:::-;18296:139;;18023:419;;;:::o;18448:::-;18614:4;18652:2;18641:9;18637:18;18629:26;;18701:9;18695:4;18691:20;18687:1;18676:9;18672:17;18665:47;18729:131;18855:4;18729:131;:::i;:::-;18721:139;;18448:419;;;:::o;18873:::-;19039:4;19077:2;19066:9;19062:18;19054:26;;19126:9;19120:4;19116:20;19112:1;19101:9;19097:17;19090:47;19154:131;19280:4;19154:131;:::i;:::-;19146:139;;18873:419;;;:::o;19298:::-;19464:4;19502:2;19491:9;19487:18;19479:26;;19551:9;19545:4;19541:20;19537:1;19526:9;19522:17;19515:47;19579:131;19705:4;19579:131;:::i;:::-;19571:139;;19298:419;;;:::o;19723:222::-;19816:4;19854:2;19843:9;19839:18;19831:26;;19867:71;19935:1;19924:9;19920:17;19911:6;19867:71;:::i;:::-;19723:222;;;;:::o;19951:434::-;20096:4;20134:2;20123:9;20119:18;20111:26;;20147:69;20213:1;20202:9;20198:17;20189:6;20147:69;:::i;:::-;20226:70;20292:2;20281:9;20277:18;20268:6;20226:70;:::i;:::-;20306:72;20374:2;20363:9;20359:18;20350:6;20306:72;:::i;:::-;19951:434;;;;;;:::o;20391:129::-;20425:6;20452:20;;:::i;:::-;20442:30;;20481:33;20509:4;20501:6;20481:33;:::i;:::-;20391:129;;;:::o;20526:75::-;20559:6;20592:2;20586:9;20576:19;;20526:75;:::o;20607:307::-;20668:4;20758:18;20750:6;20747:30;20744:56;;;20780:18;;:::i;:::-;20744:56;20818:29;20840:6;20818:29;:::i;:::-;20810:37;;20902:4;20896;20892:15;20884:23;;20607:307;;;:::o;20920:308::-;20982:4;21072:18;21064:6;21061:30;21058:56;;;21094:18;;:::i;:::-;21058:56;21132:29;21154:6;21132:29;:::i;:::-;21124:37;;21216:4;21210;21206:15;21198:23;;20920:308;;;:::o;21234:141::-;21283:4;21306:3;21298:11;;21329:3;21326:1;21319:14;21363:4;21360:1;21350:18;21342:26;;21234:141;;;:::o;21381:98::-;21432:6;21466:5;21460:12;21450:22;;21381:98;;;:::o;21485:99::-;21537:6;21571:5;21565:12;21555:22;;21485:99;;;:::o;21590:168::-;21673:11;21707:6;21702:3;21695:19;21747:4;21742:3;21738:14;21723:29;;21590:168;;;;:::o;21764:147::-;21865:11;21902:3;21887:18;;21764:147;;;;:::o;21917:169::-;22001:11;22035:6;22030:3;22023:19;22075:4;22070:3;22066:14;22051:29;;21917:169;;;;:::o;22092:148::-;22194:11;22231:3;22216:18;;22092:148;;;;:::o;22246:305::-;22286:3;22305:20;22323:1;22305:20;:::i;:::-;22300:25;;22339:20;22357:1;22339:20;:::i;:::-;22334:25;;22493:1;22425:66;22421:74;22418:1;22415:81;22412:107;;;22499:18;;:::i;:::-;22412:107;22543:1;22540;22536:9;22529:16;;22246:305;;;;:::o;22557:185::-;22597:1;22614:20;22632:1;22614:20;:::i;:::-;22609:25;;22648:20;22666:1;22648:20;:::i;:::-;22643:25;;22687:1;22677:35;;22692:18;;:::i;:::-;22677:35;22734:1;22731;22727:9;22722:14;;22557:185;;;;:::o;22748:348::-;22788:7;22811:20;22829:1;22811:20;:::i;:::-;22806:25;;22845:20;22863:1;22845:20;:::i;:::-;22840:25;;23033:1;22965:66;22961:74;22958:1;22955:81;22950:1;22943:9;22936:17;22932:105;22929:131;;;23040:18;;:::i;:::-;22929:131;23088:1;23085;23081:9;23070:20;;22748:348;;;;:::o;23102:191::-;23142:4;23162:20;23180:1;23162:20;:::i;:::-;23157:25;;23196:20;23214:1;23196:20;:::i;:::-;23191:25;;23235:1;23232;23229:8;23226:34;;;23240:18;;:::i;:::-;23226:34;23285:1;23282;23278:9;23270:17;;23102:191;;;;:::o;23299:96::-;23336:7;23365:24;23383:5;23365:24;:::i;:::-;23354:35;;23299:96;;;:::o;23401:90::-;23435:7;23478:5;23471:13;23464:21;23453:32;;23401:90;;;:::o;23497:149::-;23533:7;23573:66;23566:5;23562:78;23551:89;;23497:149;;;:::o;23652:126::-;23689:7;23729:42;23722:5;23718:54;23707:65;;23652:126;;;:::o;23784:77::-;23821:7;23850:5;23839:16;;23784:77;;;:::o;23867:93::-;23903:7;23943:10;23936:5;23932:22;23921:33;;23867:93;;;:::o;23966:101::-;24002:7;24042:18;24035:5;24031:30;24020:41;;23966:101;;;:::o;24073:154::-;24157:6;24152:3;24147;24134:30;24219:1;24210:6;24205:3;24201:16;24194:27;24073:154;;;:::o;24233:307::-;24301:1;24311:113;24325:6;24322:1;24319:13;24311:113;;;24410:1;24405:3;24401:11;24395:18;24391:1;24386:3;24382:11;24375:39;24347:2;24344:1;24340:10;24335:15;;24311:113;;;24442:6;24439:1;24436:13;24433:101;;;24522:1;24513:6;24508:3;24504:16;24497:27;24433:101;24282:258;24233:307;;;:::o;24546:320::-;24590:6;24627:1;24621:4;24617:12;24607:22;;24674:1;24668:4;24664:12;24695:18;24685:81;;24751:4;24743:6;24739:17;24729:27;;24685:81;24813:2;24805:6;24802:14;24782:18;24779:38;24776:84;;;24832:18;;:::i;:::-;24776:84;24597:269;24546:320;;;:::o;24872:281::-;24955:27;24977:4;24955:27;:::i;:::-;24947:6;24943:40;25085:6;25073:10;25070:22;25049:18;25037:10;25034:34;25031:62;25028:88;;;25096:18;;:::i;:::-;25028:88;25136:10;25132:2;25125:22;24915:238;24872:281;;:::o;25159:233::-;25198:3;25221:24;25239:5;25221:24;:::i;:::-;25212:33;;25267:66;25260:5;25257:77;25254:103;;;25337:18;;:::i;:::-;25254:103;25384:1;25377:5;25373:13;25366:20;;25159:233;;;:::o;25398:176::-;25430:1;25447:20;25465:1;25447:20;:::i;:::-;25442:25;;25481:20;25499:1;25481:20;:::i;:::-;25476:25;;25520:1;25510:35;;25525:18;;:::i;:::-;25510:35;25566:1;25563;25559:9;25554:14;;25398:176;;;;:::o;25580:180::-;25628:77;25625:1;25618:88;25725:4;25722:1;25715:15;25749:4;25746:1;25739:15;25766:180;25814:77;25811:1;25804:88;25911:4;25908:1;25901:15;25935:4;25932:1;25925:15;25952:180;26000:77;25997:1;25990:88;26097:4;26094:1;26087:15;26121:4;26118:1;26111:15;26138:180;26186:77;26183:1;26176:88;26283:4;26280:1;26273:15;26307:4;26304:1;26297:15;26324:180;26372:77;26369:1;26362:88;26469:4;26466:1;26459:15;26493:4;26490:1;26483:15;26510:117;26619:1;26616;26609:12;26633:117;26742:1;26739;26732:12;26756:117;26865:1;26862;26855:12;26879:117;26988:1;26985;26978:12;27002:102;27043:6;27094:2;27090:7;27085:2;27078:5;27074:14;27070:28;27060:38;;27002:102;;;:::o;27110:181::-;27250:33;27246:1;27238:6;27234:14;27227:57;27110:181;:::o;27297:225::-;27437:34;27433:1;27425:6;27421:14;27414:58;27506:8;27501:2;27493:6;27489:15;27482:33;27297:225;:::o;27528:168::-;27668:20;27664:1;27656:6;27652:14;27645:44;27528:168;:::o;27702:182::-;27842:34;27838:1;27830:6;27826:14;27819:58;27702:182;:::o;27890:234::-;28030:34;28026:1;28018:6;28014:14;28007:58;28099:17;28094:2;28086:6;28082:15;28075:42;27890:234;:::o;28130:166::-;28270:18;28266:1;28258:6;28254:14;28247:42;28130:166;:::o;28302:::-;28442:18;28438:1;28430:6;28426:14;28419:42;28302:166;:::o;28474:114::-;;:::o;28594:180::-;28734:32;28730:1;28722:6;28718:14;28711:56;28594:180;:::o;28780:170::-;28920:22;28916:1;28908:6;28904:14;28897:46;28780:170;:::o;28956:122::-;29029:24;29047:5;29029:24;:::i;:::-;29022:5;29019:35;29009:63;;29068:1;29065;29058:12;29009:63;28956:122;:::o;29084:116::-;29154:21;29169:5;29154:21;:::i;:::-;29147:5;29144:32;29134:60;;29190:1;29187;29180:12;29134:60;29084:116;:::o;29206:120::-;29278:23;29295:5;29278:23;:::i;:::-;29271:5;29268:34;29258:62;;29316:1;29313;29306:12;29258:62;29206:120;:::o;29332:122::-;29405:24;29423:5;29405:24;:::i;:::-;29398:5;29395:35;29385:63;;29444:1;29441;29434:12;29385:63;29332:122;:::o
Swarm Source
ipfs://9fad87fbeec5c881a0feaa74172b61241b0d4e22962e94cad07502fd3c6ec4fb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.