ERC-721
NFT
Overview
Max Total Supply
2,777 BAR
Holders
886
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 BARLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BoredApeRacer
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./ERC721Enumerable.sol"; import "./Ownable.sol"; import "./SafeMath.sol"; import "./Strings.sol"; import "./ContentMixin.sol"; import "./NativeMetaTransaction.sol"; contract BoredApeRacer is ContextMixin, ERC721Enumerable, NativeMetaTransaction, Ownable { using SafeMath for uint256; uint256 private _currentTokenId = 0; uint256 MAX_SUPPLY = 10000; string public baseTokenURI; uint256 public startTime = 1630627200; event TokenBought(uint256 tokenId); constructor( string memory _name, string memory _symbol, string memory _uri ) ERC721(_name, _symbol) { baseTokenURI = _uri; _initializeEIP712(_name); } function mintTo(address _to) public onlyOwner { uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId); _incrementTokenId(); } function buy(uint256 _num) public payable { require(block.timestamp >= startTime, "It's not time yet"); require(_num > 0 && _num <= 20); require(msg.value == _num * 4e16); for (uint256 i = 0; i < _num; i++) { uint256 newTokenId = _getNextTokenId(); _mint(msg.sender, newTokenId); emit TokenBought(newTokenId); _incrementTokenId(); } } function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } function _getNextTokenId() private view returns (uint256) { return _currentTokenId.add(1); } function random() private view returns (uint256) { bytes32 txHash = keccak256( abi.encode(block.coinbase, block.timestamp, block.difficulty) ); return uint256(txHash); } function _incrementTokenId() private { require(_currentTokenId < MAX_SUPPLY); _currentTokenId++; } function setBaseUri(string memory _uri) external onlyOwner { baseTokenURI = _uri; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { return string(abi.encodePacked(baseTokenURI, Strings.toString(_tokenId))); } function _msgSender() internal view override returns (address sender) { return ContextMixin.msgSender(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract ContextMixin { function msgSender() internal view returns (address payable sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { sender = payable(msg.sender); } return sender; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {Initializable} from "./Initializable.sol"; contract EIP712Base is Initializable { struct EIP712Domain { string name; string version; address verifyingContract; bytes32 salt; } string public constant ERC712_VERSION = "1"; bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256( bytes( "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)" ) ); bytes32 internal domainSeperator; // supposed to be called once while initializing. // one of the contracts that inherits this contract follows proxy pattern // so it is not possible to do this in a constructor function _initializeEIP712(string memory name) internal initializer { _setDomainSeperator(name); } function _setDomainSeperator(string memory name) internal { domainSeperator = keccak256( abi.encode( EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(ERC712_VERSION)), address(this), bytes32(getChainId()) ) ); } function getDomainSeperator() public view returns (bytes32) { return domainSeperator; } function getChainId() public view returns (uint256) { uint256 id; assembly { id := chainid() } return id; } /** * Accept message hash and returns hash message in EIP712 compatible form * So that it can be used to recover signer from signature signed using EIP712 formatted data * https://eips.ethereum.org/EIPS/eip-712 * "\\x19" makes the encoding deterministic * "\\x01" is the version byte to make it compatible to EIP-191 */ function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) { return keccak256( abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash) ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @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.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 {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @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(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Initializable { bool inited = false; modifier initializer() { require(!inited, "already inited"); _; inited = true; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Migrations { address public owner; uint public last_completed_migration; constructor() { owner = msg.sender; } modifier restricted() { if (msg.sender == owner) _; } function setCompleted(uint completed) public restricted { last_completed_migration = completed; } function upgrade(address new_address) public restricted { Migrations upgraded = Migrations(new_address); upgraded.setCompleted(last_completed_migration); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {SafeMath} from "./SafeMath.sol"; import {EIP712Base} from "./EIP712Base.sol"; contract NativeMetaTransaction is EIP712Base { using SafeMath for uint256; bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256( bytes( "MetaTransaction(uint256 nonce,address from,bytes functionSignature)" ) ); event MetaTransactionExecuted( address userAddress, address payable relayerAddress, bytes functionSignature ); mapping(address => uint256) nonces; /* * Meta transaction structure. * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas * He should call the desired function directly in that case. */ struct MetaTransaction { uint256 nonce; address from; bytes functionSignature; } function executeMetaTransaction( address userAddress, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public payable returns (bytes memory) { MetaTransaction memory metaTx = MetaTransaction({ nonce: nonces[userAddress], from: userAddress, functionSignature: functionSignature }); require( verify(userAddress, metaTx, sigR, sigS, sigV), "Signer and signature do not match" ); // increase nonce for user (to avoid re-use) nonces[userAddress] = nonces[userAddress].add(1); emit MetaTransactionExecuted( userAddress, payable(msg.sender), functionSignature ); // Append userAddress and relayer address at the end to extract it from calling context (bool success, bytes memory returnData) = address(this).call( abi.encodePacked(functionSignature, userAddress) ); require(success, "Function call not successful"); return returnData; } function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) { return keccak256( abi.encode( META_TRANSACTION_TYPEHASH, metaTx.nonce, metaTx.from, keccak256(metaTx.functionSignature) ) ); } function getNonce(address user) public view returns (uint256 nonce) { nonce = nonces[user]; } function verify( address signer, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV ) internal view returns (bool) { require(signer != address(0), "NativeMetaTransaction: INVALID_SIGNER"); return signer == ecrecover( toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @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); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","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":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","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":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ERC712_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeperator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"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":"address","name":"_to","type":"address"}],"name":"mintTo","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":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a60006101000a81548160ff0219169083151502179055506000600e55612710600f5563613165806011553480156200003f57600080fd5b5060405162004ed738038062004ed78339818101604052810190620000659190620004ef565b828281600090805190602001906200007f929190620003c1565b50806001908051906020019062000098929190620003c1565b505050620000bb620000af620000ee60201b60201c565b6200010a60201b60201c565b8060109080519060200190620000d3929190620003c1565b50620000e583620001d060201b60201c565b5050506200086c565b6000620001056200025260201b6200186d1760201c565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600a60009054906101000a900460ff161562000223576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021a906200064e565b60405180910390fd5b62000234816200030560201b60201c565b6001600a60006101000a81548160ff02191690831515021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415620002fe57600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff81830151169250505062000302565b3390505b90565b6040518060800160405280604f815260200162004e88604f91398051906020012081805190602001206040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525080519060200120306200037c620003b460201b60201c565b60001b60405160200162000395959493929190620005f1565b60405160208183030381529060405280519060200120600b8190555050565b6000804690508091505090565b828054620003cf9062000754565b90600052602060002090601f016020900481019282620003f357600085556200043f565b82601f106200040e57805160ff19168380011785556200043f565b828001600101855582156200043f579182015b828111156200043e57825182559160200191906001019062000421565b5b5090506200044e919062000452565b5090565b5b808211156200046d57600081600090555060010162000453565b5090565b600062000488620004828462000699565b62000670565b905082815260208101848484011115620004a757620004a662000823565b5b620004b48482856200071e565b509392505050565b600082601f830112620004d457620004d36200081e565b5b8151620004e684826020860162000471565b91505092915050565b6000806000606084860312156200050b576200050a6200082d565b5b600084015167ffffffffffffffff8111156200052c576200052b62000828565b5b6200053a86828701620004bc565b935050602084015167ffffffffffffffff8111156200055e576200055d62000828565b5b6200056c86828701620004bc565b925050604084015167ffffffffffffffff81111562000590576200058f62000828565b5b6200059e86828701620004bc565b9150509250925092565b620005b381620006e0565b82525050565b620005c481620006f4565b82525050565b6000620005d9600e83620006cf565b9150620005e68262000843565b602082019050919050565b600060a082019050620006086000830188620005b9565b620006176020830187620005b9565b620006266040830186620005b9565b620006356060830185620005a8565b620006446080830184620005b9565b9695505050505050565b600060208201905081810360008301526200066981620005ca565b9050919050565b60006200067c6200068f565b90506200068a82826200078a565b919050565b6000604051905090565b600067ffffffffffffffff821115620006b757620006b6620007ef565b5b620006c28262000832565b9050602081019050919050565b600082825260208201905092915050565b6000620006ed82620006fe565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200073e57808201518184015260208101905062000721565b838111156200074e576000848401525b50505050565b600060028204905060018216806200076d57607f821691505b60208210811415620007845762000783620007c0565b5b50919050565b620007958262000832565b810181811067ffffffffffffffff82111715620007b757620007b6620007ef565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f616c726561647920696e69746564000000000000000000000000000000000000600082015250565b61460c806200087c6000396000f3fe6080604052600436106101cd5760003560e01c80636352211e116100f7578063a0bcfc7f11610095578063d547cfb711610064578063d547cfb71461068f578063d96a094a146106ba578063e985e9c5146106d6578063f2fde38b14610713576101cd565b8063a0bcfc7f146105d7578063a22cb46514610600578063b88d4fde14610629578063c87b56dd14610652576101cd565b8063755edd17116100d1578063755edd171461052d57806378e97925146105565780638da5cb5b1461058157806395d89b41146105ac576101cd565b80636352211e1461049c57806370a08231146104d9578063715018a614610516576101cd565b806320379ee51161016f5780633408e4701161013e5780633408e470146103f45780633ccfd60b1461041f57806342842e0e146104365780634f6ccce71461045f576101cd565b806320379ee51461032657806323b872dd146103515780632d0335ab1461037a5780632f745c59146103b7576101cd565b8063095ea7b3116101ab578063095ea7b3146102775780630c53c51c146102a05780630f7e5970146102d057806318160ddd146102fb576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612f69565b61073c565b6040516102069190613655565b60405180910390f35b34801561021b57600080fd5b506102246107b6565b6040516102319190613737565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061300c565b610848565b60405161026e91906135b0565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612f29565b6108cd565b005b6102ba60048036038101906102b59190612e92565b6109e5565b6040516102c79190613715565b60405180910390f35b3480156102dc57600080fd5b506102e5610c57565b6040516102f29190613737565b60405180910390f35b34801561030757600080fd5b50610310610c90565b60405161031d91906139f9565b60405180910390f35b34801561033257600080fd5b5061033b610c9d565b6040516103489190613670565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612d7c565b610ca7565b005b34801561038657600080fd5b506103a1600480360381019061039c9190612d0f565b610d07565b6040516103ae91906139f9565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190612f29565b610d50565b6040516103eb91906139f9565b60405180910390f35b34801561040057600080fd5b50610409610df5565b60405161041691906139f9565b60405180910390f35b34801561042b57600080fd5b50610434610e02565b005b34801561044257600080fd5b5061045d60048036038101906104589190612d7c565b610ece565b005b34801561046b57600080fd5b506104866004803603810190610481919061300c565b610eee565b60405161049391906139f9565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061300c565b610f5f565b6040516104d091906135b0565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612d0f565b611011565b60405161050d91906139f9565b60405180910390f35b34801561052257600080fd5b5061052b6110c9565b005b34801561053957600080fd5b50610554600480360381019061054f9190612d0f565b611151565b005b34801561056257600080fd5b5061056b6111ef565b60405161057891906139f9565b60405180910390f35b34801561058d57600080fd5b506105966111f5565b6040516105a391906135b0565b60405180910390f35b3480156105b857600080fd5b506105c161121f565b6040516105ce9190613737565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f99190612fc3565b6112b1565b005b34801561060c57600080fd5b5061062760048036038101906106229190612e52565b611347565b005b34801561063557600080fd5b50610650600480360381019061064b9190612dcf565b6114c8565b005b34801561065e57600080fd5b506106796004803603810190610674919061300c565b61152a565b6040516106869190613737565b60405180910390f35b34801561069b57600080fd5b506106a461155e565b6040516106b19190613737565b60405180910390f35b6106d460048036038101906106cf919061300c565b6115ec565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190612d3c565b6116e1565b60405161070a9190613655565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612d0f565b611775565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107af57506107ae8261191e565b5b9050919050565b6060600080546107c590613cf2565b80601f01602080910402602001604051908101604052809291908181526020018280546107f190613cf2565b801561083e5780601f106108135761010080835404028352916020019161083e565b820191906000526020600020905b81548152906001019060200180831161082157829003601f168201915b5050505050905090565b600061085382611a00565b610892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610889906138f9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108d882610f5f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090613979565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610968611a6c565b73ffffffffffffffffffffffffffffffffffffffff161480610997575061099681610991611a6c565b6116e1565b5b6109d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cd90613879565b60405180910390fd5b6109e08383611a7b565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610a688782878787611b34565b610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613959565b60405180910390fd5b610afa6001600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c3d90919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610b70939291906135cb565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610ba592919061352d565b604051602081830303815290604052604051610bc19190613516565b6000604051808303816000865af19150503d8060008114610bfe576040519150601f19603f3d011682016040523d82523d6000602084013e610c03565b606091505b509150915081610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f906137b9565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6000600880549050905090565b6000600b54905090565b610cb8610cb2611a6c565b82611c53565b610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613999565b60405180910390fd5b610d02838383611d31565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610d5b83611011565b8210610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390613759565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000804690508091505090565b610e0a611a6c565b73ffffffffffffffffffffffffffffffffffffffff16610e286111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590613919565b60405180910390fd5b610e866111f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ecb573d6000803e3d6000fd5b50565b610ee9838383604051806020016040528060008152506114c8565b505050565b6000610ef8610c90565b8210610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f30906139d9565b60405180910390fd5b60088281548110610f4d57610f4c613eb9565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff906138b9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613899565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110d1611a6c565b73ffffffffffffffffffffffffffffffffffffffff166110ef6111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613919565b60405180910390fd5b61114f6000611f8d565b565b611159611a6c565b73ffffffffffffffffffffffffffffffffffffffff166111776111f5565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490613919565b60405180910390fd5b60006111d7612053565b90506111e38282612070565b6111eb61223e565b5050565b60115481565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461122e90613cf2565b80601f016020809104026020016040519081016040528092919081815260200182805461125a90613cf2565b80156112a75780601f1061127c576101008083540402835291602001916112a7565b820191906000526020600020905b81548152906001019060200180831161128a57829003601f168201915b5050505050905090565b6112b9611a6c565b73ffffffffffffffffffffffffffffffffffffffff166112d76111f5565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613919565b60405180910390fd5b8060109080519060200190611343929190612af9565b5050565b61134f611a6c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613819565b60405180910390fd5b80600560006113ca611a6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611477611a6c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114bc9190613655565b60405180910390a35050565b6114d96114d3611a6c565b83611c53565b611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90613999565b60405180910390fd5b61152484848484612268565b50505050565b60606010611537836122c4565b604051602001611548929190613555565b6040516020818303038152906040529050919050565b6010805461156b90613cf2565b80601f016020809104026020016040519081016040528092919081815260200182805461159790613cf2565b80156115e45780601f106115b9576101008083540402835291602001916115e4565b820191906000526020600020905b8154815290600101906020018083116115c757829003601f168201915b505050505081565b601154421015611631576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611628906139b9565b60405180910390fd5b600081118015611642575060148111155b61164b57600080fd5b668e1bc9bf0400008161165e9190613b85565b341461166957600080fd5b60005b818110156116dd57600061167e612053565b905061168a3382612070565b7f5782b4799a39cbe194d6ee862b9cfe3d8e4f9e741e3f122be89e778aba8b9fff816040516116b991906139f9565b60405180910390a16116c961223e565b5080806116d590613d55565b91505061166c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61177d611a6c565b73ffffffffffffffffffffffffffffffffffffffff1661179b6111f5565b73ffffffffffffffffffffffffffffffffffffffff16146117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e890613919565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890613799565b60405180910390fd5b61186a81611f8d565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561191757600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff81830151169250505061191b565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119e957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119f957506119f882612425565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611a7661186d565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611aee83610f5f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613859565b60405180910390fd5b6001611bb8611bb38761248f565b6124f7565b83868660405160008152602001604052604051611bd894939291906136d0565b6020604051602081039080840390855afa158015611bfa573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611c4b9190613afe565b905092915050565b6000611c5e82611a00565b611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490613839565b60405180910390fd5b6000611ca883610f5f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d1757508373ffffffffffffffffffffffffffffffffffffffff16611cff84610848565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d285750611d2781856116e1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d5182610f5f565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90613939565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e906137f9565b60405180910390fd5b611e22838383612530565b611e2d600082611a7b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e7d9190613bdf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ed49190613afe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061206b6001600e54611c3d90919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906138d9565b60405180910390fd5b6120e981611a00565b15612129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612120906137d9565b60405180910390fd5b61213560008383612530565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121859190613afe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600f54600e541061224e57600080fd5b600e600081548092919061226190613d55565b9190505550565b612273848484611d31565b61227f84848484612644565b6122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613779565b60405180910390fd5b50505050565b6060600082141561230c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612420565b600082905060005b6000821461233e57808061232790613d55565b915050600a826123379190613b54565b9150612314565b60008167ffffffffffffffff81111561235a57612359613ee8565b5b6040519080825280601f01601f19166020018201604052801561238c5781602001600182028036833780820191505090505b5090505b60008514612419576001826123a59190613bdf565b9150600a856123b49190613dcc565b60306123c09190613afe565b60f81b8183815181106123d6576123d5613eb9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124129190613b54565b9450612390565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006040518060800160405280604381526020016145946043913980519060200120826000015183602001518460400151805190602001206040516020016124da949392919061368b565b604051602081830303815290604052805190602001209050919050565b6000612501610c9d565b82604051602001612513929190613579565b604051602081830303815290604052805190602001209050919050565b61253b8383836127db565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561257e57612579816127e0565b6125bd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125bc576125bb8382612829565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612600576125fb81612996565b61263f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461263e5761263d8282612a67565b5b5b505050565b60006126658473ffffffffffffffffffffffffffffffffffffffff16612ae6565b156127ce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261268e611a6c565b8786866040518563ffffffff1660e01b81526004016126b09493929190613609565b602060405180830381600087803b1580156126ca57600080fd5b505af19250505080156126fb57506040513d601f19601f820116820180604052508101906126f89190612f96565b60015b61277e573d806000811461272b576040519150601f19603f3d011682016040523d82523d6000602084013e612730565b606091505b50600081511415612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d90613779565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127d3565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161283684611011565b6128409190613bdf565b9050600060076000848152602001908152602001600020549050818114612925576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129aa9190613bdf565b90506000600960008481526020019081526020016000205490506000600883815481106129da576129d9613eb9565b5b9060005260206000200154905080600883815481106129fc576129fb613eb9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a4b57612a4a613e8a565b5b6001900381819060005260206000200160009055905550505050565b6000612a7283611011565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612b0590613cf2565b90600052602060002090601f016020900481019282612b275760008555612b6e565b82601f10612b4057805160ff1916838001178555612b6e565b82800160010185558215612b6e579182015b82811115612b6d578251825591602001919060010190612b52565b5b509050612b7b9190612b7f565b5090565b5b80821115612b98576000816000905550600101612b80565b5090565b6000612baf612baa84613a39565b613a14565b905082815260208101848484011115612bcb57612bca613f1c565b5b612bd6848285613cb0565b509392505050565b6000612bf1612bec84613a6a565b613a14565b905082815260208101848484011115612c0d57612c0c613f1c565b5b612c18848285613cb0565b509392505050565b600081359050612c2f81614509565b92915050565b600081359050612c4481614520565b92915050565b600081359050612c5981614537565b92915050565b600081359050612c6e8161454e565b92915050565b600081519050612c838161454e565b92915050565b600082601f830112612c9e57612c9d613f17565b5b8135612cae848260208601612b9c565b91505092915050565b600082601f830112612ccc57612ccb613f17565b5b8135612cdc848260208601612bde565b91505092915050565b600081359050612cf481614565565b92915050565b600081359050612d098161457c565b92915050565b600060208284031215612d2557612d24613f26565b5b6000612d3384828501612c20565b91505092915050565b60008060408385031215612d5357612d52613f26565b5b6000612d6185828601612c20565b9250506020612d7285828601612c20565b9150509250929050565b600080600060608486031215612d9557612d94613f26565b5b6000612da386828701612c20565b9350506020612db486828701612c20565b9250506040612dc586828701612ce5565b9150509250925092565b60008060008060808587031215612de957612de8613f26565b5b6000612df787828801612c20565b9450506020612e0887828801612c20565b9350506040612e1987828801612ce5565b925050606085013567ffffffffffffffff811115612e3a57612e39613f21565b5b612e4687828801612c89565b91505092959194509250565b60008060408385031215612e6957612e68613f26565b5b6000612e7785828601612c20565b9250506020612e8885828601612c35565b9150509250929050565b600080600080600060a08688031215612eae57612ead613f26565b5b6000612ebc88828901612c20565b955050602086013567ffffffffffffffff811115612edd57612edc613f21565b5b612ee988828901612c89565b9450506040612efa88828901612c4a565b9350506060612f0b88828901612c4a565b9250506080612f1c88828901612cfa565b9150509295509295909350565b60008060408385031215612f4057612f3f613f26565b5b6000612f4e85828601612c20565b9250506020612f5f85828601612ce5565b9150509250929050565b600060208284031215612f7f57612f7e613f26565b5b6000612f8d84828501612c5f565b91505092915050565b600060208284031215612fac57612fab613f26565b5b6000612fba84828501612c74565b91505092915050565b600060208284031215612fd957612fd8613f26565b5b600082013567ffffffffffffffff811115612ff757612ff6613f21565b5b61300384828501612cb7565b91505092915050565b60006020828403121561302257613021613f26565b5b600061303084828501612ce5565b91505092915050565b61304281613c25565b82525050565b61305181613c13565b82525050565b61306861306382613c13565b613d9e565b82525050565b61307781613c37565b82525050565b61308681613c43565b82525050565b61309d61309882613c43565b613db0565b82525050565b60006130ae82613ab0565b6130b88185613ac6565b93506130c8818560208601613cbf565b6130d181613f2b565b840191505092915050565b60006130e782613ab0565b6130f18185613ad7565b9350613101818560208601613cbf565b80840191505092915050565b600061311882613abb565b6131228185613ae2565b9350613132818560208601613cbf565b61313b81613f2b565b840191505092915050565b600061315182613abb565b61315b8185613af3565b935061316b818560208601613cbf565b80840191505092915050565b6000815461318481613cf2565b61318e8186613af3565b945060018216600081146131a957600181146131ba576131ed565b60ff198316865281860193506131ed565b6131c385613a9b565b60005b838110156131e5578154818901526001820191506020810190506131c6565b838801955050505b50505092915050565b6000613203602b83613ae2565b915061320e82613f49565b604082019050919050565b6000613226603283613ae2565b915061323182613f98565b604082019050919050565b6000613249602683613ae2565b915061325482613fe7565b604082019050919050565b600061326c601c83613ae2565b915061327782614036565b602082019050919050565b600061328f601c83613ae2565b915061329a8261405f565b602082019050919050565b60006132b2600283613af3565b91506132bd82614088565b600282019050919050565b60006132d5602483613ae2565b91506132e0826140b1565b604082019050919050565b60006132f8601983613ae2565b915061330382614100565b602082019050919050565b600061331b602c83613ae2565b915061332682614129565b604082019050919050565b600061333e602583613ae2565b915061334982614178565b604082019050919050565b6000613361603883613ae2565b915061336c826141c7565b604082019050919050565b6000613384602a83613ae2565b915061338f82614216565b604082019050919050565b60006133a7602983613ae2565b91506133b282614265565b604082019050919050565b60006133ca602083613ae2565b91506133d5826142b4565b602082019050919050565b60006133ed602c83613ae2565b91506133f8826142dd565b604082019050919050565b6000613410602083613ae2565b915061341b8261432c565b602082019050919050565b6000613433602983613ae2565b915061343e82614355565b604082019050919050565b6000613456602183613ae2565b9150613461826143a4565b604082019050919050565b6000613479602183613ae2565b9150613484826143f3565b604082019050919050565b600061349c603183613ae2565b91506134a782614442565b604082019050919050565b60006134bf601183613ae2565b91506134ca82614491565b602082019050919050565b60006134e2602c83613ae2565b91506134ed826144ba565b604082019050919050565b61350181613c99565b82525050565b61351081613ca3565b82525050565b600061352282846130dc565b915081905092915050565b600061353982856130dc565b91506135458284613057565b6014820191508190509392505050565b60006135618285613177565b915061356d8284613146565b91508190509392505050565b6000613584826132a5565b9150613590828561308c565b6020820191506135a0828461308c565b6020820191508190509392505050565b60006020820190506135c56000830184613048565b92915050565b60006060820190506135e06000830186613048565b6135ed6020830185613039565b81810360408301526135ff81846130a3565b9050949350505050565b600060808201905061361e6000830187613048565b61362b6020830186613048565b61363860408301856134f8565b818103606083015261364a81846130a3565b905095945050505050565b600060208201905061366a600083018461306e565b92915050565b6000602082019050613685600083018461307d565b92915050565b60006080820190506136a0600083018761307d565b6136ad60208301866134f8565b6136ba6040830185613048565b6136c7606083018461307d565b95945050505050565b60006080820190506136e5600083018761307d565b6136f26020830186613507565b6136ff604083018561307d565b61370c606083018461307d565b95945050505050565b6000602082019050818103600083015261372f81846130a3565b905092915050565b60006020820190508181036000830152613751818461310d565b905092915050565b60006020820190508181036000830152613772816131f6565b9050919050565b6000602082019050818103600083015261379281613219565b9050919050565b600060208201905081810360008301526137b28161323c565b9050919050565b600060208201905081810360008301526137d28161325f565b9050919050565b600060208201905081810360008301526137f281613282565b9050919050565b60006020820190508181036000830152613812816132c8565b9050919050565b60006020820190508181036000830152613832816132eb565b9050919050565b600060208201905081810360008301526138528161330e565b9050919050565b6000602082019050818103600083015261387281613331565b9050919050565b6000602082019050818103600083015261389281613354565b9050919050565b600060208201905081810360008301526138b281613377565b9050919050565b600060208201905081810360008301526138d28161339a565b9050919050565b600060208201905081810360008301526138f2816133bd565b9050919050565b60006020820190508181036000830152613912816133e0565b9050919050565b6000602082019050818103600083015261393281613403565b9050919050565b6000602082019050818103600083015261395281613426565b9050919050565b6000602082019050818103600083015261397281613449565b9050919050565b600060208201905081810360008301526139928161346c565b9050919050565b600060208201905081810360008301526139b28161348f565b9050919050565b600060208201905081810360008301526139d2816134b2565b9050919050565b600060208201905081810360008301526139f2816134d5565b9050919050565b6000602082019050613a0e60008301846134f8565b92915050565b6000613a1e613a2f565b9050613a2a8282613d24565b919050565b6000604051905090565b600067ffffffffffffffff821115613a5457613a53613ee8565b5b613a5d82613f2b565b9050602081019050919050565b600067ffffffffffffffff821115613a8557613a84613ee8565b5b613a8e82613f2b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b0982613c99565b9150613b1483613c99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b4957613b48613dfd565b5b828201905092915050565b6000613b5f82613c99565b9150613b6a83613c99565b925082613b7a57613b79613e2c565b5b828204905092915050565b6000613b9082613c99565b9150613b9b83613c99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bd457613bd3613dfd565b5b828202905092915050565b6000613bea82613c99565b9150613bf583613c99565b925082821015613c0857613c07613dfd565b5b828203905092915050565b6000613c1e82613c79565b9050919050565b6000613c3082613c79565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613cdd578082015181840152602081019050613cc2565b83811115613cec576000848401525b50505050565b60006002820490506001821680613d0a57607f821691505b60208210811415613d1e57613d1d613e5b565b5b50919050565b613d2d82613f2b565b810181811067ffffffffffffffff82111715613d4c57613d4b613ee8565b5b80604052505050565b6000613d6082613c99565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9357613d92613dfd565b5b600182019050919050565b6000613da982613dba565b9050919050565b6000819050919050565b6000613dc582613f3c565b9050919050565b6000613dd782613c99565b9150613de283613c99565b925082613df257613df1613e2c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f49742773206e6f742074696d6520796574000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61451281613c13565b811461451d57600080fd5b50565b61452981613c37565b811461453457600080fd5b50565b61454081613c43565b811461454b57600080fd5b50565b61455781613c4d565b811461456257600080fd5b50565b61456e81613c99565b811461457957600080fd5b50565b61458581613ca3565b811461459057600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a2646970667358221220c44a01bb0c0874215a321c5eff9f805e07b1026d32882d7044947f816461a56164736f6c63430008070033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000184e4654424f593a20426f7265642041706520526163657273000000000000000000000000000000000000000000000000000000000000000000000000000000034241520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f6170692e706c61796e6674626f792e636f6d2f636172747269646765732f6261722f00000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c80636352211e116100f7578063a0bcfc7f11610095578063d547cfb711610064578063d547cfb71461068f578063d96a094a146106ba578063e985e9c5146106d6578063f2fde38b14610713576101cd565b8063a0bcfc7f146105d7578063a22cb46514610600578063b88d4fde14610629578063c87b56dd14610652576101cd565b8063755edd17116100d1578063755edd171461052d57806378e97925146105565780638da5cb5b1461058157806395d89b41146105ac576101cd565b80636352211e1461049c57806370a08231146104d9578063715018a614610516576101cd565b806320379ee51161016f5780633408e4701161013e5780633408e470146103f45780633ccfd60b1461041f57806342842e0e146104365780634f6ccce71461045f576101cd565b806320379ee51461032657806323b872dd146103515780632d0335ab1461037a5780632f745c59146103b7576101cd565b8063095ea7b3116101ab578063095ea7b3146102775780630c53c51c146102a05780630f7e5970146102d057806318160ddd146102fb576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612f69565b61073c565b6040516102069190613655565b60405180910390f35b34801561021b57600080fd5b506102246107b6565b6040516102319190613737565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061300c565b610848565b60405161026e91906135b0565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612f29565b6108cd565b005b6102ba60048036038101906102b59190612e92565b6109e5565b6040516102c79190613715565b60405180910390f35b3480156102dc57600080fd5b506102e5610c57565b6040516102f29190613737565b60405180910390f35b34801561030757600080fd5b50610310610c90565b60405161031d91906139f9565b60405180910390f35b34801561033257600080fd5b5061033b610c9d565b6040516103489190613670565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612d7c565b610ca7565b005b34801561038657600080fd5b506103a1600480360381019061039c9190612d0f565b610d07565b6040516103ae91906139f9565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190612f29565b610d50565b6040516103eb91906139f9565b60405180910390f35b34801561040057600080fd5b50610409610df5565b60405161041691906139f9565b60405180910390f35b34801561042b57600080fd5b50610434610e02565b005b34801561044257600080fd5b5061045d60048036038101906104589190612d7c565b610ece565b005b34801561046b57600080fd5b506104866004803603810190610481919061300c565b610eee565b60405161049391906139f9565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061300c565b610f5f565b6040516104d091906135b0565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612d0f565b611011565b60405161050d91906139f9565b60405180910390f35b34801561052257600080fd5b5061052b6110c9565b005b34801561053957600080fd5b50610554600480360381019061054f9190612d0f565b611151565b005b34801561056257600080fd5b5061056b6111ef565b60405161057891906139f9565b60405180910390f35b34801561058d57600080fd5b506105966111f5565b6040516105a391906135b0565b60405180910390f35b3480156105b857600080fd5b506105c161121f565b6040516105ce9190613737565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f99190612fc3565b6112b1565b005b34801561060c57600080fd5b5061062760048036038101906106229190612e52565b611347565b005b34801561063557600080fd5b50610650600480360381019061064b9190612dcf565b6114c8565b005b34801561065e57600080fd5b506106796004803603810190610674919061300c565b61152a565b6040516106869190613737565b60405180910390f35b34801561069b57600080fd5b506106a461155e565b6040516106b19190613737565b60405180910390f35b6106d460048036038101906106cf919061300c565b6115ec565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190612d3c565b6116e1565b60405161070a9190613655565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190612d0f565b611775565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107af57506107ae8261191e565b5b9050919050565b6060600080546107c590613cf2565b80601f01602080910402602001604051908101604052809291908181526020018280546107f190613cf2565b801561083e5780601f106108135761010080835404028352916020019161083e565b820191906000526020600020905b81548152906001019060200180831161082157829003601f168201915b5050505050905090565b600061085382611a00565b610892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610889906138f9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108d882610f5f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090613979565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610968611a6c565b73ffffffffffffffffffffffffffffffffffffffff161480610997575061099681610991611a6c565b6116e1565b5b6109d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cd90613879565b60405180910390fd5b6109e08383611a7b565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610a688782878787611b34565b610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613959565b60405180910390fd5b610afa6001600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c3d90919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610b70939291906135cb565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610ba592919061352d565b604051602081830303815290604052604051610bc19190613516565b6000604051808303816000865af19150503d8060008114610bfe576040519150601f19603f3d011682016040523d82523d6000602084013e610c03565b606091505b509150915081610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f906137b9565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6000600880549050905090565b6000600b54905090565b610cb8610cb2611a6c565b82611c53565b610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613999565b60405180910390fd5b610d02838383611d31565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610d5b83611011565b8210610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390613759565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000804690508091505090565b610e0a611a6c565b73ffffffffffffffffffffffffffffffffffffffff16610e286111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590613919565b60405180910390fd5b610e866111f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ecb573d6000803e3d6000fd5b50565b610ee9838383604051806020016040528060008152506114c8565b505050565b6000610ef8610c90565b8210610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f30906139d9565b60405180910390fd5b60088281548110610f4d57610f4c613eb9565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff906138b9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613899565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110d1611a6c565b73ffffffffffffffffffffffffffffffffffffffff166110ef6111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613919565b60405180910390fd5b61114f6000611f8d565b565b611159611a6c565b73ffffffffffffffffffffffffffffffffffffffff166111776111f5565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490613919565b60405180910390fd5b60006111d7612053565b90506111e38282612070565b6111eb61223e565b5050565b60115481565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461122e90613cf2565b80601f016020809104026020016040519081016040528092919081815260200182805461125a90613cf2565b80156112a75780601f1061127c576101008083540402835291602001916112a7565b820191906000526020600020905b81548152906001019060200180831161128a57829003601f168201915b5050505050905090565b6112b9611a6c565b73ffffffffffffffffffffffffffffffffffffffff166112d76111f5565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490613919565b60405180910390fd5b8060109080519060200190611343929190612af9565b5050565b61134f611a6c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613819565b60405180910390fd5b80600560006113ca611a6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611477611a6c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114bc9190613655565b60405180910390a35050565b6114d96114d3611a6c565b83611c53565b611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90613999565b60405180910390fd5b61152484848484612268565b50505050565b60606010611537836122c4565b604051602001611548929190613555565b6040516020818303038152906040529050919050565b6010805461156b90613cf2565b80601f016020809104026020016040519081016040528092919081815260200182805461159790613cf2565b80156115e45780601f106115b9576101008083540402835291602001916115e4565b820191906000526020600020905b8154815290600101906020018083116115c757829003601f168201915b505050505081565b601154421015611631576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611628906139b9565b60405180910390fd5b600081118015611642575060148111155b61164b57600080fd5b668e1bc9bf0400008161165e9190613b85565b341461166957600080fd5b60005b818110156116dd57600061167e612053565b905061168a3382612070565b7f5782b4799a39cbe194d6ee862b9cfe3d8e4f9e741e3f122be89e778aba8b9fff816040516116b991906139f9565b60405180910390a16116c961223e565b5080806116d590613d55565b91505061166c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61177d611a6c565b73ffffffffffffffffffffffffffffffffffffffff1661179b6111f5565b73ffffffffffffffffffffffffffffffffffffffff16146117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e890613919565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890613799565b60405180910390fd5b61186a81611f8d565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561191757600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff81830151169250505061191b565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119e957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119f957506119f882612425565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611a7661186d565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611aee83610f5f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613859565b60405180910390fd5b6001611bb8611bb38761248f565b6124f7565b83868660405160008152602001604052604051611bd894939291906136d0565b6020604051602081039080840390855afa158015611bfa573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611c4b9190613afe565b905092915050565b6000611c5e82611a00565b611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490613839565b60405180910390fd5b6000611ca883610f5f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d1757508373ffffffffffffffffffffffffffffffffffffffff16611cff84610848565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d285750611d2781856116e1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d5182610f5f565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90613939565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e906137f9565b60405180910390fd5b611e22838383612530565b611e2d600082611a7b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e7d9190613bdf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ed49190613afe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061206b6001600e54611c3d90919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906138d9565b60405180910390fd5b6120e981611a00565b15612129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612120906137d9565b60405180910390fd5b61213560008383612530565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121859190613afe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600f54600e541061224e57600080fd5b600e600081548092919061226190613d55565b9190505550565b612273848484611d31565b61227f84848484612644565b6122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613779565b60405180910390fd5b50505050565b6060600082141561230c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612420565b600082905060005b6000821461233e57808061232790613d55565b915050600a826123379190613b54565b9150612314565b60008167ffffffffffffffff81111561235a57612359613ee8565b5b6040519080825280601f01601f19166020018201604052801561238c5781602001600182028036833780820191505090505b5090505b60008514612419576001826123a59190613bdf565b9150600a856123b49190613dcc565b60306123c09190613afe565b60f81b8183815181106123d6576123d5613eb9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124129190613b54565b9450612390565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006040518060800160405280604381526020016145946043913980519060200120826000015183602001518460400151805190602001206040516020016124da949392919061368b565b604051602081830303815290604052805190602001209050919050565b6000612501610c9d565b82604051602001612513929190613579565b604051602081830303815290604052805190602001209050919050565b61253b8383836127db565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561257e57612579816127e0565b6125bd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125bc576125bb8382612829565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612600576125fb81612996565b61263f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461263e5761263d8282612a67565b5b5b505050565b60006126658473ffffffffffffffffffffffffffffffffffffffff16612ae6565b156127ce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261268e611a6c565b8786866040518563ffffffff1660e01b81526004016126b09493929190613609565b602060405180830381600087803b1580156126ca57600080fd5b505af19250505080156126fb57506040513d601f19601f820116820180604052508101906126f89190612f96565b60015b61277e573d806000811461272b576040519150601f19603f3d011682016040523d82523d6000602084013e612730565b606091505b50600081511415612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d90613779565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127d3565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161283684611011565b6128409190613bdf565b9050600060076000848152602001908152602001600020549050818114612925576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129aa9190613bdf565b90506000600960008481526020019081526020016000205490506000600883815481106129da576129d9613eb9565b5b9060005260206000200154905080600883815481106129fc576129fb613eb9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a4b57612a4a613e8a565b5b6001900381819060005260206000200160009055905550505050565b6000612a7283611011565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612b0590613cf2565b90600052602060002090601f016020900481019282612b275760008555612b6e565b82601f10612b4057805160ff1916838001178555612b6e565b82800160010185558215612b6e579182015b82811115612b6d578251825591602001919060010190612b52565b5b509050612b7b9190612b7f565b5090565b5b80821115612b98576000816000905550600101612b80565b5090565b6000612baf612baa84613a39565b613a14565b905082815260208101848484011115612bcb57612bca613f1c565b5b612bd6848285613cb0565b509392505050565b6000612bf1612bec84613a6a565b613a14565b905082815260208101848484011115612c0d57612c0c613f1c565b5b612c18848285613cb0565b509392505050565b600081359050612c2f81614509565b92915050565b600081359050612c4481614520565b92915050565b600081359050612c5981614537565b92915050565b600081359050612c6e8161454e565b92915050565b600081519050612c838161454e565b92915050565b600082601f830112612c9e57612c9d613f17565b5b8135612cae848260208601612b9c565b91505092915050565b600082601f830112612ccc57612ccb613f17565b5b8135612cdc848260208601612bde565b91505092915050565b600081359050612cf481614565565b92915050565b600081359050612d098161457c565b92915050565b600060208284031215612d2557612d24613f26565b5b6000612d3384828501612c20565b91505092915050565b60008060408385031215612d5357612d52613f26565b5b6000612d6185828601612c20565b9250506020612d7285828601612c20565b9150509250929050565b600080600060608486031215612d9557612d94613f26565b5b6000612da386828701612c20565b9350506020612db486828701612c20565b9250506040612dc586828701612ce5565b9150509250925092565b60008060008060808587031215612de957612de8613f26565b5b6000612df787828801612c20565b9450506020612e0887828801612c20565b9350506040612e1987828801612ce5565b925050606085013567ffffffffffffffff811115612e3a57612e39613f21565b5b612e4687828801612c89565b91505092959194509250565b60008060408385031215612e6957612e68613f26565b5b6000612e7785828601612c20565b9250506020612e8885828601612c35565b9150509250929050565b600080600080600060a08688031215612eae57612ead613f26565b5b6000612ebc88828901612c20565b955050602086013567ffffffffffffffff811115612edd57612edc613f21565b5b612ee988828901612c89565b9450506040612efa88828901612c4a565b9350506060612f0b88828901612c4a565b9250506080612f1c88828901612cfa565b9150509295509295909350565b60008060408385031215612f4057612f3f613f26565b5b6000612f4e85828601612c20565b9250506020612f5f85828601612ce5565b9150509250929050565b600060208284031215612f7f57612f7e613f26565b5b6000612f8d84828501612c5f565b91505092915050565b600060208284031215612fac57612fab613f26565b5b6000612fba84828501612c74565b91505092915050565b600060208284031215612fd957612fd8613f26565b5b600082013567ffffffffffffffff811115612ff757612ff6613f21565b5b61300384828501612cb7565b91505092915050565b60006020828403121561302257613021613f26565b5b600061303084828501612ce5565b91505092915050565b61304281613c25565b82525050565b61305181613c13565b82525050565b61306861306382613c13565b613d9e565b82525050565b61307781613c37565b82525050565b61308681613c43565b82525050565b61309d61309882613c43565b613db0565b82525050565b60006130ae82613ab0565b6130b88185613ac6565b93506130c8818560208601613cbf565b6130d181613f2b565b840191505092915050565b60006130e782613ab0565b6130f18185613ad7565b9350613101818560208601613cbf565b80840191505092915050565b600061311882613abb565b6131228185613ae2565b9350613132818560208601613cbf565b61313b81613f2b565b840191505092915050565b600061315182613abb565b61315b8185613af3565b935061316b818560208601613cbf565b80840191505092915050565b6000815461318481613cf2565b61318e8186613af3565b945060018216600081146131a957600181146131ba576131ed565b60ff198316865281860193506131ed565b6131c385613a9b565b60005b838110156131e5578154818901526001820191506020810190506131c6565b838801955050505b50505092915050565b6000613203602b83613ae2565b915061320e82613f49565b604082019050919050565b6000613226603283613ae2565b915061323182613f98565b604082019050919050565b6000613249602683613ae2565b915061325482613fe7565b604082019050919050565b600061326c601c83613ae2565b915061327782614036565b602082019050919050565b600061328f601c83613ae2565b915061329a8261405f565b602082019050919050565b60006132b2600283613af3565b91506132bd82614088565b600282019050919050565b60006132d5602483613ae2565b91506132e0826140b1565b604082019050919050565b60006132f8601983613ae2565b915061330382614100565b602082019050919050565b600061331b602c83613ae2565b915061332682614129565b604082019050919050565b600061333e602583613ae2565b915061334982614178565b604082019050919050565b6000613361603883613ae2565b915061336c826141c7565b604082019050919050565b6000613384602a83613ae2565b915061338f82614216565b604082019050919050565b60006133a7602983613ae2565b91506133b282614265565b604082019050919050565b60006133ca602083613ae2565b91506133d5826142b4565b602082019050919050565b60006133ed602c83613ae2565b91506133f8826142dd565b604082019050919050565b6000613410602083613ae2565b915061341b8261432c565b602082019050919050565b6000613433602983613ae2565b915061343e82614355565b604082019050919050565b6000613456602183613ae2565b9150613461826143a4565b604082019050919050565b6000613479602183613ae2565b9150613484826143f3565b604082019050919050565b600061349c603183613ae2565b91506134a782614442565b604082019050919050565b60006134bf601183613ae2565b91506134ca82614491565b602082019050919050565b60006134e2602c83613ae2565b91506134ed826144ba565b604082019050919050565b61350181613c99565b82525050565b61351081613ca3565b82525050565b600061352282846130dc565b915081905092915050565b600061353982856130dc565b91506135458284613057565b6014820191508190509392505050565b60006135618285613177565b915061356d8284613146565b91508190509392505050565b6000613584826132a5565b9150613590828561308c565b6020820191506135a0828461308c565b6020820191508190509392505050565b60006020820190506135c56000830184613048565b92915050565b60006060820190506135e06000830186613048565b6135ed6020830185613039565b81810360408301526135ff81846130a3565b9050949350505050565b600060808201905061361e6000830187613048565b61362b6020830186613048565b61363860408301856134f8565b818103606083015261364a81846130a3565b905095945050505050565b600060208201905061366a600083018461306e565b92915050565b6000602082019050613685600083018461307d565b92915050565b60006080820190506136a0600083018761307d565b6136ad60208301866134f8565b6136ba6040830185613048565b6136c7606083018461307d565b95945050505050565b60006080820190506136e5600083018761307d565b6136f26020830186613507565b6136ff604083018561307d565b61370c606083018461307d565b95945050505050565b6000602082019050818103600083015261372f81846130a3565b905092915050565b60006020820190508181036000830152613751818461310d565b905092915050565b60006020820190508181036000830152613772816131f6565b9050919050565b6000602082019050818103600083015261379281613219565b9050919050565b600060208201905081810360008301526137b28161323c565b9050919050565b600060208201905081810360008301526137d28161325f565b9050919050565b600060208201905081810360008301526137f281613282565b9050919050565b60006020820190508181036000830152613812816132c8565b9050919050565b60006020820190508181036000830152613832816132eb565b9050919050565b600060208201905081810360008301526138528161330e565b9050919050565b6000602082019050818103600083015261387281613331565b9050919050565b6000602082019050818103600083015261389281613354565b9050919050565b600060208201905081810360008301526138b281613377565b9050919050565b600060208201905081810360008301526138d28161339a565b9050919050565b600060208201905081810360008301526138f2816133bd565b9050919050565b60006020820190508181036000830152613912816133e0565b9050919050565b6000602082019050818103600083015261393281613403565b9050919050565b6000602082019050818103600083015261395281613426565b9050919050565b6000602082019050818103600083015261397281613449565b9050919050565b600060208201905081810360008301526139928161346c565b9050919050565b600060208201905081810360008301526139b28161348f565b9050919050565b600060208201905081810360008301526139d2816134b2565b9050919050565b600060208201905081810360008301526139f2816134d5565b9050919050565b6000602082019050613a0e60008301846134f8565b92915050565b6000613a1e613a2f565b9050613a2a8282613d24565b919050565b6000604051905090565b600067ffffffffffffffff821115613a5457613a53613ee8565b5b613a5d82613f2b565b9050602081019050919050565b600067ffffffffffffffff821115613a8557613a84613ee8565b5b613a8e82613f2b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b0982613c99565b9150613b1483613c99565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b4957613b48613dfd565b5b828201905092915050565b6000613b5f82613c99565b9150613b6a83613c99565b925082613b7a57613b79613e2c565b5b828204905092915050565b6000613b9082613c99565b9150613b9b83613c99565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bd457613bd3613dfd565b5b828202905092915050565b6000613bea82613c99565b9150613bf583613c99565b925082821015613c0857613c07613dfd565b5b828203905092915050565b6000613c1e82613c79565b9050919050565b6000613c3082613c79565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613cdd578082015181840152602081019050613cc2565b83811115613cec576000848401525b50505050565b60006002820490506001821680613d0a57607f821691505b60208210811415613d1e57613d1d613e5b565b5b50919050565b613d2d82613f2b565b810181811067ffffffffffffffff82111715613d4c57613d4b613ee8565b5b80604052505050565b6000613d6082613c99565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9357613d92613dfd565b5b600182019050919050565b6000613da982613dba565b9050919050565b6000819050919050565b6000613dc582613f3c565b9050919050565b6000613dd782613c99565b9150613de283613c99565b925082613df257613df1613e2c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f49742773206e6f742074696d6520796574000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61451281613c13565b811461451d57600080fd5b50565b61452981613c37565b811461453457600080fd5b50565b61454081613c43565b811461454b57600080fd5b50565b61455781613c4d565b811461456257600080fd5b50565b61456e81613c99565b811461457957600080fd5b50565b61458581613ca3565b811461459057600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a2646970667358221220c44a01bb0c0874215a321c5eff9f805e07b1026d32882d7044947f816461a56164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000184e4654424f593a20426f7265642041706520526163657273000000000000000000000000000000000000000000000000000000000000000000000000000000034241520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f6170692e706c61796e6674626f792e636f6d2f636172747269646765732f6261722f00000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): NFTBOY: Bored Ape Racers
Arg [1] : _symbol (string): BAR
Arg [2] : _uri (string): https://api.playnftboy.com/cartridges/bar/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [4] : 4e4654424f593a20426f72656420417065205261636572730000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4241520000000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000002a
Arg [8] : 68747470733a2f2f6170692e706c61796e6674626f792e636f6d2f6361727472
Arg [9] : 69646765732f6261722f00000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
269:2267:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:300:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2650:100:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4343:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3866:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;999:1151:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;302:43:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1740:113:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1297:101:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5402:376:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2576:107:15;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1321:343:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1406:161:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1494:106:1;;;;;;;;;;;;;:::i;:::-;;5849:185:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1930:320:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2257:326:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1900:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1675:94:16;;;;;;;;;;;;;:::i;:::-;;838:166:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;531:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1024:87:16;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2819:104:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2073:97:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4723:327:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6105:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2178:227:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;498:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1012:474;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5121:214:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1924:229:16;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;937:300:7;1084:4;1141:35;1126:50;;;:11;:50;;;;:103;;;;1193:36;1217:11;1193:23;:36::i;:::-;1126:103;1106:123;;937:300;;;:::o;2650:100:6:-;2704:13;2737:5;2730:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:100;:::o;4343:308::-;4464:7;4511:16;4519:7;4511;:16::i;:::-;4489:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;4619:15;:24;4635:7;4619:24;;;;;;;;;;;;;;;;;;;;;4612:31;;4343:308;;;:::o;3866:411::-;3947:13;3963:23;3978:7;3963:14;:23::i;:::-;3947:39;;4011:5;4005:11;;:2;:11;;;;3997:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4105:5;4089:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;4114:37;4131:5;4138:12;:10;:12::i;:::-;4114:16;:37::i;:::-;4089:62;4067:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;4248:21;4257:2;4261:7;4248:8;:21::i;:::-;3936:341;3866:411;;:::o;999:1151:15:-;1200:12;1225:29;1257:152;;;;;;;;1295:6;:19;1302:11;1295:19;;;;;;;;;;;;;;;;1257:152;;;;1335:11;1257:152;;;;;;1380:17;1257:152;;;1225:184;;1444:45;1451:11;1464:6;1472:4;1478;1484;1444:6;:45::i;:::-;1422:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;1639:26;1663:1;1639:6;:19;1646:11;1639:19;;;;;;;;;;;;;;;;:23;;:26;;;;:::i;:::-;1617:6;:19;1624:11;1617:19;;;;;;;;;;;;;;;:48;;;;1683:126;1721:11;1755:10;1781:17;1683:126;;;;;;;;:::i;:::-;;;;;;;;1920:12;1934:23;1969:4;1961:18;;2011:17;2030:11;1994:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1961:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1919:134;;;;2072:7;2064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;2132:10;2125:17;;;;;999:1151;;;;;;;:::o;302:43:4:-;;;;;;;;;;;;;;;;;;;:::o;1740:113:7:-;1801:7;1828:10;:17;;;;1821:24;;1740:113;:::o;1297:101:4:-;1348:7;1375:15;;1368:22;;1297:101;:::o;5402:376:6:-;5611:41;5630:12;:10;:12::i;:::-;5644:7;5611:18;:41::i;:::-;5589:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;5742:28;5752:4;5758:2;5762:7;5742:9;:28::i;:::-;5402:376;;;:::o;2576:107:15:-;2629:13;2663:6;:12;2670:4;2663:12;;;;;;;;;;;;;;;;2655:20;;2576:107;;;:::o;1321:343:7:-;1463:7;1518:23;1535:5;1518:16;:23::i;:::-;1510:5;:31;1488:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;1630:12;:19;1643:5;1630:19;;;;;;;;;;;;;;;:26;1650:5;1630:26;;;;;;;;;;;;1623:33;;1321:343;;;;:::o;1406:161:4:-;1449:7;1469:10;1520:9;1514:15;;1557:2;1550:9;;;1406:161;:::o;1494:106:1:-;1255:12:16;:10;:12::i;:::-;1244:23;;:7;:5;:7::i;:::-;:23;;;1236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1552:7:1::1;:5;:7::i;:::-;1544:25;;:48;1570:21;1544:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;1494:106::o:0;5849:185:6:-;5987:39;6004:4;6010:2;6014:7;5987:39;;;;;;;;;;;;:16;:39::i;:::-;5849:185;;;:::o;1930:320:7:-;2050:7;2105:30;:28;:30::i;:::-;2097:5;:38;2075:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;2225:10;2236:5;2225:17;;;;;;;;:::i;:::-;;;;;;;;;;2218:24;;1930:320;;;:::o;2257:326:6:-;2374:7;2399:13;2415:7;:16;2423:7;2415:16;;;;;;;;;;;;;;;;;;;;;2399:32;;2481:1;2464:19;;:5;:19;;;;2442:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;2570:5;2563:12;;;2257:326;;;:::o;1900:295::-;2017:7;2081:1;2064:19;;:5;:19;;;;2042:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;2171:9;:16;2181:5;2171:16;;;;;;;;;;;;;;;;2164:23;;1900:295;;;:::o;1675:94:16:-;1255:12;:10;:12::i;:::-;1244:23;;:7;:5;:7::i;:::-;:23;;;1236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1740:21:::1;1758:1;1740:9;:21::i;:::-;1675:94::o:0;838:166:1:-;1255:12:16;:10;:12::i;:::-;1244:23;;:7;:5;:7::i;:::-;:23;;;1236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;895:18:1::1;916:17;:15;:17::i;:::-;895:38;;944:22;950:3;955:10;944:5;:22::i;:::-;977:19;:17;:19::i;:::-;884:120;838:166:::0;:::o;531:37::-;;;;:::o;1024:87:16:-;1070:7;1097:6;;;;;;;;;;;1090:13;;1024:87;:::o;2819:104:6:-;2875:13;2908:7;2901:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2819:104;:::o;2073:97:1:-;1255:12:16;:10;:12::i;:::-;1244:23;;:7;:5;:7::i;:::-;:23;;;1236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2158:4:1::1;2143:12;:19;;;;;;;;;;;;:::i;:::-;;2073:97:::0;:::o;4723:327:6:-;4870:12;:10;:12::i;:::-;4858:24;;:8;:24;;;;4850:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4970:8;4925:18;:32;4944:12;:10;:12::i;:::-;4925:32;;;;;;;;;;;;;;;:42;4958:8;4925:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;5023:8;4994:48;;5009:12;:10;:12::i;:::-;4994:48;;;5033:8;4994:48;;;;;;:::i;:::-;;;;;;;;4723:327;;:::o;6105:365::-;6294:41;6313:12;:10;:12::i;:::-;6327:7;6294:18;:41::i;:::-;6272:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;6423:39;6437:4;6443:2;6447:7;6456:5;6423:13;:39::i;:::-;6105:365;;;;:::o;2178:227:1:-;2280:13;2355:12;2369:26;2386:8;2369:16;:26::i;:::-;2338:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2311:86;;2178:227;;;:::o;498:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1012:474::-;1092:9;;1073:15;:28;;1065:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;1149:1;1142:4;:8;:22;;;;;1162:2;1154:4;:10;;1142:22;1134:31;;;;;;1204:4;1197;:11;;;;:::i;:::-;1184:9;:24;1176:33;;;;;;1235:9;1230:249;1254:4;1250:1;:8;1230:249;;;1280:18;1301:17;:15;:17::i;:::-;1280:38;;1347:29;1353:10;1365;1347:5;:29::i;:::-;1396:23;1408:10;1396:23;;;;;;:::i;:::-;;;;;;;;1448:19;:17;:19::i;:::-;1265:214;1260:3;;;;;:::i;:::-;;;;1230:249;;;;1012:474;:::o;5121:214:6:-;5263:4;5292:18;:25;5311:5;5292:25;;;;;;;;;;;;;;;:35;5318:8;5292:35;;;;;;;;;;;;;;;;;;;;;;;;;5285:42;;5121:214;;;;:::o;1924:229:16:-;1255:12;:10;:12::i;:::-;1244:23;;:7;:5;:7::i;:::-;:23;;;1236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2047:1:::1;2027:22;;:8;:22;;;;2005:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;2126:19;2136:8;2126:9;:19::i;:::-;1924:229:::0;:::o;100:618:2:-;144:22;205:4;183:27;;:10;:27;;;179:508;;;227:18;248:8;;227:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;271:13;287:8;;:15;;271:31;;539:42;509:5;502;498:17;492:24;466:134;456:144;;326:289;;179:508;;;664:10;647:28;;179:508;100:618;:::o;1481:355:6:-;1628:4;1685:25;1670:40;;;:11;:40;;;;:105;;;;1742:33;1727:48;;;:11;:48;;;;1670:105;:158;;;;1792:36;1816:11;1792:23;:36::i;:::-;1670:158;1650:178;;1481:355;;;:::o;8017:127::-;8082:4;8134:1;8106:30;;:7;:16;8114:7;8106:16;;;;;;;;;;;;;;;;;;;;;:30;;;;8099:37;;8017:127;;;:::o;2413:120:1:-;2467:14;2501:24;:22;:24::i;:::-;2494:31;;2413:120;:::o;12140:174:6:-;12242:2;12215:15;:24;12231:7;12215:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12298:7;12294:2;12260:46;;12269:23;12284:7;12269:14;:23::i;:::-;12260:46;;;;;;;;;;;;12140:174;;:::o;2691:486:15:-;2869:4;2912:1;2894:20;;:6;:20;;;;2886:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;3010:159;3038:47;3057:27;3077:6;3057:19;:27::i;:::-;3038:18;:47::i;:::-;3104:4;3127;3150;3010:159;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2987:182;;:6;:182;;;2967:202;;2691:486;;;;;;;:::o;2763:98:17:-;2821:7;2852:1;2848;:5;;;;:::i;:::-;2841:12;;2763:98;;;;:::o;8311:452:6:-;8440:4;8484:16;8492:7;8484;:16::i;:::-;8462:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;8583:13;8599:23;8614:7;8599:14;:23::i;:::-;8583:39;;8652:5;8641:16;;:7;:16;;;:64;;;;8698:7;8674:31;;:20;8686:7;8674:11;:20::i;:::-;:31;;;8641:64;:113;;;;8722:32;8739:5;8746:7;8722:16;:32::i;:::-;8641:113;8633:122;;;8311:452;;;;:::o;11407:615::-;11580:4;11553:31;;:23;11568:7;11553:14;:23::i;:::-;:31;;;11531:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;11686:1;11672:16;;:2;:16;;;;11664:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11742:39;11763:4;11769:2;11773:7;11742:20;:39::i;:::-;11846:29;11863:1;11867:7;11846:8;:29::i;:::-;11907:1;11888:9;:15;11898:4;11888:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11936:1;11919:9;:13;11929:2;11919:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11967:2;11948:7;:16;11956:7;11948:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12006:7;12002:2;11987:27;;11996:4;11987:27;;;;;;;;;;;;11407:615;;;:::o;2161:173:16:-;2217:16;2236:6;;;;;;;;;;;2217:25;;2262:8;2253:6;;:17;;;;;;;;;;;;;;;;;;2317:8;2286:40;;2307:8;2286:40;;;;;;;;;;;;2206:128;2161:173;:::o;1608:106:1:-;1657:7;1684:22;1704:1;1684:15;;:19;;:22;;;;:::i;:::-;1677:29;;1608:106;:::o;10099:382:6:-;10193:1;10179:16;;:2;:16;;;;10171:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;10252:16;10260:7;10252;:16::i;:::-;10251:17;10243:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;10314:45;10343:1;10347:2;10351:7;10314:20;:45::i;:::-;10389:1;10372:9;:13;10382:2;10372:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10420:2;10401:7;:16;10409:7;10401:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10465:7;10461:2;10440:33;;10457:1;10440:33;;;;;;;;;;;;10099:382;;:::o;1944:121:1:-;2018:10;;2000:15;;:28;1992:37;;;;;;2040:15;;:17;;;;;;;;;:::i;:::-;;;;;;1944:121::o;7352:352:6:-;7509:28;7519:4;7525:2;7529:7;7509:9;:28::i;:::-;7570:48;7593:4;7599:2;7603:7;7612:5;7570:22;:48::i;:::-;7548:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;7352:352;;;;:::o;288:723:18:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;787:207:5:-;917:4;961:25;946:40;;;:11;:40;;;;939:47;;787:207;;;:::o;2158:410:15:-;2268:7;323:108;;;;;;;;;;;;;;;;;299:143;;;;;;2422:6;:12;;;2457:6;:11;;;2501:6;:24;;;2491:35;;;;;;2341:204;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2313:247;;;;;;2293:267;;2158:410;;;:::o;1936:258:4:-;2035:7;2137:20;:18;:20::i;:::-;2159:11;2108:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2080:106;;;;;;2060:126;;1936:258;;;:::o;2863:589:7:-;3007:45;3034:4;3040:2;3044:7;3007:26;:45::i;:::-;3085:1;3069:18;;:4;:18;;;3065:187;;;3104:40;3136:7;3104:31;:40::i;:::-;3065:187;;;3174:2;3166:10;;:4;:10;;;3162:90;;3193:47;3226:4;3232:7;3193:32;:47::i;:::-;3162:90;3065:187;3280:1;3266:16;;:2;:16;;;3262:183;;;3299:45;3336:7;3299:36;:45::i;:::-;3262:183;;;3372:4;3366:10;;:2;:10;;;3362:83;;3393:40;3421:2;3425:7;3393:27;:40::i;:::-;3362:83;3262:183;2863:589;;;:::o;12879:980:6:-;13034:4;13055:15;:2;:13;;;:15::i;:::-;13051:801;;;13124:2;13108:36;;;13167:12;:10;:12::i;:::-;13202:4;13229:7;13259:5;13108:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13087:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13483:1;13466:6;:13;:18;13462:320;;;13509:108;;;;;;;;;;:::i;:::-;;;;;;;;13462:320;13732:6;13726:13;13717:6;13713:2;13709:15;13702:38;13087:710;13357:41;;;13347:51;;;:6;:51;;;;13340:58;;;;;13051:801;13836:4;13829:11;;12879:980;;;;;;;:::o;14431:126::-;;;;:::o;4175:164:7:-;4279:10;:17;;;;4252:15;:24;4268:7;4252:24;;;;;;;;;;;:44;;;;4307:10;4323:7;4307:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4175:164;:::o;4966:1002::-;5246:22;5296:1;5271:22;5288:4;5271:16;:22::i;:::-;:26;;;;:::i;:::-;5246:51;;5308:18;5329:17;:26;5347:7;5329:26;;;;;;;;;;;;5308:47;;5476:14;5462:10;:28;5458:328;;5507:19;5529:12;:18;5542:4;5529:18;;;;;;;;;;;;;;;:34;5548:14;5529:34;;;;;;;;;;;;5507:56;;5613:11;5580:12;:18;5593:4;5580:18;;;;;;;;;;;;;;;:30;5599:10;5580:30;;;;;;;;;;;:44;;;;5730:10;5697:17;:30;5715:11;5697:30;;;;;;;;;;;:43;;;;5492:294;5458:328;5882:17;:26;5900:7;5882:26;;;;;;;;;;;5875:33;;;5926:12;:18;5939:4;5926:18;;;;;;;;;;;;;;;:34;5945:14;5926:34;;;;;;;;;;;5919:41;;;5061:907;;4966:1002;;:::o;6263:1079::-;6516:22;6561:1;6541:10;:17;;;;:21;;;;:::i;:::-;6516:46;;6573:18;6594:15;:24;6610:7;6594:24;;;;;;;;;;;;6573:45;;6945:19;6967:10;6978:14;6967:26;;;;;;;;:::i;:::-;;;;;;;;;;6945:48;;7031:11;7006:10;7017;7006:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;7142:10;7111:15;:28;7127:11;7111:28;;;;;;;;;;;:41;;;;7283:15;:24;7299:7;7283:24;;;;;;;;;;;7276:31;;;7318:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6334:1008;;;6263:1079;:::o;3753:221::-;3838:14;3855:20;3872:2;3855:16;:20::i;:::-;3838:37;;3913:7;3886:12;:16;3899:2;3886:16;;;;;;;;;;;;;;;:24;3903:6;3886:24;;;;;;;;;;;:34;;;;3960:6;3931:17;:26;3949:7;3931:26;;;;;;;;;;;:35;;;;3827:147;3753:221;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:19:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:139::-;1171:5;1209:6;1196:20;1187:29;;1225:33;1252:5;1225:33;:::i;:::-;1125:139;;;;:::o;1270:137::-;1315:5;1353:6;1340:20;1331:29;;1369:32;1395:5;1369:32;:::i;:::-;1270:137;;;;:::o;1413:141::-;1469:5;1500:6;1494:13;1485:22;;1516:32;1542:5;1516:32;:::i;:::-;1413:141;;;;:::o;1573:338::-;1628:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:122;;1685:79;;:::i;:::-;1644:122;1802:6;1789:20;1827:78;1901:3;1893:6;1886:4;1878:6;1874:17;1827:78;:::i;:::-;1818:87;;1634:277;1573:338;;;;:::o;1931:340::-;1987:5;2036:3;2029:4;2021:6;2017:17;2013:27;2003:122;;2044:79;;:::i;:::-;2003:122;2161:6;2148:20;2186:79;2261:3;2253:6;2246:4;2238:6;2234:17;2186:79;:::i;:::-;2177:88;;1993:278;1931:340;;;;:::o;2277:139::-;2323:5;2361:6;2348:20;2339:29;;2377:33;2404:5;2377:33;:::i;:::-;2277:139;;;;:::o;2422:135::-;2466:5;2504:6;2491:20;2482:29;;2520:31;2545:5;2520:31;:::i;:::-;2422:135;;;;:::o;2563:329::-;2622:6;2671:2;2659:9;2650:7;2646:23;2642:32;2639:119;;;2677:79;;:::i;:::-;2639:119;2797:1;2822:53;2867:7;2858:6;2847:9;2843:22;2822:53;:::i;:::-;2812:63;;2768:117;2563:329;;;;:::o;2898:474::-;2966:6;2974;3023:2;3011:9;3002:7;2998:23;2994:32;2991:119;;;3029:79;;:::i;:::-;2991:119;3149:1;3174:53;3219:7;3210:6;3199:9;3195:22;3174:53;:::i;:::-;3164:63;;3120:117;3276:2;3302:53;3347:7;3338:6;3327:9;3323:22;3302:53;:::i;:::-;3292:63;;3247:118;2898:474;;;;;:::o;3378:619::-;3455:6;3463;3471;3520:2;3508:9;3499:7;3495:23;3491:32;3488:119;;;3526:79;;:::i;:::-;3488:119;3646:1;3671:53;3716:7;3707:6;3696:9;3692:22;3671:53;:::i;:::-;3661:63;;3617:117;3773:2;3799:53;3844:7;3835:6;3824:9;3820:22;3799:53;:::i;:::-;3789:63;;3744:118;3901:2;3927:53;3972:7;3963:6;3952:9;3948:22;3927:53;:::i;:::-;3917:63;;3872:118;3378:619;;;;;:::o;4003:943::-;4098:6;4106;4114;4122;4171:3;4159:9;4150:7;4146:23;4142:33;4139:120;;;4178:79;;:::i;:::-;4139:120;4298:1;4323:53;4368:7;4359:6;4348:9;4344:22;4323:53;:::i;:::-;4313:63;;4269:117;4425:2;4451:53;4496:7;4487:6;4476:9;4472:22;4451:53;:::i;:::-;4441:63;;4396:118;4553:2;4579:53;4624:7;4615:6;4604:9;4600:22;4579:53;:::i;:::-;4569:63;;4524:118;4709:2;4698:9;4694:18;4681:32;4740:18;4732:6;4729:30;4726:117;;;4762:79;;:::i;:::-;4726:117;4867:62;4921:7;4912:6;4901:9;4897:22;4867:62;:::i;:::-;4857:72;;4652:287;4003:943;;;;;;;:::o;4952:468::-;5017:6;5025;5074:2;5062:9;5053:7;5049:23;5045:32;5042:119;;;5080:79;;:::i;:::-;5042:119;5200:1;5225:53;5270:7;5261:6;5250:9;5246:22;5225:53;:::i;:::-;5215:63;;5171:117;5327:2;5353:50;5395:7;5386:6;5375:9;5371:22;5353:50;:::i;:::-;5343:60;;5298:115;4952:468;;;;;:::o;5426:1085::-;5528:6;5536;5544;5552;5560;5609:3;5597:9;5588:7;5584:23;5580:33;5577:120;;;5616:79;;:::i;:::-;5577:120;5736:1;5761:53;5806:7;5797:6;5786:9;5782:22;5761:53;:::i;:::-;5751:63;;5707:117;5891:2;5880:9;5876:18;5863:32;5922:18;5914:6;5911:30;5908:117;;;5944:79;;:::i;:::-;5908:117;6049:62;6103:7;6094:6;6083:9;6079:22;6049:62;:::i;:::-;6039:72;;5834:287;6160:2;6186:53;6231:7;6222:6;6211:9;6207:22;6186:53;:::i;:::-;6176:63;;6131:118;6288:2;6314:53;6359:7;6350:6;6339:9;6335:22;6314:53;:::i;:::-;6304:63;;6259:118;6416:3;6443:51;6486:7;6477:6;6466:9;6462:22;6443:51;:::i;:::-;6433:61;;6387:117;5426:1085;;;;;;;;:::o;6517:474::-;6585:6;6593;6642:2;6630:9;6621:7;6617:23;6613:32;6610:119;;;6648:79;;:::i;:::-;6610:119;6768:1;6793:53;6838:7;6829:6;6818:9;6814:22;6793:53;:::i;:::-;6783:63;;6739:117;6895:2;6921:53;6966:7;6957:6;6946:9;6942:22;6921:53;:::i;:::-;6911:63;;6866:118;6517:474;;;;;:::o;6997:327::-;7055:6;7104:2;7092:9;7083:7;7079:23;7075:32;7072:119;;;7110:79;;:::i;:::-;7072:119;7230:1;7255:52;7299:7;7290:6;7279:9;7275:22;7255:52;:::i;:::-;7245:62;;7201:116;6997:327;;;;:::o;7330:349::-;7399:6;7448:2;7436:9;7427:7;7423:23;7419:32;7416:119;;;7454:79;;:::i;:::-;7416:119;7574:1;7599:63;7654:7;7645:6;7634:9;7630:22;7599:63;:::i;:::-;7589:73;;7545:127;7330:349;;;;:::o;7685:509::-;7754:6;7803:2;7791:9;7782:7;7778:23;7774:32;7771:119;;;7809:79;;:::i;:::-;7771:119;7957:1;7946:9;7942:17;7929:31;7987:18;7979:6;7976:30;7973:117;;;8009:79;;:::i;:::-;7973:117;8114:63;8169:7;8160:6;8149:9;8145:22;8114:63;:::i;:::-;8104:73;;7900:287;7685:509;;;;:::o;8200:329::-;8259:6;8308:2;8296:9;8287:7;8283:23;8279:32;8276:119;;;8314:79;;:::i;:::-;8276:119;8434:1;8459:53;8504:7;8495:6;8484:9;8480:22;8459:53;:::i;:::-;8449:63;;8405:117;8200:329;;;;:::o;8535:142::-;8638:32;8664:5;8638:32;:::i;:::-;8633:3;8626:45;8535:142;;:::o;8683:118::-;8770:24;8788:5;8770:24;:::i;:::-;8765:3;8758:37;8683:118;;:::o;8807:157::-;8912:45;8932:24;8950:5;8932:24;:::i;:::-;8912:45;:::i;:::-;8907:3;8900:58;8807:157;;:::o;8970:109::-;9051:21;9066:5;9051:21;:::i;:::-;9046:3;9039:34;8970:109;;:::o;9085:118::-;9172:24;9190:5;9172:24;:::i;:::-;9167:3;9160:37;9085:118;;:::o;9209:157::-;9314:45;9334:24;9352:5;9334:24;:::i;:::-;9314:45;:::i;:::-;9309:3;9302:58;9209:157;;:::o;9372:360::-;9458:3;9486:38;9518:5;9486:38;:::i;:::-;9540:70;9603:6;9598:3;9540:70;:::i;:::-;9533:77;;9619:52;9664:6;9659:3;9652:4;9645:5;9641:16;9619:52;:::i;:::-;9696:29;9718:6;9696:29;:::i;:::-;9691:3;9687:39;9680:46;;9462:270;9372:360;;;;:::o;9738:373::-;9842:3;9870:38;9902:5;9870:38;:::i;:::-;9924:88;10005:6;10000:3;9924:88;:::i;:::-;9917:95;;10021:52;10066:6;10061:3;10054:4;10047:5;10043:16;10021:52;:::i;:::-;10098:6;10093:3;10089:16;10082:23;;9846:265;9738:373;;;;:::o;10117:364::-;10205:3;10233:39;10266:5;10233:39;:::i;:::-;10288:71;10352:6;10347:3;10288:71;:::i;:::-;10281:78;;10368:52;10413:6;10408:3;10401:4;10394:5;10390:16;10368:52;:::i;:::-;10445:29;10467:6;10445:29;:::i;:::-;10440:3;10436:39;10429:46;;10209:272;10117:364;;;;:::o;10487:377::-;10593:3;10621:39;10654:5;10621:39;:::i;:::-;10676:89;10758:6;10753:3;10676:89;:::i;:::-;10669:96;;10774:52;10819:6;10814:3;10807:4;10800:5;10796:16;10774:52;:::i;:::-;10851:6;10846:3;10842:16;10835:23;;10597:267;10487:377;;;;:::o;10894:845::-;10997:3;11034:5;11028:12;11063:36;11089:9;11063:36;:::i;:::-;11115:89;11197:6;11192:3;11115:89;:::i;:::-;11108:96;;11235:1;11224:9;11220:17;11251:1;11246:137;;;;11397:1;11392:341;;;;11213:520;;11246:137;11330:4;11326:9;11315;11311:25;11306:3;11299:38;11366:6;11361:3;11357:16;11350:23;;11246:137;;11392:341;11459:38;11491:5;11459:38;:::i;:::-;11519:1;11533:154;11547:6;11544:1;11541:13;11533:154;;;11621:7;11615:14;11611:1;11606:3;11602:11;11595:35;11671:1;11662:7;11658:15;11647:26;;11569:4;11566:1;11562:12;11557:17;;11533:154;;;11716:6;11711:3;11707:16;11700:23;;11399:334;;11213:520;;11001:738;;10894:845;;;;:::o;11745:366::-;11887:3;11908:67;11972:2;11967:3;11908:67;:::i;:::-;11901:74;;11984:93;12073:3;11984:93;:::i;:::-;12102:2;12097:3;12093:12;12086:19;;11745:366;;;:::o;12117:::-;12259:3;12280:67;12344:2;12339:3;12280:67;:::i;:::-;12273:74;;12356:93;12445:3;12356:93;:::i;:::-;12474:2;12469:3;12465:12;12458:19;;12117:366;;;:::o;12489:::-;12631:3;12652:67;12716:2;12711:3;12652:67;:::i;:::-;12645:74;;12728:93;12817:3;12728:93;:::i;:::-;12846:2;12841:3;12837:12;12830:19;;12489:366;;;:::o;12861:::-;13003:3;13024:67;13088:2;13083:3;13024:67;:::i;:::-;13017:74;;13100:93;13189:3;13100:93;:::i;:::-;13218:2;13213:3;13209:12;13202:19;;12861:366;;;:::o;13233:::-;13375:3;13396:67;13460:2;13455:3;13396:67;:::i;:::-;13389:74;;13472:93;13561:3;13472:93;:::i;:::-;13590:2;13585:3;13581:12;13574:19;;13233:366;;;:::o;13605:400::-;13765:3;13786:84;13868:1;13863:3;13786:84;:::i;:::-;13779:91;;13879:93;13968:3;13879:93;:::i;:::-;13997:1;13992:3;13988:11;13981:18;;13605:400;;;:::o;14011:366::-;14153:3;14174:67;14238:2;14233:3;14174:67;:::i;:::-;14167:74;;14250:93;14339:3;14250:93;:::i;:::-;14368:2;14363:3;14359:12;14352:19;;14011:366;;;:::o;14383:::-;14525:3;14546:67;14610:2;14605:3;14546:67;:::i;:::-;14539:74;;14622:93;14711:3;14622:93;:::i;:::-;14740:2;14735:3;14731:12;14724:19;;14383:366;;;:::o;14755:::-;14897:3;14918:67;14982:2;14977:3;14918:67;:::i;:::-;14911:74;;14994:93;15083:3;14994:93;:::i;:::-;15112:2;15107:3;15103:12;15096:19;;14755:366;;;:::o;15127:::-;15269:3;15290:67;15354:2;15349:3;15290:67;:::i;:::-;15283:74;;15366:93;15455:3;15366:93;:::i;:::-;15484:2;15479:3;15475:12;15468:19;;15127:366;;;:::o;15499:::-;15641:3;15662:67;15726:2;15721:3;15662:67;:::i;:::-;15655:74;;15738:93;15827:3;15738:93;:::i;:::-;15856:2;15851:3;15847:12;15840:19;;15499:366;;;:::o;15871:::-;16013:3;16034:67;16098:2;16093:3;16034:67;:::i;:::-;16027:74;;16110:93;16199:3;16110:93;:::i;:::-;16228:2;16223:3;16219:12;16212:19;;15871:366;;;:::o;16243:::-;16385:3;16406:67;16470:2;16465:3;16406:67;:::i;:::-;16399:74;;16482:93;16571:3;16482:93;:::i;:::-;16600:2;16595:3;16591:12;16584:19;;16243:366;;;:::o;16615:::-;16757:3;16778:67;16842:2;16837:3;16778:67;:::i;:::-;16771:74;;16854:93;16943:3;16854:93;:::i;:::-;16972:2;16967:3;16963:12;16956:19;;16615:366;;;:::o;16987:::-;17129:3;17150:67;17214:2;17209:3;17150:67;:::i;:::-;17143:74;;17226:93;17315:3;17226:93;:::i;:::-;17344:2;17339:3;17335:12;17328:19;;16987:366;;;:::o;17359:::-;17501:3;17522:67;17586:2;17581:3;17522:67;:::i;:::-;17515:74;;17598:93;17687:3;17598:93;:::i;:::-;17716:2;17711:3;17707:12;17700:19;;17359:366;;;:::o;17731:::-;17873:3;17894:67;17958:2;17953:3;17894:67;:::i;:::-;17887:74;;17970:93;18059:3;17970:93;:::i;:::-;18088:2;18083:3;18079:12;18072:19;;17731:366;;;:::o;18103:::-;18245:3;18266:67;18330:2;18325:3;18266:67;:::i;:::-;18259:74;;18342:93;18431:3;18342:93;:::i;:::-;18460:2;18455:3;18451:12;18444:19;;18103:366;;;:::o;18475:::-;18617:3;18638:67;18702:2;18697:3;18638:67;:::i;:::-;18631:74;;18714:93;18803:3;18714:93;:::i;:::-;18832:2;18827:3;18823:12;18816:19;;18475:366;;;:::o;18847:::-;18989:3;19010:67;19074:2;19069:3;19010:67;:::i;:::-;19003:74;;19086:93;19175:3;19086:93;:::i;:::-;19204:2;19199:3;19195:12;19188:19;;18847:366;;;:::o;19219:::-;19361:3;19382:67;19446:2;19441:3;19382:67;:::i;:::-;19375:74;;19458:93;19547:3;19458:93;:::i;:::-;19576:2;19571:3;19567:12;19560:19;;19219:366;;;:::o;19591:::-;19733:3;19754:67;19818:2;19813:3;19754:67;:::i;:::-;19747:74;;19830:93;19919:3;19830:93;:::i;:::-;19948:2;19943:3;19939:12;19932:19;;19591:366;;;:::o;19963:118::-;20050:24;20068:5;20050:24;:::i;:::-;20045:3;20038:37;19963:118;;:::o;20087:112::-;20170:22;20186:5;20170:22;:::i;:::-;20165:3;20158:35;20087:112;;:::o;20205:271::-;20335:3;20357:93;20446:3;20437:6;20357:93;:::i;:::-;20350:100;;20467:3;20460:10;;20205:271;;;;:::o;20482:412::-;20640:3;20662:93;20751:3;20742:6;20662:93;:::i;:::-;20655:100;;20765:75;20836:3;20827:6;20765:75;:::i;:::-;20865:2;20860:3;20856:12;20849:19;;20885:3;20878:10;;20482:412;;;;;:::o;20900:429::-;21077:3;21099:92;21187:3;21178:6;21099:92;:::i;:::-;21092:99;;21208:95;21299:3;21290:6;21208:95;:::i;:::-;21201:102;;21320:3;21313:10;;20900:429;;;;;:::o;21335:663::-;21576:3;21598:148;21742:3;21598:148;:::i;:::-;21591:155;;21756:75;21827:3;21818:6;21756:75;:::i;:::-;21856:2;21851:3;21847:12;21840:19;;21869:75;21940:3;21931:6;21869:75;:::i;:::-;21969:2;21964:3;21960:12;21953:19;;21989:3;21982:10;;21335:663;;;;;:::o;22004:222::-;22097:4;22135:2;22124:9;22120:18;22112:26;;22148:71;22216:1;22205:9;22201:17;22192:6;22148:71;:::i;:::-;22004:222;;;;:::o;22232:561::-;22415:4;22453:2;22442:9;22438:18;22430:26;;22466:71;22534:1;22523:9;22519:17;22510:6;22466:71;:::i;:::-;22547:88;22631:2;22620:9;22616:18;22607:6;22547:88;:::i;:::-;22682:9;22676:4;22672:20;22667:2;22656:9;22652:18;22645:48;22710:76;22781:4;22772:6;22710:76;:::i;:::-;22702:84;;22232:561;;;;;;:::o;22799:640::-;22994:4;23032:3;23021:9;23017:19;23009:27;;23046:71;23114:1;23103:9;23099:17;23090:6;23046:71;:::i;:::-;23127:72;23195:2;23184:9;23180:18;23171:6;23127:72;:::i;:::-;23209;23277:2;23266:9;23262:18;23253:6;23209:72;:::i;:::-;23328:9;23322:4;23318:20;23313:2;23302:9;23298:18;23291:48;23356:76;23427:4;23418:6;23356:76;:::i;:::-;23348:84;;22799:640;;;;;;;:::o;23445:210::-;23532:4;23570:2;23559:9;23555:18;23547:26;;23583:65;23645:1;23634:9;23630:17;23621:6;23583:65;:::i;:::-;23445:210;;;;:::o;23661:222::-;23754:4;23792:2;23781:9;23777:18;23769:26;;23805:71;23873:1;23862:9;23858:17;23849:6;23805:71;:::i;:::-;23661:222;;;;:::o;23889:553::-;24066:4;24104:3;24093:9;24089:19;24081:27;;24118:71;24186:1;24175:9;24171:17;24162:6;24118:71;:::i;:::-;24199:72;24267:2;24256:9;24252:18;24243:6;24199:72;:::i;:::-;24281;24349:2;24338:9;24334:18;24325:6;24281:72;:::i;:::-;24363;24431:2;24420:9;24416:18;24407:6;24363:72;:::i;:::-;23889:553;;;;;;;:::o;24448:545::-;24621:4;24659:3;24648:9;24644:19;24636:27;;24673:71;24741:1;24730:9;24726:17;24717:6;24673:71;:::i;:::-;24754:68;24818:2;24807:9;24803:18;24794:6;24754:68;:::i;:::-;24832:72;24900:2;24889:9;24885:18;24876:6;24832:72;:::i;:::-;24914;24982:2;24971:9;24967:18;24958:6;24914:72;:::i;:::-;24448:545;;;;;;;:::o;24999:309::-;25110:4;25148:2;25137:9;25133:18;25125:26;;25197:9;25191:4;25187:20;25183:1;25172:9;25168:17;25161:47;25225:76;25296:4;25287:6;25225:76;:::i;:::-;25217:84;;24999:309;;;;:::o;25314:313::-;25427:4;25465:2;25454:9;25450:18;25442:26;;25514:9;25508:4;25504:20;25500:1;25489:9;25485:17;25478:47;25542:78;25615:4;25606:6;25542:78;:::i;:::-;25534:86;;25314:313;;;;:::o;25633:419::-;25799:4;25837:2;25826:9;25822:18;25814:26;;25886:9;25880:4;25876:20;25872:1;25861:9;25857:17;25850:47;25914:131;26040:4;25914:131;:::i;:::-;25906:139;;25633:419;;;:::o;26058:::-;26224:4;26262:2;26251:9;26247:18;26239:26;;26311:9;26305:4;26301:20;26297:1;26286:9;26282:17;26275:47;26339:131;26465:4;26339:131;:::i;:::-;26331:139;;26058:419;;;:::o;26483:::-;26649:4;26687:2;26676:9;26672:18;26664:26;;26736:9;26730:4;26726:20;26722:1;26711:9;26707:17;26700:47;26764:131;26890:4;26764:131;:::i;:::-;26756:139;;26483:419;;;:::o;26908:::-;27074:4;27112:2;27101:9;27097:18;27089:26;;27161:9;27155:4;27151:20;27147:1;27136:9;27132:17;27125:47;27189:131;27315:4;27189:131;:::i;:::-;27181:139;;26908:419;;;:::o;27333:::-;27499:4;27537:2;27526:9;27522:18;27514:26;;27586:9;27580:4;27576:20;27572:1;27561:9;27557:17;27550:47;27614:131;27740:4;27614:131;:::i;:::-;27606:139;;27333:419;;;:::o;27758:::-;27924:4;27962:2;27951:9;27947:18;27939:26;;28011:9;28005:4;28001:20;27997:1;27986:9;27982:17;27975:47;28039:131;28165:4;28039:131;:::i;:::-;28031:139;;27758:419;;;:::o;28183:::-;28349:4;28387:2;28376:9;28372:18;28364:26;;28436:9;28430:4;28426:20;28422:1;28411:9;28407:17;28400:47;28464:131;28590:4;28464:131;:::i;:::-;28456:139;;28183:419;;;:::o;28608:::-;28774:4;28812:2;28801:9;28797:18;28789:26;;28861:9;28855:4;28851:20;28847:1;28836:9;28832:17;28825:47;28889:131;29015:4;28889:131;:::i;:::-;28881:139;;28608:419;;;:::o;29033:::-;29199:4;29237:2;29226:9;29222:18;29214:26;;29286:9;29280:4;29276:20;29272:1;29261:9;29257:17;29250:47;29314:131;29440:4;29314:131;:::i;:::-;29306:139;;29033:419;;;:::o;29458:::-;29624:4;29662:2;29651:9;29647:18;29639:26;;29711:9;29705:4;29701:20;29697:1;29686:9;29682:17;29675:47;29739:131;29865:4;29739:131;:::i;:::-;29731:139;;29458:419;;;:::o;29883:::-;30049:4;30087:2;30076:9;30072:18;30064:26;;30136:9;30130:4;30126:20;30122:1;30111:9;30107:17;30100:47;30164:131;30290:4;30164:131;:::i;:::-;30156:139;;29883:419;;;:::o;30308:::-;30474:4;30512:2;30501:9;30497:18;30489:26;;30561:9;30555:4;30551:20;30547:1;30536:9;30532:17;30525:47;30589:131;30715:4;30589:131;:::i;:::-;30581:139;;30308:419;;;:::o;30733:::-;30899:4;30937:2;30926:9;30922:18;30914:26;;30986:9;30980:4;30976:20;30972:1;30961:9;30957:17;30950:47;31014:131;31140:4;31014:131;:::i;:::-;31006:139;;30733:419;;;:::o;31158:::-;31324:4;31362:2;31351:9;31347:18;31339:26;;31411:9;31405:4;31401:20;31397:1;31386:9;31382:17;31375:47;31439:131;31565:4;31439:131;:::i;:::-;31431:139;;31158:419;;;:::o;31583:::-;31749:4;31787:2;31776:9;31772:18;31764:26;;31836:9;31830:4;31826:20;31822:1;31811:9;31807:17;31800:47;31864:131;31990:4;31864:131;:::i;:::-;31856:139;;31583:419;;;:::o;32008:::-;32174:4;32212:2;32201:9;32197:18;32189:26;;32261:9;32255:4;32251:20;32247:1;32236:9;32232:17;32225:47;32289:131;32415:4;32289:131;:::i;:::-;32281:139;;32008:419;;;:::o;32433:::-;32599:4;32637:2;32626:9;32622:18;32614:26;;32686:9;32680:4;32676:20;32672:1;32661:9;32657:17;32650:47;32714:131;32840:4;32714:131;:::i;:::-;32706:139;;32433:419;;;:::o;32858:::-;33024:4;33062:2;33051:9;33047:18;33039:26;;33111:9;33105:4;33101:20;33097:1;33086:9;33082:17;33075:47;33139:131;33265:4;33139:131;:::i;:::-;33131:139;;32858:419;;;:::o;33283:::-;33449:4;33487:2;33476:9;33472:18;33464:26;;33536:9;33530:4;33526:20;33522:1;33511:9;33507:17;33500:47;33564:131;33690:4;33564:131;:::i;:::-;33556:139;;33283:419;;;:::o;33708:::-;33874:4;33912:2;33901:9;33897:18;33889:26;;33961:9;33955:4;33951:20;33947:1;33936:9;33932:17;33925:47;33989:131;34115:4;33989:131;:::i;:::-;33981:139;;33708:419;;;:::o;34133:::-;34299:4;34337:2;34326:9;34322:18;34314:26;;34386:9;34380:4;34376:20;34372:1;34361:9;34357:17;34350:47;34414:131;34540:4;34414:131;:::i;:::-;34406:139;;34133:419;;;:::o;34558:222::-;34651:4;34689:2;34678:9;34674:18;34666:26;;34702:71;34770:1;34759:9;34755:17;34746:6;34702:71;:::i;:::-;34558:222;;;;:::o;34786:129::-;34820:6;34847:20;;:::i;:::-;34837:30;;34876:33;34904:4;34896:6;34876:33;:::i;:::-;34786:129;;;:::o;34921:75::-;34954:6;34987:2;34981:9;34971:19;;34921:75;:::o;35002:307::-;35063:4;35153:18;35145:6;35142:30;35139:56;;;35175:18;;:::i;:::-;35139:56;35213:29;35235:6;35213:29;:::i;:::-;35205:37;;35297:4;35291;35287:15;35279:23;;35002:307;;;:::o;35315:308::-;35377:4;35467:18;35459:6;35456:30;35453:56;;;35489:18;;:::i;:::-;35453:56;35527:29;35549:6;35527:29;:::i;:::-;35519:37;;35611:4;35605;35601:15;35593:23;;35315:308;;;:::o;35629:141::-;35678:4;35701:3;35693:11;;35724:3;35721:1;35714:14;35758:4;35755:1;35745:18;35737:26;;35629:141;;;:::o;35776:98::-;35827:6;35861:5;35855:12;35845:22;;35776:98;;;:::o;35880:99::-;35932:6;35966:5;35960:12;35950:22;;35880:99;;;:::o;35985:168::-;36068:11;36102:6;36097:3;36090:19;36142:4;36137:3;36133:14;36118:29;;35985:168;;;;:::o;36159:147::-;36260:11;36297:3;36282:18;;36159:147;;;;:::o;36312:169::-;36396:11;36430:6;36425:3;36418:19;36470:4;36465:3;36461:14;36446:29;;36312:169;;;;:::o;36487:148::-;36589:11;36626:3;36611:18;;36487:148;;;;:::o;36641:305::-;36681:3;36700:20;36718:1;36700:20;:::i;:::-;36695:25;;36734:20;36752:1;36734:20;:::i;:::-;36729:25;;36888:1;36820:66;36816:74;36813:1;36810:81;36807:107;;;36894:18;;:::i;:::-;36807:107;36938:1;36935;36931:9;36924:16;;36641:305;;;;:::o;36952:185::-;36992:1;37009:20;37027:1;37009:20;:::i;:::-;37004:25;;37043:20;37061:1;37043:20;:::i;:::-;37038:25;;37082:1;37072:35;;37087:18;;:::i;:::-;37072:35;37129:1;37126;37122:9;37117:14;;36952:185;;;;:::o;37143:348::-;37183:7;37206:20;37224:1;37206:20;:::i;:::-;37201:25;;37240:20;37258:1;37240:20;:::i;:::-;37235:25;;37428:1;37360:66;37356:74;37353:1;37350:81;37345:1;37338:9;37331:17;37327:105;37324:131;;;37435:18;;:::i;:::-;37324:131;37483:1;37480;37476:9;37465:20;;37143:348;;;;:::o;37497:191::-;37537:4;37557:20;37575:1;37557:20;:::i;:::-;37552:25;;37591:20;37609:1;37591:20;:::i;:::-;37586:25;;37630:1;37627;37624:8;37621:34;;;37635:18;;:::i;:::-;37621:34;37680:1;37677;37673:9;37665:17;;37497:191;;;;:::o;37694:96::-;37731:7;37760:24;37778:5;37760:24;:::i;:::-;37749:35;;37694:96;;;:::o;37796:104::-;37841:7;37870:24;37888:5;37870:24;:::i;:::-;37859:35;;37796:104;;;:::o;37906:90::-;37940:7;37983:5;37976:13;37969:21;37958:32;;37906:90;;;:::o;38002:77::-;38039:7;38068:5;38057:16;;38002:77;;;:::o;38085:149::-;38121:7;38161:66;38154:5;38150:78;38139:89;;38085:149;;;:::o;38240:126::-;38277:7;38317:42;38310:5;38306:54;38295:65;;38240:126;;;:::o;38372:77::-;38409:7;38438:5;38427:16;;38372:77;;;:::o;38455:86::-;38490:7;38530:4;38523:5;38519:16;38508:27;;38455:86;;;:::o;38547:154::-;38631:6;38626:3;38621;38608:30;38693:1;38684:6;38679:3;38675:16;38668:27;38547:154;;;:::o;38707:307::-;38775:1;38785:113;38799:6;38796:1;38793:13;38785:113;;;38884:1;38879:3;38875:11;38869:18;38865:1;38860:3;38856:11;38849:39;38821:2;38818:1;38814:10;38809:15;;38785:113;;;38916:6;38913:1;38910:13;38907:101;;;38996:1;38987:6;38982:3;38978:16;38971:27;38907:101;38756:258;38707:307;;;:::o;39020:320::-;39064:6;39101:1;39095:4;39091:12;39081:22;;39148:1;39142:4;39138:12;39169:18;39159:81;;39225:4;39217:6;39213:17;39203:27;;39159:81;39287:2;39279:6;39276:14;39256:18;39253:38;39250:84;;;39306:18;;:::i;:::-;39250:84;39071:269;39020:320;;;:::o;39346:281::-;39429:27;39451:4;39429:27;:::i;:::-;39421:6;39417:40;39559:6;39547:10;39544:22;39523:18;39511:10;39508:34;39505:62;39502:88;;;39570:18;;:::i;:::-;39502:88;39610:10;39606:2;39599:22;39389:238;39346:281;;:::o;39633:233::-;39672:3;39695:24;39713:5;39695:24;:::i;:::-;39686:33;;39741:66;39734:5;39731:77;39728:103;;;39811:18;;:::i;:::-;39728:103;39858:1;39851:5;39847:13;39840:20;;39633:233;;;:::o;39872:100::-;39911:7;39940:26;39960:5;39940:26;:::i;:::-;39929:37;;39872:100;;;:::o;39978:79::-;40017:7;40046:5;40035:16;;39978:79;;;:::o;40063:94::-;40102:7;40131:20;40145:5;40131:20;:::i;:::-;40120:31;;40063:94;;;:::o;40163:176::-;40195:1;40212:20;40230:1;40212:20;:::i;:::-;40207:25;;40246:20;40264:1;40246:20;:::i;:::-;40241:25;;40285:1;40275:35;;40290:18;;:::i;:::-;40275:35;40331:1;40328;40324:9;40319:14;;40163:176;;;;:::o;40345:180::-;40393:77;40390:1;40383:88;40490:4;40487:1;40480:15;40514:4;40511:1;40504:15;40531:180;40579:77;40576:1;40569:88;40676:4;40673:1;40666:15;40700:4;40697:1;40690:15;40717:180;40765:77;40762:1;40755:88;40862:4;40859:1;40852:15;40886:4;40883:1;40876:15;40903:180;40951:77;40948:1;40941:88;41048:4;41045:1;41038:15;41072:4;41069:1;41062:15;41089:180;41137:77;41134:1;41127:88;41234:4;41231:1;41224:15;41258:4;41255:1;41248:15;41275:180;41323:77;41320:1;41313:88;41420:4;41417:1;41410:15;41444:4;41441:1;41434:15;41461:117;41570:1;41567;41560:12;41584:117;41693:1;41690;41683:12;41707:117;41816:1;41813;41806:12;41830:117;41939:1;41936;41929:12;41953:102;41994:6;42045:2;42041:7;42036:2;42029:5;42025:14;42021:28;42011:38;;41953:102;;;:::o;42061:94::-;42094:8;42142:5;42138:2;42134:14;42113:35;;42061:94;;;:::o;42161:230::-;42301:34;42297:1;42289:6;42285:14;42278:58;42370:13;42365:2;42357:6;42353:15;42346:38;42161:230;:::o;42397:237::-;42537:34;42533:1;42525:6;42521:14;42514:58;42606:20;42601:2;42593:6;42589:15;42582:45;42397:237;:::o;42640:225::-;42780:34;42776:1;42768:6;42764:14;42757:58;42849:8;42844:2;42836:6;42832:15;42825:33;42640:225;:::o;42871:178::-;43011:30;43007:1;42999:6;42995:14;42988:54;42871:178;:::o;43055:::-;43195:30;43191:1;43183:6;43179:14;43172:54;43055:178;:::o;43239:214::-;43379:66;43375:1;43367:6;43363:14;43356:90;43239:214;:::o;43459:223::-;43599:34;43595:1;43587:6;43583:14;43576:58;43668:6;43663:2;43655:6;43651:15;43644:31;43459:223;:::o;43688:175::-;43828:27;43824:1;43816:6;43812:14;43805:51;43688:175;:::o;43869:231::-;44009:34;44005:1;43997:6;43993:14;43986:58;44078:14;44073:2;44065:6;44061:15;44054:39;43869:231;:::o;44106:224::-;44246:34;44242:1;44234:6;44230:14;44223:58;44315:7;44310:2;44302:6;44298:15;44291:32;44106:224;:::o;44336:243::-;44476:34;44472:1;44464:6;44460:14;44453:58;44545:26;44540:2;44532:6;44528:15;44521:51;44336:243;:::o;44585:229::-;44725:34;44721:1;44713:6;44709:14;44702:58;44794:12;44789:2;44781:6;44777:15;44770:37;44585:229;:::o;44820:228::-;44960:34;44956:1;44948:6;44944:14;44937:58;45029:11;45024:2;45016:6;45012:15;45005:36;44820:228;:::o;45054:182::-;45194:34;45190:1;45182:6;45178:14;45171:58;45054:182;:::o;45242:231::-;45382:34;45378:1;45370:6;45366:14;45359:58;45451:14;45446:2;45438:6;45434:15;45427:39;45242:231;:::o;45479:182::-;45619:34;45615:1;45607:6;45603:14;45596:58;45479:182;:::o;45667:228::-;45807:34;45803:1;45795:6;45791:14;45784:58;45876:11;45871:2;45863:6;45859:15;45852:36;45667:228;:::o;45901:220::-;46041:34;46037:1;46029:6;46025:14;46018:58;46110:3;46105:2;46097:6;46093:15;46086:28;45901:220;:::o;46127:::-;46267:34;46263:1;46255:6;46251:14;46244:58;46336:3;46331:2;46323:6;46319:15;46312:28;46127:220;:::o;46353:236::-;46493:34;46489:1;46481:6;46477:14;46470:58;46562:19;46557:2;46549:6;46545:15;46538:44;46353:236;:::o;46595:167::-;46735:19;46731:1;46723:6;46719:14;46712:43;46595:167;:::o;46768:231::-;46908:34;46904:1;46896:6;46892:14;46885:58;46977:14;46972:2;46964:6;46960:15;46953:39;46768:231;:::o;47005:122::-;47078:24;47096:5;47078:24;:::i;:::-;47071:5;47068:35;47058:63;;47117:1;47114;47107:12;47058:63;47005:122;:::o;47133:116::-;47203:21;47218:5;47203:21;:::i;:::-;47196:5;47193:32;47183:60;;47239:1;47236;47229:12;47183:60;47133:116;:::o;47255:122::-;47328:24;47346:5;47328:24;:::i;:::-;47321:5;47318:35;47308:63;;47367:1;47364;47357:12;47308:63;47255:122;:::o;47383:120::-;47455:23;47472:5;47455:23;:::i;:::-;47448:5;47445:34;47435:62;;47493:1;47490;47483:12;47435:62;47383:120;:::o;47509:122::-;47582:24;47600:5;47582:24;:::i;:::-;47575:5;47572:35;47562:63;;47621:1;47618;47611:12;47562:63;47509:122;:::o;47637:118::-;47708:22;47724:5;47708:22;:::i;:::-;47701:5;47698:33;47688:61;;47745:1;47742;47735:12;47688:61;47637:118;:::o
Swarm Source
ipfs://c44a01bb0c0874215a321c5eff9f805e07b1026d32882d7044947f816461a561
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.