ERC-721
Overview
Max Total Supply
1,000 NotTrippinApeTribe
Holders
628
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 NotTrippinApeTribeLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NotTrippinApeTribe
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-24 */ /** *Submitted for verification at Etherscan.io on 2022-02-23 */ // 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 v4.4.1 (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 `IERC721.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 v4.4.1 (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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // 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: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 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**128 - 1 (max value of uint128). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; // 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; } // Compiler will pack the following // _currentIndex and _burnCounter into a single 256bit word. // The tokenId of the next token to be minted. uint128 internal _currentIndex; // The number of tokens burned. uint128 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_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex times unchecked { return _currentIndex - _burnCounter; } } /** * @dev See {IERC721Enumerable-tokenByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenByIndex(uint256 index) public view override returns (uint256) { uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (!ownership.burned) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert TokenIndexOutOfBounds(); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds(); uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } // Execution should never reach this point. revert(); } /** * @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 || interfaceId == type(IERC721Enumerable).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); } function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * 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 (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())) : ''; } /** * @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 && !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 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 (!_checkOnERC721Received(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 tokenId < _currentIndex && !_ownerships[tokenId].burned; } 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 { _mint(to, quantity, _data, true); } /** * @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, bytes memory _data, bool safe ) 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 > 3.4e38 (2**128) - 1 // updatedIndex overflows if _currentIndex + quantity > 3.4e38 (2**128) - 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; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) { revert TransferToNonERC721ReceiverImplementer(); } updatedIndex++; } _currentIndex = uint128(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); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // 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**128. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].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; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // 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**128. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].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; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, 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 address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @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 {} } pragma solidity ^0.8.7; contract NotTrippinApeTribe is ERC721A, Ownable { uint256 constant public MAX_MINT = 10000; uint256 constant public MAX_FREE_MINT = 1000; uint256 constant public MAX_MINT_PER_TX = 3; uint256 constant public MAX_FREE_MINT_PER_TX = 1; uint256 public cost = 0.02 ether; string public baseURI = ""; string public baseExtension = ".json"; bool public paused; constructor() ERC721A("Not Trippin' Ape Tribe", "NotTrippinApeTribe") {} function Mint(uint256 quantity) external payable { require(!paused, "Sale is currently paused."); require(quantity > 0, "Mint quantity less than 0."); require(totalSupply() + quantity <= MAX_MINT, "Cannot exceed max mint amount."); require(quantity <= MAX_MINT_PER_TX, "Cannot exeeds 3 quantity per tx."); require(msg.value >= quantity * cost, "Not enough ETHER sent."); _safeMint(msg.sender, quantity); } function FreeMint(uint256 quantity) external payable { require(!paused, "Sale is currently paused."); require(quantity <= MAX_FREE_MINT_PER_TX, "Cannot exeeds 1 quantity per tx."); require(totalSupply() + quantity <= MAX_FREE_MINT, "Cannot exceed max free mint amount."); _safeMint(msg.sender, quantity); } function setCost(uint256 _newCost) external onlyOwner() { cost = _newCost; } function setBaseExtension(uint256 _newCost) external onlyOwner() { cost = _newCost; } function setBaseURI(string calldata uri) external onlyOwner { baseURI = uri; } function toggleSale() external onlyOwner { paused = !paused; } function _baseURI() internal view override returns (string memory) { return baseURI; } function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","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":"uint256","name":"quantity","type":"uint256"}],"name":"FreeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"MAX_FREE_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FREE_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_TX","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_newCost","type":"uint256"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266470de4df82000060085560405180602001604052806000815250600990805190602001906200003692919062000227565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90805190602001906200008492919062000227565b503480156200009257600080fd5b506040518060400160405280601681526020017f4e6f74205472697070696e2720417065205472696265000000000000000000008152506040518060400160405280601281526020017f4e6f745472697070696e4170655472696265000000000000000000000000000081525081600190805190602001906200011792919062000227565b5080600290805190602001906200013092919062000227565b50505062000153620001476200015960201b60201c565b6200016160201b60201c565b6200033c565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023590620002d7565b90600052602060002090601f016020900481019282620002595760008555620002a5565b82601f106200027457805160ff1916838001178555620002a5565b82800160010185558215620002a5579182015b82811115620002a457825182559160200191906001019062000287565b5b509050620002b49190620002b8565b5090565b5b80821115620002d3576000816000905550600101620002b9565b5090565b60006002820490506001821680620002f057607f821691505b602082108114156200030757620003066200030d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613d29806200034c6000396000f3fe6080604052600436106101f95760003560e01c80636352211e1161010d5780639cc2374c116100a0578063c66828621161006f578063c6682862146106df578063c87b56dd1461070a578063e985e9c514610747578063f0292a0314610784578063f2fde38b146107af576101f9565b80639cc2374c14610648578063a22cb46514610671578063b88d4fde1461069a578063bdfaa084146106c3576101f9565b80637d8966e4116100dc5780637d8966e4146105b05780638da5cb5b146105c75780638ecad721146105f257806395d89b411461061d576101f9565b80636352211e146104f45780636c0360eb1461053157806370a082311461055c578063715018a614610599576101f9565b80632f745c591161019057806342842e0e1161015f57806342842e0e1461041157806344a0d68a1461043a5780634f6ccce71461046357806355f804b3146104a05780635c975abb146104c9576101f9565b80632f745c59146103675780633748cb19146103a45780633ccfd60b146103cf57806341cda203146103e6576101f9565b8063095ea7b3116101cc578063095ea7b3146102bf57806313faede6146102e857806318160ddd1461031357806323b872dd1461033e576101f9565b806301ffc9a7146101fe57806306fdde031461023b5780630788370314610266578063081812fc14610282575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061319d565b6107d8565b6040516102329190613507565b60405180910390f35b34801561024757600080fd5b50610250610922565b60405161025d9190613522565b60405180910390f35b610280600480360381019061027b9190613244565b6109b4565b005b34801561028e57600080fd5b506102a960048036038101906102a49190613244565b610b3f565b6040516102b691906134a0565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e1919061315d565b610bbb565b005b3480156102f457600080fd5b506102fd610cc6565b60405161030a9190613664565b60405180910390f35b34801561031f57600080fd5b50610328610ccc565b6040516103359190613664565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190613047565b610d21565b005b34801561037357600080fd5b5061038e6004803603810190610389919061315d565b610d31565b60405161039b9190613664565b60405180910390f35b3480156103b057600080fd5b506103b9610f38565b6040516103c69190613664565b60405180910390f35b3480156103db57600080fd5b506103e4610f3d565b005b3480156103f257600080fd5b506103fb611009565b6040516104089190613664565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613047565b61100f565b005b34801561044657600080fd5b50610461600480360381019061045c9190613244565b61102f565b005b34801561046f57600080fd5b5061048a60048036038101906104859190613244565b6110b5565b6040516104979190613664565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c291906131f7565b611226565b005b3480156104d557600080fd5b506104de6112b8565b6040516104eb9190613507565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613244565b6112cb565b60405161052891906134a0565b60405180910390f35b34801561053d57600080fd5b506105466112e1565b6040516105539190613522565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190612fda565b61136f565b6040516105909190613664565b60405180910390f35b3480156105a557600080fd5b506105ae61143f565b005b3480156105bc57600080fd5b506105c56114c7565b005b3480156105d357600080fd5b506105dc61156f565b6040516105e991906134a0565b60405180910390f35b3480156105fe57600080fd5b50610607611599565b6040516106149190613664565b60405180910390f35b34801561062957600080fd5b5061063261159e565b60405161063f9190613522565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190613244565b611630565b005b34801561067d57600080fd5b506106986004803603810190610693919061311d565b6116b6565b005b3480156106a657600080fd5b506106c160048036038101906106bc919061309a565b61182e565b005b6106dd60048036038101906106d89190613244565b611881565b005b3480156106eb57600080fd5b506106f4611979565b6040516107019190613522565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190613244565b611a07565b60405161073e9190613522565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613007565b611aa6565b60405161077b9190613507565b60405180910390f35b34801561079057600080fd5b50610799611b3a565b6040516107a69190613664565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190612fda565b611b40565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090b57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091b575061091a82611c38565b5b9050919050565b606060018054610931906138e3565b80601f016020809104026020016040519081016040528092919081815260200182805461095d906138e3565b80156109aa5780601f1061097f576101008083540402835291602001916109aa565b820191906000526020600020905b81548152906001019060200180831161098d57829003601f168201915b5050505050905090565b600b60009054906101000a900460ff1615610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb90613564565b60405180910390fd5b60008111610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90613644565b60405180910390fd5b61271081610a53610ccc565b610a5d9190613718565b1115610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a95906135a4565b60405180910390fd5b6003811115610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad9906135e4565b60405180910390fd5b60085481610af0919061379f565b341015610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990613584565b60405180910390fd5b610b3c3382611ca2565b50565b6000610b4a82611cc0565b610b80576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc6826112cb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c2e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4d611d28565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c7f5750610c7d81610c78611d28565b611aa6565b155b15610cb6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc1838383611d30565b505050565b60085481565b60008060109054906101000a90046fffffffffffffffffffffffffffffffff1660008054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b610d2c838383611de2565b505050565b6000610d3c8361136f565b8210610d74576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b83811015610f2c576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115610e8b5750610f1f565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ecb57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f1d5786841415610f14578195505050505050610f32565b83806001019450505b505b8080600101915050610dae565b50600080fd5b92915050565b600181565b610f45611d28565b73ffffffffffffffffffffffffffffffffffffffff16610f6361156f565b73ffffffffffffffffffffffffffffffffffffffff1614610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb090613604565b60405180910390fd5b610fc161156f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611006573d6000803e3d6000fd5b50565b6103e881565b61102a8383836040518060200160405280600081525061182e565b505050565b611037611d28565b73ffffffffffffffffffffffffffffffffffffffff1661105561156f565b73ffffffffffffffffffffffffffffffffffffffff16146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290613604565b60405180910390fd5b8060088190555050565b60008060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b828110156111ee576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516111e057858314156111d75781945050505050611221565b82806001019350505b5080806001019150506110ed565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b61122e611d28565b73ffffffffffffffffffffffffffffffffffffffff1661124c61156f565b73ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990613604565b60405180910390fd5b8181600991906112b3929190612dc5565b505050565b600b60009054906101000a900460ff1681565b60006112d6826122ff565b600001519050919050565b600980546112ee906138e3565b80601f016020809104026020016040519081016040528092919081815260200182805461131a906138e3565b80156113675780601f1061133c57610100808354040283529160200191611367565b820191906000526020600020905b81548152906001019060200180831161134a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113d7576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611447611d28565b73ffffffffffffffffffffffffffffffffffffffff1661146561156f565b73ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613604565b60405180910390fd5b6114c560006125a7565b565b6114cf611d28565b73ffffffffffffffffffffffffffffffffffffffff166114ed61156f565b73ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90613604565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600381565b6060600280546115ad906138e3565b80601f01602080910402602001604051908101604052809291908181526020018280546115d9906138e3565b80156116265780601f106115fb57610100808354040283529160200191611626565b820191906000526020600020905b81548152906001019060200180831161160957829003601f168201915b5050505050905090565b611638611d28565b73ffffffffffffffffffffffffffffffffffffffff1661165661156f565b73ffffffffffffffffffffffffffffffffffffffff16146116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390613604565b60405180910390fd5b8060088190555050565b6116be611d28565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611723576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611730611d28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117dd611d28565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118229190613507565b60405180910390a35050565b611839848484611de2565b6118458484848461266d565b61187b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600b60009054906101000a900460ff16156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c890613564565b60405180910390fd5b6001811115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90613624565b60405180910390fd5b6103e881611921610ccc565b61192b9190613718565b111561196c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611963906135c4565b60405180910390fd5b6119763382611ca2565b50565b600a8054611986906138e3565b80601f01602080910402602001604051908101604052809291908181526020018280546119b2906138e3565b80156119ff5780601f106119d4576101008083540402835291602001916119ff565b820191906000526020600020905b8154815290600101906020018083116119e257829003601f168201915b505050505081565b6060611a1282611cc0565b611a48576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611a526127fb565b9050600081511415611a735760405180602001604052806000815250611a9e565b80611a7d8461288d565b604051602001611a8e92919061347c565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61271081565b611b48611d28565b73ffffffffffffffffffffffffffffffffffffffff16611b6661156f565b73ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390613604565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390613544565b60405180910390fd5b611c35816125a7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611cbc8282604051806020016040528060008152506129ee565b5050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015611d21575060036000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ded826122ff565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e14611d28565b73ffffffffffffffffffffffffffffffffffffffff161480611e475750611e468260000151611e41611d28565b611aa6565b5b80611e8c5750611e55611d28565b73ffffffffffffffffffffffffffffffffffffffff16611e7484610b3f565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611ec5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f2e576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f95576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa28585856001612a00565b611fb26000848460000151611d30565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561228f5760008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681101561228e5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122f88585856001612a06565b5050505050565b612307612e4b565b600082905060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612570576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161256e57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124525780925050506125a2565b5b60011561256d57818060019003925050600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125685780925050506125a2565b612453565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061268e8473ffffffffffffffffffffffffffffffffffffffff16612a0c565b156127ee578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126b7611d28565b8786866040518563ffffffff1660e01b81526004016126d994939291906134bb565b602060405180830381600087803b1580156126f357600080fd5b505af192505050801561272457506040513d601f19601f8201168201806040525081019061272191906131ca565b60015b61279e573d8060008114612754576040519150601f19603f3d011682016040523d82523d6000602084013e612759565b606091505b50600081511415612796576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127f3565b600190505b949350505050565b60606009805461280a906138e3565b80601f0160208091040260200160405190810160405280929190818152602001828054612836906138e3565b80156128835780601f1061285857610100808354040283529160200191612883565b820191906000526020600020905b81548152906001019060200180831161286657829003601f168201915b5050505050905090565b606060008214156128d5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129e9565b600082905060005b600082146129075780806128f090613946565b915050600a82612900919061376e565b91506128dd565b60008167ffffffffffffffff81111561292357612922613a7c565b5b6040519080825280601f01601f1916602001820160405280156129555781602001600182028036833780820191505090505b5090505b600085146129e25760018261296e91906137f9565b9150600a8561297d919061398f565b60306129899190613718565b60f81b81838151811061299f5761299e613a4d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129db919061376e565b9450612959565b8093505050505b919050565b6129fb8383836001612a2f565b505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612aca576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612b05576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b126000868387612a00565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612d7757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015612d2b5750612d29600088848861266d565b155b15612d62576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050612cb0565b50806000806101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050612dbe6000868387612a06565b5050505050565b828054612dd1906138e3565b90600052602060002090601f016020900481019282612df35760008555612e3a565b82601f10612e0c57803560ff1916838001178555612e3a565b82800160010185558215612e3a579182015b82811115612e39578235825591602001919060010190612e1e565b5b509050612e479190612e8e565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612ea7576000816000905550600101612e8f565b5090565b6000612ebe612eb9846136a4565b61367f565b905082815260208101848484011115612eda57612ed9613aba565b5b612ee58482856138a1565b509392505050565b600081359050612efc81613c97565b92915050565b600081359050612f1181613cae565b92915050565b600081359050612f2681613cc5565b92915050565b600081519050612f3b81613cc5565b92915050565b600082601f830112612f5657612f55613ab0565b5b8135612f66848260208601612eab565b91505092915050565b60008083601f840112612f8557612f84613ab0565b5b8235905067ffffffffffffffff811115612fa257612fa1613aab565b5b602083019150836001820283011115612fbe57612fbd613ab5565b5b9250929050565b600081359050612fd481613cdc565b92915050565b600060208284031215612ff057612fef613ac4565b5b6000612ffe84828501612eed565b91505092915050565b6000806040838503121561301e5761301d613ac4565b5b600061302c85828601612eed565b925050602061303d85828601612eed565b9150509250929050565b6000806000606084860312156130605761305f613ac4565b5b600061306e86828701612eed565b935050602061307f86828701612eed565b925050604061309086828701612fc5565b9150509250925092565b600080600080608085870312156130b4576130b3613ac4565b5b60006130c287828801612eed565b94505060206130d387828801612eed565b93505060406130e487828801612fc5565b925050606085013567ffffffffffffffff81111561310557613104613abf565b5b61311187828801612f41565b91505092959194509250565b6000806040838503121561313457613133613ac4565b5b600061314285828601612eed565b925050602061315385828601612f02565b9150509250929050565b6000806040838503121561317457613173613ac4565b5b600061318285828601612eed565b925050602061319385828601612fc5565b9150509250929050565b6000602082840312156131b3576131b2613ac4565b5b60006131c184828501612f17565b91505092915050565b6000602082840312156131e0576131df613ac4565b5b60006131ee84828501612f2c565b91505092915050565b6000806020838503121561320e5761320d613ac4565b5b600083013567ffffffffffffffff81111561322c5761322b613abf565b5b61323885828601612f6f565b92509250509250929050565b60006020828403121561325a57613259613ac4565b5b600061326884828501612fc5565b91505092915050565b61327a8161382d565b82525050565b6132898161383f565b82525050565b600061329a826136d5565b6132a481856136eb565b93506132b48185602086016138b0565b6132bd81613ac9565b840191505092915050565b60006132d3826136e0565b6132dd81856136fc565b93506132ed8185602086016138b0565b6132f681613ac9565b840191505092915050565b600061330c826136e0565b613316818561370d565b93506133268185602086016138b0565b80840191505092915050565b600061333f6026836136fc565b915061334a82613ada565b604082019050919050565b60006133626019836136fc565b915061336d82613b29565b602082019050919050565b60006133856016836136fc565b915061339082613b52565b602082019050919050565b60006133a8601e836136fc565b91506133b382613b7b565b602082019050919050565b60006133cb6023836136fc565b91506133d682613ba4565b604082019050919050565b60006133ee6020836136fc565b91506133f982613bf3565b602082019050919050565b60006134116020836136fc565b915061341c82613c1c565b602082019050919050565b60006134346020836136fc565b915061343f82613c45565b602082019050919050565b6000613457601a836136fc565b915061346282613c6e565b602082019050919050565b61347681613897565b82525050565b60006134888285613301565b91506134948284613301565b91508190509392505050565b60006020820190506134b56000830184613271565b92915050565b60006080820190506134d06000830187613271565b6134dd6020830186613271565b6134ea604083018561346d565b81810360608301526134fc818461328f565b905095945050505050565b600060208201905061351c6000830184613280565b92915050565b6000602082019050818103600083015261353c81846132c8565b905092915050565b6000602082019050818103600083015261355d81613332565b9050919050565b6000602082019050818103600083015261357d81613355565b9050919050565b6000602082019050818103600083015261359d81613378565b9050919050565b600060208201905081810360008301526135bd8161339b565b9050919050565b600060208201905081810360008301526135dd816133be565b9050919050565b600060208201905081810360008301526135fd816133e1565b9050919050565b6000602082019050818103600083015261361d81613404565b9050919050565b6000602082019050818103600083015261363d81613427565b9050919050565b6000602082019050818103600083015261365d8161344a565b9050919050565b6000602082019050613679600083018461346d565b92915050565b600061368961369a565b90506136958282613915565b919050565b6000604051905090565b600067ffffffffffffffff8211156136bf576136be613a7c565b5b6136c882613ac9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061372382613897565b915061372e83613897565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613763576137626139c0565b5b828201905092915050565b600061377982613897565b915061378483613897565b925082613794576137936139ef565b5b828204905092915050565b60006137aa82613897565b91506137b583613897565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137ee576137ed6139c0565b5b828202905092915050565b600061380482613897565b915061380f83613897565b925082821015613822576138216139c0565b5b828203905092915050565b600061383882613877565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138ce5780820151818401526020810190506138b3565b838111156138dd576000848401525b50505050565b600060028204905060018216806138fb57607f821691505b6020821081141561390f5761390e613a1e565b5b50919050565b61391e82613ac9565b810181811067ffffffffffffffff8211171561393d5761393c613a7c565b5b80604052505050565b600061395182613897565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613984576139836139c0565b5b600182019050919050565b600061399a82613897565b91506139a583613897565b9250826139b5576139b46139ef565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c652069732063757272656e746c79207061757365642e00000000000000600082015250565b7f4e6f7420656e6f7567682045544845522073656e742e00000000000000000000600082015250565b7f43616e6e6f7420657863656564206d6178206d696e7420616d6f756e742e0000600082015250565b7f43616e6e6f7420657863656564206d61782066726565206d696e7420616d6f7560008201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206578656564732033207175616e74697479207065722074782e600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f74206578656564732031207175616e74697479207065722074782e600082015250565b7f4d696e74207175616e74697479206c657373207468616e20302e000000000000600082015250565b613ca08161382d565b8114613cab57600080fd5b50565b613cb78161383f565b8114613cc257600080fd5b50565b613cce8161384b565b8114613cd957600080fd5b50565b613ce581613897565b8114613cf057600080fd5b5056fea2646970667358221220b61f645bcc2049620e9eb716853a0d43b2debfd363b300a1c9b5f86532a8a7dc64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101f95760003560e01c80636352211e1161010d5780639cc2374c116100a0578063c66828621161006f578063c6682862146106df578063c87b56dd1461070a578063e985e9c514610747578063f0292a0314610784578063f2fde38b146107af576101f9565b80639cc2374c14610648578063a22cb46514610671578063b88d4fde1461069a578063bdfaa084146106c3576101f9565b80637d8966e4116100dc5780637d8966e4146105b05780638da5cb5b146105c75780638ecad721146105f257806395d89b411461061d576101f9565b80636352211e146104f45780636c0360eb1461053157806370a082311461055c578063715018a614610599576101f9565b80632f745c591161019057806342842e0e1161015f57806342842e0e1461041157806344a0d68a1461043a5780634f6ccce71461046357806355f804b3146104a05780635c975abb146104c9576101f9565b80632f745c59146103675780633748cb19146103a45780633ccfd60b146103cf57806341cda203146103e6576101f9565b8063095ea7b3116101cc578063095ea7b3146102bf57806313faede6146102e857806318160ddd1461031357806323b872dd1461033e576101f9565b806301ffc9a7146101fe57806306fdde031461023b5780630788370314610266578063081812fc14610282575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061319d565b6107d8565b6040516102329190613507565b60405180910390f35b34801561024757600080fd5b50610250610922565b60405161025d9190613522565b60405180910390f35b610280600480360381019061027b9190613244565b6109b4565b005b34801561028e57600080fd5b506102a960048036038101906102a49190613244565b610b3f565b6040516102b691906134a0565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e1919061315d565b610bbb565b005b3480156102f457600080fd5b506102fd610cc6565b60405161030a9190613664565b60405180910390f35b34801561031f57600080fd5b50610328610ccc565b6040516103359190613664565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190613047565b610d21565b005b34801561037357600080fd5b5061038e6004803603810190610389919061315d565b610d31565b60405161039b9190613664565b60405180910390f35b3480156103b057600080fd5b506103b9610f38565b6040516103c69190613664565b60405180910390f35b3480156103db57600080fd5b506103e4610f3d565b005b3480156103f257600080fd5b506103fb611009565b6040516104089190613664565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613047565b61100f565b005b34801561044657600080fd5b50610461600480360381019061045c9190613244565b61102f565b005b34801561046f57600080fd5b5061048a60048036038101906104859190613244565b6110b5565b6040516104979190613664565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c291906131f7565b611226565b005b3480156104d557600080fd5b506104de6112b8565b6040516104eb9190613507565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613244565b6112cb565b60405161052891906134a0565b60405180910390f35b34801561053d57600080fd5b506105466112e1565b6040516105539190613522565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190612fda565b61136f565b6040516105909190613664565b60405180910390f35b3480156105a557600080fd5b506105ae61143f565b005b3480156105bc57600080fd5b506105c56114c7565b005b3480156105d357600080fd5b506105dc61156f565b6040516105e991906134a0565b60405180910390f35b3480156105fe57600080fd5b50610607611599565b6040516106149190613664565b60405180910390f35b34801561062957600080fd5b5061063261159e565b60405161063f9190613522565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190613244565b611630565b005b34801561067d57600080fd5b506106986004803603810190610693919061311d565b6116b6565b005b3480156106a657600080fd5b506106c160048036038101906106bc919061309a565b61182e565b005b6106dd60048036038101906106d89190613244565b611881565b005b3480156106eb57600080fd5b506106f4611979565b6040516107019190613522565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190613244565b611a07565b60405161073e9190613522565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613007565b611aa6565b60405161077b9190613507565b60405180910390f35b34801561079057600080fd5b50610799611b3a565b6040516107a69190613664565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190612fda565b611b40565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090b57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091b575061091a82611c38565b5b9050919050565b606060018054610931906138e3565b80601f016020809104026020016040519081016040528092919081815260200182805461095d906138e3565b80156109aa5780601f1061097f576101008083540402835291602001916109aa565b820191906000526020600020905b81548152906001019060200180831161098d57829003601f168201915b5050505050905090565b600b60009054906101000a900460ff1615610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb90613564565b60405180910390fd5b60008111610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90613644565b60405180910390fd5b61271081610a53610ccc565b610a5d9190613718565b1115610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a95906135a4565b60405180910390fd5b6003811115610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad9906135e4565b60405180910390fd5b60085481610af0919061379f565b341015610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990613584565b60405180910390fd5b610b3c3382611ca2565b50565b6000610b4a82611cc0565b610b80576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc6826112cb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c2e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4d611d28565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c7f5750610c7d81610c78611d28565b611aa6565b155b15610cb6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc1838383611d30565b505050565b60085481565b60008060109054906101000a90046fffffffffffffffffffffffffffffffff1660008054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b610d2c838383611de2565b505050565b6000610d3c8361136f565b8210610d74576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b83811015610f2c576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115610e8b5750610f1f565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ecb57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f1d5786841415610f14578195505050505050610f32565b83806001019450505b505b8080600101915050610dae565b50600080fd5b92915050565b600181565b610f45611d28565b73ffffffffffffffffffffffffffffffffffffffff16610f6361156f565b73ffffffffffffffffffffffffffffffffffffffff1614610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb090613604565b60405180910390fd5b610fc161156f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611006573d6000803e3d6000fd5b50565b6103e881565b61102a8383836040518060200160405280600081525061182e565b505050565b611037611d28565b73ffffffffffffffffffffffffffffffffffffffff1661105561156f565b73ffffffffffffffffffffffffffffffffffffffff16146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290613604565b60405180910390fd5b8060088190555050565b60008060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b828110156111ee576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516111e057858314156111d75781945050505050611221565b82806001019350505b5080806001019150506110ed565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b61122e611d28565b73ffffffffffffffffffffffffffffffffffffffff1661124c61156f565b73ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990613604565b60405180910390fd5b8181600991906112b3929190612dc5565b505050565b600b60009054906101000a900460ff1681565b60006112d6826122ff565b600001519050919050565b600980546112ee906138e3565b80601f016020809104026020016040519081016040528092919081815260200182805461131a906138e3565b80156113675780601f1061133c57610100808354040283529160200191611367565b820191906000526020600020905b81548152906001019060200180831161134a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113d7576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611447611d28565b73ffffffffffffffffffffffffffffffffffffffff1661146561156f565b73ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613604565b60405180910390fd5b6114c560006125a7565b565b6114cf611d28565b73ffffffffffffffffffffffffffffffffffffffff166114ed61156f565b73ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90613604565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600381565b6060600280546115ad906138e3565b80601f01602080910402602001604051908101604052809291908181526020018280546115d9906138e3565b80156116265780601f106115fb57610100808354040283529160200191611626565b820191906000526020600020905b81548152906001019060200180831161160957829003601f168201915b5050505050905090565b611638611d28565b73ffffffffffffffffffffffffffffffffffffffff1661165661156f565b73ffffffffffffffffffffffffffffffffffffffff16146116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390613604565b60405180910390fd5b8060088190555050565b6116be611d28565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611723576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611730611d28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117dd611d28565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118229190613507565b60405180910390a35050565b611839848484611de2565b6118458484848461266d565b61187b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600b60009054906101000a900460ff16156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c890613564565b60405180910390fd5b6001811115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90613624565b60405180910390fd5b6103e881611921610ccc565b61192b9190613718565b111561196c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611963906135c4565b60405180910390fd5b6119763382611ca2565b50565b600a8054611986906138e3565b80601f01602080910402602001604051908101604052809291908181526020018280546119b2906138e3565b80156119ff5780601f106119d4576101008083540402835291602001916119ff565b820191906000526020600020905b8154815290600101906020018083116119e257829003601f168201915b505050505081565b6060611a1282611cc0565b611a48576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611a526127fb565b9050600081511415611a735760405180602001604052806000815250611a9e565b80611a7d8461288d565b604051602001611a8e92919061347c565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61271081565b611b48611d28565b73ffffffffffffffffffffffffffffffffffffffff16611b6661156f565b73ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390613604565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390613544565b60405180910390fd5b611c35816125a7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611cbc8282604051806020016040528060008152506129ee565b5050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015611d21575060036000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ded826122ff565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e14611d28565b73ffffffffffffffffffffffffffffffffffffffff161480611e475750611e468260000151611e41611d28565b611aa6565b5b80611e8c5750611e55611d28565b73ffffffffffffffffffffffffffffffffffffffff16611e7484610b3f565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611ec5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f2e576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f95576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa28585856001612a00565b611fb26000848460000151611d30565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561228f5760008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681101561228e5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122f88585856001612a06565b5050505050565b612307612e4b565b600082905060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612570576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161256e57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124525780925050506125a2565b5b60011561256d57818060019003925050600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125685780925050506125a2565b612453565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061268e8473ffffffffffffffffffffffffffffffffffffffff16612a0c565b156127ee578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126b7611d28565b8786866040518563ffffffff1660e01b81526004016126d994939291906134bb565b602060405180830381600087803b1580156126f357600080fd5b505af192505050801561272457506040513d601f19601f8201168201806040525081019061272191906131ca565b60015b61279e573d8060008114612754576040519150601f19603f3d011682016040523d82523d6000602084013e612759565b606091505b50600081511415612796576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127f3565b600190505b949350505050565b60606009805461280a906138e3565b80601f0160208091040260200160405190810160405280929190818152602001828054612836906138e3565b80156128835780601f1061285857610100808354040283529160200191612883565b820191906000526020600020905b81548152906001019060200180831161286657829003601f168201915b5050505050905090565b606060008214156128d5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129e9565b600082905060005b600082146129075780806128f090613946565b915050600a82612900919061376e565b91506128dd565b60008167ffffffffffffffff81111561292357612922613a7c565b5b6040519080825280601f01601f1916602001820160405280156129555781602001600182028036833780820191505090505b5090505b600085146129e25760018261296e91906137f9565b9150600a8561297d919061398f565b60306129899190613718565b60f81b81838151811061299f5761299e613a4d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129db919061376e565b9450612959565b8093505050505b919050565b6129fb8383836001612a2f565b505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612aca576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612b05576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b126000868387612a00565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612d7757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015612d2b5750612d29600088848861266d565b155b15612d62576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050612cb0565b50806000806101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050612dbe6000868387612a06565b5050505050565b828054612dd1906138e3565b90600052602060002090601f016020900481019282612df35760008555612e3a565b82601f10612e0c57803560ff1916838001178555612e3a565b82800160010185558215612e3a579182015b82811115612e39578235825591602001919060010190612e1e565b5b509050612e479190612e8e565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612ea7576000816000905550600101612e8f565b5090565b6000612ebe612eb9846136a4565b61367f565b905082815260208101848484011115612eda57612ed9613aba565b5b612ee58482856138a1565b509392505050565b600081359050612efc81613c97565b92915050565b600081359050612f1181613cae565b92915050565b600081359050612f2681613cc5565b92915050565b600081519050612f3b81613cc5565b92915050565b600082601f830112612f5657612f55613ab0565b5b8135612f66848260208601612eab565b91505092915050565b60008083601f840112612f8557612f84613ab0565b5b8235905067ffffffffffffffff811115612fa257612fa1613aab565b5b602083019150836001820283011115612fbe57612fbd613ab5565b5b9250929050565b600081359050612fd481613cdc565b92915050565b600060208284031215612ff057612fef613ac4565b5b6000612ffe84828501612eed565b91505092915050565b6000806040838503121561301e5761301d613ac4565b5b600061302c85828601612eed565b925050602061303d85828601612eed565b9150509250929050565b6000806000606084860312156130605761305f613ac4565b5b600061306e86828701612eed565b935050602061307f86828701612eed565b925050604061309086828701612fc5565b9150509250925092565b600080600080608085870312156130b4576130b3613ac4565b5b60006130c287828801612eed565b94505060206130d387828801612eed565b93505060406130e487828801612fc5565b925050606085013567ffffffffffffffff81111561310557613104613abf565b5b61311187828801612f41565b91505092959194509250565b6000806040838503121561313457613133613ac4565b5b600061314285828601612eed565b925050602061315385828601612f02565b9150509250929050565b6000806040838503121561317457613173613ac4565b5b600061318285828601612eed565b925050602061319385828601612fc5565b9150509250929050565b6000602082840312156131b3576131b2613ac4565b5b60006131c184828501612f17565b91505092915050565b6000602082840312156131e0576131df613ac4565b5b60006131ee84828501612f2c565b91505092915050565b6000806020838503121561320e5761320d613ac4565b5b600083013567ffffffffffffffff81111561322c5761322b613abf565b5b61323885828601612f6f565b92509250509250929050565b60006020828403121561325a57613259613ac4565b5b600061326884828501612fc5565b91505092915050565b61327a8161382d565b82525050565b6132898161383f565b82525050565b600061329a826136d5565b6132a481856136eb565b93506132b48185602086016138b0565b6132bd81613ac9565b840191505092915050565b60006132d3826136e0565b6132dd81856136fc565b93506132ed8185602086016138b0565b6132f681613ac9565b840191505092915050565b600061330c826136e0565b613316818561370d565b93506133268185602086016138b0565b80840191505092915050565b600061333f6026836136fc565b915061334a82613ada565b604082019050919050565b60006133626019836136fc565b915061336d82613b29565b602082019050919050565b60006133856016836136fc565b915061339082613b52565b602082019050919050565b60006133a8601e836136fc565b91506133b382613b7b565b602082019050919050565b60006133cb6023836136fc565b91506133d682613ba4565b604082019050919050565b60006133ee6020836136fc565b91506133f982613bf3565b602082019050919050565b60006134116020836136fc565b915061341c82613c1c565b602082019050919050565b60006134346020836136fc565b915061343f82613c45565b602082019050919050565b6000613457601a836136fc565b915061346282613c6e565b602082019050919050565b61347681613897565b82525050565b60006134888285613301565b91506134948284613301565b91508190509392505050565b60006020820190506134b56000830184613271565b92915050565b60006080820190506134d06000830187613271565b6134dd6020830186613271565b6134ea604083018561346d565b81810360608301526134fc818461328f565b905095945050505050565b600060208201905061351c6000830184613280565b92915050565b6000602082019050818103600083015261353c81846132c8565b905092915050565b6000602082019050818103600083015261355d81613332565b9050919050565b6000602082019050818103600083015261357d81613355565b9050919050565b6000602082019050818103600083015261359d81613378565b9050919050565b600060208201905081810360008301526135bd8161339b565b9050919050565b600060208201905081810360008301526135dd816133be565b9050919050565b600060208201905081810360008301526135fd816133e1565b9050919050565b6000602082019050818103600083015261361d81613404565b9050919050565b6000602082019050818103600083015261363d81613427565b9050919050565b6000602082019050818103600083015261365d8161344a565b9050919050565b6000602082019050613679600083018461346d565b92915050565b600061368961369a565b90506136958282613915565b919050565b6000604051905090565b600067ffffffffffffffff8211156136bf576136be613a7c565b5b6136c882613ac9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061372382613897565b915061372e83613897565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613763576137626139c0565b5b828201905092915050565b600061377982613897565b915061378483613897565b925082613794576137936139ef565b5b828204905092915050565b60006137aa82613897565b91506137b583613897565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137ee576137ed6139c0565b5b828202905092915050565b600061380482613897565b915061380f83613897565b925082821015613822576138216139c0565b5b828203905092915050565b600061383882613877565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138ce5780820151818401526020810190506138b3565b838111156138dd576000848401525b50505050565b600060028204905060018216806138fb57607f821691505b6020821081141561390f5761390e613a1e565b5b50919050565b61391e82613ac9565b810181811067ffffffffffffffff8211171561393d5761393c613a7c565b5b80604052505050565b600061395182613897565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613984576139836139c0565b5b600182019050919050565b600061399a82613897565b91506139a583613897565b9250826139b5576139b46139ef565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c652069732063757272656e746c79207061757365642e00000000000000600082015250565b7f4e6f7420656e6f7567682045544845522073656e742e00000000000000000000600082015250565b7f43616e6e6f7420657863656564206d6178206d696e7420616d6f756e742e0000600082015250565b7f43616e6e6f7420657863656564206d61782066726565206d696e7420616d6f7560008201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206578656564732033207175616e74697479207065722074782e600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f74206578656564732031207175616e74697479207065722074782e600082015250565b7f4d696e74207175616e74697479206c657373207468616e20302e000000000000600082015250565b613ca08161382d565b8114613cab57600080fd5b50565b613cb78161383f565b8114613cc257600080fd5b50565b613cce8161384b565b8114613cd957600080fd5b50565b613ce581613897565b8114613cf057600080fd5b5056fea2646970667358221220b61f645bcc2049620e9eb716853a0d43b2debfd363b300a1c9b5f86532a8a7dc64736f6c63430008070033
Deployed Bytecode Sourcemap
46369:1926:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29880:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32490:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46858:466;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33993:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33556:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46633:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27117:280;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34850:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28703:1105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46576:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48186:106;;;;;;;;;;;;;:::i;:::-;;46473:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35091:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47689:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27690:713;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47894:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46751:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32299:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46674:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30316:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4801:103;;;;;;;;;;;;;:::i;:::-;;47994:76;;;;;;;;;;;;;:::i;:::-;;4150:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46526:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32659:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47787:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34269:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35347:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47332:349;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46707:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32834:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34619:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46426:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5059:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29880:372;29982:4;30034:25;30019:40;;;:11;:40;;;;:105;;;;30091:33;30076:48;;;:11;:48;;;;30019:105;:172;;;;30156:35;30141:50;;;:11;:50;;;;30019:172;:225;;;;30208:36;30232:11;30208:23;:36::i;:::-;30019:225;29999:245;;29880:372;;;:::o;32490:100::-;32544:13;32577:5;32570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32490:100;:::o;46858:466::-;46927:6;;;;;;;;;;;46926:7;46918:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;46993:1;46982:8;:12;46974:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;46461:5;47060:8;47044:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:36;;47036:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;46568:1;47134:8;:27;;47126:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;47241:4;;47230:8;:15;;;;:::i;:::-;47217:9;:28;;47209:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47285:31;47295:10;47307:8;47285:9;:31::i;:::-;46858:466;:::o;33993:204::-;34061:7;34086:16;34094:7;34086;:16::i;:::-;34081:64;;34111:34;;;;;;;;;;;;;;34081:64;34165:15;:24;34181:7;34165:24;;;;;;;;;;;;;;;;;;;;;34158:31;;33993:204;;;:::o;33556:371::-;33629:13;33645:24;33661:7;33645:15;:24::i;:::-;33629:40;;33690:5;33684:11;;:2;:11;;;33680:48;;;33704:24;;;;;;;;;;;;;;33680:48;33761:5;33745:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33771:37;33788:5;33795:12;:10;:12::i;:::-;33771:16;:37::i;:::-;33770:38;33745:63;33741:138;;;33832:35;;;;;;;;;;;;;;33741:138;33891:28;33900:2;33904:7;33913:5;33891:8;:28::i;:::-;33618:309;33556:371;;:::o;46633:32::-;;;;:::o;27117:280::-;27170:7;27362:12;;;;;;;;;;;27346:13;;;;;;;;;;:28;27339:35;;;;27117:280;:::o;34850:170::-;34984:28;34994:4;35000:2;35004:7;34984:9;:28::i;:::-;34850:170;;;:::o;28703:1105::-;28792:7;28825:16;28835:5;28825:9;:16::i;:::-;28816:5;:25;28812:61;;28850:23;;;;;;;;;;;;;;28812:61;28884:22;28909:13;;;;;;;;;;;28884:38;;;;28933:19;28963:25;29164:9;29159:557;29179:14;29175:1;:18;29159:557;;;29219:31;29253:11;:14;29265:1;29253:14;;;;;;;;;;;29219:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29290:9;:16;;;29286:73;;;29331:8;;;29286:73;29407:1;29381:28;;:9;:14;;;:28;;;29377:111;;29454:9;:14;;;29434:34;;29377:111;29531:5;29510:26;;:17;:26;;;29506:195;;;29580:5;29565:11;:20;29561:85;;;29621:1;29614:8;;;;;;;;;29561:85;29668:13;;;;;;;29506:195;29200:516;29159:557;29195:3;;;;;;;29159:557;;;;29792:8;;;28703:1105;;;;;:::o;46576:48::-;46623:1;46576:48;:::o;48186:106::-;4381:12;:10;:12::i;:::-;4370:23;;:7;:5;:7::i;:::-;:23;;;4362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48244:7:::1;:5;:7::i;:::-;48236:25;;:48;48262:21;48236:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48186:106::o:0;46473:44::-;46513:4;46473:44;:::o;35091:185::-;35229:39;35246:4;35252:2;35256:7;35229:39;;;;;;;;;;;;:16;:39::i;:::-;35091:185;;;:::o;47689:90::-;4381:12;:10;:12::i;:::-;4370:23;;:7;:5;:7::i;:::-;:23;;;4362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47763:8:::1;47756:4;:15;;;;47689:90:::0;:::o;27690:713::-;27757:7;27777:22;27802:13;;;;;;;;;;27777:38;;;;27826:19;28021:9;28016:328;28036:14;28032:1;:18;28016:328;;;28076:31;28110:11;:14;28122:1;28110:14;;;;;;;;;;;28076:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28148:9;:16;;;28143:186;;28208:5;28193:11;:20;28189:85;;;28249:1;28242:8;;;;;;;;28189:85;28296:13;;;;;;;28143:186;28057:287;28052:3;;;;;;;28016:328;;;;28372:23;;;;;;;;;;;;;;27690:713;;;;:::o;47894:92::-;4381:12;:10;:12::i;:::-;4370:23;;:7;:5;:7::i;:::-;:23;;;4362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47975:3:::1;;47965:7;:13;;;;;;;:::i;:::-;;47894:92:::0;;:::o;46751:18::-;;;;;;;;;;;;;:::o;32299:124::-;32363:7;32390:20;32402:7;32390:11;:20::i;:::-;:25;;;32383:32;;32299:124;;;:::o;46674:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30316:206::-;30380:7;30421:1;30404:19;;:5;:19;;;30400:60;;;30432:28;;;;;;;;;;;;;;30400:60;30486:12;:19;30499:5;30486:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30478:36;;30471:43;;30316:206;;;:::o;4801:103::-;4381:12;:10;:12::i;:::-;4370:23;;:7;:5;:7::i;:::-;:23;;;4362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4866:30:::1;4893:1;4866:18;:30::i;:::-;4801:103::o:0;47994:76::-;4381:12;:10;:12::i;:::-;4370:23;;:7;:5;:7::i;:::-;:23;;;4362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48056:6:::1;;;;;;;;;;;48055:7;48046:6;;:16;;;;;;;;;;;;;;;;;;47994:76::o:0;4150:87::-;4196:7;4223:6;;;;;;;;;;;4216:13;;4150:87;:::o;46526:43::-;46568:1;46526:43;:::o;32659:104::-;32715:13;32748:7;32741:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32659:104;:::o;47787:99::-;4381:12;:10;:12::i;:::-;4370:23;;:7;:5;:7::i;:::-;:23;;;4362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47870:8:::1;47863:4;:15;;;;47787:99:::0;:::o;34269:279::-;34372:12;:10;:12::i;:::-;34360:24;;:8;:24;;;34356:54;;;34393:17;;;;;;;;;;;;;;34356:54;34468:8;34423:18;:32;34442:12;:10;:12::i;:::-;34423:32;;;;;;;;;;;;;;;:42;34456:8;34423:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34521:8;34492:48;;34507:12;:10;:12::i;:::-;34492:48;;;34531:8;34492:48;;;;;;:::i;:::-;;;;;;;;34269:279;;:::o;35347:342::-;35514:28;35524:4;35530:2;35534:7;35514:9;:28::i;:::-;35558:48;35581:4;35587:2;35591:7;35600:5;35558:22;:48::i;:::-;35553:129;;35630:40;;;;;;;;;;;;;;35553:129;35347:342;;;;:::o;47332:349::-;47405:6;;;;;;;;;;;47404:7;47396:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;46623:1;47460:8;:32;;47452:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;46513:4;47564:8;47548:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;47540:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;47642:31;47652:10;47664:8;47642:9;:31::i;:::-;47332:349;:::o;46707:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32834:318::-;32907:13;32938:16;32946:7;32938;:16::i;:::-;32933:59;;32963:29;;;;;;;;;;;;;;32933:59;33005:21;33029:10;:8;:10::i;:::-;33005:34;;33082:1;33063:7;33057:21;:26;;:87;;;;;;;;;;;;;;;;;33110:7;33119:18;:7;:16;:18::i;:::-;33093:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33057:87;33050:94;;;32834:318;;;:::o;34619:164::-;34716:4;34740:18;:25;34759:5;34740:25;;;;;;;;;;;;;;;:35;34766:8;34740:35;;;;;;;;;;;;;;;;;;;;;;;;;34733:42;;34619:164;;;;:::o;46426:40::-;46461:5;46426:40;:::o;5059:201::-;4381:12;:10;:12::i;:::-;4370:23;;:7;:5;:7::i;:::-;:23;;;4362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5168:1:::1;5148:22;;:8;:22;;;;5140:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5224:28;5243:8;5224:18;:28::i;:::-;5059:201:::0;:::o;16934:157::-;17019:4;17058:25;17043:40;;;:11;:40;;;;17036:47;;16934:157;;;:::o;36096:104::-;36165:27;36175:2;36179:8;36165:27;;;;;;;;;;;;:9;:27::i;:::-;36096:104;;:::o;35944:144::-;36001:4;36035:13;;;;;;;;;;;36025:23;;:7;:23;:55;;;;;36053:11;:20;36065:7;36053:20;;;;;;;;;;;:27;;;;;;;;;;;;36052:28;36025:55;36018:62;;35944:144;;;:::o;2874:98::-;2927:7;2954:10;2947:17;;2874:98;:::o;43160:196::-;43302:2;43275:15;:24;43291:7;43275:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43340:7;43336:2;43320:28;;43329:5;43320:28;;;;;;;;;;;;43160:196;;;:::o;38661:2112::-;38776:35;38814:20;38826:7;38814:11;:20::i;:::-;38776:58;;38847:22;38889:13;:18;;;38873:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;38924:50;38941:13;:18;;;38961:12;:10;:12::i;:::-;38924:16;:50::i;:::-;38873:101;:154;;;;39015:12;:10;:12::i;:::-;38991:36;;:20;39003:7;38991:11;:20::i;:::-;:36;;;38873:154;38847:181;;39046:17;39041:66;;39072:35;;;;;;;;;;;;;;39041:66;39144:4;39122:26;;:13;:18;;;:26;;;39118:67;;39157:28;;;;;;;;;;;;;;39118:67;39214:1;39200:16;;:2;:16;;;39196:52;;;39225:23;;;;;;;;;;;;;;39196:52;39261:43;39283:4;39289:2;39293:7;39302:1;39261:21;:43::i;:::-;39369:49;39386:1;39390:7;39399:13;:18;;;39369:8;:49::i;:::-;39744:1;39714:12;:18;39727:4;39714:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39788:1;39760:12;:16;39773:2;39760:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39834:2;39806:11;:20;39818:7;39806:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;39896:15;39851:11;:20;39863:7;39851:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40164:19;40196:1;40186:7;:11;40164:33;;40257:1;40216:43;;:11;:24;40228:11;40216:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40212:445;;;40441:13;;;;;;;;;;40427:27;;:11;:27;40423:219;;;40511:13;:18;;;40479:11;:24;40491:11;40479:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40594:13;:28;;;40552:11;:24;40564:11;40552:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40423:219;40212:445;39689:979;40704:7;40700:2;40685:27;;40694:4;40685:27;;;;;;;;;;;;40723:42;40744:4;40750:2;40754:7;40763:1;40723:20;:42::i;:::-;38765:2008;;38661:2112;;;:::o;31154:1083::-;31215:21;;:::i;:::-;31249:12;31264:7;31249:22;;31320:13;;;;;;;;;;31313:20;;:4;:20;31309:861;;;31354:31;31388:11;:17;31400:4;31388:17;;;;;;;;;;;31354:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31429:9;:16;;;31424:731;;31500:1;31474:28;;:9;:14;;;:28;;;31470:101;;31538:9;31531:16;;;;;;31470:101;31875:261;31882:4;31875:261;;;31915:6;;;;;;;;31960:11;:17;31972:4;31960:17;;;;;;;;;;;31948:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32034:1;32008:28;;:9;:14;;;:28;;;32004:109;;32076:9;32069:16;;;;;;32004:109;31875:261;;;31424:731;31335:835;31309:861;32198:31;;;;;;;;;;;;;;31154:1083;;;;:::o;5420:191::-;5494:16;5513:6;;;;;;;;;;;5494:25;;5539:8;5530:6;;:17;;;;;;;;;;;;;;;;;;5594:8;5563:40;;5584:8;5563:40;;;;;;;;;;;;5483:128;5420:191;:::o;43921:790::-;44076:4;44097:15;:2;:13;;;:15::i;:::-;44093:611;;;44149:2;44133:36;;;44170:12;:10;:12::i;:::-;44184:4;44190:7;44199:5;44133:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44129:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44396:1;44379:6;:13;:18;44375:259;;;44429:40;;;;;;;;;;;;;;44375:259;44584:6;44578:13;44569:6;44565:2;44561:15;44554:38;44129:520;44266:45;;;44256:55;;;:6;:55;;;;44249:62;;;;;44093:611;44688:4;44681:11;;43921:790;;;;;;;:::o;48078:100::-;48130:13;48163:7;48156:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48078:100;:::o;436:723::-;492:13;722:1;713:5;:10;709:53;;;740:10;;;;;;;;;;;;;;;;;;;;;709:53;772:12;787:5;772:20;;803:14;828:78;843:1;835:4;:9;828:78;;861:8;;;;;:::i;:::-;;;;892:2;884:10;;;;;:::i;:::-;;;828:78;;;916:19;948:6;938:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;916:39;;966:154;982:1;973:5;:10;966:154;;1010:1;1000:11;;;;;:::i;:::-;;;1077:2;1069:5;:10;;;;:::i;:::-;1056:2;:24;;;;:::i;:::-;1043:39;;1026:6;1033;1026:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1106:2;1097:11;;;;;:::i;:::-;;;966:154;;;1144:6;1130:21;;;;;436:723;;;;:::o;36563:163::-;36686:32;36692:2;36696:8;36706:5;36713:4;36686:5;:32::i;:::-;36563:163;;;:::o;45359:159::-;;;;;:::o;46177:158::-;;;;;:::o;6851:326::-;6911:4;7168:1;7146:7;:19;;;:23;7139:30;;6851:326;;;:::o;36985:1422::-;37124:20;37147:13;;;;;;;;;;;37124:36;;;;37189:1;37175:16;;:2;:16;;;37171:48;;;37200:19;;;;;;;;;;;;;;37171:48;37246:1;37234:8;:13;37230:44;;;37256:18;;;;;;;;;;;;;;37230:44;37287:61;37317:1;37321:2;37325:12;37339:8;37287:21;:61::i;:::-;37661:8;37626:12;:16;37639:2;37626:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37725:8;37685:12;:16;37698:2;37685:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37784:2;37751:11;:25;37763:12;37751:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37851:15;37801:11;:25;37813:12;37801:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37884:20;37907:12;37884:35;;37941:9;37936:328;37956:8;37952:1;:12;37936:328;;;38020:12;38016:2;37995:38;;38012:1;37995:38;;;;;;;;;;;;38056:4;:68;;;;;38065:59;38096:1;38100:2;38104:12;38118:5;38065:22;:59::i;:::-;38064:60;38056:68;38052:164;;;38156:40;;;;;;;;;;;;;;38052:164;38234:14;;;;;;;37966:3;;;;;;;37936:328;;;;38304:12;38280:13;;:37;;;;;;;;;;;;;;;;;;37601:728;38339:60;38368:1;38372:2;38376:12;38390:8;38339:20;:60::i;:::-;37113:1294;36985:1422;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:118::-;7060:24;7078:5;7060:24;:::i;:::-;7055:3;7048:37;6973:118;;:::o;7097:109::-;7178:21;7193:5;7178:21;:::i;:::-;7173:3;7166:34;7097:109;;:::o;7212:360::-;7298:3;7326:38;7358:5;7326:38;:::i;:::-;7380:70;7443:6;7438:3;7380:70;:::i;:::-;7373:77;;7459:52;7504:6;7499:3;7492:4;7485:5;7481:16;7459:52;:::i;:::-;7536:29;7558:6;7536:29;:::i;:::-;7531:3;7527:39;7520:46;;7302:270;7212:360;;;;:::o;7578:364::-;7666:3;7694:39;7727:5;7694:39;:::i;:::-;7749:71;7813:6;7808:3;7749:71;:::i;:::-;7742:78;;7829:52;7874:6;7869:3;7862:4;7855:5;7851:16;7829:52;:::i;:::-;7906:29;7928:6;7906:29;:::i;:::-;7901:3;7897:39;7890:46;;7670:272;7578:364;;;;:::o;7948:377::-;8054:3;8082:39;8115:5;8082:39;:::i;:::-;8137:89;8219:6;8214:3;8137:89;:::i;:::-;8130:96;;8235:52;8280:6;8275:3;8268:4;8261:5;8257:16;8235:52;:::i;:::-;8312:6;8307:3;8303:16;8296:23;;8058:267;7948:377;;;;:::o;8331:366::-;8473:3;8494:67;8558:2;8553:3;8494:67;:::i;:::-;8487:74;;8570:93;8659:3;8570:93;:::i;:::-;8688:2;8683:3;8679:12;8672:19;;8331:366;;;:::o;8703:::-;8845:3;8866:67;8930:2;8925:3;8866:67;:::i;:::-;8859:74;;8942:93;9031:3;8942:93;:::i;:::-;9060:2;9055:3;9051:12;9044:19;;8703:366;;;:::o;9075:::-;9217:3;9238:67;9302:2;9297:3;9238:67;:::i;:::-;9231:74;;9314:93;9403:3;9314:93;:::i;:::-;9432:2;9427:3;9423:12;9416:19;;9075:366;;;:::o;9447:::-;9589:3;9610:67;9674:2;9669:3;9610:67;:::i;:::-;9603:74;;9686:93;9775:3;9686:93;:::i;:::-;9804:2;9799:3;9795:12;9788:19;;9447:366;;;:::o;9819:::-;9961:3;9982:67;10046:2;10041:3;9982:67;:::i;:::-;9975:74;;10058:93;10147:3;10058:93;:::i;:::-;10176:2;10171:3;10167:12;10160:19;;9819:366;;;:::o;10191:::-;10333:3;10354:67;10418:2;10413:3;10354:67;:::i;:::-;10347:74;;10430:93;10519:3;10430:93;:::i;:::-;10548:2;10543:3;10539:12;10532:19;;10191:366;;;:::o;10563:::-;10705:3;10726:67;10790:2;10785:3;10726:67;:::i;:::-;10719:74;;10802:93;10891:3;10802:93;:::i;:::-;10920:2;10915:3;10911:12;10904:19;;10563:366;;;:::o;10935:::-;11077:3;11098:67;11162:2;11157:3;11098:67;:::i;:::-;11091:74;;11174:93;11263:3;11174:93;:::i;:::-;11292:2;11287:3;11283:12;11276:19;;10935:366;;;:::o;11307:::-;11449:3;11470:67;11534:2;11529:3;11470:67;:::i;:::-;11463:74;;11546:93;11635:3;11546:93;:::i;:::-;11664:2;11659:3;11655:12;11648:19;;11307:366;;;:::o;11679:118::-;11766:24;11784:5;11766:24;:::i;:::-;11761:3;11754:37;11679:118;;:::o;11803:435::-;11983:3;12005:95;12096:3;12087:6;12005:95;:::i;:::-;11998:102;;12117:95;12208:3;12199:6;12117:95;:::i;:::-;12110:102;;12229:3;12222:10;;11803:435;;;;;:::o;12244:222::-;12337:4;12375:2;12364:9;12360:18;12352:26;;12388:71;12456:1;12445:9;12441:17;12432:6;12388:71;:::i;:::-;12244:222;;;;:::o;12472:640::-;12667:4;12705:3;12694:9;12690:19;12682:27;;12719:71;12787:1;12776:9;12772:17;12763:6;12719:71;:::i;:::-;12800:72;12868:2;12857:9;12853:18;12844:6;12800:72;:::i;:::-;12882;12950:2;12939:9;12935:18;12926:6;12882:72;:::i;:::-;13001:9;12995:4;12991:20;12986:2;12975:9;12971:18;12964:48;13029:76;13100:4;13091:6;13029:76;:::i;:::-;13021:84;;12472:640;;;;;;;:::o;13118:210::-;13205:4;13243:2;13232:9;13228:18;13220:26;;13256:65;13318:1;13307:9;13303:17;13294:6;13256:65;:::i;:::-;13118:210;;;;:::o;13334:313::-;13447:4;13485:2;13474:9;13470:18;13462:26;;13534:9;13528:4;13524:20;13520:1;13509:9;13505:17;13498:47;13562:78;13635:4;13626:6;13562:78;:::i;:::-;13554:86;;13334:313;;;;:::o;13653:419::-;13819:4;13857:2;13846:9;13842:18;13834:26;;13906:9;13900:4;13896:20;13892:1;13881:9;13877:17;13870:47;13934:131;14060:4;13934:131;:::i;:::-;13926:139;;13653:419;;;:::o;14078:::-;14244:4;14282:2;14271:9;14267:18;14259:26;;14331:9;14325:4;14321:20;14317:1;14306:9;14302:17;14295:47;14359:131;14485:4;14359:131;:::i;:::-;14351:139;;14078:419;;;:::o;14503:::-;14669:4;14707:2;14696:9;14692:18;14684:26;;14756:9;14750:4;14746:20;14742:1;14731:9;14727:17;14720:47;14784:131;14910:4;14784:131;:::i;:::-;14776:139;;14503:419;;;:::o;14928:::-;15094:4;15132:2;15121:9;15117:18;15109:26;;15181:9;15175:4;15171:20;15167:1;15156:9;15152:17;15145:47;15209:131;15335:4;15209:131;:::i;:::-;15201:139;;14928:419;;;:::o;15353:::-;15519:4;15557:2;15546:9;15542:18;15534:26;;15606:9;15600:4;15596:20;15592:1;15581:9;15577:17;15570:47;15634:131;15760:4;15634:131;:::i;:::-;15626:139;;15353:419;;;:::o;15778:::-;15944:4;15982:2;15971:9;15967:18;15959:26;;16031:9;16025:4;16021:20;16017:1;16006:9;16002:17;15995:47;16059:131;16185:4;16059:131;:::i;:::-;16051:139;;15778:419;;;:::o;16203:::-;16369:4;16407:2;16396:9;16392:18;16384:26;;16456:9;16450:4;16446:20;16442:1;16431:9;16427:17;16420:47;16484:131;16610:4;16484:131;:::i;:::-;16476:139;;16203:419;;;:::o;16628:::-;16794:4;16832:2;16821:9;16817:18;16809:26;;16881:9;16875:4;16871:20;16867:1;16856:9;16852:17;16845:47;16909:131;17035:4;16909:131;:::i;:::-;16901:139;;16628:419;;;:::o;17053:::-;17219:4;17257:2;17246:9;17242:18;17234:26;;17306:9;17300:4;17296:20;17292:1;17281:9;17277:17;17270:47;17334:131;17460:4;17334:131;:::i;:::-;17326:139;;17053:419;;;:::o;17478:222::-;17571:4;17609:2;17598:9;17594:18;17586:26;;17622:71;17690:1;17679:9;17675:17;17666:6;17622:71;:::i;:::-;17478:222;;;;:::o;17706:129::-;17740:6;17767:20;;:::i;:::-;17757:30;;17796:33;17824:4;17816:6;17796:33;:::i;:::-;17706:129;;;:::o;17841:75::-;17874:6;17907:2;17901:9;17891:19;;17841:75;:::o;17922:307::-;17983:4;18073:18;18065:6;18062:30;18059:56;;;18095:18;;:::i;:::-;18059:56;18133:29;18155:6;18133:29;:::i;:::-;18125:37;;18217:4;18211;18207:15;18199:23;;17922:307;;;:::o;18235:98::-;18286:6;18320:5;18314:12;18304:22;;18235:98;;;:::o;18339:99::-;18391:6;18425:5;18419:12;18409:22;;18339:99;;;:::o;18444:168::-;18527:11;18561:6;18556:3;18549:19;18601:4;18596:3;18592:14;18577:29;;18444:168;;;;:::o;18618:169::-;18702:11;18736:6;18731:3;18724:19;18776:4;18771:3;18767:14;18752:29;;18618:169;;;;:::o;18793:148::-;18895:11;18932:3;18917:18;;18793:148;;;;:::o;18947:305::-;18987:3;19006:20;19024:1;19006:20;:::i;:::-;19001:25;;19040:20;19058:1;19040:20;:::i;:::-;19035:25;;19194:1;19126:66;19122:74;19119:1;19116:81;19113:107;;;19200:18;;:::i;:::-;19113:107;19244:1;19241;19237:9;19230:16;;18947:305;;;;:::o;19258:185::-;19298:1;19315:20;19333:1;19315:20;:::i;:::-;19310:25;;19349:20;19367:1;19349:20;:::i;:::-;19344:25;;19388:1;19378:35;;19393:18;;:::i;:::-;19378:35;19435:1;19432;19428:9;19423:14;;19258:185;;;;:::o;19449:348::-;19489:7;19512:20;19530:1;19512:20;:::i;:::-;19507:25;;19546:20;19564:1;19546:20;:::i;:::-;19541:25;;19734:1;19666:66;19662:74;19659:1;19656:81;19651:1;19644:9;19637:17;19633:105;19630:131;;;19741:18;;:::i;:::-;19630:131;19789:1;19786;19782:9;19771:20;;19449:348;;;;:::o;19803:191::-;19843:4;19863:20;19881:1;19863:20;:::i;:::-;19858:25;;19897:20;19915:1;19897:20;:::i;:::-;19892:25;;19936:1;19933;19930:8;19927:34;;;19941:18;;:::i;:::-;19927:34;19986:1;19983;19979:9;19971:17;;19803:191;;;;:::o;20000:96::-;20037:7;20066:24;20084:5;20066:24;:::i;:::-;20055:35;;20000:96;;;:::o;20102:90::-;20136:7;20179:5;20172:13;20165:21;20154:32;;20102:90;;;:::o;20198:149::-;20234:7;20274:66;20267:5;20263:78;20252:89;;20198:149;;;:::o;20353:126::-;20390:7;20430:42;20423:5;20419:54;20408:65;;20353:126;;;:::o;20485:77::-;20522:7;20551:5;20540:16;;20485:77;;;:::o;20568:154::-;20652:6;20647:3;20642;20629:30;20714:1;20705:6;20700:3;20696:16;20689:27;20568:154;;;:::o;20728:307::-;20796:1;20806:113;20820:6;20817:1;20814:13;20806:113;;;20905:1;20900:3;20896:11;20890:18;20886:1;20881:3;20877:11;20870:39;20842:2;20839:1;20835:10;20830:15;;20806:113;;;20937:6;20934:1;20931:13;20928:101;;;21017:1;21008:6;21003:3;20999:16;20992:27;20928:101;20777:258;20728:307;;;:::o;21041:320::-;21085:6;21122:1;21116:4;21112:12;21102:22;;21169:1;21163:4;21159:12;21190:18;21180:81;;21246:4;21238:6;21234:17;21224:27;;21180:81;21308:2;21300:6;21297:14;21277:18;21274:38;21271:84;;;21327:18;;:::i;:::-;21271:84;21092:269;21041:320;;;:::o;21367:281::-;21450:27;21472:4;21450:27;:::i;:::-;21442:6;21438:40;21580:6;21568:10;21565:22;21544:18;21532:10;21529:34;21526:62;21523:88;;;21591:18;;:::i;:::-;21523:88;21631:10;21627:2;21620:22;21410:238;21367:281;;:::o;21654:233::-;21693:3;21716:24;21734:5;21716:24;:::i;:::-;21707:33;;21762:66;21755:5;21752:77;21749:103;;;21832:18;;:::i;:::-;21749:103;21879:1;21872:5;21868:13;21861:20;;21654:233;;;:::o;21893:176::-;21925:1;21942:20;21960:1;21942:20;:::i;:::-;21937:25;;21976:20;21994:1;21976:20;:::i;:::-;21971:25;;22015:1;22005:35;;22020:18;;:::i;:::-;22005:35;22061:1;22058;22054:9;22049:14;;21893:176;;;;:::o;22075:180::-;22123:77;22120:1;22113:88;22220:4;22217:1;22210:15;22244:4;22241:1;22234:15;22261:180;22309:77;22306:1;22299:88;22406:4;22403:1;22396:15;22430:4;22427:1;22420:15;22447:180;22495:77;22492:1;22485:88;22592:4;22589:1;22582:15;22616:4;22613:1;22606:15;22633:180;22681:77;22678:1;22671:88;22778:4;22775:1;22768:15;22802:4;22799:1;22792:15;22819:180;22867:77;22864:1;22857:88;22964:4;22961:1;22954:15;22988:4;22985:1;22978:15;23005:117;23114:1;23111;23104:12;23128:117;23237:1;23234;23227:12;23251:117;23360:1;23357;23350:12;23374:117;23483:1;23480;23473:12;23497:117;23606:1;23603;23596:12;23620:117;23729:1;23726;23719:12;23743:102;23784:6;23835:2;23831:7;23826:2;23819:5;23815:14;23811:28;23801:38;;23743:102;;;:::o;23851:225::-;23991:34;23987:1;23979:6;23975:14;23968:58;24060:8;24055:2;24047:6;24043:15;24036:33;23851:225;:::o;24082:175::-;24222:27;24218:1;24210:6;24206:14;24199:51;24082:175;:::o;24263:172::-;24403:24;24399:1;24391:6;24387:14;24380:48;24263:172;:::o;24441:180::-;24581:32;24577:1;24569:6;24565:14;24558:56;24441:180;:::o;24627:222::-;24767:34;24763:1;24755:6;24751:14;24744:58;24836:5;24831:2;24823:6;24819:15;24812:30;24627:222;:::o;24855:182::-;24995:34;24991:1;24983:6;24979:14;24972:58;24855:182;:::o;25043:::-;25183:34;25179:1;25171:6;25167:14;25160:58;25043:182;:::o;25231:::-;25371:34;25367:1;25359:6;25355:14;25348:58;25231:182;:::o;25419:176::-;25559:28;25555:1;25547:6;25543:14;25536:52;25419:176;:::o;25601:122::-;25674:24;25692:5;25674:24;:::i;:::-;25667:5;25664:35;25654:63;;25713:1;25710;25703:12;25654:63;25601:122;:::o;25729:116::-;25799:21;25814:5;25799:21;:::i;:::-;25792:5;25789:32;25779:60;;25835:1;25832;25825:12;25779:60;25729:116;:::o;25851:120::-;25923:23;25940:5;25923:23;:::i;:::-;25916:5;25913:34;25903:62;;25961:1;25958;25951:12;25903:62;25851:120;:::o;25977:122::-;26050:24;26068:5;26050:24;:::i;:::-;26043:5;26040:35;26030:63;;26089:1;26086;26079:12;26030:63;25977:122;:::o
Swarm Source
ipfs://b61f645bcc2049620e9eb716853a0d43b2debfd363b300a1c9b5f86532a8a7dc
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.