ERC-721
Overview
Max Total Supply
92 skulmfer
Holders
46
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 skulmferLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
skulmfers
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-19 */ // SPDX-License-Identifier: MIT // File: contracts/StartTokenIdHelper.sol // ERC721A Contracts v3.3.0 // Creators: Chiru Labs pragma solidity ^0.8.4; /** * This Helper is used to return a dynmamic value in the overriden _startTokenId() function. * Extending this Helper before the ERC721A contract give us access to the herein set `startTokenId` * to be returned by the overriden `_startTokenId()` function of ERC721A in the ERC721AStartTokenId mocks. */ contract StartTokenIdHelper { uint256 public startTokenId; constructor(uint256 startTokenId_) { startTokenId = startTokenId_; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) 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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) 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); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) 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; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) 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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) 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); } // File: contracts/IERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A is IERC721, IERC721Metadata { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); } // File: contracts/ERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721A { using Address for address; using Strings for uint256; // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev 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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _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 { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/skulmfers.sol pragma solidity ^0.8.4; contract skulmfers is StartTokenIdHelper, ERC721A, Ownable { using Strings for uint256; string baseURI; uint256 private _mintPrice; uint256 private _maxAmount; uint256 private _mintAmount; uint256 private _maxTXAmount; constructor(string memory name_, string memory symbol_) StartTokenIdHelper(1) ERC721A(name_, symbol_) { baseURI = "https://mnn.mypinata.cloud/ipfs/QmNjrFWHBEcyB9zLjPg64cyDXkpDmdA71xeJdaGpCYa3Hv/"; _mintPrice = 0.035 ether; _maxAmount = 3000; _mintAmount = 2650; _maxTXAmount = 10; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function totalMinted() public view returns (uint256) { return _totalMinted(); } function getAux(address owner) public view returns (uint64) { return _getAux(owner); } function setAux(address owner, uint64 aux) public { _setAux(owner, aux); } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string memory baseURI_) public onlyOwner { baseURI = baseURI_; } function mintPrice() public view returns (uint256) { return _mintPrice; } function setMintPrice(uint256 mintPrice_) public onlyOwner { _mintPrice = mintPrice_; } function maxAmount() public view returns (uint256) { return _maxAmount; } function setMaxAmount(uint256 maxAmount_) public onlyOwner { _maxAmount = maxAmount_; } function mintAmount() public view returns (uint256) { return _mintAmount; } function setMintAmount(uint256 mintAmount_) public onlyOwner { _mintAmount = mintAmount_; } function _startTokenId() internal view override returns (uint256) { return startTokenId; } function exists(uint256 tokenId) public view returns (bool) { return _exists(tokenId); } function burn(uint256 tokenId, bool approvalCheck) public onlyOwner { _burn(tokenId, approvalCheck); } function airDropMint(address to, uint256 quantity) external onlyOwner { require(totalMinted() + quantity <= _maxAmount, "Exceed max amount"); _safeMint(to, quantity); } function mint(uint256 quantity) external payable { // _safeMint's second argument now takes in a quantity, not a tokenId. require(quantity <= _maxTXAmount, "Exceed TX amount"); require(msg.value == (_mintPrice * quantity), "Not enough ETH"); require(totalMinted() + quantity <= _mintAmount, "Exceed mint amount"); _safeMint(msg.sender, quantity); } function withdraw() external payable onlyOwner { uint256 amount = address(this).balance; Address.sendValue(payable(msg.sender), amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"airDropMint","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"approvalCheck","type":"bool"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getAux","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"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":"maxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint64","name":"aux","type":"uint64"}],"name":"setAux","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmount_","type":"uint256"}],"name":"setMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount_","type":"uint256"}],"name":"setMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintPrice_","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","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":"payable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620043e3380380620043e3833981810160405281019062000037919062000308565b81816001806000819055505081600390805190602001906200005b929190620001e6565b50806004908051906020019062000074929190620001e6565b50620000856200010f60201b60201c565b6001819055505050620000ad620000a16200011860201b60201c565b6200012060201b60201c565b6040518060800160405280604f815260200162004394604f9139600a9080519060200190620000de929190620001e6565b50667c585087238000600b81905550610bb8600c81905550610a5a600d81905550600a600e819055505050620004eb565b60008054905090565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f49062000410565b90600052602060002090601f01602090048101928262000218576000855562000264565b82601f106200023357805160ff191683800117855562000264565b8280016001018555821562000264579182015b828111156200026357825182559160200191906001019062000246565b5b50905062000273919062000277565b5090565b5b808211156200029257600081600090555060010162000278565b5090565b6000620002ad620002a784620003a4565b6200037b565b905082815260208101848484011115620002c657600080fd5b620002d3848285620003da565b509392505050565b600082601f830112620002ed57600080fd5b8151620002ff84826020860162000296565b91505092915050565b600080604083850312156200031c57600080fd5b600083015167ffffffffffffffff8111156200033757600080fd5b6200034585828601620002db565b925050602083015167ffffffffffffffff8111156200036357600080fd5b6200037185828601620002db565b9150509250929050565b6000620003876200039a565b905062000395828262000446565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c257620003c1620004ab565b5b620003cd82620004da565b9050602081019050919050565b60005b83811015620003fa578082015181840152602081019050620003dd565b838111156200040a576000848401525b50505050565b600060028204905060018216806200042957607f821691505b6020821081141562000440576200043f6200047c565b5b50919050565b6200045182620004da565b810181811067ffffffffffffffff82111715620004735762000472620004ab565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613e9980620004fb6000396000f3fe6080604052600436106101f95760003560e01c8063715018a61161010d578063b88d4fde116100a0578063dc33e6811161006f578063dc33e68114610701578063e6798baa1461073e578063e985e9c514610769578063f2fde38b146107a6578063f4a0a528146107cf576101f9565b8063b88d4fde14610635578063bf0b175e1461065e578063c7cd997f1461069b578063c87b56dd146106c4576101f9565b80639fac68cb116100dc5780639fac68cb1461059c578063a0712d68146105c5578063a22cb465146105e1578063a2309ff81461060a576101f9565b8063715018a61461050657806375a1ed081461051d5780638da5cb5b1461054657806395d89b4114610571576101f9565b8063453ab141116101905780635a2bcc181161015f5780635a2bcc181461040b5780635f48f393146104365780636352211e146104615780636817c76c1461049e57806370a08231146104c9576101f9565b8063453ab141146103535780634f558e791461037c5780634fe47f70146103b957806355f804b3146103e2576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780633ccfd60b1461032057806342842e0e1461032a576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061327f565b6107f8565b604051610232919061365f565b60405180910390f35b34801561024757600080fd5b506102506108da565b60405161025d919061367a565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613312565b61096c565b60405161029a91906135f8565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613207565b6109e8565b005b3480156102d857600080fd5b506102e1610aed565b6040516102ee919061379c565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613101565b610b04565b005b610328610b14565b005b34801561033657600080fd5b50610351600480360381019061034c9190613101565b610ba2565b005b34801561035f57600080fd5b5061037a60048036038101906103759190613243565b610bc2565b005b34801561038857600080fd5b506103a3600480360381019061039e9190613312565b610bd0565b6040516103b0919061365f565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613312565b610be2565b005b3480156103ee57600080fd5b50610409600480360381019061040491906132d1565b610c68565b005b34801561041757600080fd5b50610420610cfe565b60405161042d919061379c565b60405180910390f35b34801561044257600080fd5b5061044b610d08565b604051610458919061379c565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613312565b610d12565b60405161049591906135f8565b60405180910390f35b3480156104aa57600080fd5b506104b3610d28565b6040516104c0919061379c565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb919061309c565b610d32565b6040516104fd919061379c565b60405180910390f35b34801561051257600080fd5b5061051b610e02565b005b34801561052957600080fd5b50610544600480360381019061053f9190613207565b610e8a565b005b34801561055257600080fd5b5061055b610f6b565b60405161056891906135f8565b60405180910390f35b34801561057d57600080fd5b50610586610f95565b604051610593919061367a565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be919061333b565b611027565b005b6105df60048036038101906105da9190613312565b6110b1565b005b3480156105ed57600080fd5b50610608600480360381019061060391906131cb565b6111a9565b005b34801561061657600080fd5b5061061f611321565b60405161062c919061379c565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190613150565b611330565b005b34801561066a57600080fd5b506106856004803603810190610680919061309c565b6113a8565b60405161069291906137b7565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613312565b6113ba565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613312565b611440565b6040516106f8919061367a565b60405180910390f35b34801561070d57600080fd5b506107286004803603810190610723919061309c565b6114df565b604051610735919061379c565b60405180910390f35b34801561074a57600080fd5b506107536114f1565b604051610760919061379c565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b91906130c5565b6114f7565b60405161079d919061365f565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061309c565b61158b565b005b3480156107db57600080fd5b506107f660048036038101906107f19190613312565b611683565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d357506108d282611709565b5b9050919050565b6060600380546108e990613a86565b80601f016020809104026020016040519081016040528092919081815260200182805461091590613a86565b80156109625780601f1061093757610100808354040283529160200191610962565b820191906000526020600020905b81548152906001019060200180831161094557829003601f168201915b5050505050905090565b600061097782611773565b6109ad576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f382610d12565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7a6117c1565b73ffffffffffffffffffffffffffffffffffffffff1614610add57610aa681610aa16117c1565b6114f7565b610adc576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610ae88383836117c9565b505050565b6000610af761187b565b6002546001540303905090565b610b0f838383611884565b505050565b610b1c6117c1565b73ffffffffffffffffffffffffffffffffffffffff16610b3a610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b879061373c565b60405180910390fd5b6000479050610b9f3382611d3a565b50565b610bbd83838360405180602001604052806000815250611330565b505050565b610bcc8282611e2e565b5050565b6000610bdb82611773565b9050919050565b610bea6117c1565b73ffffffffffffffffffffffffffffffffffffffff16610c08610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c559061373c565b60405180910390fd5b80600c8190555050565b610c706117c1565b73ffffffffffffffffffffffffffffffffffffffff16610c8e610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb9061373c565b60405180910390fd5b80600a9080519060200190610cfa929190612e68565b5050565b6000600d54905090565b6000600c54905090565b6000610d1d82611e9b565b600001519050919050565b6000600b54905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d9a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e0a6117c1565b73ffffffffffffffffffffffffffffffffffffffff16610e28610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e759061373c565b60405180910390fd5b610e886000612126565b565b610e926117c1565b73ffffffffffffffffffffffffffffffffffffffff16610eb0610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd9061373c565b60405180910390fd5b600c5481610f12611321565b610f1c91906138a7565b1115610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061375c565b60405180910390fd5b610f6782826121ec565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610fa490613a86565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090613a86565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b5050505050905090565b61102f6117c1565b73ffffffffffffffffffffffffffffffffffffffff1661104d610f6b565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a9061373c565b60405180910390fd5b6110ad828261220a565b5050565b600e548111156110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed9061377c565b60405180910390fd5b80600b54611104919061392e565b3414611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c9061371c565b60405180910390fd5b600d5481611151611321565b61115b91906138a7565b111561119c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611193906136bc565b60405180910390fd5b6111a633826121ec565b50565b6111b16117c1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611216576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006112236117c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112d06117c1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611315919061365f565b60405180910390a35050565b600061132b6125fa565b905090565b61133b848484611884565b61135a8373ffffffffffffffffffffffffffffffffffffffff1661260d565b156113a25761136b84848484612630565b6113a1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60006113b382612790565b9050919050565b6113c26117c1565b73ffffffffffffffffffffffffffffffffffffffff166113e0610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d9061373c565b60405180910390fd5b80600d8190555050565b606061144b82611773565b611481576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061148b6127f0565b90506000815114156114ac57604051806020016040528060008152506114d7565b806114b684612882565b6040516020016114c79291906135b4565b6040516020818303038152906040525b915050919050565b60006114ea82612a2f565b9050919050565b60005481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115936117c1565b73ffffffffffffffffffffffffffffffffffffffff166115b1610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe9061373c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e9061369c565b60405180910390fd5b61168081612126565b50565b61168b6117c1565b73ffffffffffffffffffffffffffffffffffffffff166116a9610f6b565b73ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f69061373c565b60405180910390fd5b80600b8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161177e61187b565b1115801561178d575060015482105b80156117ba575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60008054905090565b600061188f82611e9b565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146118fa576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661191b6117c1565b73ffffffffffffffffffffffffffffffffffffffff16148061194a5750611949856119446117c1565b6114f7565b5b8061198f57506119586117c1565b73ffffffffffffffffffffffffffffffffffffffff166119778461096c565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806119c8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a2f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a3c8585856001612a99565b611a48600084876117c9565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cc8576001548214611cc757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d338585856001612a9f565b5050505050565b80471015611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d74906136fc565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611da3906135e3565b60006040518083038185875af1925050503d8060008114611de0576040519150601f19603f3d011682016040523d82523d6000602084013e611de5565b606091505b5050905080611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e20906136dc565b60405180910390fd5b505050565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b611ea3612eee565b600082905080611eb161187b565b116120ef576001548110156120ee576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516120ec57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611fd0578092505050612121565b5b6001156120eb57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146120e6578092505050612121565b611fd1565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612206828260405180602001604052806000815250612aa5565b5050565b600061221583611e9b565b905060008160000151905082156122f65760008173ffffffffffffffffffffffffffffffffffffffff166122476117c1565b73ffffffffffffffffffffffffffffffffffffffff1614806122765750612275826122706117c1565b6114f7565b5b806122bb57506122846117c1565b73ffffffffffffffffffffffffffffffffffffffff166122a38661096c565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806122f4576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612304816000866001612a99565b612310600085836117c9565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561257457600154821461257357848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e2816000866001612a9f565b60026000815480929190600101919050555050505050565b600061260461187b565b60015403905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126566117c1565b8786866040518563ffffffff1660e01b81526004016126789493929190613613565b602060405180830381600087803b15801561269257600080fd5b505af19250505080156126c357506040513d601f19601f820116820180604052508101906126c091906132a8565b60015b61273d573d80600081146126f3576040519150601f19603f3d011682016040523d82523d6000602084013e6126f8565b606091505b50600081511415612735576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160189054906101000a900467ffffffffffffffff169050919050565b6060600a80546127ff90613a86565b80601f016020809104026020016040519081016040528092919081815260200182805461282b90613a86565b80156128785780601f1061284d57610100808354040283529160200191612878565b820191906000526020600020905b81548152906001019060200180831161285b57829003601f168201915b5050505050905090565b606060008214156128ca576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a2a565b600082905060005b600082146128fc5780806128e590613ae9565b915050600a826128f591906138fd565b91506128d2565b60008167ffffffffffffffff81111561293e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129705781602001600182028036833780820191505090505b5090505b60008514612a23576001826129899190613988565b9150600a856129989190613b32565b60306129a491906138a7565b60f81b8183815181106129e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a1c91906138fd565b9450612974565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b13576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612b4e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5b6000858386612a99565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612d1c8673ffffffffffffffffffffffffffffffffffffffff1661260d565b15612de1575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d916000878480600101955087612630565b612dc7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612d22578260015414612ddc57600080fd5b612e4c565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612de2575b816001819055505050612e626000858386612a9f565b50505050565b828054612e7490613a86565b90600052602060002090601f016020900481019282612e965760008555612edd565b82601f10612eaf57805160ff1916838001178555612edd565b82800160010185558215612edd579182015b82811115612edc578251825591602001919060010190612ec1565b5b509050612eea9190612f31565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612f4a576000816000905550600101612f32565b5090565b6000612f61612f5c846137f7565b6137d2565b905082815260208101848484011115612f7957600080fd5b612f84848285613a44565b509392505050565b6000612f9f612f9a84613828565b6137d2565b905082815260208101848484011115612fb757600080fd5b612fc2848285613a44565b509392505050565b600081359050612fd981613df0565b92915050565b600081359050612fee81613e07565b92915050565b60008135905061300381613e1e565b92915050565b60008151905061301881613e1e565b92915050565b600082601f83011261302f57600080fd5b813561303f848260208601612f4e565b91505092915050565b600082601f83011261305957600080fd5b8135613069848260208601612f8c565b91505092915050565b60008135905061308181613e35565b92915050565b60008135905061309681613e4c565b92915050565b6000602082840312156130ae57600080fd5b60006130bc84828501612fca565b91505092915050565b600080604083850312156130d857600080fd5b60006130e685828601612fca565b92505060206130f785828601612fca565b9150509250929050565b60008060006060848603121561311657600080fd5b600061312486828701612fca565b935050602061313586828701612fca565b925050604061314686828701613072565b9150509250925092565b6000806000806080858703121561316657600080fd5b600061317487828801612fca565b945050602061318587828801612fca565b935050604061319687828801613072565b925050606085013567ffffffffffffffff8111156131b357600080fd5b6131bf8782880161301e565b91505092959194509250565b600080604083850312156131de57600080fd5b60006131ec85828601612fca565b92505060206131fd85828601612fdf565b9150509250929050565b6000806040838503121561321a57600080fd5b600061322885828601612fca565b925050602061323985828601613072565b9150509250929050565b6000806040838503121561325657600080fd5b600061326485828601612fca565b925050602061327585828601613087565b9150509250929050565b60006020828403121561329157600080fd5b600061329f84828501612ff4565b91505092915050565b6000602082840312156132ba57600080fd5b60006132c884828501613009565b91505092915050565b6000602082840312156132e357600080fd5b600082013567ffffffffffffffff8111156132fd57600080fd5b61330984828501613048565b91505092915050565b60006020828403121561332457600080fd5b600061333284828501613072565b91505092915050565b6000806040838503121561334e57600080fd5b600061335c85828601613072565b925050602061336d85828601612fdf565b9150509250929050565b613380816139bc565b82525050565b61338f816139ce565b82525050565b60006133a082613859565b6133aa818561386f565b93506133ba818560208601613a53565b6133c381613c1f565b840191505092915050565b60006133d982613864565b6133e3818561388b565b93506133f3818560208601613a53565b6133fc81613c1f565b840191505092915050565b600061341282613864565b61341c818561389c565b935061342c818560208601613a53565b80840191505092915050565b600061344560268361388b565b915061345082613c30565b604082019050919050565b600061346860128361388b565b915061347382613c7f565b602082019050919050565b600061348b603a8361388b565b915061349682613ca8565b604082019050919050565b60006134ae601d8361388b565b91506134b982613cf7565b602082019050919050565b60006134d1600e8361388b565b91506134dc82613d20565b602082019050919050565b60006134f460058361389c565b91506134ff82613d49565b600582019050919050565b600061351760208361388b565b915061352282613d72565b602082019050919050565b600061353a600083613880565b915061354582613d9b565b600082019050919050565b600061355d60118361388b565b915061356882613d9e565b602082019050919050565b600061358060108361388b565b915061358b82613dc7565b602082019050919050565b61359f81613a26565b82525050565b6135ae81613a30565b82525050565b60006135c08285613407565b91506135cc8284613407565b91506135d7826134e7565b91508190509392505050565b60006135ee8261352d565b9150819050919050565b600060208201905061360d6000830184613377565b92915050565b60006080820190506136286000830187613377565b6136356020830186613377565b6136426040830185613596565b81810360608301526136548184613395565b905095945050505050565b60006020820190506136746000830184613386565b92915050565b6000602082019050818103600083015261369481846133ce565b905092915050565b600060208201905081810360008301526136b581613438565b9050919050565b600060208201905081810360008301526136d58161345b565b9050919050565b600060208201905081810360008301526136f58161347e565b9050919050565b60006020820190508181036000830152613715816134a1565b9050919050565b60006020820190508181036000830152613735816134c4565b9050919050565b600060208201905081810360008301526137558161350a565b9050919050565b6000602082019050818103600083015261377581613550565b9050919050565b6000602082019050818103600083015261379581613573565b9050919050565b60006020820190506137b16000830184613596565b92915050565b60006020820190506137cc60008301846135a5565b92915050565b60006137dc6137ed565b90506137e88282613ab8565b919050565b6000604051905090565b600067ffffffffffffffff82111561381257613811613bf0565b5b61381b82613c1f565b9050602081019050919050565b600067ffffffffffffffff82111561384357613842613bf0565b5b61384c82613c1f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138b282613a26565b91506138bd83613a26565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f2576138f1613b63565b5b828201905092915050565b600061390882613a26565b915061391383613a26565b92508261392357613922613b92565b5b828204905092915050565b600061393982613a26565b915061394483613a26565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561397d5761397c613b63565b5b828202905092915050565b600061399382613a26565b915061399e83613a26565b9250828210156139b1576139b0613b63565b5b828203905092915050565b60006139c782613a06565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613a71578082015181840152602081019050613a56565b83811115613a80576000848401525b50505050565b60006002820490506001821680613a9e57607f821691505b60208210811415613ab257613ab1613bc1565b5b50919050565b613ac182613c1f565b810181811067ffffffffffffffff82111715613ae057613adf613bf0565b5b80604052505050565b6000613af482613a26565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b2757613b26613b63565b5b600182019050919050565b6000613b3d82613a26565b9150613b4883613a26565b925082613b5857613b57613b92565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863656564206d696e7420616d6f756e740000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4e6f7420656e6f75676820455448000000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f457863656564206d617820616d6f756e74000000000000000000000000000000600082015250565b7f45786365656420545820616d6f756e7400000000000000000000000000000000600082015250565b613df9816139bc565b8114613e0457600080fd5b50565b613e10816139ce565b8114613e1b57600080fd5b50565b613e27816139da565b8114613e3257600080fd5b50565b613e3e81613a26565b8114613e4957600080fd5b50565b613e5581613a30565b8114613e6057600080fd5b5056fea2646970667358221220f926ea9699afcce74320e592ece5470e17c83cbdeab691fb114d833dd683862764736f6c6343000804003368747470733a2f2f6d6e6e2e6d7970696e6174612e636c6f75642f697066732f516d4e6a724657484245637942397a4c6a50673634637944586b70446d6441373178654a646147704359613348762f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000009736b756c6d6665727300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008736b756c6d666572000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101f95760003560e01c8063715018a61161010d578063b88d4fde116100a0578063dc33e6811161006f578063dc33e68114610701578063e6798baa1461073e578063e985e9c514610769578063f2fde38b146107a6578063f4a0a528146107cf576101f9565b8063b88d4fde14610635578063bf0b175e1461065e578063c7cd997f1461069b578063c87b56dd146106c4576101f9565b80639fac68cb116100dc5780639fac68cb1461059c578063a0712d68146105c5578063a22cb465146105e1578063a2309ff81461060a576101f9565b8063715018a61461050657806375a1ed081461051d5780638da5cb5b1461054657806395d89b4114610571576101f9565b8063453ab141116101905780635a2bcc181161015f5780635a2bcc181461040b5780635f48f393146104365780636352211e146104615780636817c76c1461049e57806370a08231146104c9576101f9565b8063453ab141146103535780634f558e791461037c5780634fe47f70146103b957806355f804b3146103e2576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780633ccfd60b1461032057806342842e0e1461032a576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061327f565b6107f8565b604051610232919061365f565b60405180910390f35b34801561024757600080fd5b506102506108da565b60405161025d919061367a565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613312565b61096c565b60405161029a91906135f8565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613207565b6109e8565b005b3480156102d857600080fd5b506102e1610aed565b6040516102ee919061379c565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613101565b610b04565b005b610328610b14565b005b34801561033657600080fd5b50610351600480360381019061034c9190613101565b610ba2565b005b34801561035f57600080fd5b5061037a60048036038101906103759190613243565b610bc2565b005b34801561038857600080fd5b506103a3600480360381019061039e9190613312565b610bd0565b6040516103b0919061365f565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613312565b610be2565b005b3480156103ee57600080fd5b50610409600480360381019061040491906132d1565b610c68565b005b34801561041757600080fd5b50610420610cfe565b60405161042d919061379c565b60405180910390f35b34801561044257600080fd5b5061044b610d08565b604051610458919061379c565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613312565b610d12565b60405161049591906135f8565b60405180910390f35b3480156104aa57600080fd5b506104b3610d28565b6040516104c0919061379c565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb919061309c565b610d32565b6040516104fd919061379c565b60405180910390f35b34801561051257600080fd5b5061051b610e02565b005b34801561052957600080fd5b50610544600480360381019061053f9190613207565b610e8a565b005b34801561055257600080fd5b5061055b610f6b565b60405161056891906135f8565b60405180910390f35b34801561057d57600080fd5b50610586610f95565b604051610593919061367a565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be919061333b565b611027565b005b6105df60048036038101906105da9190613312565b6110b1565b005b3480156105ed57600080fd5b50610608600480360381019061060391906131cb565b6111a9565b005b34801561061657600080fd5b5061061f611321565b60405161062c919061379c565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190613150565b611330565b005b34801561066a57600080fd5b506106856004803603810190610680919061309c565b6113a8565b60405161069291906137b7565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613312565b6113ba565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613312565b611440565b6040516106f8919061367a565b60405180910390f35b34801561070d57600080fd5b506107286004803603810190610723919061309c565b6114df565b604051610735919061379c565b60405180910390f35b34801561074a57600080fd5b506107536114f1565b604051610760919061379c565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b91906130c5565b6114f7565b60405161079d919061365f565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061309c565b61158b565b005b3480156107db57600080fd5b506107f660048036038101906107f19190613312565b611683565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d357506108d282611709565b5b9050919050565b6060600380546108e990613a86565b80601f016020809104026020016040519081016040528092919081815260200182805461091590613a86565b80156109625780601f1061093757610100808354040283529160200191610962565b820191906000526020600020905b81548152906001019060200180831161094557829003601f168201915b5050505050905090565b600061097782611773565b6109ad576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f382610d12565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7a6117c1565b73ffffffffffffffffffffffffffffffffffffffff1614610add57610aa681610aa16117c1565b6114f7565b610adc576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610ae88383836117c9565b505050565b6000610af761187b565b6002546001540303905090565b610b0f838383611884565b505050565b610b1c6117c1565b73ffffffffffffffffffffffffffffffffffffffff16610b3a610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b879061373c565b60405180910390fd5b6000479050610b9f3382611d3a565b50565b610bbd83838360405180602001604052806000815250611330565b505050565b610bcc8282611e2e565b5050565b6000610bdb82611773565b9050919050565b610bea6117c1565b73ffffffffffffffffffffffffffffffffffffffff16610c08610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c559061373c565b60405180910390fd5b80600c8190555050565b610c706117c1565b73ffffffffffffffffffffffffffffffffffffffff16610c8e610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb9061373c565b60405180910390fd5b80600a9080519060200190610cfa929190612e68565b5050565b6000600d54905090565b6000600c54905090565b6000610d1d82611e9b565b600001519050919050565b6000600b54905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d9a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e0a6117c1565b73ffffffffffffffffffffffffffffffffffffffff16610e28610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e759061373c565b60405180910390fd5b610e886000612126565b565b610e926117c1565b73ffffffffffffffffffffffffffffffffffffffff16610eb0610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd9061373c565b60405180910390fd5b600c5481610f12611321565b610f1c91906138a7565b1115610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061375c565b60405180910390fd5b610f6782826121ec565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610fa490613a86565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090613a86565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b5050505050905090565b61102f6117c1565b73ffffffffffffffffffffffffffffffffffffffff1661104d610f6b565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a9061373c565b60405180910390fd5b6110ad828261220a565b5050565b600e548111156110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed9061377c565b60405180910390fd5b80600b54611104919061392e565b3414611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c9061371c565b60405180910390fd5b600d5481611151611321565b61115b91906138a7565b111561119c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611193906136bc565b60405180910390fd5b6111a633826121ec565b50565b6111b16117c1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611216576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006112236117c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112d06117c1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611315919061365f565b60405180910390a35050565b600061132b6125fa565b905090565b61133b848484611884565b61135a8373ffffffffffffffffffffffffffffffffffffffff1661260d565b156113a25761136b84848484612630565b6113a1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60006113b382612790565b9050919050565b6113c26117c1565b73ffffffffffffffffffffffffffffffffffffffff166113e0610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d9061373c565b60405180910390fd5b80600d8190555050565b606061144b82611773565b611481576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061148b6127f0565b90506000815114156114ac57604051806020016040528060008152506114d7565b806114b684612882565b6040516020016114c79291906135b4565b6040516020818303038152906040525b915050919050565b60006114ea82612a2f565b9050919050565b60005481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115936117c1565b73ffffffffffffffffffffffffffffffffffffffff166115b1610f6b565b73ffffffffffffffffffffffffffffffffffffffff1614611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe9061373c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e9061369c565b60405180910390fd5b61168081612126565b50565b61168b6117c1565b73ffffffffffffffffffffffffffffffffffffffff166116a9610f6b565b73ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f69061373c565b60405180910390fd5b80600b8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161177e61187b565b1115801561178d575060015482105b80156117ba575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60008054905090565b600061188f82611e9b565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146118fa576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661191b6117c1565b73ffffffffffffffffffffffffffffffffffffffff16148061194a5750611949856119446117c1565b6114f7565b5b8061198f57506119586117c1565b73ffffffffffffffffffffffffffffffffffffffff166119778461096c565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806119c8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a2f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a3c8585856001612a99565b611a48600084876117c9565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cc8576001548214611cc757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d338585856001612a9f565b5050505050565b80471015611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d74906136fc565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611da3906135e3565b60006040518083038185875af1925050503d8060008114611de0576040519150601f19603f3d011682016040523d82523d6000602084013e611de5565b606091505b5050905080611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e20906136dc565b60405180910390fd5b505050565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b611ea3612eee565b600082905080611eb161187b565b116120ef576001548110156120ee576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516120ec57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611fd0578092505050612121565b5b6001156120eb57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146120e6578092505050612121565b611fd1565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612206828260405180602001604052806000815250612aa5565b5050565b600061221583611e9b565b905060008160000151905082156122f65760008173ffffffffffffffffffffffffffffffffffffffff166122476117c1565b73ffffffffffffffffffffffffffffffffffffffff1614806122765750612275826122706117c1565b6114f7565b5b806122bb57506122846117c1565b73ffffffffffffffffffffffffffffffffffffffff166122a38661096c565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806122f4576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612304816000866001612a99565b612310600085836117c9565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561257457600154821461257357848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e2816000866001612a9f565b60026000815480929190600101919050555050505050565b600061260461187b565b60015403905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126566117c1565b8786866040518563ffffffff1660e01b81526004016126789493929190613613565b602060405180830381600087803b15801561269257600080fd5b505af19250505080156126c357506040513d601f19601f820116820180604052508101906126c091906132a8565b60015b61273d573d80600081146126f3576040519150601f19603f3d011682016040523d82523d6000602084013e6126f8565b606091505b50600081511415612735576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160189054906101000a900467ffffffffffffffff169050919050565b6060600a80546127ff90613a86565b80601f016020809104026020016040519081016040528092919081815260200182805461282b90613a86565b80156128785780601f1061284d57610100808354040283529160200191612878565b820191906000526020600020905b81548152906001019060200180831161285b57829003601f168201915b5050505050905090565b606060008214156128ca576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a2a565b600082905060005b600082146128fc5780806128e590613ae9565b915050600a826128f591906138fd565b91506128d2565b60008167ffffffffffffffff81111561293e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129705781602001600182028036833780820191505090505b5090505b60008514612a23576001826129899190613988565b9150600a856129989190613b32565b60306129a491906138a7565b60f81b8183815181106129e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a1c91906138fd565b9450612974565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b13576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612b4e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5b6000858386612a99565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612d1c8673ffffffffffffffffffffffffffffffffffffffff1661260d565b15612de1575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d916000878480600101955087612630565b612dc7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612d22578260015414612ddc57600080fd5b612e4c565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612de2575b816001819055505050612e626000858386612a9f565b50505050565b828054612e7490613a86565b90600052602060002090601f016020900481019282612e965760008555612edd565b82601f10612eaf57805160ff1916838001178555612edd565b82800160010185558215612edd579182015b82811115612edc578251825591602001919060010190612ec1565b5b509050612eea9190612f31565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612f4a576000816000905550600101612f32565b5090565b6000612f61612f5c846137f7565b6137d2565b905082815260208101848484011115612f7957600080fd5b612f84848285613a44565b509392505050565b6000612f9f612f9a84613828565b6137d2565b905082815260208101848484011115612fb757600080fd5b612fc2848285613a44565b509392505050565b600081359050612fd981613df0565b92915050565b600081359050612fee81613e07565b92915050565b60008135905061300381613e1e565b92915050565b60008151905061301881613e1e565b92915050565b600082601f83011261302f57600080fd5b813561303f848260208601612f4e565b91505092915050565b600082601f83011261305957600080fd5b8135613069848260208601612f8c565b91505092915050565b60008135905061308181613e35565b92915050565b60008135905061309681613e4c565b92915050565b6000602082840312156130ae57600080fd5b60006130bc84828501612fca565b91505092915050565b600080604083850312156130d857600080fd5b60006130e685828601612fca565b92505060206130f785828601612fca565b9150509250929050565b60008060006060848603121561311657600080fd5b600061312486828701612fca565b935050602061313586828701612fca565b925050604061314686828701613072565b9150509250925092565b6000806000806080858703121561316657600080fd5b600061317487828801612fca565b945050602061318587828801612fca565b935050604061319687828801613072565b925050606085013567ffffffffffffffff8111156131b357600080fd5b6131bf8782880161301e565b91505092959194509250565b600080604083850312156131de57600080fd5b60006131ec85828601612fca565b92505060206131fd85828601612fdf565b9150509250929050565b6000806040838503121561321a57600080fd5b600061322885828601612fca565b925050602061323985828601613072565b9150509250929050565b6000806040838503121561325657600080fd5b600061326485828601612fca565b925050602061327585828601613087565b9150509250929050565b60006020828403121561329157600080fd5b600061329f84828501612ff4565b91505092915050565b6000602082840312156132ba57600080fd5b60006132c884828501613009565b91505092915050565b6000602082840312156132e357600080fd5b600082013567ffffffffffffffff8111156132fd57600080fd5b61330984828501613048565b91505092915050565b60006020828403121561332457600080fd5b600061333284828501613072565b91505092915050565b6000806040838503121561334e57600080fd5b600061335c85828601613072565b925050602061336d85828601612fdf565b9150509250929050565b613380816139bc565b82525050565b61338f816139ce565b82525050565b60006133a082613859565b6133aa818561386f565b93506133ba818560208601613a53565b6133c381613c1f565b840191505092915050565b60006133d982613864565b6133e3818561388b565b93506133f3818560208601613a53565b6133fc81613c1f565b840191505092915050565b600061341282613864565b61341c818561389c565b935061342c818560208601613a53565b80840191505092915050565b600061344560268361388b565b915061345082613c30565b604082019050919050565b600061346860128361388b565b915061347382613c7f565b602082019050919050565b600061348b603a8361388b565b915061349682613ca8565b604082019050919050565b60006134ae601d8361388b565b91506134b982613cf7565b602082019050919050565b60006134d1600e8361388b565b91506134dc82613d20565b602082019050919050565b60006134f460058361389c565b91506134ff82613d49565b600582019050919050565b600061351760208361388b565b915061352282613d72565b602082019050919050565b600061353a600083613880565b915061354582613d9b565b600082019050919050565b600061355d60118361388b565b915061356882613d9e565b602082019050919050565b600061358060108361388b565b915061358b82613dc7565b602082019050919050565b61359f81613a26565b82525050565b6135ae81613a30565b82525050565b60006135c08285613407565b91506135cc8284613407565b91506135d7826134e7565b91508190509392505050565b60006135ee8261352d565b9150819050919050565b600060208201905061360d6000830184613377565b92915050565b60006080820190506136286000830187613377565b6136356020830186613377565b6136426040830185613596565b81810360608301526136548184613395565b905095945050505050565b60006020820190506136746000830184613386565b92915050565b6000602082019050818103600083015261369481846133ce565b905092915050565b600060208201905081810360008301526136b581613438565b9050919050565b600060208201905081810360008301526136d58161345b565b9050919050565b600060208201905081810360008301526136f58161347e565b9050919050565b60006020820190508181036000830152613715816134a1565b9050919050565b60006020820190508181036000830152613735816134c4565b9050919050565b600060208201905081810360008301526137558161350a565b9050919050565b6000602082019050818103600083015261377581613550565b9050919050565b6000602082019050818103600083015261379581613573565b9050919050565b60006020820190506137b16000830184613596565b92915050565b60006020820190506137cc60008301846135a5565b92915050565b60006137dc6137ed565b90506137e88282613ab8565b919050565b6000604051905090565b600067ffffffffffffffff82111561381257613811613bf0565b5b61381b82613c1f565b9050602081019050919050565b600067ffffffffffffffff82111561384357613842613bf0565b5b61384c82613c1f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138b282613a26565b91506138bd83613a26565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f2576138f1613b63565b5b828201905092915050565b600061390882613a26565b915061391383613a26565b92508261392357613922613b92565b5b828204905092915050565b600061393982613a26565b915061394483613a26565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561397d5761397c613b63565b5b828202905092915050565b600061399382613a26565b915061399e83613a26565b9250828210156139b1576139b0613b63565b5b828203905092915050565b60006139c782613a06565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613a71578082015181840152602081019050613a56565b83811115613a80576000848401525b50505050565b60006002820490506001821680613a9e57607f821691505b60208210811415613ab257613ab1613bc1565b5b50919050565b613ac182613c1f565b810181811067ffffffffffffffff82111715613ae057613adf613bf0565b5b80604052505050565b6000613af482613a26565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b2757613b26613b63565b5b600182019050919050565b6000613b3d82613a26565b9150613b4883613a26565b925082613b5857613b57613b92565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863656564206d696e7420616d6f756e740000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4e6f7420656e6f75676820455448000000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f457863656564206d617820616d6f756e74000000000000000000000000000000600082015250565b7f45786365656420545820616d6f756e7400000000000000000000000000000000600082015250565b613df9816139bc565b8114613e0457600080fd5b50565b613e10816139ce565b8114613e1b57600080fd5b50565b613e27816139da565b8114613e3257600080fd5b50565b613e3e81613a26565b8114613e4957600080fd5b50565b613e5581613a30565b8114613e6057600080fd5b5056fea2646970667358221220f926ea9699afcce74320e592ece5470e17c83cbdeab691fb114d833dd683862764736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000009736b756c6d6665727300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008736b756c6d666572000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): skulmfers
Arg [1] : symbol_ (string): skulmfer
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 736b756c6d666572730000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 736b756c6d666572000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
48060:2973:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29164:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32279:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33792:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33354:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28404:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34657:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50869:161;;;:::i;:::-;;34898:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48988:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50028:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49597:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49192:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49706:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49502:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32087:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49298:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29533:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5365:103;;;;;;;;;;;;;:::i;:::-;;50262:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4714:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32448:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50138:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50461:400;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34068:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48779:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35154:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48880:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49803:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32623:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48658:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;512:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34426:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5623:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49393:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29164:305;29266:4;29318:25;29303:40;;;:11;:40;;;;:105;;;;29375:33;29360:48;;;:11;:48;;;;29303:105;:158;;;;29425:36;29449:11;29425:23;:36::i;:::-;29303:158;29283:178;;29164:305;;;:::o;32279:100::-;32333:13;32366:5;32359:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32279:100;:::o;33792:204::-;33860:7;33885:16;33893:7;33885;:16::i;:::-;33880:64;;33910:34;;;;;;;;;;;;;;33880:64;33964:15;:24;33980:7;33964:24;;;;;;;;;;;;;;;;;;;;;33957:31;;33792:204;;;:::o;33354:372::-;33427:13;33443:24;33459:7;33443:15;:24::i;:::-;33427:40;;33488:5;33482:11;;:2;:11;;;33478:48;;;33502:24;;;;;;;;;;;;;;33478:48;33559:5;33543:21;;:12;:10;:12::i;:::-;:21;;;33539:139;;33570:37;33587:5;33594:12;:10;:12::i;:::-;33570:16;:37::i;:::-;33566:112;;33631:35;;;;;;;;;;;;;;33566:112;33539:139;33690:28;33699:2;33703:7;33712:5;33690:8;:28::i;:::-;33354:372;;;:::o;28404:312::-;28457:7;28682:15;:13;:15::i;:::-;28667:12;;28651:13;;:28;:46;28644:53;;28404:312;:::o;34657:170::-;34791:28;34801:4;34807:2;34811:7;34791:9;:28::i;:::-;34657:170;;;:::o;50869:161::-;4945:12;:10;:12::i;:::-;4934:23;;:7;:5;:7::i;:::-;:23;;;4926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50927:14:::1;50944:21;50927:38;;50976:46;51002:10;51015:6;50976:17;:46::i;:::-;5005:1;50869:161::o:0;34898:185::-;35036:39;35053:4;35059:2;35063:7;35036:39;;;;;;;;;;;;:16;:39::i;:::-;34898:185;;;:::o;48988:88::-;49049:19;49057:5;49064:3;49049:7;:19::i;:::-;48988:88;;:::o;50028:102::-;50082:4;50106:16;50114:7;50106;:16::i;:::-;50099:23;;50028:102;;;:::o;49597:101::-;4945:12;:10;:12::i;:::-;4934:23;;:7;:5;:7::i;:::-;:23;;;4926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49680:10:::1;49667;:23;;;;49597:101:::0;:::o;49192:98::-;4945:12;:10;:12::i;:::-;4934:23;;:7;:5;:7::i;:::-;:23;;;4926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49274:8:::1;49264:7;:18;;;;;;;;;;;;:::i;:::-;;49192:98:::0;:::o;49706:89::-;49749:7;49776:11;;49769:18;;49706:89;:::o;49502:87::-;49544:7;49571:10;;49564:17;;49502:87;:::o;32087:125::-;32151:7;32178:21;32191:7;32178:12;:21::i;:::-;:26;;;32171:33;;32087:125;;;:::o;49298:87::-;49340:7;49367:10;;49360:17;;49298:87;:::o;29533:206::-;29597:7;29638:1;29621:19;;:5;:19;;;29617:60;;;29649:28;;;;;;;;;;;;;;29617:60;29703:12;:19;29716:5;29703:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29695:36;;29688:43;;29533:206;;;:::o;5365:103::-;4945:12;:10;:12::i;:::-;4934:23;;:7;:5;:7::i;:::-;:23;;;4926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5430:30:::1;5457:1;5430:18;:30::i;:::-;5365:103::o:0;50262:191::-;4945:12;:10;:12::i;:::-;4934:23;;:7;:5;:7::i;:::-;:23;;;4926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50379:10:::1;;50367:8;50351:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;50343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50422:23;50432:2;50436:8;50422:9;:23::i;:::-;50262:191:::0;;:::o;4714:87::-;4760:7;4787:6;;;;;;;;;;;4780:13;;4714:87;:::o;32448:104::-;32504:13;32537:7;32530:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32448:104;:::o;50138:116::-;4945:12;:10;:12::i;:::-;4934:23;;:7;:5;:7::i;:::-;:23;;;4926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50217:29:::1;50223:7;50232:13;50217:5;:29::i;:::-;50138:116:::0;;:::o;50461:400::-;50621:12;;50609:8;:24;;50601:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;50700:8;50687:10;;:21;;;;:::i;:::-;50673:9;:36;50665:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;50775:11;;50763:8;50747:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:39;;50739:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50822:31;50832:10;50844:8;50822:9;:31::i;:::-;50461:400;:::o;34068:287::-;34179:12;:10;:12::i;:::-;34167:24;;:8;:24;;;34163:54;;;34200:17;;;;;;;;;;;;;;34163:54;34275:8;34230:18;:32;34249:12;:10;:12::i;:::-;34230:32;;;;;;;;;;;;;;;:42;34263:8;34230:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34328:8;34299:48;;34314:12;:10;:12::i;:::-;34299:48;;;34338:8;34299:48;;;;;;:::i;:::-;;;;;;;;34068:287;;:::o;48779:93::-;48823:7;48850:14;:12;:14::i;:::-;48843:21;;48779:93;:::o;35154:370::-;35321:28;35331:4;35337:2;35341:7;35321:9;:28::i;:::-;35364:15;:2;:13;;;:15::i;:::-;35360:157;;;35385:56;35416:4;35422:2;35426:7;35435:5;35385:30;:56::i;:::-;35381:136;;35465:40;;;;;;;;;;;;;;35381:136;35360:157;35154:370;;;;:::o;48880:100::-;48932:6;48958:14;48966:5;48958:7;:14::i;:::-;48951:21;;48880:100;;;:::o;49803:105::-;4945:12;:10;:12::i;:::-;4934:23;;:7;:5;:7::i;:::-;:23;;;4926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49889:11:::1;49875;:25;;;;49803:105:::0;:::o;32623:327::-;32696:13;32727:16;32735:7;32727;:16::i;:::-;32722:59;;32752:29;;;;;;;;;;;;;;32722:59;32794:21;32818:10;:8;:10::i;:::-;32794:34;;32871:1;32852:7;32846:21;:26;;:96;;;;;;;;;;;;;;;;;32899:7;32908:18;:7;:16;:18::i;:::-;32882:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32846:96;32839:103;;;32623:327;;;:::o;48658:113::-;48716:7;48743:20;48757:5;48743:13;:20::i;:::-;48736:27;;48658:113;;;:::o;512:27::-;;;;:::o;34426:164::-;34523:4;34547:18;:25;34566:5;34547:25;;;;;;;;;;;;;;;:35;34573:8;34547:35;;;;;;;;;;;;;;;;;;;;;;;;;34540:42;;34426:164;;;;:::o;5623:201::-;4945:12;:10;:12::i;:::-;4934:23;;:7;:5;:7::i;:::-;:23;;;4926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5732:1:::1;5712:22;;:8;:22;;;;5704:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5788:28;5807:8;5788:18;:28::i;:::-;5623:201:::0;:::o;49393:101::-;4945:12;:10;:12::i;:::-;4934:23;;:7;:5;:7::i;:::-;:23;;;4926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49476:10:::1;49463;:23;;;;49393:101:::0;:::o;17521:157::-;17606:4;17645:25;17630:40;;;:11;:40;;;;17623:47;;17521:157;;;:::o;35779:174::-;35836:4;35879:7;35860:15;:13;:15::i;:::-;:26;;:53;;;;;35900:13;;35890:7;:23;35860:53;:85;;;;;35918:11;:20;35930:7;35918:20;;;;;;;;;;;:27;;;;;;;;;;;;35917:28;35860:85;35853:92;;35779:174;;;:::o;3438:98::-;3491:7;3518:10;3511:17;;3438:98;:::o;45001:196::-;45143:2;45116:15;:24;45132:7;45116:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45181:7;45177:2;45161:28;;45170:5;45161:28;;;;;;;;;;;;45001:196;;;:::o;49916:104::-;49973:7;50000:12;;49993:19;;49916:104;:::o;39949:2130::-;40064:35;40102:21;40115:7;40102:12;:21::i;:::-;40064:59;;40162:4;40140:26;;:13;:18;;;:26;;;40136:67;;40175:28;;;;;;;;;;;;;;40136:67;40216:22;40258:4;40242:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;40279:36;40296:4;40302:12;:10;:12::i;:::-;40279:16;:36::i;:::-;40242:73;:126;;;;40356:12;:10;:12::i;:::-;40332:36;;:20;40344:7;40332:11;:20::i;:::-;:36;;;40242:126;40216:153;;40387:17;40382:66;;40413:35;;;;;;;;;;;;;;40382:66;40477:1;40463:16;;:2;:16;;;40459:52;;;40488:23;;;;;;;;;;;;;;40459:52;40524:43;40546:4;40552:2;40556:7;40565:1;40524:21;:43::i;:::-;40632:35;40649:1;40653:7;40662:4;40632:8;:35::i;:::-;40993:1;40963:12;:18;40976:4;40963:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41037:1;41009:12;:16;41022:2;41009:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41055:31;41089:11;:20;41101:7;41089:20;;;;;;;;;;;41055:54;;41140:2;41124:8;:13;;;:18;;;;;;;;;;;;;;;;;;41190:15;41157:8;:23;;;:49;;;;;;;;;;;;;;;;;;41458:19;41490:1;41480:7;:11;41458:33;;41506:31;41540:11;:24;41552:11;41540:24;;;;;;;;;;;41506:58;;41608:1;41583:27;;:8;:13;;;;;;;;;;;;:27;;;41579:384;;;41793:13;;41778:11;:28;41774:174;;41847:4;41831:8;:13;;;:20;;;;;;;;;;;;;;;;;;41900:13;:28;;;41874:8;:23;;;:54;;;;;;;;;;;;;;;;;;41774:174;41579:384;39949:2130;;;42010:7;42006:2;41991:27;;42000:4;41991:27;;;;;;;;;;;;42029:42;42050:4;42056:2;42060:7;42069:1;42029:20;:42::i;:::-;39949:2130;;;;;:::o;8676:317::-;8791:6;8766:21;:31;;8758:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8845:12;8863:9;:14;;8885:6;8863:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8844:52;;;8915:7;8907:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;8676:317;;;:::o;30611:101::-;30701:3;30675:12;:19;30688:5;30675:19;;;;;;;;;;;;;;;:23;;;:29;;;;;;;;;;;;;;;;;;30611:101;;:::o;30914:1111::-;30976:21;;:::i;:::-;31010:12;31025:7;31010:22;;31093:4;31074:15;:13;:15::i;:::-;:23;31070:888;;31110:13;;31103:4;:20;31099:859;;;31144:31;31178:11;:17;31190:4;31178:17;;;;;;;;;;;31144:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31219:9;:16;;;31214:729;;31290:1;31264:28;;:9;:14;;;:28;;;31260:101;;31328:9;31321:16;;;;;;31260:101;31663:261;31670:4;31663:261;;;31703:6;;;;;;;;31748:11;:17;31760:4;31748:17;;;;;;;;;;;31736:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31822:1;31796:28;;:9;:14;;;:28;;;31792:109;;31864:9;31857:16;;;;;;31792:109;31663:261;;;31214:729;31099:859;;31070:888;31986:31;;;;;;;;;;;;;;30914:1111;;;;:::o;5984:191::-;6058:16;6077:6;;;;;;;;;;;6058:25;;6103:8;6094:6;;:17;;;;;;;;;;;;;;;;;;6158:8;6127:40;;6148:8;6127:40;;;;;;;;;;;;5984:191;;:::o;36037:104::-;36106:27;36116:2;36120:8;36106:27;;;;;;;;;;;;:9;:27::i;:::-;36037:104;;:::o;42475:2408::-;42555:35;42593:21;42606:7;42593:12;:21::i;:::-;42555:59;;42627:12;42642:13;:18;;;42627:33;;42677:13;42673:290;;;42707:22;42749:4;42733:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;42774:36;42791:4;42797:12;:10;:12::i;:::-;42774:16;:36::i;:::-;42733:77;:134;;;;42855:12;:10;:12::i;:::-;42831:36;;:20;42843:7;42831:11;:20::i;:::-;:36;;;42733:134;42707:161;;42890:17;42885:66;;42916:35;;;;;;;;;;;;;;42885:66;42673:290;;42975:51;42997:4;43011:1;43015:7;43024:1;42975:21;:51::i;:::-;43091:35;43108:1;43112:7;43121:4;43091:8;:35::i;:::-;43422:31;43456:12;:18;43469:4;43456:18;;;;;;;;;;;;;;;43422:52;;43512:1;43489:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43556:1;43528:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43656:31;43690:11;:20;43702:7;43690:20;;;;;;;;;;;43656:54;;43741:4;43725:8;:13;;;:20;;;;;;;;;;;;;;;;;;43793:15;43760:8;:23;;;:49;;;;;;;;;;;;;;;;;;43842:4;43824:8;:15;;;:22;;;;;;;;;;;;;;;;;;44094:19;44126:1;44116:7;:11;44094:33;;44142:31;44176:11;:24;44188:11;44176:24;;;;;;;;;;;44142:58;;44244:1;44219:27;;:8;:13;;;;;;;;;;;;:27;;;44215:384;;;44429:13;;44414:11;:28;44410:174;;44483:4;44467:8;:13;;;:20;;;;;;;;;;;;;;;;;;44536:13;:28;;;44510:8;:23;;;:54;;;;;;;;;;;;;;;;;;44410:174;44215:384;42475:2408;;;;44654:7;44650:1;44627:35;;44636:4;44627:35;;;;;;;;;;;;44673:50;44694:4;44708:1;44712:7;44721:1;44673:20;:50::i;:::-;44850:12;;:14;;;;;;;;;;;;;42475:2408;;;;:::o;28809:283::-;28856:7;29058:15;:13;:15::i;:::-;29042:13;;:31;29035:38;;28809:283;:::o;7415:326::-;7475:4;7732:1;7710:7;:19;;;:23;7703:30;;7415:326;;;:::o;45689:667::-;45852:4;45889:2;45873:36;;;45910:12;:10;:12::i;:::-;45924:4;45930:7;45939:5;45873:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45869:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46124:1;46107:6;:13;:18;46103:235;;;46153:40;;;;;;;;;;;;;;46103:235;46296:6;46290:13;46281:6;46277:2;46273:15;46266:38;45869:480;46002:45;;;45992:55;;;:6;:55;;;;45985:62;;;45689:667;;;;;;:::o;30311:112::-;30366:6;30392:12;:19;30405:5;30392:19;;;;;;;;;;;;;;;:23;;;;;;;;;;;;30385:30;;30311:112;;;:::o;49084:100::-;49136:13;49169:7;49162:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49084:100;:::o;1000:723::-;1056:13;1286:1;1277:5;:10;1273:53;;;1304:10;;;;;;;;;;;;;;;;;;;;;1273:53;1336:12;1351:5;1336:20;;1367:14;1392:78;1407:1;1399:4;:9;1392:78;;1425:8;;;;;:::i;:::-;;;;1456:2;1448:10;;;;;:::i;:::-;;;1392:78;;;1480:19;1512:6;1502:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1480:39;;1530:154;1546:1;1537:5;:10;1530:154;;1574:1;1564:11;;;;;:::i;:::-;;;1641:2;1633:5;:10;;;;:::i;:::-;1620:2;:24;;;;:::i;:::-;1607:39;;1590:6;1597;1590:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1670:2;1661:11;;;;;:::i;:::-;;;1530:154;;;1708:6;1694:21;;;;;1000:723;;;;:::o;29821:137::-;29882:7;29917:12;:19;29930:5;29917:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;29909:41;;29902:48;;29821:137;;;:::o;47004:159::-;;;;;:::o;47822:158::-;;;;;:::o;36514:1749::-;36637:20;36660:13;;36637:36;;36702:1;36688:16;;:2;:16;;;36684:48;;;36713:19;;;;;;;;;;;;;;36684:48;36759:1;36747:8;:13;36743:44;;;36769:18;;;;;;;;;;;;;;36743:44;36800:61;36830:1;36834:2;36838:12;36852:8;36800:21;:61::i;:::-;37173:8;37138:12;:16;37151:2;37138:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37237:8;37197:12;:16;37210:2;37197:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37296:2;37263:11;:25;37275:12;37263:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37363:15;37313:11;:25;37325:12;37313:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37396:20;37419:12;37396:35;;37446:11;37475:8;37460:12;:23;37446:37;;37504:15;:2;:13;;;:15::i;:::-;37500:631;;;37540:313;37596:12;37592:2;37571:38;;37588:1;37571:38;;;;;;;;;;;;37637:69;37676:1;37680:2;37684:14;;;;;;37700:5;37637:30;:69::i;:::-;37632:174;;37742:40;;;;;;;;;;;;;;37632:174;37848:3;37833:12;:18;37540:313;;37934:12;37917:13;;:29;37913:43;;37948:8;;;37913:43;37500:631;;;37997:119;38053:14;;;;;;38049:2;38028:40;;38045:1;38028:40;;;;;;;;;;;;38111:3;38096:12;:18;37997:119;;37500:631;38161:12;38145:13;:28;;;;36514:1749;;38195:60;38224:1;38228:2;38232:12;38246:8;38195:20;:60::i;:::-;36514:1749;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:137::-;2054:5;2092:6;2079:20;2070:29;;2108:32;2134:5;2108:32;:::i;:::-;2060:86;;;;:::o;2152:262::-;2211:6;2260:2;2248:9;2239:7;2235:23;2231:32;2228:2;;;2276:1;2273;2266:12;2228:2;2319:1;2344:53;2389:7;2380:6;2369:9;2365:22;2344:53;:::i;:::-;2334:63;;2290:117;2218:196;;;;:::o;2420:407::-;2488:6;2496;2545:2;2533:9;2524:7;2520:23;2516:32;2513:2;;;2561:1;2558;2551:12;2513:2;2604:1;2629:53;2674:7;2665:6;2654:9;2650:22;2629:53;:::i;:::-;2619:63;;2575:117;2731:2;2757:53;2802:7;2793:6;2782:9;2778:22;2757:53;:::i;:::-;2747:63;;2702:118;2503:324;;;;;:::o;2833:552::-;2910:6;2918;2926;2975:2;2963:9;2954:7;2950:23;2946:32;2943:2;;;2991:1;2988;2981:12;2943:2;3034:1;3059:53;3104:7;3095:6;3084:9;3080:22;3059:53;:::i;:::-;3049:63;;3005:117;3161:2;3187:53;3232:7;3223:6;3212:9;3208:22;3187:53;:::i;:::-;3177:63;;3132:118;3289:2;3315:53;3360:7;3351:6;3340:9;3336:22;3315:53;:::i;:::-;3305:63;;3260:118;2933:452;;;;;:::o;3391:809::-;3486:6;3494;3502;3510;3559:3;3547:9;3538:7;3534:23;3530:33;3527:2;;;3576:1;3573;3566:12;3527:2;3619:1;3644:53;3689:7;3680:6;3669:9;3665:22;3644:53;:::i;:::-;3634:63;;3590:117;3746:2;3772:53;3817:7;3808:6;3797:9;3793:22;3772:53;:::i;:::-;3762:63;;3717:118;3874:2;3900:53;3945:7;3936:6;3925:9;3921:22;3900:53;:::i;:::-;3890:63;;3845:118;4030:2;4019:9;4015:18;4002:32;4061:18;4053:6;4050:30;4047:2;;;4093:1;4090;4083:12;4047:2;4121:62;4175:7;4166:6;4155:9;4151:22;4121:62;:::i;:::-;4111:72;;3973:220;3517:683;;;;;;;:::o;4206:401::-;4271:6;4279;4328:2;4316:9;4307:7;4303:23;4299:32;4296:2;;;4344:1;4341;4334:12;4296:2;4387:1;4412:53;4457:7;4448:6;4437:9;4433:22;4412:53;:::i;:::-;4402:63;;4358:117;4514:2;4540:50;4582:7;4573:6;4562:9;4558:22;4540:50;:::i;:::-;4530:60;;4485:115;4286:321;;;;;:::o;4613:407::-;4681:6;4689;4738:2;4726:9;4717:7;4713:23;4709:32;4706:2;;;4754:1;4751;4744:12;4706:2;4797:1;4822:53;4867:7;4858:6;4847:9;4843:22;4822:53;:::i;:::-;4812:63;;4768:117;4924:2;4950:53;4995:7;4986:6;4975:9;4971:22;4950:53;:::i;:::-;4940:63;;4895:118;4696:324;;;;;:::o;5026:405::-;5093:6;5101;5150:2;5138:9;5129:7;5125:23;5121:32;5118:2;;;5166:1;5163;5156:12;5118:2;5209:1;5234:53;5279:7;5270:6;5259:9;5255:22;5234:53;:::i;:::-;5224:63;;5180:117;5336:2;5362:52;5406:7;5397:6;5386:9;5382:22;5362:52;:::i;:::-;5352:62;;5307:117;5108:323;;;;;:::o;5437:260::-;5495:6;5544:2;5532:9;5523:7;5519:23;5515:32;5512:2;;;5560:1;5557;5550:12;5512:2;5603:1;5628:52;5672:7;5663:6;5652:9;5648:22;5628:52;:::i;:::-;5618:62;;5574:116;5502:195;;;;:::o;5703:282::-;5772:6;5821:2;5809:9;5800:7;5796:23;5792:32;5789:2;;;5837:1;5834;5827:12;5789:2;5880:1;5905:63;5960:7;5951:6;5940:9;5936:22;5905:63;:::i;:::-;5895:73;;5851:127;5779:206;;;;:::o;5991:375::-;6060:6;6109:2;6097:9;6088:7;6084:23;6080:32;6077:2;;;6125:1;6122;6115:12;6077:2;6196:1;6185:9;6181:17;6168:31;6226:18;6218:6;6215:30;6212:2;;;6258:1;6255;6248:12;6212:2;6286:63;6341:7;6332:6;6321:9;6317:22;6286:63;:::i;:::-;6276:73;;6139:220;6067:299;;;;:::o;6372:262::-;6431:6;6480:2;6468:9;6459:7;6455:23;6451:32;6448:2;;;6496:1;6493;6486:12;6448:2;6539:1;6564:53;6609:7;6600:6;6589:9;6585:22;6564:53;:::i;:::-;6554:63;;6510:117;6438:196;;;;:::o;6640:401::-;6705:6;6713;6762:2;6750:9;6741:7;6737:23;6733:32;6730:2;;;6778:1;6775;6768:12;6730:2;6821:1;6846:53;6891:7;6882:6;6871:9;6867:22;6846:53;:::i;:::-;6836:63;;6792:117;6948:2;6974:50;7016:7;7007:6;6996:9;6992:22;6974:50;:::i;:::-;6964:60;;6919:115;6720:321;;;;;:::o;7047:118::-;7134:24;7152:5;7134:24;:::i;:::-;7129:3;7122:37;7112:53;;:::o;7171:109::-;7252:21;7267:5;7252:21;:::i;:::-;7247:3;7240:34;7230:50;;:::o;7286:360::-;7372:3;7400:38;7432:5;7400:38;:::i;:::-;7454:70;7517:6;7512:3;7454:70;:::i;:::-;7447:77;;7533:52;7578:6;7573:3;7566:4;7559:5;7555:16;7533:52;:::i;:::-;7610:29;7632:6;7610:29;:::i;:::-;7605:3;7601:39;7594:46;;7376:270;;;;;:::o;7652:364::-;7740:3;7768:39;7801:5;7768:39;:::i;:::-;7823:71;7887:6;7882:3;7823:71;:::i;:::-;7816:78;;7903:52;7948:6;7943:3;7936:4;7929:5;7925:16;7903:52;:::i;:::-;7980:29;8002:6;7980:29;:::i;:::-;7975:3;7971:39;7964:46;;7744:272;;;;;:::o;8022:377::-;8128:3;8156:39;8189:5;8156:39;:::i;:::-;8211:89;8293:6;8288:3;8211:89;:::i;:::-;8204:96;;8309:52;8354:6;8349:3;8342:4;8335:5;8331:16;8309:52;:::i;:::-;8386:6;8381:3;8377:16;8370:23;;8132:267;;;;;:::o;8405:366::-;8547:3;8568:67;8632:2;8627:3;8568:67;:::i;:::-;8561:74;;8644:93;8733:3;8644:93;:::i;:::-;8762:2;8757:3;8753:12;8746:19;;8551:220;;;:::o;8777:366::-;8919:3;8940:67;9004:2;8999:3;8940:67;:::i;:::-;8933:74;;9016:93;9105:3;9016:93;:::i;:::-;9134:2;9129:3;9125:12;9118:19;;8923:220;;;:::o;9149:366::-;9291:3;9312:67;9376:2;9371:3;9312:67;:::i;:::-;9305:74;;9388:93;9477:3;9388:93;:::i;:::-;9506:2;9501:3;9497:12;9490:19;;9295:220;;;:::o;9521:366::-;9663:3;9684:67;9748:2;9743:3;9684:67;:::i;:::-;9677:74;;9760:93;9849:3;9760:93;:::i;:::-;9878:2;9873:3;9869:12;9862:19;;9667:220;;;:::o;9893:366::-;10035:3;10056:67;10120:2;10115:3;10056:67;:::i;:::-;10049:74;;10132:93;10221:3;10132:93;:::i;:::-;10250:2;10245:3;10241:12;10234:19;;10039:220;;;:::o;10265:400::-;10425:3;10446:84;10528:1;10523:3;10446:84;:::i;:::-;10439:91;;10539:93;10628:3;10539:93;:::i;:::-;10657:1;10652:3;10648:11;10641:18;;10429:236;;;:::o;10671:366::-;10813:3;10834:67;10898:2;10893:3;10834:67;:::i;:::-;10827:74;;10910:93;10999:3;10910:93;:::i;:::-;11028:2;11023:3;11019:12;11012:19;;10817:220;;;:::o;11043:398::-;11202:3;11223:83;11304:1;11299:3;11223:83;:::i;:::-;11216:90;;11315:93;11404:3;11315:93;:::i;:::-;11433:1;11428:3;11424:11;11417:18;;11206:235;;;:::o;11447:366::-;11589:3;11610:67;11674:2;11669:3;11610:67;:::i;:::-;11603:74;;11686:93;11775:3;11686:93;:::i;:::-;11804:2;11799:3;11795:12;11788:19;;11593:220;;;:::o;11819:366::-;11961:3;11982:67;12046:2;12041:3;11982:67;:::i;:::-;11975:74;;12058:93;12147:3;12058:93;:::i;:::-;12176:2;12171:3;12167:12;12160:19;;11965:220;;;:::o;12191:118::-;12278:24;12296:5;12278:24;:::i;:::-;12273:3;12266:37;12256:53;;:::o;12315:115::-;12400:23;12417:5;12400:23;:::i;:::-;12395:3;12388:36;12378:52;;:::o;12436:701::-;12717:3;12739:95;12830:3;12821:6;12739:95;:::i;:::-;12732:102;;12851:95;12942:3;12933:6;12851:95;:::i;:::-;12844:102;;12963:148;13107:3;12963:148;:::i;:::-;12956:155;;13128:3;13121:10;;12721:416;;;;;:::o;13143:379::-;13327:3;13349:147;13492:3;13349:147;:::i;:::-;13342:154;;13513:3;13506:10;;13331:191;;;:::o;13528:222::-;13621:4;13659:2;13648:9;13644:18;13636:26;;13672:71;13740:1;13729:9;13725:17;13716:6;13672:71;:::i;:::-;13626:124;;;;:::o;13756:640::-;13951:4;13989:3;13978:9;13974:19;13966:27;;14003:71;14071:1;14060:9;14056:17;14047:6;14003:71;:::i;:::-;14084:72;14152:2;14141:9;14137:18;14128:6;14084:72;:::i;:::-;14166;14234:2;14223:9;14219:18;14210:6;14166:72;:::i;:::-;14285:9;14279:4;14275:20;14270:2;14259:9;14255:18;14248:48;14313:76;14384:4;14375:6;14313:76;:::i;:::-;14305:84;;13956:440;;;;;;;:::o;14402:210::-;14489:4;14527:2;14516:9;14512:18;14504:26;;14540:65;14602:1;14591:9;14587:17;14578:6;14540:65;:::i;:::-;14494:118;;;;:::o;14618:313::-;14731:4;14769:2;14758:9;14754:18;14746:26;;14818:9;14812:4;14808:20;14804:1;14793:9;14789:17;14782:47;14846:78;14919:4;14910:6;14846:78;:::i;:::-;14838:86;;14736:195;;;;:::o;14937:419::-;15103:4;15141:2;15130:9;15126:18;15118:26;;15190:9;15184:4;15180:20;15176:1;15165:9;15161:17;15154:47;15218:131;15344:4;15218:131;:::i;:::-;15210:139;;15108:248;;;:::o;15362:419::-;15528:4;15566:2;15555:9;15551:18;15543:26;;15615:9;15609:4;15605:20;15601:1;15590:9;15586:17;15579:47;15643:131;15769:4;15643:131;:::i;:::-;15635:139;;15533:248;;;:::o;15787:419::-;15953:4;15991:2;15980:9;15976:18;15968:26;;16040:9;16034:4;16030:20;16026:1;16015:9;16011:17;16004:47;16068:131;16194:4;16068:131;:::i;:::-;16060:139;;15958:248;;;:::o;16212:419::-;16378:4;16416:2;16405:9;16401:18;16393:26;;16465:9;16459:4;16455:20;16451:1;16440:9;16436:17;16429:47;16493:131;16619:4;16493:131;:::i;:::-;16485:139;;16383:248;;;:::o;16637:419::-;16803:4;16841:2;16830:9;16826:18;16818:26;;16890:9;16884:4;16880:20;16876:1;16865:9;16861:17;16854:47;16918:131;17044:4;16918:131;:::i;:::-;16910:139;;16808:248;;;:::o;17062:419::-;17228:4;17266:2;17255:9;17251:18;17243:26;;17315:9;17309:4;17305:20;17301:1;17290:9;17286:17;17279:47;17343:131;17469:4;17343:131;:::i;:::-;17335:139;;17233:248;;;:::o;17487:419::-;17653:4;17691:2;17680:9;17676:18;17668:26;;17740:9;17734:4;17730:20;17726:1;17715:9;17711:17;17704:47;17768:131;17894:4;17768:131;:::i;:::-;17760:139;;17658:248;;;:::o;17912:419::-;18078:4;18116:2;18105:9;18101:18;18093:26;;18165:9;18159:4;18155:20;18151:1;18140:9;18136:17;18129:47;18193:131;18319:4;18193:131;:::i;:::-;18185:139;;18083:248;;;:::o;18337:222::-;18430:4;18468:2;18457:9;18453:18;18445:26;;18481:71;18549:1;18538:9;18534:17;18525:6;18481:71;:::i;:::-;18435:124;;;;:::o;18565:218::-;18656:4;18694:2;18683:9;18679:18;18671:26;;18707:69;18773:1;18762:9;18758:17;18749:6;18707:69;:::i;:::-;18661:122;;;;:::o;18789:129::-;18823:6;18850:20;;:::i;:::-;18840:30;;18879:33;18907:4;18899:6;18879:33;:::i;:::-;18830:88;;;:::o;18924:75::-;18957:6;18990:2;18984:9;18974:19;;18964:35;:::o;19005:307::-;19066:4;19156:18;19148:6;19145:30;19142:2;;;19178:18;;:::i;:::-;19142:2;19216:29;19238:6;19216:29;:::i;:::-;19208:37;;19300:4;19294;19290:15;19282:23;;19071:241;;;:::o;19318:308::-;19380:4;19470:18;19462:6;19459:30;19456:2;;;19492:18;;:::i;:::-;19456:2;19530:29;19552:6;19530:29;:::i;:::-;19522:37;;19614:4;19608;19604:15;19596:23;;19385:241;;;:::o;19632:98::-;19683:6;19717:5;19711:12;19701:22;;19690:40;;;:::o;19736:99::-;19788:6;19822:5;19816:12;19806:22;;19795:40;;;:::o;19841:168::-;19924:11;19958:6;19953:3;19946:19;19998:4;19993:3;19989:14;19974:29;;19936:73;;;;:::o;20015:147::-;20116:11;20153:3;20138:18;;20128:34;;;;:::o;20168:169::-;20252:11;20286:6;20281:3;20274:19;20326:4;20321:3;20317:14;20302:29;;20264:73;;;;:::o;20343:148::-;20445:11;20482:3;20467:18;;20457:34;;;;:::o;20497:305::-;20537:3;20556:20;20574:1;20556:20;:::i;:::-;20551:25;;20590:20;20608:1;20590:20;:::i;:::-;20585:25;;20744:1;20676:66;20672:74;20669:1;20666:81;20663:2;;;20750:18;;:::i;:::-;20663:2;20794:1;20791;20787:9;20780:16;;20541:261;;;;:::o;20808:185::-;20848:1;20865:20;20883:1;20865:20;:::i;:::-;20860:25;;20899:20;20917:1;20899:20;:::i;:::-;20894:25;;20938:1;20928:2;;20943:18;;:::i;:::-;20928:2;20985:1;20982;20978:9;20973:14;;20850:143;;;;:::o;20999:348::-;21039:7;21062:20;21080:1;21062:20;:::i;:::-;21057:25;;21096:20;21114:1;21096:20;:::i;:::-;21091:25;;21284:1;21216:66;21212:74;21209:1;21206:81;21201:1;21194:9;21187:17;21183:105;21180:2;;;21291:18;;:::i;:::-;21180:2;21339:1;21336;21332:9;21321:20;;21047:300;;;;:::o;21353:191::-;21393:4;21413:20;21431:1;21413:20;:::i;:::-;21408:25;;21447:20;21465:1;21447:20;:::i;:::-;21442:25;;21486:1;21483;21480:8;21477:2;;;21491:18;;:::i;:::-;21477:2;21536:1;21533;21529:9;21521:17;;21398:146;;;;:::o;21550:96::-;21587:7;21616:24;21634:5;21616:24;:::i;:::-;21605:35;;21595:51;;;:::o;21652:90::-;21686:7;21729:5;21722:13;21715:21;21704:32;;21694:48;;;:::o;21748:149::-;21784:7;21824:66;21817:5;21813:78;21802:89;;21792:105;;;:::o;21903:126::-;21940:7;21980:42;21973:5;21969:54;21958:65;;21948:81;;;:::o;22035:77::-;22072:7;22101:5;22090:16;;22080:32;;;:::o;22118:101::-;22154:7;22194:18;22187:5;22183:30;22172:41;;22162:57;;;:::o;22225:154::-;22309:6;22304:3;22299;22286:30;22371:1;22362:6;22357:3;22353:16;22346:27;22276:103;;;:::o;22385:307::-;22453:1;22463:113;22477:6;22474:1;22471:13;22463:113;;;22562:1;22557:3;22553:11;22547:18;22543:1;22538:3;22534:11;22527:39;22499:2;22496:1;22492:10;22487:15;;22463:113;;;22594:6;22591:1;22588:13;22585:2;;;22674:1;22665:6;22660:3;22656:16;22649:27;22585:2;22434:258;;;;:::o;22698:320::-;22742:6;22779:1;22773:4;22769:12;22759:22;;22826:1;22820:4;22816:12;22847:18;22837:2;;22903:4;22895:6;22891:17;22881:27;;22837:2;22965;22957:6;22954:14;22934:18;22931:38;22928:2;;;22984:18;;:::i;:::-;22928:2;22749:269;;;;:::o;23024:281::-;23107:27;23129:4;23107:27;:::i;:::-;23099:6;23095:40;23237:6;23225:10;23222:22;23201:18;23189:10;23186:34;23183:62;23180:2;;;23248:18;;:::i;:::-;23180:2;23288:10;23284:2;23277:22;23067:238;;;:::o;23311:233::-;23350:3;23373:24;23391:5;23373:24;:::i;:::-;23364:33;;23419:66;23412:5;23409:77;23406:2;;;23489:18;;:::i;:::-;23406:2;23536:1;23529:5;23525:13;23518:20;;23354:190;;;:::o;23550:176::-;23582:1;23599:20;23617:1;23599:20;:::i;:::-;23594:25;;23633:20;23651:1;23633:20;:::i;:::-;23628:25;;23672:1;23662:2;;23677:18;;:::i;:::-;23662:2;23718:1;23715;23711:9;23706:14;;23584:142;;;;:::o;23732:180::-;23780:77;23777:1;23770:88;23877:4;23874:1;23867:15;23901:4;23898:1;23891:15;23918:180;23966:77;23963:1;23956:88;24063:4;24060:1;24053:15;24087:4;24084:1;24077:15;24104:180;24152:77;24149:1;24142:88;24249:4;24246:1;24239:15;24273:4;24270:1;24263:15;24290:180;24338:77;24335:1;24328:88;24435:4;24432:1;24425:15;24459:4;24456:1;24449:15;24476:102;24517:6;24568:2;24564:7;24559:2;24552:5;24548:14;24544:28;24534:38;;24524:54;;;:::o;24584:225::-;24724:34;24720:1;24712:6;24708:14;24701:58;24793:8;24788:2;24780:6;24776:15;24769:33;24690:119;:::o;24815:168::-;24955:20;24951:1;24943:6;24939:14;24932:44;24921:62;:::o;24989:245::-;25129:34;25125:1;25117:6;25113:14;25106:58;25198:28;25193:2;25185:6;25181:15;25174:53;25095:139;:::o;25240:179::-;25380:31;25376:1;25368:6;25364:14;25357:55;25346:73;:::o;25425:164::-;25565:16;25561:1;25553:6;25549:14;25542:40;25531:58;:::o;25595:155::-;25735:7;25731:1;25723:6;25719:14;25712:31;25701:49;:::o;25756:182::-;25896:34;25892:1;25884:6;25880:14;25873:58;25862:76;:::o;25944:114::-;26050:8;:::o;26064:167::-;26204:19;26200:1;26192:6;26188:14;26181:43;26170:61;:::o;26237:166::-;26377:18;26373:1;26365:6;26361:14;26354:42;26343:60;:::o;26409:122::-;26482:24;26500:5;26482:24;:::i;:::-;26475:5;26472:35;26462:2;;26521:1;26518;26511:12;26462:2;26452:79;:::o;26537:116::-;26607:21;26622:5;26607:21;:::i;:::-;26600:5;26597:32;26587:2;;26643:1;26640;26633:12;26587:2;26577:76;:::o;26659:120::-;26731:23;26748:5;26731:23;:::i;:::-;26724:5;26721:34;26711:2;;26769:1;26766;26759:12;26711:2;26701:78;:::o;26785:122::-;26858:24;26876:5;26858:24;:::i;:::-;26851:5;26848:35;26838:2;;26897:1;26894;26887:12;26838:2;26828:79;:::o;26913:120::-;26985:23;27002:5;26985:23;:::i;:::-;26978:5;26975:34;26965:2;;27023:1;27020;27013:12;26965:2;26955:78;:::o
Swarm Source
ipfs://f926ea9699afcce74320e592ece5470e17c83cbdeab691fb114d833dd6838627
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.