Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,905 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 69655914 | 24 days ago | IN | 0 POL | 0.00139854 | ||||
Safe Transfer Fr... | 68657535 | 49 days ago | IN | 0 POL | 0.00287784 | ||||
Set Approval For... | 67838095 | 69 days ago | IN | 0 POL | 0.01126042 | ||||
Set Approval For... | 67448020 | 79 days ago | IN | 0 POL | 0.0016091 | ||||
Set Approval For... | 66081442 | 114 days ago | IN | 0 POL | 0.001535 | ||||
Set Approval For... | 65713037 | 123 days ago | IN | 0 POL | 0.03001856 | ||||
Set Approval For... | 65270189 | 134 days ago | IN | 0 POL | 0.00278409 | ||||
Set Approval For... | 65213789 | 136 days ago | IN | 0 POL | 0.00139854 | ||||
Set Approval For... | 64843074 | 145 days ago | IN | 0 POL | 0.0007757 | ||||
Set Approval For... | 63807637 | 171 days ago | IN | 0 POL | 0.00081806 | ||||
Set Approval For... | 63462540 | 180 days ago | IN | 0 POL | 0.00931434 | ||||
Set Approval For... | 63040608 | 190 days ago | IN | 0 POL | 0.00139854 | ||||
Set Approval For... | 63040589 | 190 days ago | IN | 0 POL | 0.0008445 | ||||
Set Approval For... | 61992339 | 216 days ago | IN | 0 POL | 0.00157906 | ||||
Set Approval For... | 61241952 | 235 days ago | IN | 0 POL | 0.00139854 | ||||
Set Approval For... | 60575374 | 251 days ago | IN | 0 POL | 0.00139854 | ||||
Set Approval For... | 59952715 | 267 days ago | IN | 0 POL | 0.00139854 | ||||
Set Approval For... | 59445823 | 280 days ago | IN | 0 POL | 0.00079328 | ||||
Set Approval For... | 59445209 | 280 days ago | IN | 0 POL | 0.00128908 | ||||
Safe Transfer Fr... | 56796546 | 347 days ago | IN | 0 POL | 0.00263841 | ||||
Set Approval For... | 56792875 | 348 days ago | IN | 0 POL | 0.00079328 | ||||
Set Approval For... | 56604845 | 352 days ago | IN | 0 POL | 0.0007437 | ||||
Safe Transfer Fr... | 55822545 | 373 days ago | IN | 0 POL | 0.00831876 | ||||
Set Approval For... | 55747185 | 375 days ago | IN | 0 POL | 0.03803069 | ||||
Safe Transfer Fr... | 55724270 | 376 days ago | IN | 0 POL | 0.00708733 |
Loading...
Loading
Contract Name:
BasketballToken
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-07-27 */ pragma solidity 0.8.6; // SPDX-License-Identifier: MIT /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /* * @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; } } /** * @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); } } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract BasketballToken is ERC721Enumerable, Ownable { uint private maxBalls; string private baseURI; constructor(string memory name, string memory symbol) ERC721(name, symbol) { } function mintBasketballs(uint numBalls) external onlyOwner { require(maxBalls > 0, "Set mint limit before minting"); require(totalSupply() + numBalls <= maxBalls, "Minting would exceed token limit"); for(uint i = 0; i < numBalls; i++) { uint mintIndex = totalSupply(); if (mintIndex < maxBalls) { _safeMint(msg.sender, mintIndex); } } } function setMaxBalls(uint numBalls) external onlyOwner { maxBalls = numBalls; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return baseURI; } function setBaseURI(string memory uri) external onlyOwner { baseURI = uri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"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":[{"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":[{"internalType":"uint256","name":"numBalls","type":"uint256"}],"name":"mintBasketballs","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numBalls","type":"uint256"}],"name":"setMaxBalls","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003a3f38038062003a3f833981810160405281019062000037919062000291565b818181600090805190602001906200005192919062000163565b5080600190805190602001906200006a92919062000163565b5050506200008d620000816200009560201b60201c565b6200009d60201b60201c565b50506200049a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200017190620003ab565b90600052602060002090601f016020900481019282620001955760008555620001e1565b82601f10620001b057805160ff1916838001178555620001e1565b82800160010185558215620001e1579182015b82811115620001e0578251825591602001919060010190620001c3565b5b509050620001f09190620001f4565b5090565b5b808211156200020f576000816000905550600101620001f5565b5090565b60006200022a62000224846200033f565b62000316565b9050828152602081018484840111156200024957620002486200047a565b5b6200025684828562000375565b509392505050565b600082601f83011262000276576200027562000475565b5b81516200028884826020860162000213565b91505092915050565b60008060408385031215620002ab57620002aa62000484565b5b600083015167ffffffffffffffff811115620002cc57620002cb6200047f565b5b620002da858286016200025e565b925050602083015167ffffffffffffffff811115620002fe57620002fd6200047f565b5b6200030c858286016200025e565b9150509250929050565b60006200032262000335565b9050620003308282620003e1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200035d576200035c62000446565b5b620003688262000489565b9050602081019050919050565b60005b838110156200039557808201518184015260208101905062000378565b83811115620003a5576000848401525b50505050565b60006002820490506001821680620003c457607f821691505b60208210811415620003db57620003da62000417565b5b50919050565b620003ec8262000489565b810181811067ffffffffffffffff821117156200040e576200040d62000446565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61359580620004aa6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806355f804b3116100b857806395d89b411161007c57806395d89b4114610373578063a22cb46514610391578063b88d4fde146103ad578063c87b56dd146103c9578063e985e9c5146103f9578063f2fde38b1461042957610142565b806355f804b3146102cf5780636352211e146102eb57806370a082311461031b578063715018a61461034b5780638da5cb5b1461035557610142565b806318160ddd1161010a57806318160ddd146101fd57806323b872dd1461021b5780632cc188be146102375780632f745c591461025357806342842e0e146102835780634f6ccce71461029f57610142565b806301ffc9a714610147578063059076dc1461017757806306fdde0314610193578063081812fc146101b1578063095ea7b3146101e1575b600080fd5b610161600480360381019061015c9190612496565b610445565b60405161016e9190612928565b60405180910390f35b610191600480360381019061018c9190612539565b6104bf565b005b61019b61061b565b6040516101a89190612943565b60405180910390f35b6101cb60048036038101906101c69190612539565b6106ad565b6040516101d891906128c1565b60405180910390f35b6101fb60048036038101906101f69190612456565b610732565b005b61020561084a565b6040516102129190612be5565b60405180910390f35b61023560048036038101906102309190612340565b610857565b005b610251600480360381019061024c9190612539565b6108b7565b005b61026d60048036038101906102689190612456565b61093d565b60405161027a9190612be5565b60405180910390f35b61029d60048036038101906102989190612340565b6109e2565b005b6102b960048036038101906102b49190612539565b610a02565b6040516102c69190612be5565b60405180910390f35b6102e960048036038101906102e491906124f0565b610a73565b005b61030560048036038101906103009190612539565b610b09565b60405161031291906128c1565b60405180910390f35b610335600480360381019061033091906122d3565b610bbb565b6040516103429190612be5565b60405180910390f35b610353610c73565b005b61035d610cfb565b60405161036a91906128c1565b60405180910390f35b61037b610d25565b6040516103889190612943565b60405180910390f35b6103ab60048036038101906103a69190612416565b610db7565b005b6103c760048036038101906103c29190612393565b610f38565b005b6103e360048036038101906103de9190612539565b610f9a565b6040516103f09190612943565b60405180910390f35b610413600480360381019061040e9190612300565b611076565b6040516104209190612928565b60405180910390f35b610443600480360381019061043e91906122d3565b61110a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104b857506104b782611202565b5b9050919050565b6104c76112e4565b73ffffffffffffffffffffffffffffffffffffffff166104e5610cfb565b73ffffffffffffffffffffffffffffffffffffffff161461053b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053290612ae5565b60405180910390fd5b6000600b5411610580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057790612ba5565b60405180910390fd5b600b548161058c61084a565b6105969190612cbf565b11156105d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ce90612b45565b60405180910390fd5b60005b818110156106175760006105ec61084a565b9050600b548110156106035761060233826112ec565b5b50808061060f90612e62565b9150506105da565b5050565b60606000805461062a90612dff565b80601f016020809104026020016040519081016040528092919081815260200182805461065690612dff565b80156106a35780601f10610678576101008083540402835291602001916106a3565b820191906000526020600020905b81548152906001019060200180831161068657829003601f168201915b5050505050905090565b60006106b88261130a565b6106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90612ac5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061073d82610b09565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a590612b65565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107cd6112e4565b73ffffffffffffffffffffffffffffffffffffffff1614806107fc57506107fb816107f66112e4565b611076565b5b61083b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083290612a45565b60405180910390fd5b6108458383611376565b505050565b6000600880549050905090565b6108686108626112e4565b8261142f565b6108a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089e90612b85565b60405180910390fd5b6108b283838361150d565b505050565b6108bf6112e4565b73ffffffffffffffffffffffffffffffffffffffff166108dd610cfb565b73ffffffffffffffffffffffffffffffffffffffff1614610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90612ae5565b60405180910390fd5b80600b8190555050565b600061094883610bbb565b8210610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098090612965565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6109fd83838360405180602001604052806000815250610f38565b505050565b6000610a0c61084a565b8210610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490612bc5565b60405180910390fd5b60088281548110610a6157610a60612f38565b5b90600052602060002001549050919050565b610a7b6112e4565b73ffffffffffffffffffffffffffffffffffffffff16610a99610cfb565b73ffffffffffffffffffffffffffffffffffffffff1614610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690612ae5565b60405180910390fd5b80600c9080519060200190610b059291906120e7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990612a85565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612a65565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c7b6112e4565b73ffffffffffffffffffffffffffffffffffffffff16610c99610cfb565b73ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612ae5565b60405180910390fd5b610cf96000611769565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d3490612dff565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6090612dff565b8015610dad5780601f10610d8257610100808354040283529160200191610dad565b820191906000526020600020905b815481529060010190602001808311610d9057829003601f168201915b5050505050905090565b610dbf6112e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490612a05565b60405180910390fd5b8060056000610e3a6112e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ee76112e4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f2c9190612928565b60405180910390a35050565b610f49610f436112e4565b8361142f565b610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90612b85565b60405180910390fd5b610f948484848461182f565b50505050565b6060610fa58261130a565b610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90612b25565b60405180910390fd5b600c8054610ff190612dff565b80601f016020809104026020016040519081016040528092919081815260200182805461101d90612dff565b801561106a5780601f1061103f5761010080835404028352916020019161106a565b820191906000526020600020905b81548152906001019060200180831161104d57829003601f168201915b50505050509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111126112e4565b73ffffffffffffffffffffffffffffffffffffffff16611130610cfb565b73ffffffffffffffffffffffffffffffffffffffff1614611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612ae5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed906129a5565b60405180910390fd5b6111ff81611769565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112cd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806112dd57506112dc8261188b565b5b9050919050565b600033905090565b6113068282604051806020016040528060008152506118f5565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113e983610b09565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061143a8261130a565b611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090612a25565b60405180910390fd5b600061148483610b09565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114f357508373ffffffffffffffffffffffffffffffffffffffff166114db846106ad565b73ffffffffffffffffffffffffffffffffffffffff16145b8061150457506115038185611076565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661152d82610b09565b73ffffffffffffffffffffffffffffffffffffffff1614611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90612b05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea906129e5565b60405180910390fd5b6115fe838383611950565b611609600082611376565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116599190612d15565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b09190612cbf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61183a84848461150d565b61184684848484611a64565b611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90612985565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6118ff8383611bfb565b61190c6000848484611a64565b61194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290612985565b60405180910390fd5b505050565b61195b838383611dc9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561199e5761199981611dce565b6119dd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119dc576119db8382611e17565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2057611a1b81611f84565b611a5f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611a5e57611a5d8282612055565b5b5b505050565b6000611a858473ffffffffffffffffffffffffffffffffffffffff166120d4565b15611bee578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611aae6112e4565b8786866040518563ffffffff1660e01b8152600401611ad094939291906128dc565b602060405180830381600087803b158015611aea57600080fd5b505af1925050508015611b1b57506040513d601f19601f82011682018060405250810190611b1891906124c3565b60015b611b9e573d8060008114611b4b576040519150601f19603f3d011682016040523d82523d6000602084013e611b50565b606091505b50600081511415611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d90612985565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611bf3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6290612aa5565b60405180910390fd5b611c748161130a565b15611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab906129c5565b60405180910390fd5b611cc060008383611950565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d109190612cbf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611e2484610bbb565b611e2e9190612d15565b9050600060076000848152602001908152602001600020549050818114611f13576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611f989190612d15565b9050600060096000848152602001908152602001600020549050600060088381548110611fc857611fc7612f38565b5b906000526020600020015490508060088381548110611fea57611fe9612f38565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061203957612038612f09565b5b6001900381819060005260206000200160009055905550505050565b600061206083610bbb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546120f390612dff565b90600052602060002090601f016020900481019282612115576000855561215c565b82601f1061212e57805160ff191683800117855561215c565b8280016001018555821561215c579182015b8281111561215b578251825591602001919060010190612140565b5b509050612169919061216d565b5090565b5b8082111561218657600081600090555060010161216e565b5090565b600061219d61219884612c25565b612c00565b9050828152602081018484840111156121b9576121b8612f9b565b5b6121c4848285612dbd565b509392505050565b60006121df6121da84612c56565b612c00565b9050828152602081018484840111156121fb576121fa612f9b565b5b612206848285612dbd565b509392505050565b60008135905061221d81613503565b92915050565b6000813590506122328161351a565b92915050565b60008135905061224781613531565b92915050565b60008151905061225c81613531565b92915050565b600082601f83011261227757612276612f96565b5b813561228784826020860161218a565b91505092915050565b600082601f8301126122a5576122a4612f96565b5b81356122b58482602086016121cc565b91505092915050565b6000813590506122cd81613548565b92915050565b6000602082840312156122e9576122e8612fa5565b5b60006122f78482850161220e565b91505092915050565b6000806040838503121561231757612316612fa5565b5b60006123258582860161220e565b92505060206123368582860161220e565b9150509250929050565b60008060006060848603121561235957612358612fa5565b5b60006123678682870161220e565b93505060206123788682870161220e565b9250506040612389868287016122be565b9150509250925092565b600080600080608085870312156123ad576123ac612fa5565b5b60006123bb8782880161220e565b94505060206123cc8782880161220e565b93505060406123dd878288016122be565b925050606085013567ffffffffffffffff8111156123fe576123fd612fa0565b5b61240a87828801612262565b91505092959194509250565b6000806040838503121561242d5761242c612fa5565b5b600061243b8582860161220e565b925050602061244c85828601612223565b9150509250929050565b6000806040838503121561246d5761246c612fa5565b5b600061247b8582860161220e565b925050602061248c858286016122be565b9150509250929050565b6000602082840312156124ac576124ab612fa5565b5b60006124ba84828501612238565b91505092915050565b6000602082840312156124d9576124d8612fa5565b5b60006124e78482850161224d565b91505092915050565b60006020828403121561250657612505612fa5565b5b600082013567ffffffffffffffff81111561252457612523612fa0565b5b61253084828501612290565b91505092915050565b60006020828403121561254f5761254e612fa5565b5b600061255d848285016122be565b91505092915050565b61256f81612d49565b82525050565b61257e81612d5b565b82525050565b600061258f82612c87565b6125998185612c9d565b93506125a9818560208601612dcc565b6125b281612faa565b840191505092915050565b60006125c882612c92565b6125d28185612cae565b93506125e2818560208601612dcc565b6125eb81612faa565b840191505092915050565b6000612603602b83612cae565b915061260e82612fbb565b604082019050919050565b6000612626603283612cae565b91506126318261300a565b604082019050919050565b6000612649602683612cae565b915061265482613059565b604082019050919050565b600061266c601c83612cae565b9150612677826130a8565b602082019050919050565b600061268f602483612cae565b915061269a826130d1565b604082019050919050565b60006126b2601983612cae565b91506126bd82613120565b602082019050919050565b60006126d5602c83612cae565b91506126e082613149565b604082019050919050565b60006126f8603883612cae565b915061270382613198565b604082019050919050565b600061271b602a83612cae565b9150612726826131e7565b604082019050919050565b600061273e602983612cae565b915061274982613236565b604082019050919050565b6000612761602083612cae565b915061276c82613285565b602082019050919050565b6000612784602c83612cae565b915061278f826132ae565b604082019050919050565b60006127a7602083612cae565b91506127b2826132fd565b602082019050919050565b60006127ca602983612cae565b91506127d582613326565b604082019050919050565b60006127ed602f83612cae565b91506127f882613375565b604082019050919050565b6000612810602083612cae565b915061281b826133c4565b602082019050919050565b6000612833602183612cae565b915061283e826133ed565b604082019050919050565b6000612856603183612cae565b91506128618261343c565b604082019050919050565b6000612879601d83612cae565b91506128848261348b565b602082019050919050565b600061289c602c83612cae565b91506128a7826134b4565b604082019050919050565b6128bb81612db3565b82525050565b60006020820190506128d66000830184612566565b92915050565b60006080820190506128f16000830187612566565b6128fe6020830186612566565b61290b60408301856128b2565b818103606083015261291d8184612584565b905095945050505050565b600060208201905061293d6000830184612575565b92915050565b6000602082019050818103600083015261295d81846125bd565b905092915050565b6000602082019050818103600083015261297e816125f6565b9050919050565b6000602082019050818103600083015261299e81612619565b9050919050565b600060208201905081810360008301526129be8161263c565b9050919050565b600060208201905081810360008301526129de8161265f565b9050919050565b600060208201905081810360008301526129fe81612682565b9050919050565b60006020820190508181036000830152612a1e816126a5565b9050919050565b60006020820190508181036000830152612a3e816126c8565b9050919050565b60006020820190508181036000830152612a5e816126eb565b9050919050565b60006020820190508181036000830152612a7e8161270e565b9050919050565b60006020820190508181036000830152612a9e81612731565b9050919050565b60006020820190508181036000830152612abe81612754565b9050919050565b60006020820190508181036000830152612ade81612777565b9050919050565b60006020820190508181036000830152612afe8161279a565b9050919050565b60006020820190508181036000830152612b1e816127bd565b9050919050565b60006020820190508181036000830152612b3e816127e0565b9050919050565b60006020820190508181036000830152612b5e81612803565b9050919050565b60006020820190508181036000830152612b7e81612826565b9050919050565b60006020820190508181036000830152612b9e81612849565b9050919050565b60006020820190508181036000830152612bbe8161286c565b9050919050565b60006020820190508181036000830152612bde8161288f565b9050919050565b6000602082019050612bfa60008301846128b2565b92915050565b6000612c0a612c1b565b9050612c168282612e31565b919050565b6000604051905090565b600067ffffffffffffffff821115612c4057612c3f612f67565b5b612c4982612faa565b9050602081019050919050565b600067ffffffffffffffff821115612c7157612c70612f67565b5b612c7a82612faa565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612cca82612db3565b9150612cd583612db3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d0a57612d09612eab565b5b828201905092915050565b6000612d2082612db3565b9150612d2b83612db3565b925082821015612d3e57612d3d612eab565b5b828203905092915050565b6000612d5482612d93565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612dea578082015181840152602081019050612dcf565b83811115612df9576000848401525b50505050565b60006002820490506001821680612e1757607f821691505b60208210811415612e2b57612e2a612eda565b5b50919050565b612e3a82612faa565b810181811067ffffffffffffffff82111715612e5957612e58612f67565b5b80604052505050565b6000612e6d82612db3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ea057612e9f612eab565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c642065786365656420746f6b656e206c696d6974600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536574206d696e74206c696d6974206265666f7265206d696e74696e67000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61350c81612d49565b811461351757600080fd5b50565b61352381612d5b565b811461352e57600080fd5b50565b61353a81612d67565b811461354557600080fd5b50565b61355181612db3565b811461355c57600080fd5b5056fea2646970667358221220af32b5d2167008db09880ab6eafc69521040a9393c73c7cf14da1afec3b7392364736f6c63430008060033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012426f7265644170654261736b657462616c6c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034241420000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c806355f804b3116100b857806395d89b411161007c57806395d89b4114610373578063a22cb46514610391578063b88d4fde146103ad578063c87b56dd146103c9578063e985e9c5146103f9578063f2fde38b1461042957610142565b806355f804b3146102cf5780636352211e146102eb57806370a082311461031b578063715018a61461034b5780638da5cb5b1461035557610142565b806318160ddd1161010a57806318160ddd146101fd57806323b872dd1461021b5780632cc188be146102375780632f745c591461025357806342842e0e146102835780634f6ccce71461029f57610142565b806301ffc9a714610147578063059076dc1461017757806306fdde0314610193578063081812fc146101b1578063095ea7b3146101e1575b600080fd5b610161600480360381019061015c9190612496565b610445565b60405161016e9190612928565b60405180910390f35b610191600480360381019061018c9190612539565b6104bf565b005b61019b61061b565b6040516101a89190612943565b60405180910390f35b6101cb60048036038101906101c69190612539565b6106ad565b6040516101d891906128c1565b60405180910390f35b6101fb60048036038101906101f69190612456565b610732565b005b61020561084a565b6040516102129190612be5565b60405180910390f35b61023560048036038101906102309190612340565b610857565b005b610251600480360381019061024c9190612539565b6108b7565b005b61026d60048036038101906102689190612456565b61093d565b60405161027a9190612be5565b60405180910390f35b61029d60048036038101906102989190612340565b6109e2565b005b6102b960048036038101906102b49190612539565b610a02565b6040516102c69190612be5565b60405180910390f35b6102e960048036038101906102e491906124f0565b610a73565b005b61030560048036038101906103009190612539565b610b09565b60405161031291906128c1565b60405180910390f35b610335600480360381019061033091906122d3565b610bbb565b6040516103429190612be5565b60405180910390f35b610353610c73565b005b61035d610cfb565b60405161036a91906128c1565b60405180910390f35b61037b610d25565b6040516103889190612943565b60405180910390f35b6103ab60048036038101906103a69190612416565b610db7565b005b6103c760048036038101906103c29190612393565b610f38565b005b6103e360048036038101906103de9190612539565b610f9a565b6040516103f09190612943565b60405180910390f35b610413600480360381019061040e9190612300565b611076565b6040516104209190612928565b60405180910390f35b610443600480360381019061043e91906122d3565b61110a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104b857506104b782611202565b5b9050919050565b6104c76112e4565b73ffffffffffffffffffffffffffffffffffffffff166104e5610cfb565b73ffffffffffffffffffffffffffffffffffffffff161461053b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053290612ae5565b60405180910390fd5b6000600b5411610580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057790612ba5565b60405180910390fd5b600b548161058c61084a565b6105969190612cbf565b11156105d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ce90612b45565b60405180910390fd5b60005b818110156106175760006105ec61084a565b9050600b548110156106035761060233826112ec565b5b50808061060f90612e62565b9150506105da565b5050565b60606000805461062a90612dff565b80601f016020809104026020016040519081016040528092919081815260200182805461065690612dff565b80156106a35780601f10610678576101008083540402835291602001916106a3565b820191906000526020600020905b81548152906001019060200180831161068657829003601f168201915b5050505050905090565b60006106b88261130a565b6106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90612ac5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061073d82610b09565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a590612b65565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107cd6112e4565b73ffffffffffffffffffffffffffffffffffffffff1614806107fc57506107fb816107f66112e4565b611076565b5b61083b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083290612a45565b60405180910390fd5b6108458383611376565b505050565b6000600880549050905090565b6108686108626112e4565b8261142f565b6108a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089e90612b85565b60405180910390fd5b6108b283838361150d565b505050565b6108bf6112e4565b73ffffffffffffffffffffffffffffffffffffffff166108dd610cfb565b73ffffffffffffffffffffffffffffffffffffffff1614610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90612ae5565b60405180910390fd5b80600b8190555050565b600061094883610bbb565b8210610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098090612965565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6109fd83838360405180602001604052806000815250610f38565b505050565b6000610a0c61084a565b8210610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490612bc5565b60405180910390fd5b60088281548110610a6157610a60612f38565b5b90600052602060002001549050919050565b610a7b6112e4565b73ffffffffffffffffffffffffffffffffffffffff16610a99610cfb565b73ffffffffffffffffffffffffffffffffffffffff1614610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690612ae5565b60405180910390fd5b80600c9080519060200190610b059291906120e7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990612a85565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612a65565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c7b6112e4565b73ffffffffffffffffffffffffffffffffffffffff16610c99610cfb565b73ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612ae5565b60405180910390fd5b610cf96000611769565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d3490612dff565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6090612dff565b8015610dad5780601f10610d8257610100808354040283529160200191610dad565b820191906000526020600020905b815481529060010190602001808311610d9057829003601f168201915b5050505050905090565b610dbf6112e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490612a05565b60405180910390fd5b8060056000610e3a6112e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ee76112e4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f2c9190612928565b60405180910390a35050565b610f49610f436112e4565b8361142f565b610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90612b85565b60405180910390fd5b610f948484848461182f565b50505050565b6060610fa58261130a565b610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90612b25565b60405180910390fd5b600c8054610ff190612dff565b80601f016020809104026020016040519081016040528092919081815260200182805461101d90612dff565b801561106a5780601f1061103f5761010080835404028352916020019161106a565b820191906000526020600020905b81548152906001019060200180831161104d57829003601f168201915b50505050509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111126112e4565b73ffffffffffffffffffffffffffffffffffffffff16611130610cfb565b73ffffffffffffffffffffffffffffffffffffffff1614611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612ae5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed906129a5565b60405180910390fd5b6111ff81611769565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112cd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806112dd57506112dc8261188b565b5b9050919050565b600033905090565b6113068282604051806020016040528060008152506118f5565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113e983610b09565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061143a8261130a565b611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090612a25565b60405180910390fd5b600061148483610b09565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114f357508373ffffffffffffffffffffffffffffffffffffffff166114db846106ad565b73ffffffffffffffffffffffffffffffffffffffff16145b8061150457506115038185611076565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661152d82610b09565b73ffffffffffffffffffffffffffffffffffffffff1614611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90612b05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea906129e5565b60405180910390fd5b6115fe838383611950565b611609600082611376565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116599190612d15565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b09190612cbf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61183a84848461150d565b61184684848484611a64565b611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90612985565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6118ff8383611bfb565b61190c6000848484611a64565b61194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290612985565b60405180910390fd5b505050565b61195b838383611dc9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561199e5761199981611dce565b6119dd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119dc576119db8382611e17565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2057611a1b81611f84565b611a5f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611a5e57611a5d8282612055565b5b5b505050565b6000611a858473ffffffffffffffffffffffffffffffffffffffff166120d4565b15611bee578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611aae6112e4565b8786866040518563ffffffff1660e01b8152600401611ad094939291906128dc565b602060405180830381600087803b158015611aea57600080fd5b505af1925050508015611b1b57506040513d601f19601f82011682018060405250810190611b1891906124c3565b60015b611b9e573d8060008114611b4b576040519150601f19603f3d011682016040523d82523d6000602084013e611b50565b606091505b50600081511415611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d90612985565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611bf3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6290612aa5565b60405180910390fd5b611c748161130a565b15611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab906129c5565b60405180910390fd5b611cc060008383611950565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d109190612cbf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611e2484610bbb565b611e2e9190612d15565b9050600060076000848152602001908152602001600020549050818114611f13576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611f989190612d15565b9050600060096000848152602001908152602001600020549050600060088381548110611fc857611fc7612f38565b5b906000526020600020015490508060088381548110611fea57611fe9612f38565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061203957612038612f09565b5b6001900381819060005260206000200160009055905550505050565b600061206083610bbb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b8280546120f390612dff565b90600052602060002090601f016020900481019282612115576000855561215c565b82601f1061212e57805160ff191683800117855561215c565b8280016001018555821561215c579182015b8281111561215b578251825591602001919060010190612140565b5b509050612169919061216d565b5090565b5b8082111561218657600081600090555060010161216e565b5090565b600061219d61219884612c25565b612c00565b9050828152602081018484840111156121b9576121b8612f9b565b5b6121c4848285612dbd565b509392505050565b60006121df6121da84612c56565b612c00565b9050828152602081018484840111156121fb576121fa612f9b565b5b612206848285612dbd565b509392505050565b60008135905061221d81613503565b92915050565b6000813590506122328161351a565b92915050565b60008135905061224781613531565b92915050565b60008151905061225c81613531565b92915050565b600082601f83011261227757612276612f96565b5b813561228784826020860161218a565b91505092915050565b600082601f8301126122a5576122a4612f96565b5b81356122b58482602086016121cc565b91505092915050565b6000813590506122cd81613548565b92915050565b6000602082840312156122e9576122e8612fa5565b5b60006122f78482850161220e565b91505092915050565b6000806040838503121561231757612316612fa5565b5b60006123258582860161220e565b92505060206123368582860161220e565b9150509250929050565b60008060006060848603121561235957612358612fa5565b5b60006123678682870161220e565b93505060206123788682870161220e565b9250506040612389868287016122be565b9150509250925092565b600080600080608085870312156123ad576123ac612fa5565b5b60006123bb8782880161220e565b94505060206123cc8782880161220e565b93505060406123dd878288016122be565b925050606085013567ffffffffffffffff8111156123fe576123fd612fa0565b5b61240a87828801612262565b91505092959194509250565b6000806040838503121561242d5761242c612fa5565b5b600061243b8582860161220e565b925050602061244c85828601612223565b9150509250929050565b6000806040838503121561246d5761246c612fa5565b5b600061247b8582860161220e565b925050602061248c858286016122be565b9150509250929050565b6000602082840312156124ac576124ab612fa5565b5b60006124ba84828501612238565b91505092915050565b6000602082840312156124d9576124d8612fa5565b5b60006124e78482850161224d565b91505092915050565b60006020828403121561250657612505612fa5565b5b600082013567ffffffffffffffff81111561252457612523612fa0565b5b61253084828501612290565b91505092915050565b60006020828403121561254f5761254e612fa5565b5b600061255d848285016122be565b91505092915050565b61256f81612d49565b82525050565b61257e81612d5b565b82525050565b600061258f82612c87565b6125998185612c9d565b93506125a9818560208601612dcc565b6125b281612faa565b840191505092915050565b60006125c882612c92565b6125d28185612cae565b93506125e2818560208601612dcc565b6125eb81612faa565b840191505092915050565b6000612603602b83612cae565b915061260e82612fbb565b604082019050919050565b6000612626603283612cae565b91506126318261300a565b604082019050919050565b6000612649602683612cae565b915061265482613059565b604082019050919050565b600061266c601c83612cae565b9150612677826130a8565b602082019050919050565b600061268f602483612cae565b915061269a826130d1565b604082019050919050565b60006126b2601983612cae565b91506126bd82613120565b602082019050919050565b60006126d5602c83612cae565b91506126e082613149565b604082019050919050565b60006126f8603883612cae565b915061270382613198565b604082019050919050565b600061271b602a83612cae565b9150612726826131e7565b604082019050919050565b600061273e602983612cae565b915061274982613236565b604082019050919050565b6000612761602083612cae565b915061276c82613285565b602082019050919050565b6000612784602c83612cae565b915061278f826132ae565b604082019050919050565b60006127a7602083612cae565b91506127b2826132fd565b602082019050919050565b60006127ca602983612cae565b91506127d582613326565b604082019050919050565b60006127ed602f83612cae565b91506127f882613375565b604082019050919050565b6000612810602083612cae565b915061281b826133c4565b602082019050919050565b6000612833602183612cae565b915061283e826133ed565b604082019050919050565b6000612856603183612cae565b91506128618261343c565b604082019050919050565b6000612879601d83612cae565b91506128848261348b565b602082019050919050565b600061289c602c83612cae565b91506128a7826134b4565b604082019050919050565b6128bb81612db3565b82525050565b60006020820190506128d66000830184612566565b92915050565b60006080820190506128f16000830187612566565b6128fe6020830186612566565b61290b60408301856128b2565b818103606083015261291d8184612584565b905095945050505050565b600060208201905061293d6000830184612575565b92915050565b6000602082019050818103600083015261295d81846125bd565b905092915050565b6000602082019050818103600083015261297e816125f6565b9050919050565b6000602082019050818103600083015261299e81612619565b9050919050565b600060208201905081810360008301526129be8161263c565b9050919050565b600060208201905081810360008301526129de8161265f565b9050919050565b600060208201905081810360008301526129fe81612682565b9050919050565b60006020820190508181036000830152612a1e816126a5565b9050919050565b60006020820190508181036000830152612a3e816126c8565b9050919050565b60006020820190508181036000830152612a5e816126eb565b9050919050565b60006020820190508181036000830152612a7e8161270e565b9050919050565b60006020820190508181036000830152612a9e81612731565b9050919050565b60006020820190508181036000830152612abe81612754565b9050919050565b60006020820190508181036000830152612ade81612777565b9050919050565b60006020820190508181036000830152612afe8161279a565b9050919050565b60006020820190508181036000830152612b1e816127bd565b9050919050565b60006020820190508181036000830152612b3e816127e0565b9050919050565b60006020820190508181036000830152612b5e81612803565b9050919050565b60006020820190508181036000830152612b7e81612826565b9050919050565b60006020820190508181036000830152612b9e81612849565b9050919050565b60006020820190508181036000830152612bbe8161286c565b9050919050565b60006020820190508181036000830152612bde8161288f565b9050919050565b6000602082019050612bfa60008301846128b2565b92915050565b6000612c0a612c1b565b9050612c168282612e31565b919050565b6000604051905090565b600067ffffffffffffffff821115612c4057612c3f612f67565b5b612c4982612faa565b9050602081019050919050565b600067ffffffffffffffff821115612c7157612c70612f67565b5b612c7a82612faa565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612cca82612db3565b9150612cd583612db3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d0a57612d09612eab565b5b828201905092915050565b6000612d2082612db3565b9150612d2b83612db3565b925082821015612d3e57612d3d612eab565b5b828203905092915050565b6000612d5482612d93565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612dea578082015181840152602081019050612dcf565b83811115612df9576000848401525b50505050565b60006002820490506001821680612e1757607f821691505b60208210811415612e2b57612e2a612eda565b5b50919050565b612e3a82612faa565b810181811067ffffffffffffffff82111715612e5957612e58612f67565b5b80604052505050565b6000612e6d82612db3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ea057612e9f612eab565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c642065786365656420746f6b656e206c696d6974600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536574206d696e74206c696d6974206265666f7265206d696e74696e67000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61350c81612d49565b811461351757600080fd5b50565b61352381612d5b565b811461352e57600080fd5b50565b61353a81612d67565b811461354557600080fd5b50565b61355181612db3565b811461355c57600080fd5b5056fea2646970667358221220af32b5d2167008db09880ab6eafc69521040a9393c73c7cf14da1afec3b7392364736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012426f7265644170654261736b657462616c6c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034241420000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): BoredApeBasketball
Arg [1] : symbol (string): BAB
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 426f7265644170654261736b657462616c6c0000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 4241420000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
41874:1074:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33518:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42085:445;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20628:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22187:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21710:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34158:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23077:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42538:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33826:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23487:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34348:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42855:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20322:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20052:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41235:94;;;:::i;:::-;;40584:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20797:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22480:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23743:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42639:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22846:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41484:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33518:224;33620:4;33659:35;33644:50;;;:11;:50;;;;:90;;;;33698:36;33722:11;33698:23;:36::i;:::-;33644:90;33637:97;;33518:224;;;:::o;42085:445::-;40815:12;:10;:12::i;:::-;40804:23;;:7;:5;:7::i;:::-;:23;;;40796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42174:1:::1;42163:8;;:12;42155:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;42256:8;;42244;42228:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:36;;42220:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42316:6;42312:211;42332:8;42328:1;:12;42312:211;;;42362:14;42379:13;:11;:13::i;:::-;42362:30;;42423:8;;42411:9;:20;42407:105;;;42452:32;42462:10;42474:9;42452;:32::i;:::-;42407:105;42347:176;42342:3;;;;;:::i;:::-;;;;42312:211;;;;42085:445:::0;:::o;20628:100::-;20682:13;20715:5;20708:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20628:100;:::o;22187:221::-;22263:7;22291:16;22299:7;22291;:16::i;:::-;22283:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22376:15;:24;22392:7;22376:24;;;;;;;;;;;;;;;;;;;;;22369:31;;22187:221;;;:::o;21710:411::-;21791:13;21807:23;21822:7;21807:14;:23::i;:::-;21791:39;;21855:5;21849:11;;:2;:11;;;;21841:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21949:5;21933:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21958:37;21975:5;21982:12;:10;:12::i;:::-;21958:16;:37::i;:::-;21933:62;21911:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22092:21;22101:2;22105:7;22092:8;:21::i;:::-;21780:341;21710:411;;:::o;34158:113::-;34219:7;34246:10;:17;;;;34239:24;;34158:113;:::o;23077:339::-;23272:41;23291:12;:10;:12::i;:::-;23305:7;23272:18;:41::i;:::-;23264:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23380:28;23390:4;23396:2;23400:7;23380:9;:28::i;:::-;23077:339;;;:::o;42538:93::-;40815:12;:10;:12::i;:::-;40804:23;;:7;:5;:7::i;:::-;:23;;;40796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42615:8:::1;42604;:19;;;;42538:93:::0;:::o;33826:256::-;33923:7;33959:23;33976:5;33959:16;:23::i;:::-;33951:5;:31;33943:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34048:12;:19;34061:5;34048:19;;;;;;;;;;;;;;;:26;34068:5;34048:26;;;;;;;;;;;;34041:33;;33826:256;;;;:::o;23487:185::-;23625:39;23642:4;23648:2;23652:7;23625:39;;;;;;;;;;;;:16;:39::i;:::-;23487:185;;;:::o;34348:233::-;34423:7;34459:30;:28;:30::i;:::-;34451:5;:38;34443:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34556:10;34567:5;34556:17;;;;;;;;:::i;:::-;;;;;;;;;;34549:24;;34348:233;;;:::o;42855:90::-;40815:12;:10;:12::i;:::-;40804:23;;:7;:5;:7::i;:::-;:23;;;40796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42934:3:::1;42924:7;:13;;;;;;;;;;;;:::i;:::-;;42855:90:::0;:::o;20322:239::-;20394:7;20414:13;20430:7;:16;20438:7;20430:16;;;;;;;;;;;;;;;;;;;;;20414:32;;20482:1;20465:19;;:5;:19;;;;20457:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20548:5;20541:12;;;20322:239;;;:::o;20052:208::-;20124:7;20169:1;20152:19;;:5;:19;;;;20144:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20236:9;:16;20246:5;20236:16;;;;;;;;;;;;;;;;20229:23;;20052:208;;;:::o;41235:94::-;40815:12;:10;:12::i;:::-;40804:23;;:7;:5;:7::i;:::-;:23;;;40796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41300:21:::1;41318:1;41300:9;:21::i;:::-;41235:94::o:0;40584:87::-;40630:7;40657:6;;;;;;;;;;;40650:13;;40584:87;:::o;20797:104::-;20853:13;20886:7;20879:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20797:104;:::o;22480:295::-;22595:12;:10;:12::i;:::-;22583:24;;:8;:24;;;;22575:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22695:8;22650:18;:32;22669:12;:10;:12::i;:::-;22650:32;;;;;;;;;;;;;;;:42;22683:8;22650:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22748:8;22719:48;;22734:12;:10;:12::i;:::-;22719:48;;;22758:8;22719:48;;;;;;:::i;:::-;;;;;;;;22480:295;;:::o;23743:328::-;23918:41;23937:12;:10;:12::i;:::-;23951:7;23918:18;:41::i;:::-;23910:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24024:39;24038:4;24044:2;24048:7;24057:5;24024:13;:39::i;:::-;23743:328;;;;:::o;42639:208::-;42712:13;42746:16;42754:7;42746;:16::i;:::-;42738:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42832:7;42825:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42639:208;;;:::o;22846:164::-;22943:4;22967:18;:25;22986:5;22967:25;;;;;;;;;;;;;;;:35;22993:8;22967:35;;;;;;;;;;;;;;;;;;;;;;;;;22960:42;;22846:164;;;;:::o;41484:192::-;40815:12;:10;:12::i;:::-;40804:23;;:7;:5;:7::i;:::-;:23;;;40796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41593:1:::1;41573:22;;:8;:22;;;;41565:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41649:19;41659:8;41649:9;:19::i;:::-;41484:192:::0;:::o;19683:305::-;19785:4;19837:25;19822:40;;;:11;:40;;;;:105;;;;19894:33;19879:48;;;:11;:48;;;;19822:105;:158;;;;19944:36;19968:11;19944:23;:36::i;:::-;19822:158;19802:178;;19683:305;;;:::o;15363:98::-;15416:7;15443:10;15436:17;;15363:98;:::o;26565:110::-;26641:26;26651:2;26655:7;26641:26;;;;;;;;;;;;:9;:26::i;:::-;26565:110;;:::o;25581:127::-;25646:4;25698:1;25670:30;;:7;:16;25678:7;25670:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25663:37;;25581:127;;;:::o;29563:174::-;29665:2;29638:15;:24;29654:7;29638:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29721:7;29717:2;29683:46;;29692:23;29707:7;29692:14;:23::i;:::-;29683:46;;;;;;;;;;;;29563:174;;:::o;25875:348::-;25968:4;25993:16;26001:7;25993;:16::i;:::-;25985:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26069:13;26085:23;26100:7;26085:14;:23::i;:::-;26069:39;;26138:5;26127:16;;:7;:16;;;:51;;;;26171:7;26147:31;;:20;26159:7;26147:11;:20::i;:::-;:31;;;26127:51;:87;;;;26182:32;26199:5;26206:7;26182:16;:32::i;:::-;26127:87;26119:96;;;25875:348;;;;:::o;28867:578::-;29026:4;28999:31;;:23;29014:7;28999:14;:23::i;:::-;:31;;;28991:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29109:1;29095:16;;:2;:16;;;;29087:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29165:39;29186:4;29192:2;29196:7;29165:20;:39::i;:::-;29269:29;29286:1;29290:7;29269:8;:29::i;:::-;29330:1;29311:9;:15;29321:4;29311:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29359:1;29342:9;:13;29352:2;29342:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29390:2;29371:7;:16;29379:7;29371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29429:7;29425:2;29410:27;;29419:4;29410:27;;;;;;;;;;;;28867:578;;;:::o;41684:173::-;41740:16;41759:6;;;;;;;;;;;41740:25;;41785:8;41776:6;;:17;;;;;;;;;;;;;;;;;;41840:8;41809:40;;41830:8;41809:40;;;;;;;;;;;;41729:128;41684:173;:::o;24953:315::-;25110:28;25120:4;25126:2;25130:7;25110:9;:28::i;:::-;25157:48;25180:4;25186:2;25190:7;25199:5;25157:22;:48::i;:::-;25149:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24953:315;;;;:::o;18272:157::-;18357:4;18396:25;18381:40;;;:11;:40;;;;18374:47;;18272:157;;;:::o;26902:321::-;27032:18;27038:2;27042:7;27032:5;:18::i;:::-;27083:54;27114:1;27118:2;27122:7;27131:5;27083:22;:54::i;:::-;27061:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26902:321;;;:::o;35194:589::-;35338:45;35365:4;35371:2;35375:7;35338:26;:45::i;:::-;35416:1;35400:18;;:4;:18;;;35396:187;;;35435:40;35467:7;35435:31;:40::i;:::-;35396:187;;;35505:2;35497:10;;:4;:10;;;35493:90;;35524:47;35557:4;35563:7;35524:32;:47::i;:::-;35493:90;35396:187;35611:1;35597:16;;:2;:16;;;35593:183;;;35630:45;35667:7;35630:36;:45::i;:::-;35593:183;;;35703:4;35697:10;;:2;:10;;;35693:83;;35724:40;35752:2;35756:7;35724:27;:40::i;:::-;35693:83;35593:183;35194:589;;;:::o;30302:803::-;30457:4;30478:15;:2;:13;;;:15::i;:::-;30474:624;;;30530:2;30514:36;;;30551:12;:10;:12::i;:::-;30565:4;30571:7;30580:5;30514:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30510:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30777:1;30760:6;:13;:18;30756:272;;;30803:60;;;;;;;;;;:::i;:::-;;;;;;;;30756:272;30978:6;30972:13;30963:6;30959:2;30955:15;30948:38;30510:533;30647:45;;;30637:55;;;:6;:55;;;;30630:62;;;;;30474:624;31082:4;31075:11;;30302:803;;;;;;;:::o;27559:382::-;27653:1;27639:16;;:2;:16;;;;27631:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27712:16;27720:7;27712;:16::i;:::-;27711:17;27703:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27774:45;27803:1;27807:2;27811:7;27774:20;:45::i;:::-;27849:1;27832:9;:13;27842:2;27832:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27880:2;27861:7;:16;27869:7;27861:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27925:7;27921:2;27900:33;;27917:1;27900:33;;;;;;;;;;;;27559:382;;:::o;31677:126::-;;;;:::o;36506:164::-;36610:10;:17;;;;36583:15;:24;36599:7;36583:24;;;;;;;;;;;:44;;;;36638:10;36654:7;36638:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36506:164;:::o;37297:988::-;37563:22;37613:1;37588:22;37605:4;37588:16;:22::i;:::-;:26;;;;:::i;:::-;37563:51;;37625:18;37646:17;:26;37664:7;37646:26;;;;;;;;;;;;37625:47;;37793:14;37779:10;:28;37775:328;;37824:19;37846:12;:18;37859:4;37846:18;;;;;;;;;;;;;;;:34;37865:14;37846:34;;;;;;;;;;;;37824:56;;37930:11;37897:12;:18;37910:4;37897:18;;;;;;;;;;;;;;;:30;37916:10;37897:30;;;;;;;;;;;:44;;;;38047:10;38014:17;:30;38032:11;38014:30;;;;;;;;;;;:43;;;;37809:294;37775:328;38199:17;:26;38217:7;38199:26;;;;;;;;;;;38192:33;;;38243:12;:18;38256:4;38243:18;;;;;;;;;;;;;;;:34;38262:14;38243:34;;;;;;;;;;;38236:41;;;37378:907;;37297:988;;:::o;38580:1079::-;38833:22;38878:1;38858:10;:17;;;;:21;;;;:::i;:::-;38833:46;;38890:18;38911:15;:24;38927:7;38911:24;;;;;;;;;;;;38890:45;;39262:19;39284:10;39295:14;39284:26;;;;;;;;:::i;:::-;;;;;;;;;;39262:48;;39348:11;39323:10;39334;39323:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39459:10;39428:15;:28;39444:11;39428:28;;;;;;;;;;;:41;;;;39600:15;:24;39616:7;39600:24;;;;;;;;;;;39593:31;;;39635:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38651:1008;;;38580:1079;:::o;36084:221::-;36169:14;36186:20;36203:2;36186:16;:20::i;:::-;36169:37;;36244:7;36217:12;:16;36230:2;36217:16;;;;;;;;;;;;;;;:24;36234:6;36217:24;;;;;;;;;;;:34;;;;36291:6;36262:17;:26;36280:7;36262:26;;;;;;;;;;;:35;;;;36158:147;36084:221;;:::o;7706:387::-;7766:4;7974:12;8041:7;8029:20;8021:28;;8084:1;8077:4;:8;8070:15;;;7706:387;;;:::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:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::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:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;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;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;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;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;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:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;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;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;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;5223:391;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:2;;;5733:79;;:::i;:::-;5695:2;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5685:262;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6077:79;;:::i;:::-;6039:2;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;6029:273;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:2;;;6432:79;;:::i;:::-;6394:2;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:2;;;6632:79;;:::i;:::-;6596:2;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6384:433;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:2;;;6937:79;;:::i;:::-;6899:2;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6889:263;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7223:53;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7341:50;;:::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;;;;;:::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;;;;;:::o;8133:366::-;8275:3;8296:67;8360:2;8355:3;8296:67;:::i;:::-;8289:74;;8372:93;8461:3;8372:93;:::i;:::-;8490:2;8485:3;8481:12;8474:19;;8279:220;;;:::o;8505:366::-;8647:3;8668:67;8732:2;8727:3;8668:67;:::i;:::-;8661:74;;8744:93;8833:3;8744:93;:::i;:::-;8862:2;8857:3;8853:12;8846:19;;8651:220;;;:::o;8877:366::-;9019:3;9040:67;9104:2;9099:3;9040:67;:::i;:::-;9033:74;;9116:93;9205:3;9116:93;:::i;:::-;9234:2;9229:3;9225:12;9218:19;;9023:220;;;:::o;9249:366::-;9391:3;9412:67;9476:2;9471:3;9412:67;:::i;:::-;9405:74;;9488:93;9577:3;9488:93;:::i;:::-;9606:2;9601:3;9597:12;9590:19;;9395:220;;;:::o;9621:366::-;9763:3;9784:67;9848:2;9843:3;9784:67;:::i;:::-;9777:74;;9860:93;9949:3;9860:93;:::i;:::-;9978:2;9973:3;9969:12;9962:19;;9767:220;;;:::o;9993:366::-;10135:3;10156:67;10220:2;10215:3;10156:67;:::i;:::-;10149:74;;10232:93;10321:3;10232:93;:::i;:::-;10350:2;10345:3;10341:12;10334:19;;10139:220;;;:::o;10365:366::-;10507:3;10528:67;10592:2;10587:3;10528:67;:::i;:::-;10521:74;;10604:93;10693:3;10604:93;:::i;:::-;10722:2;10717:3;10713:12;10706:19;;10511:220;;;:::o;10737:366::-;10879:3;10900:67;10964:2;10959:3;10900:67;:::i;:::-;10893:74;;10976:93;11065:3;10976:93;:::i;:::-;11094:2;11089:3;11085:12;11078:19;;10883:220;;;:::o;11109:366::-;11251:3;11272:67;11336:2;11331:3;11272:67;:::i;:::-;11265:74;;11348:93;11437:3;11348:93;:::i;:::-;11466:2;11461:3;11457:12;11450:19;;11255:220;;;:::o;11481:366::-;11623:3;11644:67;11708:2;11703:3;11644:67;:::i;:::-;11637:74;;11720:93;11809:3;11720:93;:::i;:::-;11838:2;11833:3;11829:12;11822:19;;11627:220;;;:::o;11853:366::-;11995:3;12016:67;12080:2;12075:3;12016:67;:::i;:::-;12009:74;;12092:93;12181:3;12092:93;:::i;:::-;12210:2;12205:3;12201:12;12194:19;;11999:220;;;:::o;12225:366::-;12367:3;12388:67;12452:2;12447:3;12388:67;:::i;:::-;12381:74;;12464:93;12553:3;12464:93;:::i;:::-;12582:2;12577:3;12573:12;12566:19;;12371:220;;;:::o;12597:366::-;12739:3;12760:67;12824:2;12819:3;12760:67;:::i;:::-;12753:74;;12836:93;12925:3;12836:93;:::i;:::-;12954:2;12949:3;12945:12;12938:19;;12743:220;;;:::o;12969:366::-;13111:3;13132:67;13196:2;13191:3;13132:67;:::i;:::-;13125:74;;13208:93;13297:3;13208:93;:::i;:::-;13326:2;13321:3;13317:12;13310:19;;13115:220;;;:::o;13341:366::-;13483:3;13504:67;13568:2;13563:3;13504:67;:::i;:::-;13497:74;;13580:93;13669:3;13580:93;:::i;:::-;13698:2;13693:3;13689:12;13682:19;;13487:220;;;:::o;13713:366::-;13855:3;13876:67;13940:2;13935:3;13876:67;:::i;:::-;13869:74;;13952:93;14041:3;13952:93;:::i;:::-;14070:2;14065:3;14061:12;14054:19;;13859:220;;;:::o;14085:366::-;14227:3;14248:67;14312:2;14307:3;14248:67;:::i;:::-;14241:74;;14324:93;14413:3;14324:93;:::i;:::-;14442:2;14437:3;14433:12;14426:19;;14231:220;;;:::o;14457:366::-;14599:3;14620:67;14684:2;14679:3;14620:67;:::i;:::-;14613:74;;14696:93;14785:3;14696:93;:::i;:::-;14814:2;14809:3;14805:12;14798:19;;14603:220;;;:::o;14829:366::-;14971:3;14992:67;15056:2;15051:3;14992:67;:::i;:::-;14985:74;;15068:93;15157:3;15068:93;:::i;:::-;15186:2;15181:3;15177:12;15170:19;;14975:220;;;:::o;15201:366::-;15343:3;15364:67;15428:2;15423:3;15364:67;:::i;:::-;15357:74;;15440:93;15529:3;15440:93;:::i;:::-;15558:2;15553:3;15549:12;15542:19;;15347:220;;;:::o;15573:118::-;15660:24;15678:5;15660:24;:::i;:::-;15655:3;15648:37;15638:53;;:::o;15697:222::-;15790:4;15828:2;15817:9;15813:18;15805:26;;15841:71;15909:1;15898:9;15894:17;15885:6;15841:71;:::i;:::-;15795:124;;;;:::o;15925:640::-;16120:4;16158:3;16147:9;16143:19;16135:27;;16172:71;16240:1;16229:9;16225:17;16216:6;16172:71;:::i;:::-;16253:72;16321:2;16310:9;16306:18;16297:6;16253:72;:::i;:::-;16335;16403:2;16392:9;16388:18;16379:6;16335:72;:::i;:::-;16454:9;16448:4;16444:20;16439:2;16428:9;16424:18;16417:48;16482:76;16553:4;16544:6;16482:76;:::i;:::-;16474:84;;16125:440;;;;;;;:::o;16571:210::-;16658:4;16696:2;16685:9;16681:18;16673:26;;16709:65;16771:1;16760:9;16756:17;16747:6;16709:65;:::i;:::-;16663:118;;;;:::o;16787:313::-;16900:4;16938:2;16927:9;16923:18;16915:26;;16987:9;16981:4;16977:20;16973:1;16962:9;16958:17;16951:47;17015:78;17088:4;17079:6;17015:78;:::i;:::-;17007:86;;16905:195;;;;:::o;17106:419::-;17272:4;17310:2;17299:9;17295:18;17287:26;;17359:9;17353:4;17349:20;17345:1;17334:9;17330:17;17323:47;17387:131;17513:4;17387:131;:::i;:::-;17379:139;;17277:248;;;:::o;17531:419::-;17697:4;17735:2;17724:9;17720:18;17712:26;;17784:9;17778:4;17774:20;17770:1;17759:9;17755:17;17748:47;17812:131;17938:4;17812:131;:::i;:::-;17804:139;;17702:248;;;:::o;17956:419::-;18122:4;18160:2;18149:9;18145:18;18137:26;;18209:9;18203:4;18199:20;18195:1;18184:9;18180:17;18173:47;18237:131;18363:4;18237:131;:::i;:::-;18229:139;;18127:248;;;:::o;18381:419::-;18547:4;18585:2;18574:9;18570:18;18562:26;;18634:9;18628:4;18624:20;18620:1;18609:9;18605:17;18598:47;18662:131;18788:4;18662:131;:::i;:::-;18654:139;;18552:248;;;:::o;18806:419::-;18972:4;19010:2;18999:9;18995:18;18987:26;;19059:9;19053:4;19049:20;19045:1;19034:9;19030:17;19023:47;19087:131;19213:4;19087:131;:::i;:::-;19079:139;;18977:248;;;:::o;19231:419::-;19397:4;19435:2;19424:9;19420:18;19412:26;;19484:9;19478:4;19474:20;19470:1;19459:9;19455:17;19448:47;19512:131;19638:4;19512:131;:::i;:::-;19504:139;;19402:248;;;:::o;19656:419::-;19822:4;19860:2;19849:9;19845:18;19837:26;;19909:9;19903:4;19899:20;19895:1;19884:9;19880:17;19873:47;19937:131;20063:4;19937:131;:::i;:::-;19929:139;;19827:248;;;:::o;20081:419::-;20247:4;20285:2;20274:9;20270:18;20262:26;;20334:9;20328:4;20324:20;20320:1;20309:9;20305:17;20298:47;20362:131;20488:4;20362:131;:::i;:::-;20354:139;;20252:248;;;:::o;20506:419::-;20672:4;20710:2;20699:9;20695:18;20687:26;;20759:9;20753:4;20749:20;20745:1;20734:9;20730:17;20723:47;20787:131;20913:4;20787:131;:::i;:::-;20779:139;;20677:248;;;:::o;20931:419::-;21097:4;21135:2;21124:9;21120:18;21112:26;;21184:9;21178:4;21174:20;21170:1;21159:9;21155:17;21148:47;21212:131;21338:4;21212:131;:::i;:::-;21204:139;;21102:248;;;:::o;21356:419::-;21522:4;21560:2;21549:9;21545:18;21537:26;;21609:9;21603:4;21599:20;21595:1;21584:9;21580:17;21573:47;21637:131;21763:4;21637:131;:::i;:::-;21629:139;;21527:248;;;:::o;21781:419::-;21947:4;21985:2;21974:9;21970:18;21962:26;;22034:9;22028:4;22024:20;22020:1;22009:9;22005:17;21998:47;22062:131;22188:4;22062:131;:::i;:::-;22054:139;;21952:248;;;:::o;22206:419::-;22372:4;22410:2;22399:9;22395:18;22387:26;;22459:9;22453:4;22449:20;22445:1;22434:9;22430:17;22423:47;22487:131;22613:4;22487:131;:::i;:::-;22479:139;;22377:248;;;:::o;22631:419::-;22797:4;22835:2;22824:9;22820:18;22812:26;;22884:9;22878:4;22874:20;22870:1;22859:9;22855:17;22848:47;22912:131;23038:4;22912:131;:::i;:::-;22904:139;;22802:248;;;:::o;23056:419::-;23222:4;23260:2;23249:9;23245:18;23237:26;;23309:9;23303:4;23299:20;23295:1;23284:9;23280:17;23273:47;23337:131;23463:4;23337:131;:::i;:::-;23329:139;;23227:248;;;:::o;23481:419::-;23647:4;23685:2;23674:9;23670:18;23662:26;;23734:9;23728:4;23724:20;23720:1;23709:9;23705:17;23698:47;23762:131;23888:4;23762:131;:::i;:::-;23754:139;;23652:248;;;:::o;23906:419::-;24072:4;24110:2;24099:9;24095:18;24087:26;;24159:9;24153:4;24149:20;24145:1;24134:9;24130:17;24123:47;24187:131;24313:4;24187:131;:::i;:::-;24179:139;;24077:248;;;:::o;24331:419::-;24497:4;24535:2;24524:9;24520:18;24512:26;;24584:9;24578:4;24574:20;24570:1;24559:9;24555:17;24548:47;24612:131;24738:4;24612:131;:::i;:::-;24604:139;;24502:248;;;:::o;24756:419::-;24922:4;24960:2;24949:9;24945:18;24937:26;;25009:9;25003:4;24999:20;24995:1;24984:9;24980:17;24973:47;25037:131;25163:4;25037:131;:::i;:::-;25029:139;;24927:248;;;:::o;25181:419::-;25347:4;25385:2;25374:9;25370:18;25362:26;;25434:9;25428:4;25424:20;25420:1;25409:9;25405:17;25398:47;25462:131;25588:4;25462:131;:::i;:::-;25454:139;;25352:248;;;:::o;25606:222::-;25699:4;25737:2;25726:9;25722:18;25714:26;;25750:71;25818:1;25807:9;25803:17;25794:6;25750:71;:::i;:::-;25704:124;;;;:::o;25834:129::-;25868:6;25895:20;;:::i;:::-;25885:30;;25924:33;25952:4;25944:6;25924:33;:::i;:::-;25875:88;;;:::o;25969:75::-;26002:6;26035:2;26029:9;26019:19;;26009:35;:::o;26050:307::-;26111:4;26201:18;26193:6;26190:30;26187:2;;;26223:18;;:::i;:::-;26187:2;26261:29;26283:6;26261:29;:::i;:::-;26253:37;;26345:4;26339;26335:15;26327:23;;26116:241;;;:::o;26363:308::-;26425:4;26515:18;26507:6;26504:30;26501:2;;;26537:18;;:::i;:::-;26501:2;26575:29;26597:6;26575:29;:::i;:::-;26567:37;;26659:4;26653;26649:15;26641:23;;26430:241;;;:::o;26677:98::-;26728:6;26762:5;26756:12;26746:22;;26735:40;;;:::o;26781:99::-;26833:6;26867:5;26861:12;26851:22;;26840:40;;;:::o;26886:168::-;26969:11;27003:6;26998:3;26991:19;27043:4;27038:3;27034:14;27019:29;;26981:73;;;;:::o;27060:169::-;27144:11;27178:6;27173:3;27166:19;27218:4;27213:3;27209:14;27194:29;;27156:73;;;;:::o;27235:305::-;27275:3;27294:20;27312:1;27294:20;:::i;:::-;27289:25;;27328:20;27346:1;27328:20;:::i;:::-;27323:25;;27482:1;27414:66;27410:74;27407:1;27404:81;27401:2;;;27488:18;;:::i;:::-;27401:2;27532:1;27529;27525:9;27518:16;;27279:261;;;;:::o;27546:191::-;27586:4;27606:20;27624:1;27606:20;:::i;:::-;27601:25;;27640:20;27658:1;27640:20;:::i;:::-;27635:25;;27679:1;27676;27673:8;27670:2;;;27684:18;;:::i;:::-;27670:2;27729:1;27726;27722:9;27714:17;;27591:146;;;;:::o;27743:96::-;27780:7;27809:24;27827:5;27809:24;:::i;:::-;27798:35;;27788:51;;;:::o;27845:90::-;27879:7;27922:5;27915:13;27908:21;27897:32;;27887:48;;;:::o;27941:149::-;27977:7;28017:66;28010:5;28006:78;27995:89;;27985:105;;;:::o;28096:126::-;28133:7;28173:42;28166:5;28162:54;28151:65;;28141:81;;;:::o;28228:77::-;28265:7;28294:5;28283:16;;28273:32;;;:::o;28311:154::-;28395:6;28390:3;28385;28372:30;28457:1;28448:6;28443:3;28439:16;28432:27;28362:103;;;:::o;28471:307::-;28539:1;28549:113;28563:6;28560:1;28557:13;28549:113;;;28648:1;28643:3;28639:11;28633:18;28629:1;28624:3;28620:11;28613:39;28585:2;28582:1;28578:10;28573:15;;28549:113;;;28680:6;28677:1;28674:13;28671:2;;;28760:1;28751:6;28746:3;28742:16;28735:27;28671:2;28520:258;;;;:::o;28784:320::-;28828:6;28865:1;28859:4;28855:12;28845:22;;28912:1;28906:4;28902:12;28933:18;28923:2;;28989:4;28981:6;28977:17;28967:27;;28923:2;29051;29043:6;29040:14;29020:18;29017:38;29014:2;;;29070:18;;:::i;:::-;29014:2;28835:269;;;;:::o;29110:281::-;29193:27;29215:4;29193:27;:::i;:::-;29185:6;29181:40;29323:6;29311:10;29308:22;29287:18;29275:10;29272:34;29269:62;29266:2;;;29334:18;;:::i;:::-;29266:2;29374:10;29370:2;29363:22;29153:238;;;:::o;29397:233::-;29436:3;29459:24;29477:5;29459:24;:::i;:::-;29450:33;;29505:66;29498:5;29495:77;29492:2;;;29575:18;;:::i;:::-;29492:2;29622:1;29615:5;29611:13;29604:20;;29440:190;;;:::o;29636:180::-;29684:77;29681:1;29674:88;29781:4;29778:1;29771:15;29805:4;29802:1;29795:15;29822:180;29870:77;29867:1;29860:88;29967:4;29964:1;29957:15;29991:4;29988:1;29981:15;30008:180;30056:77;30053:1;30046:88;30153:4;30150:1;30143:15;30177:4;30174:1;30167:15;30194:180;30242:77;30239:1;30232:88;30339:4;30336:1;30329:15;30363:4;30360:1;30353:15;30380:180;30428:77;30425:1;30418:88;30525:4;30522:1;30515:15;30549:4;30546:1;30539:15;30566:117;30675:1;30672;30665:12;30689:117;30798:1;30795;30788:12;30812:117;30921:1;30918;30911:12;30935:117;31044:1;31041;31034:12;31058:102;31099:6;31150:2;31146:7;31141:2;31134:5;31130:14;31126:28;31116:38;;31106:54;;;:::o;31166:230::-;31306:34;31302:1;31294:6;31290:14;31283:58;31375:13;31370:2;31362:6;31358:15;31351:38;31272:124;:::o;31402:237::-;31542:34;31538:1;31530:6;31526:14;31519:58;31611:20;31606:2;31598:6;31594:15;31587:45;31508:131;:::o;31645:225::-;31785:34;31781:1;31773:6;31769:14;31762:58;31854:8;31849:2;31841:6;31837:15;31830:33;31751:119;:::o;31876:178::-;32016:30;32012:1;32004:6;32000:14;31993:54;31982:72;:::o;32060:223::-;32200:34;32196:1;32188:6;32184:14;32177:58;32269:6;32264:2;32256:6;32252:15;32245:31;32166:117;:::o;32289:175::-;32429:27;32425:1;32417:6;32413:14;32406:51;32395:69;:::o;32470:231::-;32610:34;32606:1;32598:6;32594:14;32587:58;32679:14;32674:2;32666:6;32662:15;32655:39;32576:125;:::o;32707:243::-;32847:34;32843:1;32835:6;32831:14;32824:58;32916:26;32911:2;32903:6;32899:15;32892:51;32813:137;:::o;32956:229::-;33096:34;33092:1;33084:6;33080:14;33073:58;33165:12;33160:2;33152:6;33148:15;33141:37;33062:123;:::o;33191:228::-;33331:34;33327:1;33319:6;33315:14;33308:58;33400:11;33395:2;33387:6;33383:15;33376:36;33297:122;:::o;33425:182::-;33565:34;33561:1;33553:6;33549:14;33542:58;33531:76;:::o;33613:231::-;33753:34;33749:1;33741:6;33737:14;33730:58;33822:14;33817:2;33809:6;33805:15;33798:39;33719:125;:::o;33850:182::-;33990:34;33986:1;33978:6;33974:14;33967:58;33956:76;:::o;34038:228::-;34178:34;34174:1;34166:6;34162:14;34155:58;34247:11;34242:2;34234:6;34230:15;34223:36;34144:122;:::o;34272:234::-;34412:34;34408:1;34400:6;34396:14;34389:58;34481:17;34476:2;34468:6;34464:15;34457:42;34378:128;:::o;34512:182::-;34652:34;34648:1;34640:6;34636:14;34629:58;34618:76;:::o;34700:220::-;34840:34;34836:1;34828:6;34824:14;34817:58;34909:3;34904:2;34896:6;34892:15;34885:28;34806:114;:::o;34926:236::-;35066:34;35062:1;35054:6;35050:14;35043:58;35135:19;35130:2;35122:6;35118:15;35111:44;35032:130;:::o;35168:179::-;35308:31;35304:1;35296:6;35292:14;35285:55;35274:73;:::o;35353:231::-;35493:34;35489:1;35481:6;35477:14;35470:58;35562:14;35557:2;35549:6;35545:15;35538:39;35459:125;:::o;35590:122::-;35663:24;35681:5;35663:24;:::i;:::-;35656:5;35653:35;35643:2;;35702:1;35699;35692:12;35643:2;35633:79;:::o;35718:116::-;35788:21;35803:5;35788:21;:::i;:::-;35781:5;35778:32;35768:2;;35824:1;35821;35814:12;35768:2;35758:76;:::o;35840:120::-;35912:23;35929:5;35912:23;:::i;:::-;35905:5;35902:34;35892:2;;35950:1;35947;35940:12;35892:2;35882:78;:::o;35966:122::-;36039:24;36057:5;36039:24;:::i;:::-;36032:5;36029:35;36019:2;;36078:1;36075;36068:12;36019:2;36009:79;:::o
Swarm Source
ipfs://af32b5d2167008db09880ab6eafc69521040a9393c73c7cf14da1afec3b73923
Loading...
Loading
OVERVIEW
One BAYC x round21 NFT was airdropped to every Bored Ape Kennel Club wallet on July 27th, 2021. The NFT doubles as your access to pre-order a limited-edition physical basketball, on sale only until August 4th, 2021.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.