Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
104 CAPE
Holders
32
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CAPELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CRYPTOAPES
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-10 */ // 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; } } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } 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); } pragma solidity ^0.8.0; /** * @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; } } pragma solidity ^0.8.0; /** * @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; } pragma solidity ^0.8.0; /** * @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); } pragma solidity ^0.8.0; /** * @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); } 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; } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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. */ /** * @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); } } pragma solidity ^0.8.0; /** * @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; string public _baseURI; /** * @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 base = baseURI(); return bytes(base).length > 0 ? string(abi.encodePacked(base, 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 _baseURI; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.0; /** * @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(); } } pragma solidity ^0.8.0; contract CRYPTOAPES is ERC721Enumerable, Ownable { using SafeMath for uint256; uint public constant _TOTALSUPPLY =3333; uint public maxQuantity =10; uint256 public price = 0.05 ether; bool public isPaused = true; uint public reserve = 50; uint private tokenId=1; constructor(string memory baseURI) ERC721("Crypto Apes", "CAPE") { setBaseURI(baseURI); } function setBaseURI(string memory baseURI) public onlyOwner { _baseURI = baseURI; } function setPrice(uint256 _newPrice) public onlyOwner() { price = _newPrice; } function setMaxxQtPerTx(uint256 _quantity) public onlyOwner { maxQuantity=_quantity; } function setReserveTokens(uint256 _quantity) public onlyOwner { reserve=_quantity; } modifier isSaleOpen{ require(totalSupply() < _TOTALSUPPLY, "Sale end"); _; } function flipPauseStatus() public onlyOwner { isPaused = !isPaused; } function getPrice(uint256 _quantity) public view returns (uint256) { return _quantity*price ; } function reserveTokens(uint quantity) public onlyOwner { require(quantity <= reserve, "The quantity exceeds the reserve."); reserve -= quantity; for (uint i = 0; i < quantity; i++) { _safeMint(msg.sender,totalsupply()); tokenId++; } } function mint(uint chosenAmount) public payable isSaleOpen{ require(isPaused == false, "Sale is not active at the moment"); require(totalSupply()+chosenAmount<=_TOTALSUPPLY-reserve,"Quantity must be lesser then MaxSupply"); require(chosenAmount > 0, "Number of tokens can not be less than or equal to 0"); require(chosenAmount <= maxQuantity,"Chosen Amount exceeds MaxQuantity"); require(price.mul(chosenAmount) == msg.value, "Sent ether value is incorrect"); for (uint i = 0; i < chosenAmount; i++) { _safeMint(msg.sender, totalsupply()); tokenId++; } } function mintBreakDown(address userAddress,uint chosenAmount) public payable isSaleOpen onlyOwner{ require(isPaused == false, "Sale is not active at the moment"); require(totalSupply()+chosenAmount<=_TOTALSUPPLY-reserve,"Quantity must be lesser then MaxSupply"); require(chosenAmount > 0, "Number of tokens can not be less than or equal to 0"); require(chosenAmount <= maxQuantity,"Chosen Amount exceeds MaxQuantity"); require(price.mul(chosenAmount) == msg.value, "Sent ether value is incorrect"); for (uint i = 0; i < chosenAmount; i++) { _safeMint(userAddress, totalsupply()); tokenId++; } } function tokensOfOwner(address _owner) public view returns (uint256[] memory) { uint256 count = balanceOf(_owner); uint256[] memory result = new uint256[](count); for (uint256 index = 0; index < count; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } function withdraw() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } function totalsupply() private view returns (uint) { return tokenId; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_TOTALSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseURI","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":"flipPauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","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":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"mintBreakDown","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserveTokens","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setMaxxQtPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setReserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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
6080604052600a600c5566b1a2bc2ec50000600d556001600e60006101000a81548160ff0219169083151502179055506032600f5560016010553480156200004657600080fd5b5060405162004eae38038062004eae83398181016040528101906200006c9190620003e0565b6040518060400160405280600b81526020017f43727970746f20417065730000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43415045000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000f0929190620002b2565b50806001908051906020019062000109929190620002b2565b50505060006200011e620001d560201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001ce81620001dd60201b60201c565b5062000638565b600033905090565b620001ed620001d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002136200028860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200026c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002639062000458565b60405180910390fd5b806006908051906020019062000284929190620002b2565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002c09062000520565b90600052602060002090601f016020900481019282620002e4576000855562000330565b82601f10620002ff57805160ff191683800117855562000330565b8280016001018555821562000330579182015b828111156200032f57825182559160200191906001019062000312565b5b5090506200033f919062000343565b5090565b5b808211156200035e57600081600090555060010162000344565b5090565b6000620003796200037384620004a3565b6200047a565b905082815260208101848484011115620003985762000397620005ef565b5b620003a5848285620004ea565b509392505050565b600082601f830112620003c557620003c4620005ea565b5b8151620003d784826020860162000362565b91505092915050565b600060208284031215620003f957620003f8620005f9565b5b600082015167ffffffffffffffff8111156200041a5762000419620005f4565b5b6200042884828501620003ad565b91505092915050565b600062000440602083620004d9565b91506200044d826200060f565b602082019050919050565b60006020820190508181036000830152620004738162000431565b9050919050565b60006200048662000499565b905062000494828262000556565b919050565b6000604051905090565b600067ffffffffffffffff821115620004c157620004c0620005bb565b5b620004cc82620005fe565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200050a578082015181840152602081019050620004ed565b838111156200051a576000848401525b50505050565b600060028204905060018216806200053957607f821691505b6020821081141562000550576200054f6200058c565b5b50919050565b6200056182620005fe565b810181811067ffffffffffffffff82111715620005835762000582620005bb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61486680620006486000396000f3fe6080604052600436106102045760003560e01c80638da5cb5b11610118578063c87b56dd116100a0578063e640cf7d1161006f578063e640cf7d1461075d578063e757223014610788578063e985e9c5146107c5578063f2fde38b14610802578063fa62884c1461082b57610204565b8063c87b56dd146106a1578063cd3293de146106de578063d031370b14610709578063db4568e21461073257610204565b8063a035b1fe116100e7578063a035b1fe146105dd578063a0712d6814610608578063a22cb46514610624578063b187bd261461064d578063b88d4fde1461067857610204565b80638da5cb5b1461053557806391b7f5ed1461056057806395d89b41146105895780639d38fd21146105b457610204565b806342842e0e1161019b5780636a44e1731161016a5780636a44e1731461044b57806370a082311461047457806371b49fc6146104b1578063743976a0146104cd5780638462151c146104f857610204565b806342842e0e1461037f5780634f6ccce7146103a857806355f804b3146103e55780636352211e1461040e57610204565b806318160ddd116101d757806318160ddd146102d757806323b872dd146103025780632f745c591461032b5780633ccfd60b1461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613288565b610842565b60405161023d91906138c5565b60405180910390f35b34801561025257600080fd5b5061025b6108bc565b60405161026891906138e0565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061332b565b61094e565b6040516102a5919061383c565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613248565b6109d3565b005b3480156102e357600080fd5b506102ec610aeb565b6040516102f99190613c22565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613132565b610af8565b005b34801561033757600080fd5b50610352600480360381019061034d9190613248565b610b58565b60405161035f9190613c22565b60405180910390f35b34801561037457600080fd5b5061037d610bfd565b005b34801561038b57600080fd5b506103a660048036038101906103a19190613132565b610cc8565b005b3480156103b457600080fd5b506103cf60048036038101906103ca919061332b565b610ce8565b6040516103dc9190613c22565b60405180910390f35b3480156103f157600080fd5b5061040c600480360381019061040791906132e2565b610d59565b005b34801561041a57600080fd5b506104356004803603810190610430919061332b565b610def565b604051610442919061383c565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061332b565b610ea1565b005b34801561048057600080fd5b5061049b600480360381019061049691906130c5565b610f27565b6040516104a89190613c22565b60405180910390f35b6104cb60048036038101906104c69190613248565b610fdf565b005b3480156104d957600080fd5b506104e261128a565b6040516104ef91906138e0565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a91906130c5565b611318565b60405161052c91906138a3565b60405180910390f35b34801561054157600080fd5b5061054a6113c6565b604051610557919061383c565b60405180910390f35b34801561056c57600080fd5b506105876004803603810190610582919061332b565b6113f0565b005b34801561059557600080fd5b5061059e611476565b6040516105ab91906138e0565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061332b565b611508565b005b3480156105e957600080fd5b506105f261158e565b6040516105ff9190613c22565b60405180910390f35b610622600480360381019061061d919061332b565b611594565b005b34801561063057600080fd5b5061064b60048036038101906106469190613208565b6117c2565b005b34801561065957600080fd5b50610662611943565b60405161066f91906138c5565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613185565b611956565b005b3480156106ad57600080fd5b506106c860048036038101906106c3919061332b565b6119b8565b6040516106d591906138e0565b60405180910390f35b3480156106ea57600080fd5b506106f3611a5f565b6040516107009190613c22565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b919061332b565b611a65565b005b34801561073e57600080fd5b50610747611b8a565b6040516107549190613c22565b60405180910390f35b34801561076957600080fd5b50610772611b90565b60405161077f9190613c22565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa919061332b565b611b96565b6040516107bc9190613c22565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e791906130f2565b611bad565b6040516107f991906138c5565b60405180910390f35b34801561080e57600080fd5b50610829600480360381019061082491906130c5565b611c41565b005b34801561083757600080fd5b50610840611d39565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b557506108b482611de1565b5b9050919050565b6060600080546108cb90613f0b565b80601f01602080910402602001604051908101604052809291908181526020018280546108f790613f0b565b80156109445780601f1061091957610100808354040283529160200191610944565b820191906000526020600020905b81548152906001019060200180831161092757829003601f168201915b5050505050905090565b600061095982611ec3565b610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90613b02565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109de82610def565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690613ba2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6e611f2f565b73ffffffffffffffffffffffffffffffffffffffff161480610a9d5750610a9c81610a97611f2f565b611bad565b5b610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390613a22565b60405180910390fd5b610ae68383611f37565b505050565b6000600980549050905090565b610b09610b03611f2f565b82611ff0565b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613bc2565b60405180910390fd5b610b538383836120ce565b505050565b6000610b6383610f27565b8210610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90613922565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c05611f2f565b73ffffffffffffffffffffffffffffffffffffffff16610c236113c6565b73ffffffffffffffffffffffffffffffffffffffff1614610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7090613b22565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610cc4573d6000803e3d6000fd5b5050565b610ce383838360405180602001604052806000815250611956565b505050565b6000610cf2610aeb565b8210610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90613be2565b60405180910390fd5b60098281548110610d4757610d466140a4565b5b90600052602060002001549050919050565b610d61611f2f565b73ffffffffffffffffffffffffffffffffffffffff16610d7f6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90613b22565b60405180910390fd5b8060069080519060200190610deb929190612ed9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613a62565b60405180910390fd5b80915050919050565b610ea9611f2f565b73ffffffffffffffffffffffffffffffffffffffff16610ec76113c6565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490613b22565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90613a42565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d05610fea610aeb565b1061102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190613ac2565b60405180910390fd5b611032611f2f565b73ffffffffffffffffffffffffffffffffffffffff166110506113c6565b73ffffffffffffffffffffffffffffffffffffffff16146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613b22565b60405180910390fd5b60001515600e60009054906101000a900460ff161515146110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390613c02565b60405180910390fd5b600f54610d0561110c9190613e21565b81611115610aeb565b61111f9190613d40565b1115611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790613b42565b60405180910390fd5b600081116111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90613902565b60405180910390fd5b600c548111156111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df90613ae2565b60405180910390fd5b346111fe82600d5461232a90919063ffffffff16565b1461123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613a82565b60405180910390fd5b60005b818110156112855761125a83611255612340565b61234a565b6010600081548092919061126d90613f6e565b9190505550808061127d90613f6e565b915050611241565b505050565b6006805461129790613f0b565b80601f01602080910402602001604051908101604052809291908181526020018280546112c390613f0b565b80156113105780601f106112e557610100808354040283529160200191611310565b820191906000526020600020905b8154815290600101906020018083116112f357829003601f168201915b505050505081565b6060600061132583610f27565b905060008167ffffffffffffffff811115611343576113426140d3565b5b6040519080825280602002602001820160405280156113715781602001602082028036833780820191505090505b50905060005b828110156113bb576113898582610b58565b82828151811061139c5761139b6140a4565b5b60200260200101818152505080806113b390613f6e565b915050611377565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113f8611f2f565b73ffffffffffffffffffffffffffffffffffffffff166114166113c6565b73ffffffffffffffffffffffffffffffffffffffff161461146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390613b22565b60405180910390fd5b80600d8190555050565b60606001805461148590613f0b565b80601f01602080910402602001604051908101604052809291908181526020018280546114b190613f0b565b80156114fe5780601f106114d3576101008083540402835291602001916114fe565b820191906000526020600020905b8154815290600101906020018083116114e157829003601f168201915b5050505050905090565b611510611f2f565b73ffffffffffffffffffffffffffffffffffffffff1661152e6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90613b22565b60405180910390fd5b80600c8190555050565b600d5481565b610d0561159f610aeb565b106115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690613ac2565b60405180910390fd5b60001515600e60009054906101000a900460ff16151514611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613c02565b60405180910390fd5b600f54610d056116459190613e21565b8161164e610aeb565b6116589190613d40565b1115611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613b42565b60405180910390fd5b600081116116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390613902565b60405180910390fd5b600c54811115611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171890613ae2565b60405180910390fd5b3461173782600d5461232a90919063ffffffff16565b14611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613a82565b60405180910390fd5b60005b818110156117be576117933361178e612340565b61234a565b601060008154809291906117a690613f6e565b919050555080806117b690613f6e565b91505061177a565b5050565b6117ca611f2f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f906139e2565b60405180910390fd5b8060056000611845611f2f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118f2611f2f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161193791906138c5565b60405180910390a35050565b600e60009054906101000a900460ff1681565b611967611961611f2f565b83611ff0565b6119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d90613bc2565b60405180910390fd5b6119b284848484612368565b50505050565b60606119c382611ec3565b611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613b82565b60405180910390fd5b6000611a0c6123c4565b90506000815111611a2c5760405180602001604052806000815250611a57565b80611a3684612456565b604051602001611a47929190613818565b6040516020818303038152906040525b915050919050565b600f5481565b611a6d611f2f565b73ffffffffffffffffffffffffffffffffffffffff16611a8b6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890613b22565b60405180910390fd5b600f54811115611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d906139a2565b60405180910390fd5b80600f6000828254611b389190613e21565b9250508190555060005b81811015611b8657611b5b33611b56612340565b61234a565b60106000815480929190611b6e90613f6e565b91905055508080611b7e90613f6e565b915050611b42565b5050565b610d0581565b600c5481565b6000600d5482611ba69190613dc7565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c49611f2f565b73ffffffffffffffffffffffffffffffffffffffff16611c676113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb490613b22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490613962565b60405180910390fd5b611d36816125b7565b50565b611d41611f2f565b73ffffffffffffffffffffffffffffffffffffffff16611d5f6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90613b22565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611eac57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ebc5750611ebb8261267d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611faa83610def565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ffb82611ec3565b61203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190613a02565b60405180910390fd5b600061204583610def565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b457508373ffffffffffffffffffffffffffffffffffffffff1661209c8461094e565b73ffffffffffffffffffffffffffffffffffffffff16145b806120c557506120c48185611bad565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120ee82610def565b73ffffffffffffffffffffffffffffffffffffffff1614612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90613b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab906139c2565b60405180910390fd5b6121bf8383836126e7565b6121ca600082611f37565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221a9190613e21565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122719190613d40565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836123389190613dc7565b905092915050565b6000601054905090565b6123648282604051806020016040528060008152506127fb565b5050565b6123738484846120ce565b61237f84848484612856565b6123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b590613942565b60405180910390fd5b50505050565b6060600680546123d390613f0b565b80601f01602080910402602001604051908101604052809291908181526020018280546123ff90613f0b565b801561244c5780601f106124215761010080835404028352916020019161244c565b820191906000526020600020905b81548152906001019060200180831161242f57829003601f168201915b5050505050905090565b6060600082141561249e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125b2565b600082905060005b600082146124d05780806124b990613f6e565b915050600a826124c99190613d96565b91506124a6565b60008167ffffffffffffffff8111156124ec576124eb6140d3565b5b6040519080825280601f01601f19166020018201604052801561251e5781602001600182028036833780820191505090505b5090505b600085146125ab576001826125379190613e21565b9150600a856125469190613fb7565b60306125529190613d40565b60f81b818381518110612568576125676140a4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125a49190613d96565b9450612522565b8093505050505b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126f28383836129ed565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273557612730816129f2565b612774565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612773576127728382612a3b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576127b281612ba8565b6127f6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127f5576127f48282612c79565b5b5b505050565b6128058383612cf8565b6128126000848484612856565b612851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284890613942565b60405180910390fd5b505050565b60006128778473ffffffffffffffffffffffffffffffffffffffff16612ec6565b156129e0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128a0611f2f565b8786866040518563ffffffff1660e01b81526004016128c29493929190613857565b602060405180830381600087803b1580156128dc57600080fd5b505af192505050801561290d57506040513d601f19601f8201168201806040525081019061290a91906132b5565b60015b612990573d806000811461293d576040519150601f19603f3d011682016040523d82523d6000602084013e612942565b606091505b50600081511415612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f90613942565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129e5565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a4884610f27565b612a529190613e21565b9050600060086000848152602001908152602001600020549050818114612b37576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612bbc9190613e21565b90506000600a6000848152602001908152602001600020549050600060098381548110612bec57612beb6140a4565b5b906000526020600020015490508060098381548110612c0e57612c0d6140a4565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612c5d57612c5c614075565b5b6001900381819060005260206000200160009055905550505050565b6000612c8483610f27565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f90613aa2565b60405180910390fd5b612d7181611ec3565b15612db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da890613982565b60405180910390fd5b612dbd600083836126e7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e0d9190613d40565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ee590613f0b565b90600052602060002090601f016020900481019282612f075760008555612f4e565b82601f10612f2057805160ff1916838001178555612f4e565b82800160010185558215612f4e579182015b82811115612f4d578251825591602001919060010190612f32565b5b509050612f5b9190612f5f565b5090565b5b80821115612f78576000816000905550600101612f60565b5090565b6000612f8f612f8a84613c62565b613c3d565b905082815260208101848484011115612fab57612faa614107565b5b612fb6848285613ec9565b509392505050565b6000612fd1612fcc84613c93565b613c3d565b905082815260208101848484011115612fed57612fec614107565b5b612ff8848285613ec9565b509392505050565b60008135905061300f816147d4565b92915050565b600081359050613024816147eb565b92915050565b60008135905061303981614802565b92915050565b60008151905061304e81614802565b92915050565b600082601f83011261306957613068614102565b5b8135613079848260208601612f7c565b91505092915050565b600082601f83011261309757613096614102565b5b81356130a7848260208601612fbe565b91505092915050565b6000813590506130bf81614819565b92915050565b6000602082840312156130db576130da614111565b5b60006130e984828501613000565b91505092915050565b6000806040838503121561310957613108614111565b5b600061311785828601613000565b925050602061312885828601613000565b9150509250929050565b60008060006060848603121561314b5761314a614111565b5b600061315986828701613000565b935050602061316a86828701613000565b925050604061317b868287016130b0565b9150509250925092565b6000806000806080858703121561319f5761319e614111565b5b60006131ad87828801613000565b94505060206131be87828801613000565b93505060406131cf878288016130b0565b925050606085013567ffffffffffffffff8111156131f0576131ef61410c565b5b6131fc87828801613054565b91505092959194509250565b6000806040838503121561321f5761321e614111565b5b600061322d85828601613000565b925050602061323e85828601613015565b9150509250929050565b6000806040838503121561325f5761325e614111565b5b600061326d85828601613000565b925050602061327e858286016130b0565b9150509250929050565b60006020828403121561329e5761329d614111565b5b60006132ac8482850161302a565b91505092915050565b6000602082840312156132cb576132ca614111565b5b60006132d98482850161303f565b91505092915050565b6000602082840312156132f8576132f7614111565b5b600082013567ffffffffffffffff8111156133165761331561410c565b5b61332284828501613082565b91505092915050565b60006020828403121561334157613340614111565b5b600061334f848285016130b0565b91505092915050565b600061336483836137fa565b60208301905092915050565b61337981613e55565b82525050565b600061338a82613cd4565b6133948185613d02565b935061339f83613cc4565b8060005b838110156133d05781516133b78882613358565b97506133c283613cf5565b9250506001810190506133a3565b5085935050505092915050565b6133e681613e67565b82525050565b60006133f782613cdf565b6134018185613d13565b9350613411818560208601613ed8565b61341a81614116565b840191505092915050565b600061343082613cea565b61343a8185613d24565b935061344a818560208601613ed8565b61345381614116565b840191505092915050565b600061346982613cea565b6134738185613d35565b9350613483818560208601613ed8565b80840191505092915050565b600061349c603383613d24565b91506134a782614127565b604082019050919050565b60006134bf602b83613d24565b91506134ca82614176565b604082019050919050565b60006134e2603283613d24565b91506134ed826141c5565b604082019050919050565b6000613505602683613d24565b915061351082614214565b604082019050919050565b6000613528601c83613d24565b915061353382614263565b602082019050919050565b600061354b602183613d24565b91506135568261428c565b604082019050919050565b600061356e602483613d24565b9150613579826142db565b604082019050919050565b6000613591601983613d24565b915061359c8261432a565b602082019050919050565b60006135b4602c83613d24565b91506135bf82614353565b604082019050919050565b60006135d7603883613d24565b91506135e2826143a2565b604082019050919050565b60006135fa602a83613d24565b9150613605826143f1565b604082019050919050565b600061361d602983613d24565b915061362882614440565b604082019050919050565b6000613640601d83613d24565b915061364b8261448f565b602082019050919050565b6000613663602083613d24565b915061366e826144b8565b602082019050919050565b6000613686600883613d24565b9150613691826144e1565b602082019050919050565b60006136a9602183613d24565b91506136b48261450a565b604082019050919050565b60006136cc602c83613d24565b91506136d782614559565b604082019050919050565b60006136ef602083613d24565b91506136fa826145a8565b602082019050919050565b6000613712602683613d24565b915061371d826145d1565b604082019050919050565b6000613735602983613d24565b915061374082614620565b604082019050919050565b6000613758602f83613d24565b91506137638261466f565b604082019050919050565b600061377b602183613d24565b9150613786826146be565b604082019050919050565b600061379e603183613d24565b91506137a98261470d565b604082019050919050565b60006137c1602c83613d24565b91506137cc8261475c565b604082019050919050565b60006137e4602083613d24565b91506137ef826147ab565b602082019050919050565b61380381613ebf565b82525050565b61381281613ebf565b82525050565b6000613824828561345e565b9150613830828461345e565b91508190509392505050565b60006020820190506138516000830184613370565b92915050565b600060808201905061386c6000830187613370565b6138796020830186613370565b6138866040830185613809565b818103606083015261389881846133ec565b905095945050505050565b600060208201905081810360008301526138bd818461337f565b905092915050565b60006020820190506138da60008301846133dd565b92915050565b600060208201905081810360008301526138fa8184613425565b905092915050565b6000602082019050818103600083015261391b8161348f565b9050919050565b6000602082019050818103600083015261393b816134b2565b9050919050565b6000602082019050818103600083015261395b816134d5565b9050919050565b6000602082019050818103600083015261397b816134f8565b9050919050565b6000602082019050818103600083015261399b8161351b565b9050919050565b600060208201905081810360008301526139bb8161353e565b9050919050565b600060208201905081810360008301526139db81613561565b9050919050565b600060208201905081810360008301526139fb81613584565b9050919050565b60006020820190508181036000830152613a1b816135a7565b9050919050565b60006020820190508181036000830152613a3b816135ca565b9050919050565b60006020820190508181036000830152613a5b816135ed565b9050919050565b60006020820190508181036000830152613a7b81613610565b9050919050565b60006020820190508181036000830152613a9b81613633565b9050919050565b60006020820190508181036000830152613abb81613656565b9050919050565b60006020820190508181036000830152613adb81613679565b9050919050565b60006020820190508181036000830152613afb8161369c565b9050919050565b60006020820190508181036000830152613b1b816136bf565b9050919050565b60006020820190508181036000830152613b3b816136e2565b9050919050565b60006020820190508181036000830152613b5b81613705565b9050919050565b60006020820190508181036000830152613b7b81613728565b9050919050565b60006020820190508181036000830152613b9b8161374b565b9050919050565b60006020820190508181036000830152613bbb8161376e565b9050919050565b60006020820190508181036000830152613bdb81613791565b9050919050565b60006020820190508181036000830152613bfb816137b4565b9050919050565b60006020820190508181036000830152613c1b816137d7565b9050919050565b6000602082019050613c376000830184613809565b92915050565b6000613c47613c58565b9050613c538282613f3d565b919050565b6000604051905090565b600067ffffffffffffffff821115613c7d57613c7c6140d3565b5b613c8682614116565b9050602081019050919050565b600067ffffffffffffffff821115613cae57613cad6140d3565b5b613cb782614116565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d4b82613ebf565b9150613d5683613ebf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8b57613d8a613fe8565b5b828201905092915050565b6000613da182613ebf565b9150613dac83613ebf565b925082613dbc57613dbb614017565b5b828204905092915050565b6000613dd282613ebf565b9150613ddd83613ebf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e1657613e15613fe8565b5b828202905092915050565b6000613e2c82613ebf565b9150613e3783613ebf565b925082821015613e4a57613e49613fe8565b5b828203905092915050565b6000613e6082613e9f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ef6578082015181840152602081019050613edb565b83811115613f05576000848401525b50505050565b60006002820490506001821680613f2357607f821691505b60208210811415613f3757613f36614046565b5b50919050565b613f4682614116565b810181811067ffffffffffffffff82111715613f6557613f646140d3565b5b80604052505050565b6000613f7982613ebf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fac57613fab613fe8565b5b600182019050919050565b6000613fc282613ebf565b9150613fcd83613ebf565b925082613fdd57613fdc614017565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b6147dd81613e55565b81146147e857600080fd5b50565b6147f481613e67565b81146147ff57600080fd5b50565b61480b81613e73565b811461481657600080fd5b50565b61482281613ebf565b811461482d57600080fd5b5056fea26469706673582212200ebdb7426c0dddbfa33735ece79e2a05dbe6c2ea9dbe69d7f1ed1c788aff113f64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003368747470733a2f2f737061636561706573732e6865726f6b756170702e636f6d2f6170692f6e66742f6d6574612d646174612f00000000000000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c80638da5cb5b11610118578063c87b56dd116100a0578063e640cf7d1161006f578063e640cf7d1461075d578063e757223014610788578063e985e9c5146107c5578063f2fde38b14610802578063fa62884c1461082b57610204565b8063c87b56dd146106a1578063cd3293de146106de578063d031370b14610709578063db4568e21461073257610204565b8063a035b1fe116100e7578063a035b1fe146105dd578063a0712d6814610608578063a22cb46514610624578063b187bd261461064d578063b88d4fde1461067857610204565b80638da5cb5b1461053557806391b7f5ed1461056057806395d89b41146105895780639d38fd21146105b457610204565b806342842e0e1161019b5780636a44e1731161016a5780636a44e1731461044b57806370a082311461047457806371b49fc6146104b1578063743976a0146104cd5780638462151c146104f857610204565b806342842e0e1461037f5780634f6ccce7146103a857806355f804b3146103e55780636352211e1461040e57610204565b806318160ddd116101d757806318160ddd146102d757806323b872dd146103025780632f745c591461032b5780633ccfd60b1461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613288565b610842565b60405161023d91906138c5565b60405180910390f35b34801561025257600080fd5b5061025b6108bc565b60405161026891906138e0565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061332b565b61094e565b6040516102a5919061383c565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613248565b6109d3565b005b3480156102e357600080fd5b506102ec610aeb565b6040516102f99190613c22565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613132565b610af8565b005b34801561033757600080fd5b50610352600480360381019061034d9190613248565b610b58565b60405161035f9190613c22565b60405180910390f35b34801561037457600080fd5b5061037d610bfd565b005b34801561038b57600080fd5b506103a660048036038101906103a19190613132565b610cc8565b005b3480156103b457600080fd5b506103cf60048036038101906103ca919061332b565b610ce8565b6040516103dc9190613c22565b60405180910390f35b3480156103f157600080fd5b5061040c600480360381019061040791906132e2565b610d59565b005b34801561041a57600080fd5b506104356004803603810190610430919061332b565b610def565b604051610442919061383c565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061332b565b610ea1565b005b34801561048057600080fd5b5061049b600480360381019061049691906130c5565b610f27565b6040516104a89190613c22565b60405180910390f35b6104cb60048036038101906104c69190613248565b610fdf565b005b3480156104d957600080fd5b506104e261128a565b6040516104ef91906138e0565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a91906130c5565b611318565b60405161052c91906138a3565b60405180910390f35b34801561054157600080fd5b5061054a6113c6565b604051610557919061383c565b60405180910390f35b34801561056c57600080fd5b506105876004803603810190610582919061332b565b6113f0565b005b34801561059557600080fd5b5061059e611476565b6040516105ab91906138e0565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061332b565b611508565b005b3480156105e957600080fd5b506105f261158e565b6040516105ff9190613c22565b60405180910390f35b610622600480360381019061061d919061332b565b611594565b005b34801561063057600080fd5b5061064b60048036038101906106469190613208565b6117c2565b005b34801561065957600080fd5b50610662611943565b60405161066f91906138c5565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613185565b611956565b005b3480156106ad57600080fd5b506106c860048036038101906106c3919061332b565b6119b8565b6040516106d591906138e0565b60405180910390f35b3480156106ea57600080fd5b506106f3611a5f565b6040516107009190613c22565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b919061332b565b611a65565b005b34801561073e57600080fd5b50610747611b8a565b6040516107549190613c22565b60405180910390f35b34801561076957600080fd5b50610772611b90565b60405161077f9190613c22565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa919061332b565b611b96565b6040516107bc9190613c22565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e791906130f2565b611bad565b6040516107f991906138c5565b60405180910390f35b34801561080e57600080fd5b50610829600480360381019061082491906130c5565b611c41565b005b34801561083757600080fd5b50610840611d39565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b557506108b482611de1565b5b9050919050565b6060600080546108cb90613f0b565b80601f01602080910402602001604051908101604052809291908181526020018280546108f790613f0b565b80156109445780601f1061091957610100808354040283529160200191610944565b820191906000526020600020905b81548152906001019060200180831161092757829003601f168201915b5050505050905090565b600061095982611ec3565b610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90613b02565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109de82610def565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690613ba2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6e611f2f565b73ffffffffffffffffffffffffffffffffffffffff161480610a9d5750610a9c81610a97611f2f565b611bad565b5b610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390613a22565b60405180910390fd5b610ae68383611f37565b505050565b6000600980549050905090565b610b09610b03611f2f565b82611ff0565b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613bc2565b60405180910390fd5b610b538383836120ce565b505050565b6000610b6383610f27565b8210610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90613922565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c05611f2f565b73ffffffffffffffffffffffffffffffffffffffff16610c236113c6565b73ffffffffffffffffffffffffffffffffffffffff1614610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7090613b22565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610cc4573d6000803e3d6000fd5b5050565b610ce383838360405180602001604052806000815250611956565b505050565b6000610cf2610aeb565b8210610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90613be2565b60405180910390fd5b60098281548110610d4757610d466140a4565b5b90600052602060002001549050919050565b610d61611f2f565b73ffffffffffffffffffffffffffffffffffffffff16610d7f6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90613b22565b60405180910390fd5b8060069080519060200190610deb929190612ed9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613a62565b60405180910390fd5b80915050919050565b610ea9611f2f565b73ffffffffffffffffffffffffffffffffffffffff16610ec76113c6565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490613b22565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90613a42565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d05610fea610aeb565b1061102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190613ac2565b60405180910390fd5b611032611f2f565b73ffffffffffffffffffffffffffffffffffffffff166110506113c6565b73ffffffffffffffffffffffffffffffffffffffff16146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613b22565b60405180910390fd5b60001515600e60009054906101000a900460ff161515146110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390613c02565b60405180910390fd5b600f54610d0561110c9190613e21565b81611115610aeb565b61111f9190613d40565b1115611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790613b42565b60405180910390fd5b600081116111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90613902565b60405180910390fd5b600c548111156111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df90613ae2565b60405180910390fd5b346111fe82600d5461232a90919063ffffffff16565b1461123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613a82565b60405180910390fd5b60005b818110156112855761125a83611255612340565b61234a565b6010600081548092919061126d90613f6e565b9190505550808061127d90613f6e565b915050611241565b505050565b6006805461129790613f0b565b80601f01602080910402602001604051908101604052809291908181526020018280546112c390613f0b565b80156113105780601f106112e557610100808354040283529160200191611310565b820191906000526020600020905b8154815290600101906020018083116112f357829003601f168201915b505050505081565b6060600061132583610f27565b905060008167ffffffffffffffff811115611343576113426140d3565b5b6040519080825280602002602001820160405280156113715781602001602082028036833780820191505090505b50905060005b828110156113bb576113898582610b58565b82828151811061139c5761139b6140a4565b5b60200260200101818152505080806113b390613f6e565b915050611377565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113f8611f2f565b73ffffffffffffffffffffffffffffffffffffffff166114166113c6565b73ffffffffffffffffffffffffffffffffffffffff161461146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390613b22565b60405180910390fd5b80600d8190555050565b60606001805461148590613f0b565b80601f01602080910402602001604051908101604052809291908181526020018280546114b190613f0b565b80156114fe5780601f106114d3576101008083540402835291602001916114fe565b820191906000526020600020905b8154815290600101906020018083116114e157829003601f168201915b5050505050905090565b611510611f2f565b73ffffffffffffffffffffffffffffffffffffffff1661152e6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90613b22565b60405180910390fd5b80600c8190555050565b600d5481565b610d0561159f610aeb565b106115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690613ac2565b60405180910390fd5b60001515600e60009054906101000a900460ff16151514611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613c02565b60405180910390fd5b600f54610d056116459190613e21565b8161164e610aeb565b6116589190613d40565b1115611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613b42565b60405180910390fd5b600081116116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390613902565b60405180910390fd5b600c54811115611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171890613ae2565b60405180910390fd5b3461173782600d5461232a90919063ffffffff16565b14611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613a82565b60405180910390fd5b60005b818110156117be576117933361178e612340565b61234a565b601060008154809291906117a690613f6e565b919050555080806117b690613f6e565b91505061177a565b5050565b6117ca611f2f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f906139e2565b60405180910390fd5b8060056000611845611f2f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118f2611f2f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161193791906138c5565b60405180910390a35050565b600e60009054906101000a900460ff1681565b611967611961611f2f565b83611ff0565b6119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d90613bc2565b60405180910390fd5b6119b284848484612368565b50505050565b60606119c382611ec3565b611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613b82565b60405180910390fd5b6000611a0c6123c4565b90506000815111611a2c5760405180602001604052806000815250611a57565b80611a3684612456565b604051602001611a47929190613818565b6040516020818303038152906040525b915050919050565b600f5481565b611a6d611f2f565b73ffffffffffffffffffffffffffffffffffffffff16611a8b6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890613b22565b60405180910390fd5b600f54811115611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d906139a2565b60405180910390fd5b80600f6000828254611b389190613e21565b9250508190555060005b81811015611b8657611b5b33611b56612340565b61234a565b60106000815480929190611b6e90613f6e565b91905055508080611b7e90613f6e565b915050611b42565b5050565b610d0581565b600c5481565b6000600d5482611ba69190613dc7565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c49611f2f565b73ffffffffffffffffffffffffffffffffffffffff16611c676113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb490613b22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490613962565b60405180910390fd5b611d36816125b7565b50565b611d41611f2f565b73ffffffffffffffffffffffffffffffffffffffff16611d5f6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90613b22565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611eac57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ebc5750611ebb8261267d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611faa83610def565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ffb82611ec3565b61203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190613a02565b60405180910390fd5b600061204583610def565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b457508373ffffffffffffffffffffffffffffffffffffffff1661209c8461094e565b73ffffffffffffffffffffffffffffffffffffffff16145b806120c557506120c48185611bad565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120ee82610def565b73ffffffffffffffffffffffffffffffffffffffff1614612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90613b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab906139c2565b60405180910390fd5b6121bf8383836126e7565b6121ca600082611f37565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221a9190613e21565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122719190613d40565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836123389190613dc7565b905092915050565b6000601054905090565b6123648282604051806020016040528060008152506127fb565b5050565b6123738484846120ce565b61237f84848484612856565b6123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b590613942565b60405180910390fd5b50505050565b6060600680546123d390613f0b565b80601f01602080910402602001604051908101604052809291908181526020018280546123ff90613f0b565b801561244c5780601f106124215761010080835404028352916020019161244c565b820191906000526020600020905b81548152906001019060200180831161242f57829003601f168201915b5050505050905090565b6060600082141561249e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125b2565b600082905060005b600082146124d05780806124b990613f6e565b915050600a826124c99190613d96565b91506124a6565b60008167ffffffffffffffff8111156124ec576124eb6140d3565b5b6040519080825280601f01601f19166020018201604052801561251e5781602001600182028036833780820191505090505b5090505b600085146125ab576001826125379190613e21565b9150600a856125469190613fb7565b60306125529190613d40565b60f81b818381518110612568576125676140a4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125a49190613d96565b9450612522565b8093505050505b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126f28383836129ed565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273557612730816129f2565b612774565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612773576127728382612a3b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576127b281612ba8565b6127f6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127f5576127f48282612c79565b5b5b505050565b6128058383612cf8565b6128126000848484612856565b612851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284890613942565b60405180910390fd5b505050565b60006128778473ffffffffffffffffffffffffffffffffffffffff16612ec6565b156129e0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128a0611f2f565b8786866040518563ffffffff1660e01b81526004016128c29493929190613857565b602060405180830381600087803b1580156128dc57600080fd5b505af192505050801561290d57506040513d601f19601f8201168201806040525081019061290a91906132b5565b60015b612990573d806000811461293d576040519150601f19603f3d011682016040523d82523d6000602084013e612942565b606091505b50600081511415612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f90613942565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129e5565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a4884610f27565b612a529190613e21565b9050600060086000848152602001908152602001600020549050818114612b37576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612bbc9190613e21565b90506000600a6000848152602001908152602001600020549050600060098381548110612bec57612beb6140a4565b5b906000526020600020015490508060098381548110612c0e57612c0d6140a4565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612c5d57612c5c614075565b5b6001900381819060005260206000200160009055905550505050565b6000612c8483610f27565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f90613aa2565b60405180910390fd5b612d7181611ec3565b15612db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da890613982565b60405180910390fd5b612dbd600083836126e7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e0d9190613d40565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612ee590613f0b565b90600052602060002090601f016020900481019282612f075760008555612f4e565b82601f10612f2057805160ff1916838001178555612f4e565b82800160010185558215612f4e579182015b82811115612f4d578251825591602001919060010190612f32565b5b509050612f5b9190612f5f565b5090565b5b80821115612f78576000816000905550600101612f60565b5090565b6000612f8f612f8a84613c62565b613c3d565b905082815260208101848484011115612fab57612faa614107565b5b612fb6848285613ec9565b509392505050565b6000612fd1612fcc84613c93565b613c3d565b905082815260208101848484011115612fed57612fec614107565b5b612ff8848285613ec9565b509392505050565b60008135905061300f816147d4565b92915050565b600081359050613024816147eb565b92915050565b60008135905061303981614802565b92915050565b60008151905061304e81614802565b92915050565b600082601f83011261306957613068614102565b5b8135613079848260208601612f7c565b91505092915050565b600082601f83011261309757613096614102565b5b81356130a7848260208601612fbe565b91505092915050565b6000813590506130bf81614819565b92915050565b6000602082840312156130db576130da614111565b5b60006130e984828501613000565b91505092915050565b6000806040838503121561310957613108614111565b5b600061311785828601613000565b925050602061312885828601613000565b9150509250929050565b60008060006060848603121561314b5761314a614111565b5b600061315986828701613000565b935050602061316a86828701613000565b925050604061317b868287016130b0565b9150509250925092565b6000806000806080858703121561319f5761319e614111565b5b60006131ad87828801613000565b94505060206131be87828801613000565b93505060406131cf878288016130b0565b925050606085013567ffffffffffffffff8111156131f0576131ef61410c565b5b6131fc87828801613054565b91505092959194509250565b6000806040838503121561321f5761321e614111565b5b600061322d85828601613000565b925050602061323e85828601613015565b9150509250929050565b6000806040838503121561325f5761325e614111565b5b600061326d85828601613000565b925050602061327e858286016130b0565b9150509250929050565b60006020828403121561329e5761329d614111565b5b60006132ac8482850161302a565b91505092915050565b6000602082840312156132cb576132ca614111565b5b60006132d98482850161303f565b91505092915050565b6000602082840312156132f8576132f7614111565b5b600082013567ffffffffffffffff8111156133165761331561410c565b5b61332284828501613082565b91505092915050565b60006020828403121561334157613340614111565b5b600061334f848285016130b0565b91505092915050565b600061336483836137fa565b60208301905092915050565b61337981613e55565b82525050565b600061338a82613cd4565b6133948185613d02565b935061339f83613cc4565b8060005b838110156133d05781516133b78882613358565b97506133c283613cf5565b9250506001810190506133a3565b5085935050505092915050565b6133e681613e67565b82525050565b60006133f782613cdf565b6134018185613d13565b9350613411818560208601613ed8565b61341a81614116565b840191505092915050565b600061343082613cea565b61343a8185613d24565b935061344a818560208601613ed8565b61345381614116565b840191505092915050565b600061346982613cea565b6134738185613d35565b9350613483818560208601613ed8565b80840191505092915050565b600061349c603383613d24565b91506134a782614127565b604082019050919050565b60006134bf602b83613d24565b91506134ca82614176565b604082019050919050565b60006134e2603283613d24565b91506134ed826141c5565b604082019050919050565b6000613505602683613d24565b915061351082614214565b604082019050919050565b6000613528601c83613d24565b915061353382614263565b602082019050919050565b600061354b602183613d24565b91506135568261428c565b604082019050919050565b600061356e602483613d24565b9150613579826142db565b604082019050919050565b6000613591601983613d24565b915061359c8261432a565b602082019050919050565b60006135b4602c83613d24565b91506135bf82614353565b604082019050919050565b60006135d7603883613d24565b91506135e2826143a2565b604082019050919050565b60006135fa602a83613d24565b9150613605826143f1565b604082019050919050565b600061361d602983613d24565b915061362882614440565b604082019050919050565b6000613640601d83613d24565b915061364b8261448f565b602082019050919050565b6000613663602083613d24565b915061366e826144b8565b602082019050919050565b6000613686600883613d24565b9150613691826144e1565b602082019050919050565b60006136a9602183613d24565b91506136b48261450a565b604082019050919050565b60006136cc602c83613d24565b91506136d782614559565b604082019050919050565b60006136ef602083613d24565b91506136fa826145a8565b602082019050919050565b6000613712602683613d24565b915061371d826145d1565b604082019050919050565b6000613735602983613d24565b915061374082614620565b604082019050919050565b6000613758602f83613d24565b91506137638261466f565b604082019050919050565b600061377b602183613d24565b9150613786826146be565b604082019050919050565b600061379e603183613d24565b91506137a98261470d565b604082019050919050565b60006137c1602c83613d24565b91506137cc8261475c565b604082019050919050565b60006137e4602083613d24565b91506137ef826147ab565b602082019050919050565b61380381613ebf565b82525050565b61381281613ebf565b82525050565b6000613824828561345e565b9150613830828461345e565b91508190509392505050565b60006020820190506138516000830184613370565b92915050565b600060808201905061386c6000830187613370565b6138796020830186613370565b6138866040830185613809565b818103606083015261389881846133ec565b905095945050505050565b600060208201905081810360008301526138bd818461337f565b905092915050565b60006020820190506138da60008301846133dd565b92915050565b600060208201905081810360008301526138fa8184613425565b905092915050565b6000602082019050818103600083015261391b8161348f565b9050919050565b6000602082019050818103600083015261393b816134b2565b9050919050565b6000602082019050818103600083015261395b816134d5565b9050919050565b6000602082019050818103600083015261397b816134f8565b9050919050565b6000602082019050818103600083015261399b8161351b565b9050919050565b600060208201905081810360008301526139bb8161353e565b9050919050565b600060208201905081810360008301526139db81613561565b9050919050565b600060208201905081810360008301526139fb81613584565b9050919050565b60006020820190508181036000830152613a1b816135a7565b9050919050565b60006020820190508181036000830152613a3b816135ca565b9050919050565b60006020820190508181036000830152613a5b816135ed565b9050919050565b60006020820190508181036000830152613a7b81613610565b9050919050565b60006020820190508181036000830152613a9b81613633565b9050919050565b60006020820190508181036000830152613abb81613656565b9050919050565b60006020820190508181036000830152613adb81613679565b9050919050565b60006020820190508181036000830152613afb8161369c565b9050919050565b60006020820190508181036000830152613b1b816136bf565b9050919050565b60006020820190508181036000830152613b3b816136e2565b9050919050565b60006020820190508181036000830152613b5b81613705565b9050919050565b60006020820190508181036000830152613b7b81613728565b9050919050565b60006020820190508181036000830152613b9b8161374b565b9050919050565b60006020820190508181036000830152613bbb8161376e565b9050919050565b60006020820190508181036000830152613bdb81613791565b9050919050565b60006020820190508181036000830152613bfb816137b4565b9050919050565b60006020820190508181036000830152613c1b816137d7565b9050919050565b6000602082019050613c376000830184613809565b92915050565b6000613c47613c58565b9050613c538282613f3d565b919050565b6000604051905090565b600067ffffffffffffffff821115613c7d57613c7c6140d3565b5b613c8682614116565b9050602081019050919050565b600067ffffffffffffffff821115613cae57613cad6140d3565b5b613cb782614116565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d4b82613ebf565b9150613d5683613ebf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8b57613d8a613fe8565b5b828201905092915050565b6000613da182613ebf565b9150613dac83613ebf565b925082613dbc57613dbb614017565b5b828204905092915050565b6000613dd282613ebf565b9150613ddd83613ebf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e1657613e15613fe8565b5b828202905092915050565b6000613e2c82613ebf565b9150613e3783613ebf565b925082821015613e4a57613e49613fe8565b5b828203905092915050565b6000613e6082613e9f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ef6578082015181840152602081019050613edb565b83811115613f05576000848401525b50505050565b60006002820490506001821680613f2357607f821691505b60208210811415613f3757613f36614046565b5b50919050565b613f4682614116565b810181811067ffffffffffffffff82111715613f6557613f646140d3565b5b80604052505050565b6000613f7982613ebf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fac57613fab613fe8565b5b600182019050919050565b6000613fc282613ebf565b9150613fcd83613ebf565b925082613fdd57613fdc614017565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5175616e74697479206d757374206265206c6573736572207468656e204d617860008201527f537570706c790000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b6147dd81613e55565b81146147e857600080fd5b50565b6147f481613e67565b81146147ff57600080fd5b50565b61480b81613e73565b811461481657600080fd5b50565b61482281613ebf565b811461482d57600080fd5b5056fea26469706673582212200ebdb7426c0dddbfa33735ece79e2a05dbe6c2ea9dbe69d7f1ed1c788aff113f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003368747470733a2f2f737061636561706573732e6865726f6b756170702e636f6d2f6170692f6e66742f6d6574612d646174612f00000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://spaceapess.herokuapp.com/api/nft/meta-data/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000033
Arg [2] : 68747470733a2f2f737061636561706573732e6865726f6b756170702e636f6d
Arg [3] : 2f6170692f6e66742f6d6574612d646174612f00000000000000000000000000
Deployed Bytecode Sourcemap
49019:3450:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42844:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30826:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32380:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31903:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43484:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33270:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43152:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52231:140;;;;;;;;;;;;;:::i;:::-;;33680:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43674:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49451:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30520:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49761:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30250:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51171:692;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29548:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51872:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27416:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49556:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30995:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49654:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49195:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50509:652;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32673:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49236:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33936:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31170:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49270:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50194:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49115:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49161:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50065:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33039:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28216:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49976:83;;;;;;;;;;;;;:::i;:::-;;42844:224;42946:4;42985:35;42970:50;;;:11;:50;;;;:90;;;;43024:36;43048:11;43024:23;:36::i;:::-;42970:90;42963:97;;42844:224;;;:::o;30826:100::-;30880:13;30913:5;30906:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30826:100;:::o;32380:221::-;32456:7;32484:16;32492:7;32484;:16::i;:::-;32476:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32569:15;:24;32585:7;32569:24;;;;;;;;;;;;;;;;;;;;;32562:31;;32380:221;;;:::o;31903:411::-;31984:13;32000:23;32015:7;32000:14;:23::i;:::-;31984:39;;32048:5;32042:11;;:2;:11;;;;32034:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32142:5;32126:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32151:37;32168:5;32175:12;:10;:12::i;:::-;32151:16;:37::i;:::-;32126:62;32104:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32285:21;32294:2;32298:7;32285:8;:21::i;:::-;31973:341;31903:411;;:::o;43484:113::-;43545:7;43572:10;:17;;;;43565:24;;43484:113;:::o;33270:339::-;33465:41;33484:12;:10;:12::i;:::-;33498:7;33465:18;:41::i;:::-;33457:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33573:28;33583:4;33589:2;33593:7;33573:9;:28::i;:::-;33270:339;;;:::o;43152:256::-;43249:7;43285:23;43302:5;43285:16;:23::i;:::-;43277:5;:31;43269:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43374:12;:19;43387:5;43374:19;;;;;;;;;;;;;;;:26;43394:5;43374:26;;;;;;;;;;;;43367:33;;43152:256;;;;:::o;52231:140::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52279:12:::1;52294:21;52279:36;;52334:10;52326:28;;:37;52355:7;52326:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52268:103;52231:140::o:0;33680:185::-;33818:39;33835:4;33841:2;33845:7;33818:39;;;;;;;;;;;;:16;:39::i;:::-;33680:185;;;:::o;43674:233::-;43749:7;43785:30;:28;:30::i;:::-;43777:5;:38;43769:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43882:10;43893:5;43882:17;;;;;;;;:::i;:::-;;;;;;;;;;43875:24;;43674:233;;;:::o;49451:97::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49533:7:::1;49522:8;:18;;;;;;;;;;;;:::i;:::-;;49451:97:::0;:::o;30520:239::-;30592:7;30612:13;30628:7;:16;30636:7;30628:16;;;;;;;;;;;;;;;;;;;;;30612:32;;30680:1;30663:19;;:5;:19;;;;30655:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30746:5;30739:12;;;30520:239;;;:::o;49761:98::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49842:9:::1;49834:7;:17;;;;49761:98:::0;:::o;30250:208::-;30322:7;30367:1;30350:19;;:5;:19;;;;30342:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30434:9;:16;30444:5;30434:16;;;;;;;;;;;;;;;;30427:23;;30250:208;;;:::o;51171:692::-;49150:4;49909:13;:11;:13::i;:::-;:28;49901:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;27647:12:::1;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51299:5:::2;51287:17;;:8;;;;;;;;;;;:17;;;51279:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51401:7;;49150:4;51388:20;;;;:::i;:::-;51374:12;51360:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:48;;51352:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;51484:1;51469:12;:16;51461:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51576:11;;51560:12;:27;;51552:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;51670:9;51643:23;51653:12;51643:5;;:9;;:23;;;;:::i;:::-;:36;51635:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51729:6;51724:132;51745:12;51741:1;:16;51724:132;;;51779:37;51789:11;51802:13;:11;:13::i;:::-;51779:9;:37::i;:::-;51831:7;;:9;;;;;;;;;:::i;:::-;;;;;;51759:3;;;;;:::i;:::-;;;;51724:132;;;;51171:692:::0;;:::o;29548:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51872:351::-;51932:16;51966:13;51982:17;51992:6;51982:9;:17::i;:::-;51966:33;;52010:23;52050:5;52036:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52010:46;;52072:13;52067:125;52099:5;52091;:13;52067:125;;;52146:34;52166:6;52174:5;52146:19;:34::i;:::-;52130:6;52137:5;52130:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;52106:7;;;;;:::i;:::-;;;;52067:125;;;;52209:6;52202:13;;;;51872:351;;;:::o;27416:87::-;27462:7;27489:6;;;;;;;;;;;27482:13;;27416:87;:::o;49556:92::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49631:9:::1;49623:5;:17;;;;49556:92:::0;:::o;30995:104::-;31051:13;31084:7;31077:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30995:104;:::o;49654:100::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49737:9:::1;49725:11;:21;;;;49654:100:::0;:::o;49195:33::-;;;;:::o;50509:652::-;49150:4;49909:13;:11;:13::i;:::-;:28;49901:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;50598:5:::1;50586:17;;:8;;;;;;;;;;;:17;;;50578:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50700:7;;49150:4;50687:20;;;;:::i;:::-;50673:12;50659:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:48;;50651:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;50783:1;50768:12;:16;50760:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;50875:11;;50859:12;:27;;50851:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50969:9;50942:23;50952:12;50942:5;;:9;;:23;;;;:::i;:::-;:36;50934:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51028:6;51023:131;51044:12;51040:1;:16;51023:131;;;51078:36;51088:10;51100:13;:11;:13::i;:::-;51078:9;:36::i;:::-;51129:7;;:9;;;;;;;;;:::i;:::-;;;;;;51058:3;;;;;:::i;:::-;;;;51023:131;;;;50509:652:::0;:::o;32673:295::-;32788:12;:10;:12::i;:::-;32776:24;;:8;:24;;;;32768:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32888:8;32843:18;:32;32862:12;:10;:12::i;:::-;32843:32;;;;;;;;;;;;;;;:42;32876:8;32843:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32941:8;32912:48;;32927:12;:10;:12::i;:::-;32912:48;;;32951:8;32912:48;;;;;;:::i;:::-;;;;;;;;32673:295;;:::o;49236:27::-;;;;;;;;;;;;;:::o;33936:328::-;34111:41;34130:12;:10;:12::i;:::-;34144:7;34111:18;:41::i;:::-;34103:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34217:39;34231:4;34237:2;34241:7;34250:5;34217:13;:39::i;:::-;33936:328;;;;:::o;31170:324::-;31243:13;31277:16;31285:7;31277;:16::i;:::-;31269:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31358:18;31379:9;:7;:9::i;:::-;31358:30;;31427:1;31412:4;31406:18;:22;:80;;;;;;;;;;;;;;;;;31455:4;31461:18;:7;:16;:18::i;:::-;31438:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31406:80;31399:87;;;31170:324;;;:::o;49270:24::-;;;;:::o;50194:301::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50280:7:::1;;50268:8;:19;;50260:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50347:8;50336:7;;:19;;;;;;;:::i;:::-;;;;;;;;50371:6;50366:122;50387:8;50383:1;:12;50366:122;;;50417:35;50427:10;50438:13;:11;:13::i;:::-;50417:9;:35::i;:::-;50467:7;;:9;;;;;;;;;:::i;:::-;;;;;;50397:3;;;;;:::i;:::-;;;;50366:122;;;;50194:301:::0;:::o;49115:39::-;49150:4;49115:39;:::o;49161:27::-;;;;:::o;50065:122::-;50123:7;50172:5;;50162:9;:15;;;;:::i;:::-;50155:22;;50065:122;;;:::o;33039:164::-;33136:4;33160:18;:25;33179:5;33160:25;;;;;;;;;;;;;;;:35;33186:8;33160:35;;;;;;;;;;;;;;;;;;;;;;;;;33153:42;;33039:164;;;;:::o;28216:192::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28325:1:::1;28305:22;;:8;:22;;;;28297:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28381:19;28391:8;28381:9;:19::i;:::-;28216:192:::0;:::o;49976:83::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50043:8:::1;;;;;;;;;;;50042:9;50031:8;;:20;;;;;;;;;;;;;;;;;;49976:83::o:0;29881:305::-;29983:4;30035:25;30020:40;;;:11;:40;;;;:105;;;;30092:33;30077:48;;;:11;:48;;;;30020:105;:158;;;;30142:36;30166:11;30142:23;:36::i;:::-;30020:158;30000:178;;29881:305;;;:::o;35774:127::-;35839:4;35891:1;35863:30;;:7;:16;35871:7;35863:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35856:37;;35774:127;;;:::o;26167:98::-;26220:7;26247:10;26240:17;;26167:98;:::o;39756:174::-;39858:2;39831:15;:24;39847:7;39831:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39914:7;39910:2;39876:46;;39885:23;39900:7;39885:14;:23::i;:::-;39876:46;;;;;;;;;;;;39756:174;;:::o;36068:348::-;36161:4;36186:16;36194:7;36186;:16::i;:::-;36178:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36262:13;36278:23;36293:7;36278:14;:23::i;:::-;36262:39;;36331:5;36320:16;;:7;:16;;;:51;;;;36364:7;36340:31;;:20;36352:7;36340:11;:20::i;:::-;:31;;;36320:51;:87;;;;36375:32;36392:5;36399:7;36375:16;:32::i;:::-;36320:87;36312:96;;;36068:348;;;;:::o;39060:578::-;39219:4;39192:31;;:23;39207:7;39192:14;:23::i;:::-;:31;;;39184:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39302:1;39288:16;;:2;:16;;;;39280:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39358:39;39379:4;39385:2;39389:7;39358:20;:39::i;:::-;39462:29;39479:1;39483:7;39462:8;:29::i;:::-;39523:1;39504:9;:15;39514:4;39504:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39552:1;39535:9;:13;39545:2;39535:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39583:2;39564:7;:16;39572:7;39564:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39622:7;39618:2;39603:27;;39612:4;39603:27;;;;;;;;;;;;39060:578;;;:::o;3501:98::-;3559:7;3590:1;3586;:5;;;;:::i;:::-;3579:12;;3501:98;;;;:::o;52377:89::-;52422:4;52451:7;;52444:14;;52377:89;:::o;36758:110::-;36834:26;36844:2;36848:7;36834:26;;;;;;;;;;;;:9;:26::i;:::-;36758:110;;:::o;35146:315::-;35303:28;35313:4;35319:2;35323:7;35303:9;:28::i;:::-;35350:48;35373:4;35379:2;35383:7;35392:5;35350:22;:48::i;:::-;35342:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35146:315;;;;:::o;31742:99::-;31792:13;31825:8;31818:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31742:99;:::o;7181:723::-;7237:13;7467:1;7458:5;:10;7454:53;;;7485:10;;;;;;;;;;;;;;;;;;;;;7454:53;7517:12;7532:5;7517:20;;7548:14;7573:78;7588:1;7580:4;:9;7573:78;;7606:8;;;;;:::i;:::-;;;;7637:2;7629:10;;;;;:::i;:::-;;;7573:78;;;7661:19;7693:6;7683:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7661:39;;7711:154;7727:1;7718:5;:10;7711:154;;7755:1;7745:11;;;;;:::i;:::-;;;7822:2;7814:5;:10;;;;:::i;:::-;7801:2;:24;;;;:::i;:::-;7788:39;;7771:6;7778;7771:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7851:2;7842:11;;;;;:::i;:::-;;;7711:154;;;7889:6;7875:21;;;;;7181:723;;;;:::o;28416:173::-;28472:16;28491:6;;;;;;;;;;;28472:25;;28517:8;28508:6;;:17;;;;;;;;;;;;;;;;;;28572:8;28541:40;;28562:8;28541:40;;;;;;;;;;;;28461:128;28416:173;:::o;19153:157::-;19238:4;19277:25;19262:40;;;:11;:40;;;;19255:47;;19153:157;;;:::o;44520:589::-;44664:45;44691:4;44697:2;44701:7;44664:26;:45::i;:::-;44742:1;44726:18;;:4;:18;;;44722:187;;;44761:40;44793:7;44761:31;:40::i;:::-;44722:187;;;44831:2;44823:10;;:4;:10;;;44819:90;;44850:47;44883:4;44889:7;44850:32;:47::i;:::-;44819:90;44722:187;44937:1;44923:16;;:2;:16;;;44919:183;;;44956:45;44993:7;44956:36;:45::i;:::-;44919:183;;;45029:4;45023:10;;:2;:10;;;45019:83;;45050:40;45078:2;45082:7;45050:27;:40::i;:::-;45019:83;44919:183;44520:589;;;:::o;37095:321::-;37225:18;37231:2;37235:7;37225:5;:18::i;:::-;37276:54;37307:1;37311:2;37315:7;37324:5;37276:22;:54::i;:::-;37254:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37095:321;;;:::o;40495:803::-;40650:4;40671:15;:2;:13;;;:15::i;:::-;40667:624;;;40723:2;40707:36;;;40744:12;:10;:12::i;:::-;40758:4;40764:7;40773:5;40707:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40703:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40970:1;40953:6;:13;:18;40949:272;;;40996:60;;;;;;;;;;:::i;:::-;;;;;;;;40949:272;41171:6;41165:13;41156:6;41152:2;41148:15;41141:38;40703:533;40840:45;;;40830:55;;;:6;:55;;;;40823:62;;;;;40667:624;41275:4;41268:11;;40495:803;;;;;;;:::o;41870:126::-;;;;:::o;45832:164::-;45936:10;:17;;;;45909:15;:24;45925:7;45909:24;;;;;;;;;;;:44;;;;45964:10;45980:7;45964:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45832:164;:::o;46623:988::-;46889:22;46939:1;46914:22;46931:4;46914:16;:22::i;:::-;:26;;;;:::i;:::-;46889:51;;46951:18;46972:17;:26;46990:7;46972:26;;;;;;;;;;;;46951:47;;47119:14;47105:10;:28;47101:328;;47150:19;47172:12;:18;47185:4;47172:18;;;;;;;;;;;;;;;:34;47191:14;47172:34;;;;;;;;;;;;47150:56;;47256:11;47223:12;:18;47236:4;47223:18;;;;;;;;;;;;;;;:30;47242:10;47223:30;;;;;;;;;;;:44;;;;47373:10;47340:17;:30;47358:11;47340:30;;;;;;;;;;;:43;;;;47135:294;47101:328;47525:17;:26;47543:7;47525:26;;;;;;;;;;;47518:33;;;47569:12;:18;47582:4;47569:18;;;;;;;;;;;;;;;:34;47588:14;47569:34;;;;;;;;;;;47562:41;;;46704:907;;46623:988;;:::o;47906:1079::-;48159:22;48204:1;48184:10;:17;;;;:21;;;;:::i;:::-;48159:46;;48216:18;48237:15;:24;48253:7;48237:24;;;;;;;;;;;;48216:45;;48588:19;48610:10;48621:14;48610:26;;;;;;;;:::i;:::-;;;;;;;;;;48588:48;;48674:11;48649:10;48660;48649:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48785:10;48754:15;:28;48770:11;48754:28;;;;;;;;;;;:41;;;;48926:15;:24;48942:7;48926:24;;;;;;;;;;;48919:31;;;48961:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47977:1008;;;47906:1079;:::o;45410:221::-;45495:14;45512:20;45529:2;45512:16;:20::i;:::-;45495:37;;45570:7;45543:12;:16;45556:2;45543:16;;;;;;;;;;;;;;;:24;45560:6;45543:24;;;;;;;;;;;:34;;;;45617:6;45588:17;:26;45606:7;45588:26;;;;;;;;;;;:35;;;;45484:147;45410:221;;:::o;37752:382::-;37846:1;37832:16;;:2;:16;;;;37824:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37905:16;37913:7;37905;:16::i;:::-;37904:17;37896:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37967:45;37996:1;38000:2;38004:7;37967:20;:45::i;:::-;38042:1;38025:9;:13;38035:2;38025:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38073:2;38054:7;:16;38062:7;38054:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38118:7;38114:2;38093:33;;38110:1;38093:33;;;;;;;;;;;;37752:382;;:::o;9648:387::-;9708:4;9916:12;9983:7;9971:20;9963:28;;10026:1;10019:4;:8;10012:15;;;9648:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:179::-;7227:10;7248:46;7290:3;7282:6;7248:46;:::i;:::-;7326:4;7321:3;7317:14;7303:28;;7158:179;;;;:::o;7343:118::-;7430:24;7448:5;7430:24;:::i;:::-;7425:3;7418:37;7343:118;;:::o;7497:732::-;7616:3;7645:54;7693:5;7645:54;:::i;:::-;7715:86;7794:6;7789:3;7715:86;:::i;:::-;7708:93;;7825:56;7875:5;7825:56;:::i;:::-;7904:7;7935:1;7920:284;7945:6;7942:1;7939:13;7920:284;;;8021:6;8015:13;8048:63;8107:3;8092:13;8048:63;:::i;:::-;8041:70;;8134:60;8187:6;8134:60;:::i;:::-;8124:70;;7980:224;7967:1;7964;7960:9;7955:14;;7920:284;;;7924:14;8220:3;8213:10;;7621:608;;;7497:732;;;;:::o;8235:109::-;8316:21;8331:5;8316:21;:::i;:::-;8311:3;8304:34;8235:109;;:::o;8350:360::-;8436:3;8464:38;8496:5;8464:38;:::i;:::-;8518:70;8581:6;8576:3;8518:70;:::i;:::-;8511:77;;8597:52;8642:6;8637:3;8630:4;8623:5;8619:16;8597:52;:::i;:::-;8674:29;8696:6;8674:29;:::i;:::-;8669:3;8665:39;8658:46;;8440:270;8350:360;;;;:::o;8716:364::-;8804:3;8832:39;8865:5;8832:39;:::i;:::-;8887:71;8951:6;8946:3;8887:71;:::i;:::-;8880:78;;8967:52;9012:6;9007:3;9000:4;8993:5;8989:16;8967:52;:::i;:::-;9044:29;9066:6;9044:29;:::i;:::-;9039:3;9035:39;9028:46;;8808:272;8716:364;;;;:::o;9086:377::-;9192:3;9220:39;9253:5;9220:39;:::i;:::-;9275:89;9357:6;9352:3;9275:89;:::i;:::-;9268:96;;9373:52;9418:6;9413:3;9406:4;9399:5;9395:16;9373:52;:::i;:::-;9450:6;9445:3;9441:16;9434:23;;9196:267;9086:377;;;;:::o;9469:366::-;9611:3;9632:67;9696:2;9691:3;9632:67;:::i;:::-;9625:74;;9708:93;9797:3;9708:93;:::i;:::-;9826:2;9821:3;9817:12;9810:19;;9469:366;;;:::o;9841:::-;9983:3;10004:67;10068:2;10063:3;10004:67;:::i;:::-;9997:74;;10080:93;10169:3;10080:93;:::i;:::-;10198:2;10193:3;10189:12;10182:19;;9841:366;;;:::o;10213:::-;10355:3;10376:67;10440:2;10435:3;10376:67;:::i;:::-;10369:74;;10452:93;10541:3;10452:93;:::i;:::-;10570:2;10565:3;10561:12;10554:19;;10213:366;;;:::o;10585:::-;10727:3;10748:67;10812:2;10807:3;10748:67;:::i;:::-;10741:74;;10824:93;10913:3;10824:93;:::i;:::-;10942:2;10937:3;10933:12;10926:19;;10585:366;;;:::o;10957:::-;11099:3;11120:67;11184:2;11179:3;11120:67;:::i;:::-;11113:74;;11196:93;11285:3;11196:93;:::i;:::-;11314:2;11309:3;11305:12;11298:19;;10957:366;;;:::o;11329:::-;11471:3;11492:67;11556:2;11551:3;11492:67;:::i;:::-;11485:74;;11568:93;11657:3;11568:93;:::i;:::-;11686:2;11681:3;11677:12;11670:19;;11329:366;;;:::o;11701:::-;11843:3;11864:67;11928:2;11923:3;11864:67;:::i;:::-;11857:74;;11940:93;12029:3;11940:93;:::i;:::-;12058:2;12053:3;12049:12;12042:19;;11701:366;;;:::o;12073:::-;12215:3;12236:67;12300:2;12295:3;12236:67;:::i;:::-;12229:74;;12312:93;12401:3;12312:93;:::i;:::-;12430:2;12425:3;12421:12;12414:19;;12073:366;;;:::o;12445:::-;12587:3;12608:67;12672:2;12667:3;12608:67;:::i;:::-;12601:74;;12684:93;12773:3;12684:93;:::i;:::-;12802:2;12797:3;12793:12;12786:19;;12445:366;;;:::o;12817:::-;12959:3;12980:67;13044:2;13039:3;12980:67;:::i;:::-;12973:74;;13056:93;13145:3;13056:93;:::i;:::-;13174:2;13169:3;13165:12;13158:19;;12817:366;;;:::o;13189:::-;13331:3;13352:67;13416:2;13411:3;13352:67;:::i;:::-;13345:74;;13428:93;13517:3;13428:93;:::i;:::-;13546:2;13541:3;13537:12;13530:19;;13189:366;;;:::o;13561:::-;13703:3;13724:67;13788:2;13783:3;13724:67;:::i;:::-;13717:74;;13800:93;13889:3;13800:93;:::i;:::-;13918:2;13913:3;13909:12;13902:19;;13561:366;;;:::o;13933:::-;14075:3;14096:67;14160:2;14155:3;14096:67;:::i;:::-;14089:74;;14172:93;14261:3;14172:93;:::i;:::-;14290:2;14285:3;14281:12;14274:19;;13933:366;;;:::o;14305:::-;14447:3;14468:67;14532:2;14527:3;14468:67;:::i;:::-;14461:74;;14544:93;14633:3;14544:93;:::i;:::-;14662:2;14657:3;14653:12;14646:19;;14305:366;;;:::o;14677:365::-;14819:3;14840:66;14904:1;14899:3;14840:66;:::i;:::-;14833:73;;14915:93;15004:3;14915:93;:::i;:::-;15033:2;15028:3;15024:12;15017:19;;14677:365;;;:::o;15048:366::-;15190:3;15211:67;15275:2;15270:3;15211:67;:::i;:::-;15204:74;;15287:93;15376:3;15287:93;:::i;:::-;15405:2;15400:3;15396:12;15389:19;;15048:366;;;:::o;15420:::-;15562:3;15583:67;15647:2;15642:3;15583:67;:::i;:::-;15576:74;;15659:93;15748:3;15659:93;:::i;:::-;15777:2;15772:3;15768:12;15761:19;;15420:366;;;:::o;15792:::-;15934:3;15955:67;16019:2;16014:3;15955:67;:::i;:::-;15948:74;;16031:93;16120:3;16031:93;:::i;:::-;16149:2;16144:3;16140:12;16133:19;;15792:366;;;:::o;16164:::-;16306:3;16327:67;16391:2;16386:3;16327:67;:::i;:::-;16320:74;;16403:93;16492:3;16403:93;:::i;:::-;16521:2;16516:3;16512:12;16505:19;;16164:366;;;:::o;16536:::-;16678:3;16699:67;16763:2;16758:3;16699:67;:::i;:::-;16692:74;;16775:93;16864:3;16775:93;:::i;:::-;16893:2;16888:3;16884:12;16877:19;;16536:366;;;:::o;16908:::-;17050:3;17071:67;17135:2;17130:3;17071:67;:::i;:::-;17064:74;;17147:93;17236:3;17147:93;:::i;:::-;17265:2;17260:3;17256:12;17249:19;;16908:366;;;:::o;17280:::-;17422:3;17443:67;17507:2;17502:3;17443:67;:::i;:::-;17436:74;;17519:93;17608:3;17519:93;:::i;:::-;17637:2;17632:3;17628:12;17621:19;;17280:366;;;:::o;17652:::-;17794:3;17815:67;17879:2;17874:3;17815:67;:::i;:::-;17808:74;;17891:93;17980:3;17891:93;:::i;:::-;18009:2;18004:3;18000:12;17993:19;;17652:366;;;:::o;18024:::-;18166:3;18187:67;18251:2;18246:3;18187:67;:::i;:::-;18180:74;;18263:93;18352:3;18263:93;:::i;:::-;18381:2;18376:3;18372:12;18365:19;;18024:366;;;:::o;18396:::-;18538:3;18559:67;18623:2;18618:3;18559:67;:::i;:::-;18552:74;;18635:93;18724:3;18635:93;:::i;:::-;18753:2;18748:3;18744:12;18737:19;;18396:366;;;:::o;18768:108::-;18845:24;18863:5;18845:24;:::i;:::-;18840:3;18833:37;18768:108;;:::o;18882:118::-;18969:24;18987:5;18969:24;:::i;:::-;18964:3;18957:37;18882:118;;:::o;19006:435::-;19186:3;19208:95;19299:3;19290:6;19208:95;:::i;:::-;19201:102;;19320:95;19411:3;19402:6;19320:95;:::i;:::-;19313:102;;19432:3;19425:10;;19006:435;;;;;:::o;19447:222::-;19540:4;19578:2;19567:9;19563:18;19555:26;;19591:71;19659:1;19648:9;19644:17;19635:6;19591:71;:::i;:::-;19447:222;;;;:::o;19675:640::-;19870:4;19908:3;19897:9;19893:19;19885:27;;19922:71;19990:1;19979:9;19975:17;19966:6;19922:71;:::i;:::-;20003:72;20071:2;20060:9;20056:18;20047:6;20003:72;:::i;:::-;20085;20153:2;20142:9;20138:18;20129:6;20085:72;:::i;:::-;20204:9;20198:4;20194:20;20189:2;20178:9;20174:18;20167:48;20232:76;20303:4;20294:6;20232:76;:::i;:::-;20224:84;;19675:640;;;;;;;:::o;20321:373::-;20464:4;20502:2;20491:9;20487:18;20479:26;;20551:9;20545:4;20541:20;20537:1;20526:9;20522:17;20515:47;20579:108;20682:4;20673:6;20579:108;:::i;:::-;20571:116;;20321:373;;;;:::o;20700:210::-;20787:4;20825:2;20814:9;20810:18;20802:26;;20838:65;20900:1;20889:9;20885:17;20876:6;20838:65;:::i;:::-;20700:210;;;;:::o;20916:313::-;21029:4;21067:2;21056:9;21052:18;21044:26;;21116:9;21110:4;21106:20;21102:1;21091:9;21087:17;21080:47;21144:78;21217:4;21208:6;21144:78;:::i;:::-;21136:86;;20916:313;;;;:::o;21235:419::-;21401:4;21439:2;21428:9;21424:18;21416:26;;21488:9;21482:4;21478:20;21474:1;21463:9;21459:17;21452:47;21516:131;21642:4;21516:131;:::i;:::-;21508:139;;21235:419;;;:::o;21660:::-;21826:4;21864:2;21853:9;21849:18;21841:26;;21913:9;21907:4;21903:20;21899:1;21888:9;21884:17;21877:47;21941:131;22067:4;21941:131;:::i;:::-;21933:139;;21660:419;;;:::o;22085:::-;22251:4;22289:2;22278:9;22274:18;22266:26;;22338:9;22332:4;22328:20;22324:1;22313:9;22309:17;22302:47;22366:131;22492:4;22366:131;:::i;:::-;22358:139;;22085:419;;;:::o;22510:::-;22676:4;22714:2;22703:9;22699:18;22691:26;;22763:9;22757:4;22753:20;22749:1;22738:9;22734:17;22727:47;22791:131;22917:4;22791:131;:::i;:::-;22783:139;;22510:419;;;:::o;22935:::-;23101:4;23139:2;23128:9;23124:18;23116:26;;23188:9;23182:4;23178:20;23174:1;23163:9;23159:17;23152:47;23216:131;23342:4;23216:131;:::i;:::-;23208:139;;22935:419;;;:::o;23360:::-;23526:4;23564:2;23553:9;23549:18;23541:26;;23613:9;23607:4;23603:20;23599:1;23588:9;23584:17;23577:47;23641:131;23767:4;23641:131;:::i;:::-;23633:139;;23360:419;;;:::o;23785:::-;23951:4;23989:2;23978:9;23974:18;23966:26;;24038:9;24032:4;24028:20;24024:1;24013:9;24009:17;24002:47;24066:131;24192:4;24066:131;:::i;:::-;24058:139;;23785:419;;;:::o;24210:::-;24376:4;24414:2;24403:9;24399:18;24391:26;;24463:9;24457:4;24453:20;24449:1;24438:9;24434:17;24427:47;24491:131;24617:4;24491:131;:::i;:::-;24483:139;;24210:419;;;:::o;24635:::-;24801:4;24839:2;24828:9;24824:18;24816:26;;24888:9;24882:4;24878:20;24874:1;24863:9;24859:17;24852:47;24916:131;25042:4;24916:131;:::i;:::-;24908:139;;24635:419;;;:::o;25060:::-;25226:4;25264:2;25253:9;25249:18;25241:26;;25313:9;25307:4;25303:20;25299:1;25288:9;25284:17;25277:47;25341:131;25467:4;25341:131;:::i;:::-;25333:139;;25060:419;;;:::o;25485:::-;25651:4;25689:2;25678:9;25674:18;25666:26;;25738:9;25732:4;25728:20;25724:1;25713:9;25709:17;25702:47;25766:131;25892:4;25766:131;:::i;:::-;25758:139;;25485:419;;;:::o;25910:::-;26076:4;26114:2;26103:9;26099:18;26091:26;;26163:9;26157:4;26153:20;26149:1;26138:9;26134:17;26127:47;26191:131;26317:4;26191:131;:::i;:::-;26183:139;;25910:419;;;:::o;26335:::-;26501:4;26539:2;26528:9;26524:18;26516:26;;26588:9;26582:4;26578:20;26574:1;26563:9;26559:17;26552:47;26616:131;26742:4;26616:131;:::i;:::-;26608:139;;26335:419;;;:::o;26760:::-;26926:4;26964:2;26953:9;26949:18;26941:26;;27013:9;27007:4;27003:20;26999:1;26988:9;26984:17;26977:47;27041:131;27167:4;27041:131;:::i;:::-;27033:139;;26760:419;;;:::o;27185:::-;27351:4;27389:2;27378:9;27374:18;27366:26;;27438:9;27432:4;27428:20;27424:1;27413:9;27409:17;27402:47;27466:131;27592:4;27466:131;:::i;:::-;27458:139;;27185:419;;;:::o;27610:::-;27776:4;27814:2;27803:9;27799:18;27791:26;;27863:9;27857:4;27853:20;27849:1;27838:9;27834:17;27827:47;27891:131;28017:4;27891:131;:::i;:::-;27883:139;;27610:419;;;:::o;28035:::-;28201:4;28239:2;28228:9;28224:18;28216:26;;28288:9;28282:4;28278:20;28274:1;28263:9;28259:17;28252:47;28316:131;28442:4;28316:131;:::i;:::-;28308:139;;28035:419;;;:::o;28460:::-;28626:4;28664:2;28653:9;28649:18;28641:26;;28713:9;28707:4;28703:20;28699:1;28688:9;28684:17;28677:47;28741:131;28867:4;28741:131;:::i;:::-;28733:139;;28460:419;;;:::o;28885:::-;29051:4;29089:2;29078:9;29074:18;29066:26;;29138:9;29132:4;29128:20;29124:1;29113:9;29109:17;29102:47;29166:131;29292:4;29166:131;:::i;:::-;29158:139;;28885:419;;;:::o;29310:::-;29476:4;29514:2;29503:9;29499:18;29491:26;;29563:9;29557:4;29553:20;29549:1;29538:9;29534:17;29527:47;29591:131;29717:4;29591:131;:::i;:::-;29583:139;;29310:419;;;:::o;29735:::-;29901:4;29939:2;29928:9;29924:18;29916:26;;29988:9;29982:4;29978:20;29974:1;29963:9;29959:17;29952:47;30016:131;30142:4;30016:131;:::i;:::-;30008:139;;29735:419;;;:::o;30160:::-;30326:4;30364:2;30353:9;30349:18;30341:26;;30413:9;30407:4;30403:20;30399:1;30388:9;30384:17;30377:47;30441:131;30567:4;30441:131;:::i;:::-;30433:139;;30160:419;;;:::o;30585:::-;30751:4;30789:2;30778:9;30774:18;30766:26;;30838:9;30832:4;30828:20;30824:1;30813:9;30809:17;30802:47;30866:131;30992:4;30866:131;:::i;:::-;30858:139;;30585:419;;;:::o;31010:::-;31176:4;31214:2;31203:9;31199:18;31191:26;;31263:9;31257:4;31253:20;31249:1;31238:9;31234:17;31227:47;31291:131;31417:4;31291:131;:::i;:::-;31283:139;;31010:419;;;:::o;31435:::-;31601:4;31639:2;31628:9;31624:18;31616:26;;31688:9;31682:4;31678:20;31674:1;31663:9;31659:17;31652:47;31716:131;31842:4;31716:131;:::i;:::-;31708:139;;31435:419;;;:::o;31860:222::-;31953:4;31991:2;31980:9;31976:18;31968:26;;32004:71;32072:1;32061:9;32057:17;32048:6;32004:71;:::i;:::-;31860:222;;;;:::o;32088:129::-;32122:6;32149:20;;:::i;:::-;32139:30;;32178:33;32206:4;32198:6;32178:33;:::i;:::-;32088:129;;;:::o;32223:75::-;32256:6;32289:2;32283:9;32273:19;;32223:75;:::o;32304:307::-;32365:4;32455:18;32447:6;32444:30;32441:56;;;32477:18;;:::i;:::-;32441:56;32515:29;32537:6;32515:29;:::i;:::-;32507:37;;32599:4;32593;32589:15;32581:23;;32304:307;;;:::o;32617:308::-;32679:4;32769:18;32761:6;32758:30;32755:56;;;32791:18;;:::i;:::-;32755:56;32829:29;32851:6;32829:29;:::i;:::-;32821:37;;32913:4;32907;32903:15;32895:23;;32617:308;;;:::o;32931:132::-;32998:4;33021:3;33013:11;;33051:4;33046:3;33042:14;33034:22;;32931:132;;;:::o;33069:114::-;33136:6;33170:5;33164:12;33154:22;;33069:114;;;:::o;33189:98::-;33240:6;33274:5;33268:12;33258:22;;33189:98;;;:::o;33293:99::-;33345:6;33379:5;33373:12;33363:22;;33293:99;;;:::o;33398:113::-;33468:4;33500;33495:3;33491:14;33483:22;;33398:113;;;:::o;33517:184::-;33616:11;33650:6;33645:3;33638:19;33690:4;33685:3;33681:14;33666:29;;33517:184;;;;:::o;33707:168::-;33790:11;33824:6;33819:3;33812:19;33864:4;33859:3;33855:14;33840:29;;33707:168;;;;:::o;33881:169::-;33965:11;33999:6;33994:3;33987:19;34039:4;34034:3;34030:14;34015:29;;33881:169;;;;:::o;34056:148::-;34158:11;34195:3;34180:18;;34056:148;;;;:::o;34210:305::-;34250:3;34269:20;34287:1;34269:20;:::i;:::-;34264:25;;34303:20;34321:1;34303:20;:::i;:::-;34298:25;;34457:1;34389:66;34385:74;34382:1;34379:81;34376:107;;;34463:18;;:::i;:::-;34376:107;34507:1;34504;34500:9;34493:16;;34210:305;;;;:::o;34521:185::-;34561:1;34578:20;34596:1;34578:20;:::i;:::-;34573:25;;34612:20;34630:1;34612:20;:::i;:::-;34607:25;;34651:1;34641:35;;34656:18;;:::i;:::-;34641:35;34698:1;34695;34691:9;34686:14;;34521:185;;;;:::o;34712:348::-;34752:7;34775:20;34793:1;34775:20;:::i;:::-;34770:25;;34809:20;34827:1;34809:20;:::i;:::-;34804:25;;34997:1;34929:66;34925:74;34922:1;34919:81;34914:1;34907:9;34900:17;34896:105;34893:131;;;35004:18;;:::i;:::-;34893:131;35052:1;35049;35045:9;35034:20;;34712:348;;;;:::o;35066:191::-;35106:4;35126:20;35144:1;35126:20;:::i;:::-;35121:25;;35160:20;35178:1;35160:20;:::i;:::-;35155:25;;35199:1;35196;35193:8;35190:34;;;35204:18;;:::i;:::-;35190:34;35249:1;35246;35242:9;35234:17;;35066:191;;;;:::o;35263:96::-;35300:7;35329:24;35347:5;35329:24;:::i;:::-;35318:35;;35263:96;;;:::o;35365:90::-;35399:7;35442:5;35435:13;35428:21;35417:32;;35365:90;;;:::o;35461:149::-;35497:7;35537:66;35530:5;35526:78;35515:89;;35461:149;;;:::o;35616:126::-;35653:7;35693:42;35686:5;35682:54;35671:65;;35616:126;;;:::o;35748:77::-;35785:7;35814:5;35803:16;;35748:77;;;:::o;35831:154::-;35915:6;35910:3;35905;35892:30;35977:1;35968:6;35963:3;35959:16;35952:27;35831:154;;;:::o;35991:307::-;36059:1;36069:113;36083:6;36080:1;36077:13;36069:113;;;36168:1;36163:3;36159:11;36153:18;36149:1;36144:3;36140:11;36133:39;36105:2;36102:1;36098:10;36093:15;;36069:113;;;36200:6;36197:1;36194:13;36191:101;;;36280:1;36271:6;36266:3;36262:16;36255:27;36191:101;36040:258;35991:307;;;:::o;36304:320::-;36348:6;36385:1;36379:4;36375:12;36365:22;;36432:1;36426:4;36422:12;36453:18;36443:81;;36509:4;36501:6;36497:17;36487:27;;36443:81;36571:2;36563:6;36560:14;36540:18;36537:38;36534:84;;;36590:18;;:::i;:::-;36534:84;36355:269;36304:320;;;:::o;36630:281::-;36713:27;36735:4;36713:27;:::i;:::-;36705:6;36701:40;36843:6;36831:10;36828:22;36807:18;36795:10;36792:34;36789:62;36786:88;;;36854:18;;:::i;:::-;36786:88;36894:10;36890:2;36883:22;36673:238;36630:281;;:::o;36917:233::-;36956:3;36979:24;36997:5;36979:24;:::i;:::-;36970:33;;37025:66;37018:5;37015:77;37012:103;;;37095:18;;:::i;:::-;37012:103;37142:1;37135:5;37131:13;37124:20;;36917:233;;;:::o;37156:176::-;37188:1;37205:20;37223:1;37205:20;:::i;:::-;37200:25;;37239:20;37257:1;37239:20;:::i;:::-;37234:25;;37278:1;37268:35;;37283:18;;:::i;:::-;37268:35;37324:1;37321;37317:9;37312:14;;37156:176;;;;:::o;37338:180::-;37386:77;37383:1;37376:88;37483:4;37480:1;37473:15;37507:4;37504:1;37497:15;37524:180;37572:77;37569:1;37562:88;37669:4;37666:1;37659:15;37693:4;37690:1;37683:15;37710:180;37758:77;37755:1;37748:88;37855:4;37852:1;37845:15;37879:4;37876:1;37869:15;37896:180;37944:77;37941:1;37934:88;38041:4;38038:1;38031:15;38065:4;38062:1;38055:15;38082:180;38130:77;38127:1;38120:88;38227:4;38224:1;38217:15;38251:4;38248:1;38241:15;38268:180;38316:77;38313:1;38306:88;38413:4;38410:1;38403:15;38437:4;38434:1;38427:15;38454:117;38563:1;38560;38553:12;38577:117;38686:1;38683;38676:12;38700:117;38809:1;38806;38799:12;38823:117;38932:1;38929;38922:12;38946:102;38987:6;39038:2;39034:7;39029:2;39022:5;39018:14;39014:28;39004:38;;38946:102;;;:::o;39054:238::-;39194:34;39190:1;39182:6;39178:14;39171:58;39263:21;39258:2;39250:6;39246:15;39239:46;39054:238;:::o;39298:230::-;39438:34;39434:1;39426:6;39422:14;39415:58;39507:13;39502:2;39494:6;39490:15;39483:38;39298:230;:::o;39534:237::-;39674:34;39670:1;39662:6;39658:14;39651:58;39743:20;39738:2;39730:6;39726:15;39719:45;39534:237;:::o;39777:225::-;39917:34;39913:1;39905:6;39901:14;39894:58;39986:8;39981:2;39973:6;39969:15;39962:33;39777:225;:::o;40008:178::-;40148:30;40144:1;40136:6;40132:14;40125:54;40008:178;:::o;40192:220::-;40332:34;40328:1;40320:6;40316:14;40309:58;40401:3;40396:2;40388:6;40384:15;40377:28;40192:220;:::o;40418:223::-;40558:34;40554:1;40546:6;40542:14;40535:58;40627:6;40622:2;40614:6;40610:15;40603:31;40418:223;:::o;40647:175::-;40787:27;40783:1;40775:6;40771:14;40764:51;40647:175;:::o;40828:231::-;40968:34;40964:1;40956:6;40952:14;40945:58;41037:14;41032:2;41024:6;41020:15;41013:39;40828:231;:::o;41065:243::-;41205:34;41201:1;41193:6;41189:14;41182:58;41274:26;41269:2;41261:6;41257:15;41250:51;41065:243;:::o;41314:229::-;41454:34;41450:1;41442:6;41438:14;41431:58;41523:12;41518:2;41510:6;41506:15;41499:37;41314:229;:::o;41549:228::-;41689:34;41685:1;41677:6;41673:14;41666:58;41758:11;41753:2;41745:6;41741:15;41734:36;41549:228;:::o;41783:179::-;41923:31;41919:1;41911:6;41907:14;41900:55;41783:179;:::o;41968:182::-;42108:34;42104:1;42096:6;42092:14;42085:58;41968:182;:::o;42156:158::-;42296:10;42292:1;42284:6;42280:14;42273:34;42156:158;:::o;42320:220::-;42460:34;42456:1;42448:6;42444:14;42437:58;42529:3;42524:2;42516:6;42512:15;42505:28;42320:220;:::o;42546:231::-;42686:34;42682:1;42674:6;42670:14;42663:58;42755:14;42750:2;42742:6;42738:15;42731:39;42546:231;:::o;42783:182::-;42923:34;42919:1;42911:6;42907:14;42900:58;42783:182;:::o;42971:225::-;43111:34;43107:1;43099:6;43095:14;43088:58;43180:8;43175:2;43167:6;43163:15;43156:33;42971:225;:::o;43202:228::-;43342:34;43338:1;43330:6;43326:14;43319:58;43411:11;43406:2;43398:6;43394:15;43387:36;43202:228;:::o;43436:234::-;43576:34;43572:1;43564:6;43560:14;43553:58;43645:17;43640:2;43632:6;43628:15;43621:42;43436:234;:::o;43676:220::-;43816:34;43812:1;43804:6;43800:14;43793:58;43885:3;43880:2;43872:6;43868:15;43861:28;43676:220;:::o;43902:236::-;44042:34;44038:1;44030:6;44026:14;44019:58;44111:19;44106:2;44098:6;44094:15;44087:44;43902:236;:::o;44144:231::-;44284:34;44280:1;44272:6;44268:14;44261:58;44353:14;44348:2;44340:6;44336:15;44329:39;44144:231;:::o;44381:182::-;44521:34;44517:1;44509:6;44505:14;44498:58;44381:182;:::o;44569:122::-;44642:24;44660:5;44642:24;:::i;:::-;44635:5;44632:35;44622:63;;44681:1;44678;44671:12;44622:63;44569:122;:::o;44697:116::-;44767:21;44782:5;44767:21;:::i;:::-;44760:5;44757:32;44747:60;;44803:1;44800;44793:12;44747:60;44697:116;:::o;44819:120::-;44891:23;44908:5;44891:23;:::i;:::-;44884:5;44881:34;44871:62;;44929:1;44926;44919:12;44871:62;44819:120;:::o;44945:122::-;45018:24;45036:5;45018:24;:::i;:::-;45011:5;45008:35;44998:63;;45057:1;45054;45047:12;44998:63;44945:122;:::o
Swarm Source
ipfs://0ebdb7426c0dddbfa33735ece79e2a05dbe6c2ea9dbe69d7f1ed1c788aff113f
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.