Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
351 REC
Holders
315
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 RECLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Recession
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-11 */ // File: @openzeppelin/contracts/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/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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 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 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 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 pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/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: @openzeppelin/contracts/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: contracts/ERC721A.sol // Creators: locationtba.eth, 2pmflow.eth pragma solidity ^0.8.0; /** * @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..). * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable maxBatchSize; // 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) private _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; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_ ) { require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @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) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @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) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, 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)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > currentIndex - 1) { endIndex = currentIndex - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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("ERC721A: transfer to non ERC721Receiver implementer"); } 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. * * 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`. */ 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. * * 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` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/Recession.sol pragma solidity ^0.8.0; contract Recession is Ownable, ERC721A { /** * The Recession is upon us * The first 333 are free (max 1 pr tx) * The rest is 0.02 each (max 5 pr tx) */ // constants uint256 constant FREE_MINTS = 333; uint256 constant MAX_ELEMENTS = 999; uint256 constant MAX_ELEMENTS_TX = 5; uint256 constant PUBLIC_PRICE = 0.02 ether; string public baseTokenURI; bool public paused = true; constructor() ERC721A("Recession", "REC", 5) {} function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(_mintAmount > 0,"No 0 mints"); require(_mintAmount <= MAX_ELEMENTS_TX,"Exceeds max per tx"); require(!paused, "Paused"); if(supply < FREE_MINTS){ require(supply + 1 <= FREE_MINTS,"Exceeds max free mints"); // Only ONE each during free mint. Don't send any eth! _safeMint(msg.sender,1); } else { require(supply + _mintAmount <= MAX_ELEMENTS,"Exceeds max supply"); require(msg.value >= _mintAmount * PUBLIC_PRICE,"Invalid funds provided"); _safeMint(msg.sender,_mintAmount); } } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } function pause(bool _state) external onlyOwner { paused = _state; } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } function setBaseURI(string calldata baseURI) public onlyOwner { baseTokenURI = baseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","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":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a0604052600060015560006008556001600a60006101000a81548160ff0219169083151502179055503480156200003657600080fd5b506040518060400160405280600981526020017f526563657373696f6e00000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52454300000000000000000000000000000000000000000000000000000000008152506005620000c5620000b96200014e60201b60201c565b6200015660201b60201c565b600081116200010b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010290620002f1565b60405180910390fd5b8260029080519060200190620001239291906200021a565b5081600390805190602001906200013c9291906200021a565b508060808181525050505050620003d8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002289062000324565b90600052602060002090601f0160209004810192826200024c576000855562000298565b82601f106200026757805160ff191683800117855562000298565b8280016001018555821562000298579182015b82811115620002975782518255916020019190600101906200027a565b5b509050620002a79190620002ab565b5090565b5b80821115620002c6576000816000905550600101620002ac565b5090565b6000620002d960278362000313565b9150620002e68262000389565b604082019050919050565b600060208201905081810360008301526200030c81620002ca565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200033d57607f821691505b602082108114156200035457620003536200035a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b60805161430e6200040260003960008181611e4601528181611e6f015261252f015261430e6000f3fe6080604052600436106101815760003560e01c80636352211e116100d1578063a22cb4651161008a578063d547cfb711610064578063d547cfb714610564578063d7224ba01461058f578063e985e9c5146105ba578063f2fde38b146105f757610181565b8063a22cb465146104d5578063b88d4fde146104fe578063c87b56dd1461052757610181565b80636352211e146103d257806370a082311461040f578063715018a61461044c5780638da5cb5b1461046357806395d89b411461048e578063a0712d68146104b957610181565b806323b872dd1161013e57806342842e0e1161011857806342842e0e146103185780634f6ccce71461034157806355f804b31461037e5780635c975abb146103a757610181565b806323b872dd146102a85780632f745c59146102d15780633ccfd60b1461030e57610181565b806301ffc9a71461018657806302329a29146101c357806306fdde03146101ec578063081812fc14610217578063095ea7b31461025457806318160ddd1461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612d5c565b610620565b6040516101ba9190613319565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190612d2f565b61076a565b005b3480156101f857600080fd5b50610201610803565b60405161020e9190613334565b60405180910390f35b34801561022357600080fd5b5061023e60048036038101906102399190612e03565b610895565b60405161024b91906132b2565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612cef565b61091a565b005b34801561028957600080fd5b50610292610a33565b60405161029f9190613696565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190612bd9565b610a3d565b005b3480156102dd57600080fd5b506102f860048036038101906102f39190612cef565b610a4d565b6040516103059190613696565b60405180910390f35b610316610c4b565b005b34801561032457600080fd5b5061033f600480360381019061033a9190612bd9565b610d07565b005b34801561034d57600080fd5b5061036860048036038101906103639190612e03565b610d27565b6040516103759190613696565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190612db6565b610d7a565b005b3480156103b357600080fd5b506103bc610e0c565b6040516103c99190613319565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190612e03565b610e1f565b60405161040691906132b2565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190612b6c565b610e35565b6040516104439190613696565b60405180910390f35b34801561045857600080fd5b50610461610f1e565b005b34801561046f57600080fd5b50610478610fa6565b60405161048591906132b2565b60405180910390f35b34801561049a57600080fd5b506104a3610fcf565b6040516104b09190613334565b60405180910390f35b6104d360048036038101906104ce9190612e03565b611061565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190612caf565b611263565b005b34801561050a57600080fd5b5061052560048036038101906105209190612c2c565b6113e4565b005b34801561053357600080fd5b5061054e60048036038101906105499190612e03565b611440565b60405161055b9190613334565b60405180910390f35b34801561057057600080fd5b506105796114e7565b6040516105869190613334565b60405180910390f35b34801561059b57600080fd5b506105a4611575565b6040516105b19190613696565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612b99565b61157b565b6040516105ee9190613319565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190612b6c565b61160f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610763575061076282611707565b5b9050919050565b610772611771565b73ffffffffffffffffffffffffffffffffffffffff16610790610fa6565b73ffffffffffffffffffffffffffffffffffffffff16146107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dd906134f6565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b606060028054610812906139d5565b80601f016020809104026020016040519081016040528092919081815260200182805461083e906139d5565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b60006108a082611779565b6108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690613656565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092582610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90613596565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b5611771565b73ffffffffffffffffffffffffffffffffffffffff1614806109e457506109e3816109de611771565b61157b565b5b610a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90613456565b60405180910390fd5b610a2e838383611787565b505050565b6000600154905090565b610a48838383611839565b505050565b6000610a5883610e35565b8210610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613356565b60405180910390fd5b6000610aa3610a33565b905060008060005b83811015610c09576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610b9d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf55786841415610be6578195505050505050610c45565b8380610bf190613a38565b9450505b508080610c0190613a38565b915050610aab565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90613616565b60405180910390fd5b92915050565b610c53611771565b73ffffffffffffffffffffffffffffffffffffffff16610c71610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe906134f6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610d0557600080fd5b565b610d22838383604051806020016040528060008152506113e4565b505050565b6000610d31610a33565b8210610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613416565b60405180910390fd5b819050919050565b610d82611771565b73ffffffffffffffffffffffffffffffffffffffff16610da0610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906134f6565b60405180910390fd5b818160099190610e07929190612960565b505050565b600a60009054906101000a900460ff1681565b6000610e2a82611df2565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d906134b6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f26611771565b73ffffffffffffffffffffffffffffffffffffffff16610f44610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f91906134f6565b60405180910390fd5b610fa46000611ff5565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610fde906139d5565b80601f016020809104026020016040519081016040528092919081815260200182805461100a906139d5565b80156110575780601f1061102c57610100808354040283529160200191611057565b820191906000526020600020905b81548152906001019060200180831161103a57829003601f168201915b5050505050905090565b600061106b610a33565b9050600082116110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906133d6565b60405180910390fd5b60058211156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb906133f6565b60405180910390fd5b600a60009054906101000a900460ff1615611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613376565b60405180910390fd5b61014d8110156111af5761014d60018261115e9190613790565b111561119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690613476565b60405180910390fd5b6111aa3360016120b9565b61125f565b6103e782826111be9190613790565b11156111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613496565b60405180910390fd5b66470de4df820000826112129190613817565b341015611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90613576565b60405180910390fd5b61125e33836120b9565b5b5050565b61126b611771565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090613536565b60405180910390fd5b80600760006112e6611771565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611393611771565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113d89190613319565b60405180910390a35050565b6113ef848484611839565b6113fb848484846120d7565b61143a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611431906135b6565b60405180910390fd5b50505050565b606061144b82611779565b61148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190613516565b60405180910390fd5b600061149461226e565b905060008151116114b457604051806020016040528060008152506114df565b806114be84612300565b6040516020016114cf92919061328e565b6040516020818303038152906040525b915050919050565b600980546114f4906139d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611520906139d5565b801561156d5780601f106115425761010080835404028352916020019161156d565b820191906000526020600020905b81548152906001019060200180831161155057829003601f168201915b505050505081565b60085481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611617611771565b73ffffffffffffffffffffffffffffffffffffffff16611635610fa6565b73ffffffffffffffffffffffffffffffffffffffff161461168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906134f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613396565b60405180910390fd5b61170481611ff5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061184482611df2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661186b611771565b73ffffffffffffffffffffffffffffffffffffffff1614806118c75750611890611771565b73ffffffffffffffffffffffffffffffffffffffff166118af84610895565b73ffffffffffffffffffffffffffffffffffffffff16145b806118e357506118e282600001516118dd611771565b61157b565b5b905080611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613556565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e906134d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90613436565b60405180910390fd5b611a148585856001612461565b611a246000848460000151611787565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611a929190613871565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611b36919061374a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611c3c9190613790565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d8257611cb281611779565b15611d81576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611dea8686866001612467565b505050505050565b611dfa6129e6565b611e0382611779565b611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e39906133b6565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310611ea65760017f000000000000000000000000000000000000000000000000000000000000000084611e9991906138a5565b611ea39190613790565b90505b60008390505b818110611fb4576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611fa057809350505050611ff0565b508080611fac906139ab565b915050611eac565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613636565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120d382826040518060200160405280600081525061246d565b5050565b60006120f88473ffffffffffffffffffffffffffffffffffffffff1661294d565b15612261578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612121611771565b8786866040518563ffffffff1660e01b815260040161214394939291906132cd565b602060405180830381600087803b15801561215d57600080fd5b505af192505050801561218e57506040513d601f19601f8201168201806040525081019061218b9190612d89565b60015b612211573d80600081146121be576040519150601f19603f3d011682016040523d82523d6000602084013e6121c3565b606091505b50600081511415612209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612200906135b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612266565b600190505b949350505050565b60606009805461227d906139d5565b80601f01602080910402602001604051908101604052809291908181526020018280546122a9906139d5565b80156122f65780601f106122cb576101008083540402835291602001916122f6565b820191906000526020600020905b8154815290600101906020018083116122d957829003601f168201915b5050505050905090565b60606000821415612348576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061245c565b600082905060005b6000821461237a57808061236390613a38565b915050600a8261237391906137e6565b9150612350565b60008167ffffffffffffffff81111561239657612395613b6e565b5b6040519080825280601f01601f1916602001820160405280156123c85781602001600182028036833780820191505090505b5090505b60008514612455576001826123e191906138a5565b9150600a856123f09190613a81565b60306123fc9190613790565b60f81b81838151811061241257612411613b3f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561244e91906137e6565b94506123cc565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db906135f6565b60405180910390fd5b6124ed81611779565b1561252d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612524906135d6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790613676565b60405180910390fd5b61259d6000858386612461565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161269a919061374a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516126c1919061374a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561293057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128d060008884886120d7565b61290f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612906906135b6565b60405180910390fd5b818061291a90613a38565b925050808061292890613a38565b91505061285f565b50806001819055506129456000878588612467565b505050505050565b600080823b905060008111915050919050565b82805461296c906139d5565b90600052602060002090601f01602090048101928261298e57600085556129d5565b82601f106129a757803560ff19168380011785556129d5565b828001600101855582156129d5579182015b828111156129d45782358255916020019190600101906129b9565b5b5090506129e29190612a20565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612a39576000816000905550600101612a21565b5090565b6000612a50612a4b846136d6565b6136b1565b905082815260208101848484011115612a6c57612a6b613bac565b5b612a77848285613969565b509392505050565b600081359050612a8e8161427c565b92915050565b600081359050612aa381614293565b92915050565b600081359050612ab8816142aa565b92915050565b600081519050612acd816142aa565b92915050565b600082601f830112612ae857612ae7613ba2565b5b8135612af8848260208601612a3d565b91505092915050565b60008083601f840112612b1757612b16613ba2565b5b8235905067ffffffffffffffff811115612b3457612b33613b9d565b5b602083019150836001820283011115612b5057612b4f613ba7565b5b9250929050565b600081359050612b66816142c1565b92915050565b600060208284031215612b8257612b81613bb6565b5b6000612b9084828501612a7f565b91505092915050565b60008060408385031215612bb057612baf613bb6565b5b6000612bbe85828601612a7f565b9250506020612bcf85828601612a7f565b9150509250929050565b600080600060608486031215612bf257612bf1613bb6565b5b6000612c0086828701612a7f565b9350506020612c1186828701612a7f565b9250506040612c2286828701612b57565b9150509250925092565b60008060008060808587031215612c4657612c45613bb6565b5b6000612c5487828801612a7f565b9450506020612c6587828801612a7f565b9350506040612c7687828801612b57565b925050606085013567ffffffffffffffff811115612c9757612c96613bb1565b5b612ca387828801612ad3565b91505092959194509250565b60008060408385031215612cc657612cc5613bb6565b5b6000612cd485828601612a7f565b9250506020612ce585828601612a94565b9150509250929050565b60008060408385031215612d0657612d05613bb6565b5b6000612d1485828601612a7f565b9250506020612d2585828601612b57565b9150509250929050565b600060208284031215612d4557612d44613bb6565b5b6000612d5384828501612a94565b91505092915050565b600060208284031215612d7257612d71613bb6565b5b6000612d8084828501612aa9565b91505092915050565b600060208284031215612d9f57612d9e613bb6565b5b6000612dad84828501612abe565b91505092915050565b60008060208385031215612dcd57612dcc613bb6565b5b600083013567ffffffffffffffff811115612deb57612dea613bb1565b5b612df785828601612b01565b92509250509250929050565b600060208284031215612e1957612e18613bb6565b5b6000612e2784828501612b57565b91505092915050565b612e39816138d9565b82525050565b612e48816138eb565b82525050565b6000612e5982613707565b612e63818561371d565b9350612e73818560208601613978565b612e7c81613bbb565b840191505092915050565b6000612e9282613712565b612e9c818561372e565b9350612eac818560208601613978565b612eb581613bbb565b840191505092915050565b6000612ecb82613712565b612ed5818561373f565b9350612ee5818560208601613978565b80840191505092915050565b6000612efe60228361372e565b9150612f0982613bcc565b604082019050919050565b6000612f2160068361372e565b9150612f2c82613c1b565b602082019050919050565b6000612f4460268361372e565b9150612f4f82613c44565b604082019050919050565b6000612f67602a8361372e565b9150612f7282613c93565b604082019050919050565b6000612f8a600a8361372e565b9150612f9582613ce2565b602082019050919050565b6000612fad60128361372e565b9150612fb882613d0b565b602082019050919050565b6000612fd060238361372e565b9150612fdb82613d34565b604082019050919050565b6000612ff360258361372e565b9150612ffe82613d83565b604082019050919050565b600061301660398361372e565b915061302182613dd2565b604082019050919050565b600061303960168361372e565b915061304482613e21565b602082019050919050565b600061305c60128361372e565b915061306782613e4a565b602082019050919050565b600061307f602b8361372e565b915061308a82613e73565b604082019050919050565b60006130a260268361372e565b91506130ad82613ec2565b604082019050919050565b60006130c560208361372e565b91506130d082613f11565b602082019050919050565b60006130e8602f8361372e565b91506130f382613f3a565b604082019050919050565b600061310b601a8361372e565b915061311682613f89565b602082019050919050565b600061312e60328361372e565b915061313982613fb2565b604082019050919050565b600061315160168361372e565b915061315c82614001565b602082019050919050565b600061317460228361372e565b915061317f8261402a565b604082019050919050565b600061319760338361372e565b91506131a282614079565b604082019050919050565b60006131ba601d8361372e565b91506131c5826140c8565b602082019050919050565b60006131dd60218361372e565b91506131e8826140f1565b604082019050919050565b6000613200602e8361372e565b915061320b82614140565b604082019050919050565b6000613223602f8361372e565b915061322e8261418f565b604082019050919050565b6000613246602d8361372e565b9150613251826141de565b604082019050919050565b600061326960228361372e565b91506132748261422d565b604082019050919050565b6132888161395f565b82525050565b600061329a8285612ec0565b91506132a68284612ec0565b91508190509392505050565b60006020820190506132c76000830184612e30565b92915050565b60006080820190506132e26000830187612e30565b6132ef6020830186612e30565b6132fc604083018561327f565b818103606083015261330e8184612e4e565b905095945050505050565b600060208201905061332e6000830184612e3f565b92915050565b6000602082019050818103600083015261334e8184612e87565b905092915050565b6000602082019050818103600083015261336f81612ef1565b9050919050565b6000602082019050818103600083015261338f81612f14565b9050919050565b600060208201905081810360008301526133af81612f37565b9050919050565b600060208201905081810360008301526133cf81612f5a565b9050919050565b600060208201905081810360008301526133ef81612f7d565b9050919050565b6000602082019050818103600083015261340f81612fa0565b9050919050565b6000602082019050818103600083015261342f81612fc3565b9050919050565b6000602082019050818103600083015261344f81612fe6565b9050919050565b6000602082019050818103600083015261346f81613009565b9050919050565b6000602082019050818103600083015261348f8161302c565b9050919050565b600060208201905081810360008301526134af8161304f565b9050919050565b600060208201905081810360008301526134cf81613072565b9050919050565b600060208201905081810360008301526134ef81613095565b9050919050565b6000602082019050818103600083015261350f816130b8565b9050919050565b6000602082019050818103600083015261352f816130db565b9050919050565b6000602082019050818103600083015261354f816130fe565b9050919050565b6000602082019050818103600083015261356f81613121565b9050919050565b6000602082019050818103600083015261358f81613144565b9050919050565b600060208201905081810360008301526135af81613167565b9050919050565b600060208201905081810360008301526135cf8161318a565b9050919050565b600060208201905081810360008301526135ef816131ad565b9050919050565b6000602082019050818103600083015261360f816131d0565b9050919050565b6000602082019050818103600083015261362f816131f3565b9050919050565b6000602082019050818103600083015261364f81613216565b9050919050565b6000602082019050818103600083015261366f81613239565b9050919050565b6000602082019050818103600083015261368f8161325c565b9050919050565b60006020820190506136ab600083018461327f565b92915050565b60006136bb6136cc565b90506136c78282613a07565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f1576136f0613b6e565b5b6136fa82613bbb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061375582613923565b915061376083613923565b9250826fffffffffffffffffffffffffffffffff0382111561378557613784613ab2565b5b828201905092915050565b600061379b8261395f565b91506137a68361395f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137db576137da613ab2565b5b828201905092915050565b60006137f18261395f565b91506137fc8361395f565b92508261380c5761380b613ae1565b5b828204905092915050565b60006138228261395f565b915061382d8361395f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561386657613865613ab2565b5b828202905092915050565b600061387c82613923565b915061388783613923565b92508282101561389a57613899613ab2565b5b828203905092915050565b60006138b08261395f565b91506138bb8361395f565b9250828210156138ce576138cd613ab2565b5b828203905092915050565b60006138e48261393f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561399657808201518184015260208101905061397b565b838111156139a5576000848401525b50505050565b60006139b68261395f565b915060008214156139ca576139c9613ab2565b5b600182039050919050565b600060028204905060018216806139ed57607f821691505b60208210811415613a0157613a00613b10565b5b50919050565b613a1082613bbb565b810181811067ffffffffffffffff82111715613a2f57613a2e613b6e565b5b80604052505050565b6000613a438261395f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a7657613a75613ab2565b5b600182019050919050565b6000613a8c8261395f565b9150613a978361395f565b925082613aa757613aa6613ae1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b7f45786365656473206d6178207065722074780000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f45786365656473206d61782066726565206d696e747300000000000000000000600082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614285816138d9565b811461429057600080fd5b50565b61429c816138eb565b81146142a757600080fd5b50565b6142b3816138f7565b81146142be57600080fd5b50565b6142ca8161395f565b81146142d557600080fd5b5056fea2646970667358221220c3e0c5ed60a4cd95592a2aef3c927fa71923e6dc5286468446d3fba0d57542d264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101815760003560e01c80636352211e116100d1578063a22cb4651161008a578063d547cfb711610064578063d547cfb714610564578063d7224ba01461058f578063e985e9c5146105ba578063f2fde38b146105f757610181565b8063a22cb465146104d5578063b88d4fde146104fe578063c87b56dd1461052757610181565b80636352211e146103d257806370a082311461040f578063715018a61461044c5780638da5cb5b1461046357806395d89b411461048e578063a0712d68146104b957610181565b806323b872dd1161013e57806342842e0e1161011857806342842e0e146103185780634f6ccce71461034157806355f804b31461037e5780635c975abb146103a757610181565b806323b872dd146102a85780632f745c59146102d15780633ccfd60b1461030e57610181565b806301ffc9a71461018657806302329a29146101c357806306fdde03146101ec578063081812fc14610217578063095ea7b31461025457806318160ddd1461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612d5c565b610620565b6040516101ba9190613319565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190612d2f565b61076a565b005b3480156101f857600080fd5b50610201610803565b60405161020e9190613334565b60405180910390f35b34801561022357600080fd5b5061023e60048036038101906102399190612e03565b610895565b60405161024b91906132b2565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612cef565b61091a565b005b34801561028957600080fd5b50610292610a33565b60405161029f9190613696565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190612bd9565b610a3d565b005b3480156102dd57600080fd5b506102f860048036038101906102f39190612cef565b610a4d565b6040516103059190613696565b60405180910390f35b610316610c4b565b005b34801561032457600080fd5b5061033f600480360381019061033a9190612bd9565b610d07565b005b34801561034d57600080fd5b5061036860048036038101906103639190612e03565b610d27565b6040516103759190613696565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190612db6565b610d7a565b005b3480156103b357600080fd5b506103bc610e0c565b6040516103c99190613319565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190612e03565b610e1f565b60405161040691906132b2565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190612b6c565b610e35565b6040516104439190613696565b60405180910390f35b34801561045857600080fd5b50610461610f1e565b005b34801561046f57600080fd5b50610478610fa6565b60405161048591906132b2565b60405180910390f35b34801561049a57600080fd5b506104a3610fcf565b6040516104b09190613334565b60405180910390f35b6104d360048036038101906104ce9190612e03565b611061565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190612caf565b611263565b005b34801561050a57600080fd5b5061052560048036038101906105209190612c2c565b6113e4565b005b34801561053357600080fd5b5061054e60048036038101906105499190612e03565b611440565b60405161055b9190613334565b60405180910390f35b34801561057057600080fd5b506105796114e7565b6040516105869190613334565b60405180910390f35b34801561059b57600080fd5b506105a4611575565b6040516105b19190613696565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612b99565b61157b565b6040516105ee9190613319565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190612b6c565b61160f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610763575061076282611707565b5b9050919050565b610772611771565b73ffffffffffffffffffffffffffffffffffffffff16610790610fa6565b73ffffffffffffffffffffffffffffffffffffffff16146107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dd906134f6565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b606060028054610812906139d5565b80601f016020809104026020016040519081016040528092919081815260200182805461083e906139d5565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b60006108a082611779565b6108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690613656565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092582610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90613596565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b5611771565b73ffffffffffffffffffffffffffffffffffffffff1614806109e457506109e3816109de611771565b61157b565b5b610a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90613456565b60405180910390fd5b610a2e838383611787565b505050565b6000600154905090565b610a48838383611839565b505050565b6000610a5883610e35565b8210610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613356565b60405180910390fd5b6000610aa3610a33565b905060008060005b83811015610c09576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610b9d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf55786841415610be6578195505050505050610c45565b8380610bf190613a38565b9450505b508080610c0190613a38565b915050610aab565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90613616565b60405180910390fd5b92915050565b610c53611771565b73ffffffffffffffffffffffffffffffffffffffff16610c71610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe906134f6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610d0557600080fd5b565b610d22838383604051806020016040528060008152506113e4565b505050565b6000610d31610a33565b8210610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613416565b60405180910390fd5b819050919050565b610d82611771565b73ffffffffffffffffffffffffffffffffffffffff16610da0610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906134f6565b60405180910390fd5b818160099190610e07929190612960565b505050565b600a60009054906101000a900460ff1681565b6000610e2a82611df2565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d906134b6565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f26611771565b73ffffffffffffffffffffffffffffffffffffffff16610f44610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f91906134f6565b60405180910390fd5b610fa46000611ff5565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610fde906139d5565b80601f016020809104026020016040519081016040528092919081815260200182805461100a906139d5565b80156110575780601f1061102c57610100808354040283529160200191611057565b820191906000526020600020905b81548152906001019060200180831161103a57829003601f168201915b5050505050905090565b600061106b610a33565b9050600082116110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906133d6565b60405180910390fd5b60058211156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb906133f6565b60405180910390fd5b600a60009054906101000a900460ff1615611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613376565b60405180910390fd5b61014d8110156111af5761014d60018261115e9190613790565b111561119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690613476565b60405180910390fd5b6111aa3360016120b9565b61125f565b6103e782826111be9190613790565b11156111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613496565b60405180910390fd5b66470de4df820000826112129190613817565b341015611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90613576565b60405180910390fd5b61125e33836120b9565b5b5050565b61126b611771565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090613536565b60405180910390fd5b80600760006112e6611771565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611393611771565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113d89190613319565b60405180910390a35050565b6113ef848484611839565b6113fb848484846120d7565b61143a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611431906135b6565b60405180910390fd5b50505050565b606061144b82611779565b61148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190613516565b60405180910390fd5b600061149461226e565b905060008151116114b457604051806020016040528060008152506114df565b806114be84612300565b6040516020016114cf92919061328e565b6040516020818303038152906040525b915050919050565b600980546114f4906139d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611520906139d5565b801561156d5780601f106115425761010080835404028352916020019161156d565b820191906000526020600020905b81548152906001019060200180831161155057829003601f168201915b505050505081565b60085481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611617611771565b73ffffffffffffffffffffffffffffffffffffffff16611635610fa6565b73ffffffffffffffffffffffffffffffffffffffff161461168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906134f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613396565b60405180910390fd5b61170481611ff5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061184482611df2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661186b611771565b73ffffffffffffffffffffffffffffffffffffffff1614806118c75750611890611771565b73ffffffffffffffffffffffffffffffffffffffff166118af84610895565b73ffffffffffffffffffffffffffffffffffffffff16145b806118e357506118e282600001516118dd611771565b61157b565b5b905080611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613556565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e906134d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90613436565b60405180910390fd5b611a148585856001612461565b611a246000848460000151611787565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611a929190613871565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611b36919061374a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611c3c9190613790565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d8257611cb281611779565b15611d81576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611dea8686866001612467565b505050505050565b611dfa6129e6565b611e0382611779565b611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e39906133b6565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000058310611ea65760017f000000000000000000000000000000000000000000000000000000000000000584611e9991906138a5565b611ea39190613790565b90505b60008390505b818110611fb4576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611fa057809350505050611ff0565b508080611fac906139ab565b915050611eac565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613636565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120d382826040518060200160405280600081525061246d565b5050565b60006120f88473ffffffffffffffffffffffffffffffffffffffff1661294d565b15612261578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612121611771565b8786866040518563ffffffff1660e01b815260040161214394939291906132cd565b602060405180830381600087803b15801561215d57600080fd5b505af192505050801561218e57506040513d601f19601f8201168201806040525081019061218b9190612d89565b60015b612211573d80600081146121be576040519150601f19603f3d011682016040523d82523d6000602084013e6121c3565b606091505b50600081511415612209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612200906135b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612266565b600190505b949350505050565b60606009805461227d906139d5565b80601f01602080910402602001604051908101604052809291908181526020018280546122a9906139d5565b80156122f65780601f106122cb576101008083540402835291602001916122f6565b820191906000526020600020905b8154815290600101906020018083116122d957829003601f168201915b5050505050905090565b60606000821415612348576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061245c565b600082905060005b6000821461237a57808061236390613a38565b915050600a8261237391906137e6565b9150612350565b60008167ffffffffffffffff81111561239657612395613b6e565b5b6040519080825280601f01601f1916602001820160405280156123c85781602001600182028036833780820191505090505b5090505b60008514612455576001826123e191906138a5565b9150600a856123f09190613a81565b60306123fc9190613790565b60f81b81838151811061241257612411613b3f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561244e91906137e6565b94506123cc565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db906135f6565b60405180910390fd5b6124ed81611779565b1561252d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612524906135d6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000005831115612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790613676565b60405180910390fd5b61259d6000858386612461565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161269a919061374a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516126c1919061374a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561293057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128d060008884886120d7565b61290f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612906906135b6565b60405180910390fd5b818061291a90613a38565b925050808061292890613a38565b91505061285f565b50806001819055506129456000878588612467565b505050505050565b600080823b905060008111915050919050565b82805461296c906139d5565b90600052602060002090601f01602090048101928261298e57600085556129d5565b82601f106129a757803560ff19168380011785556129d5565b828001600101855582156129d5579182015b828111156129d45782358255916020019190600101906129b9565b5b5090506129e29190612a20565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612a39576000816000905550600101612a21565b5090565b6000612a50612a4b846136d6565b6136b1565b905082815260208101848484011115612a6c57612a6b613bac565b5b612a77848285613969565b509392505050565b600081359050612a8e8161427c565b92915050565b600081359050612aa381614293565b92915050565b600081359050612ab8816142aa565b92915050565b600081519050612acd816142aa565b92915050565b600082601f830112612ae857612ae7613ba2565b5b8135612af8848260208601612a3d565b91505092915050565b60008083601f840112612b1757612b16613ba2565b5b8235905067ffffffffffffffff811115612b3457612b33613b9d565b5b602083019150836001820283011115612b5057612b4f613ba7565b5b9250929050565b600081359050612b66816142c1565b92915050565b600060208284031215612b8257612b81613bb6565b5b6000612b9084828501612a7f565b91505092915050565b60008060408385031215612bb057612baf613bb6565b5b6000612bbe85828601612a7f565b9250506020612bcf85828601612a7f565b9150509250929050565b600080600060608486031215612bf257612bf1613bb6565b5b6000612c0086828701612a7f565b9350506020612c1186828701612a7f565b9250506040612c2286828701612b57565b9150509250925092565b60008060008060808587031215612c4657612c45613bb6565b5b6000612c5487828801612a7f565b9450506020612c6587828801612a7f565b9350506040612c7687828801612b57565b925050606085013567ffffffffffffffff811115612c9757612c96613bb1565b5b612ca387828801612ad3565b91505092959194509250565b60008060408385031215612cc657612cc5613bb6565b5b6000612cd485828601612a7f565b9250506020612ce585828601612a94565b9150509250929050565b60008060408385031215612d0657612d05613bb6565b5b6000612d1485828601612a7f565b9250506020612d2585828601612b57565b9150509250929050565b600060208284031215612d4557612d44613bb6565b5b6000612d5384828501612a94565b91505092915050565b600060208284031215612d7257612d71613bb6565b5b6000612d8084828501612aa9565b91505092915050565b600060208284031215612d9f57612d9e613bb6565b5b6000612dad84828501612abe565b91505092915050565b60008060208385031215612dcd57612dcc613bb6565b5b600083013567ffffffffffffffff811115612deb57612dea613bb1565b5b612df785828601612b01565b92509250509250929050565b600060208284031215612e1957612e18613bb6565b5b6000612e2784828501612b57565b91505092915050565b612e39816138d9565b82525050565b612e48816138eb565b82525050565b6000612e5982613707565b612e63818561371d565b9350612e73818560208601613978565b612e7c81613bbb565b840191505092915050565b6000612e9282613712565b612e9c818561372e565b9350612eac818560208601613978565b612eb581613bbb565b840191505092915050565b6000612ecb82613712565b612ed5818561373f565b9350612ee5818560208601613978565b80840191505092915050565b6000612efe60228361372e565b9150612f0982613bcc565b604082019050919050565b6000612f2160068361372e565b9150612f2c82613c1b565b602082019050919050565b6000612f4460268361372e565b9150612f4f82613c44565b604082019050919050565b6000612f67602a8361372e565b9150612f7282613c93565b604082019050919050565b6000612f8a600a8361372e565b9150612f9582613ce2565b602082019050919050565b6000612fad60128361372e565b9150612fb882613d0b565b602082019050919050565b6000612fd060238361372e565b9150612fdb82613d34565b604082019050919050565b6000612ff360258361372e565b9150612ffe82613d83565b604082019050919050565b600061301660398361372e565b915061302182613dd2565b604082019050919050565b600061303960168361372e565b915061304482613e21565b602082019050919050565b600061305c60128361372e565b915061306782613e4a565b602082019050919050565b600061307f602b8361372e565b915061308a82613e73565b604082019050919050565b60006130a260268361372e565b91506130ad82613ec2565b604082019050919050565b60006130c560208361372e565b91506130d082613f11565b602082019050919050565b60006130e8602f8361372e565b91506130f382613f3a565b604082019050919050565b600061310b601a8361372e565b915061311682613f89565b602082019050919050565b600061312e60328361372e565b915061313982613fb2565b604082019050919050565b600061315160168361372e565b915061315c82614001565b602082019050919050565b600061317460228361372e565b915061317f8261402a565b604082019050919050565b600061319760338361372e565b91506131a282614079565b604082019050919050565b60006131ba601d8361372e565b91506131c5826140c8565b602082019050919050565b60006131dd60218361372e565b91506131e8826140f1565b604082019050919050565b6000613200602e8361372e565b915061320b82614140565b604082019050919050565b6000613223602f8361372e565b915061322e8261418f565b604082019050919050565b6000613246602d8361372e565b9150613251826141de565b604082019050919050565b600061326960228361372e565b91506132748261422d565b604082019050919050565b6132888161395f565b82525050565b600061329a8285612ec0565b91506132a68284612ec0565b91508190509392505050565b60006020820190506132c76000830184612e30565b92915050565b60006080820190506132e26000830187612e30565b6132ef6020830186612e30565b6132fc604083018561327f565b818103606083015261330e8184612e4e565b905095945050505050565b600060208201905061332e6000830184612e3f565b92915050565b6000602082019050818103600083015261334e8184612e87565b905092915050565b6000602082019050818103600083015261336f81612ef1565b9050919050565b6000602082019050818103600083015261338f81612f14565b9050919050565b600060208201905081810360008301526133af81612f37565b9050919050565b600060208201905081810360008301526133cf81612f5a565b9050919050565b600060208201905081810360008301526133ef81612f7d565b9050919050565b6000602082019050818103600083015261340f81612fa0565b9050919050565b6000602082019050818103600083015261342f81612fc3565b9050919050565b6000602082019050818103600083015261344f81612fe6565b9050919050565b6000602082019050818103600083015261346f81613009565b9050919050565b6000602082019050818103600083015261348f8161302c565b9050919050565b600060208201905081810360008301526134af8161304f565b9050919050565b600060208201905081810360008301526134cf81613072565b9050919050565b600060208201905081810360008301526134ef81613095565b9050919050565b6000602082019050818103600083015261350f816130b8565b9050919050565b6000602082019050818103600083015261352f816130db565b9050919050565b6000602082019050818103600083015261354f816130fe565b9050919050565b6000602082019050818103600083015261356f81613121565b9050919050565b6000602082019050818103600083015261358f81613144565b9050919050565b600060208201905081810360008301526135af81613167565b9050919050565b600060208201905081810360008301526135cf8161318a565b9050919050565b600060208201905081810360008301526135ef816131ad565b9050919050565b6000602082019050818103600083015261360f816131d0565b9050919050565b6000602082019050818103600083015261362f816131f3565b9050919050565b6000602082019050818103600083015261364f81613216565b9050919050565b6000602082019050818103600083015261366f81613239565b9050919050565b6000602082019050818103600083015261368f8161325c565b9050919050565b60006020820190506136ab600083018461327f565b92915050565b60006136bb6136cc565b90506136c78282613a07565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f1576136f0613b6e565b5b6136fa82613bbb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061375582613923565b915061376083613923565b9250826fffffffffffffffffffffffffffffffff0382111561378557613784613ab2565b5b828201905092915050565b600061379b8261395f565b91506137a68361395f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137db576137da613ab2565b5b828201905092915050565b60006137f18261395f565b91506137fc8361395f565b92508261380c5761380b613ae1565b5b828204905092915050565b60006138228261395f565b915061382d8361395f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561386657613865613ab2565b5b828202905092915050565b600061387c82613923565b915061388783613923565b92508282101561389a57613899613ab2565b5b828203905092915050565b60006138b08261395f565b91506138bb8361395f565b9250828210156138ce576138cd613ab2565b5b828203905092915050565b60006138e48261393f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561399657808201518184015260208101905061397b565b838111156139a5576000848401525b50505050565b60006139b68261395f565b915060008214156139ca576139c9613ab2565b5b600182039050919050565b600060028204905060018216806139ed57607f821691505b60208210811415613a0157613a00613b10565b5b50919050565b613a1082613bbb565b810181811067ffffffffffffffff82111715613a2f57613a2e613b6e565b5b80604052505050565b6000613a438261395f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a7657613a75613ab2565b5b600182019050919050565b6000613a8c8261395f565b9150613a978361395f565b925082613aa757613aa6613ae1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b7f45786365656473206d6178207065722074780000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f45786365656473206d61782066726565206d696e747300000000000000000000600082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614285816138d9565b811461429057600080fd5b50565b61429c816138eb565b81146142a757600080fd5b50565b6142b3816138f7565b81146142be57600080fd5b50565b6142ca8161395f565b81146142d557600080fd5b5056fea2646970667358221220c3e0c5ed60a4cd95592a2aef3c927fa71923e6dc5286468446d3fba0d57542d264736f6c63430008070033
Deployed Bytecode Sourcemap
38269:1672:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23708:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39625:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25434:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26959:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26522:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22272:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27809:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22900:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39497:120;;;:::i;:::-;;28014:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22435:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39835:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38682:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25257:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24134:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37571:94;;;;;;;;;;;;;:::i;:::-;;36920:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25589:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38771:718;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27227:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28234:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25750:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38649:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32565:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27564:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37820:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23708:370;23835:4;23880:25;23865:40;;;:11;:40;;;;:99;;;;23931:33;23916:48;;;:11;:48;;;;23865:99;:160;;;;23990:35;23975:50;;;:11;:50;;;;23865:160;:207;;;;24036:36;24060:11;24036:23;:36::i;:::-;23865:207;23851:221;;23708:370;;;:::o;39625:81::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39692:6:::1;39683;;:15;;;;;;;;;;;;;;;;;;39625:81:::0;:::o;25434:94::-;25488:13;25517:5;25510:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25434:94;:::o;26959:204::-;27027:7;27051:16;27059:7;27051;:16::i;:::-;27043:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27133:15;:24;27149:7;27133:24;;;;;;;;;;;;;;;;;;;;;27126:31;;26959:204;;;:::o;26522:379::-;26591:13;26607:24;26623:7;26607:15;:24::i;:::-;26591:40;;26652:5;26646:11;;:2;:11;;;;26638:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26737:5;26721:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26746:37;26763:5;26770:12;:10;:12::i;:::-;26746:16;:37::i;:::-;26721:62;26705:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;26867:28;26876:2;26880:7;26889:5;26867:8;:28::i;:::-;26584:317;26522:379;;:::o;22272:94::-;22325:7;22348:12;;22341:19;;22272:94;:::o;27809:142::-;27917:28;27927:4;27933:2;27937:7;27917:9;:28::i;:::-;27809:142;;;:::o;22900:744::-;23009:7;23044:16;23054:5;23044:9;:16::i;:::-;23036:5;:24;23028:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23106:22;23131:13;:11;:13::i;:::-;23106:38;;23151:19;23181:25;23231:9;23226:350;23250:14;23246:1;:18;23226:350;;;23280:31;23314:11;:14;23326:1;23314:14;;;;;;;;;;;23280:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23367:1;23341:28;;:9;:14;;;:28;;;23337:89;;23402:9;:14;;;23382:34;;23337:89;23459:5;23438:26;;:17;:26;;;23434:135;;;23496:5;23481:11;:20;23477:59;;;23523:1;23516:8;;;;;;;;;23477:59;23546:13;;;;;:::i;:::-;;;;23434:135;23271:305;23266:3;;;;;:::i;:::-;;;;23226:350;;;;23582:56;;;;;;;;;;:::i;:::-;;;;;;;;22900:744;;;;;:::o;39497:120::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39569:10:::1;39561:24;;:47;39586:21;39561:47;;;;;;;;;;;;;;;;;;;;;;;39553:56;;;::::0;::::1;;39497:120::o:0;28014:157::-;28126:39;28143:4;28149:2;28153:7;28126:39;;;;;;;;;;;;:16;:39::i;:::-;28014:157;;;:::o;22435:177::-;22502:7;22534:13;:11;:13::i;:::-;22526:5;:21;22518:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22601:5;22594:12;;22435:177;;;:::o;39835:103::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39923:7:::1;;39908:12;:22;;;;;;;:::i;:::-;;39835:103:::0;;:::o;38682:25::-;;;;;;;;;;;;;:::o;25257:118::-;25321:7;25344:20;25356:7;25344:11;:20::i;:::-;:25;;;25337:32;;25257:118;;;:::o;24134:211::-;24198:7;24239:1;24222:19;;:5;:19;;;;24214:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24311:12;:19;24324:5;24311:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24303:36;;24296:43;;24134:211;;;:::o;37571:94::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37636:21:::1;37654:1;37636:9;:21::i;:::-;37571:94::o:0;36920:87::-;36966:7;36993:6;;;;;;;;;;;36986:13;;36920:87;:::o;25589:98::-;25645:13;25674:7;25667:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25589:98;:::o;38771:718::-;38832:14;38849:13;:11;:13::i;:::-;38832:30;;38895:1;38881:11;:15;38873:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;38590:1;38929:11;:30;;38921:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39001:6;;;;;;;;;;;39000:7;38992:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;38503:3;39034:6;:19;39031:451;;;38503:3;39086:1;39077:6;:10;;;;:::i;:::-;:24;;39069:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39212:23;39222:10;39233:1;39212:9;:23::i;:::-;39031:451;;;38545:3;39285:11;39276:6;:20;;;;:::i;:::-;:36;;39268:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38630:10;39370:11;:26;;;;:::i;:::-;39357:9;:39;;39349:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39437:33;39447:10;39458:11;39437:9;:33::i;:::-;39031:451;38821:668;38771:718;:::o;27227:274::-;27330:12;:10;:12::i;:::-;27318:24;;:8;:24;;;;27310:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27427:8;27382:18;:32;27401:12;:10;:12::i;:::-;27382:32;;;;;;;;;;;;;;;:42;27415:8;27382:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27476:8;27447:48;;27462:12;:10;:12::i;:::-;27447:48;;;27486:8;27447:48;;;;;;:::i;:::-;;;;;;;;27227:274;;:::o;28234:311::-;28371:28;28381:4;28387:2;28391:7;28371:9;:28::i;:::-;28422:48;28445:4;28451:2;28455:7;28464:5;28422:22;:48::i;:::-;28406:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;28234:311;;;;:::o;25750:394::-;25848:13;25889:16;25897:7;25889;:16::i;:::-;25873:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25979:21;26003:10;:8;:10::i;:::-;25979:34;;26058:1;26040:7;26034:21;:25;:104;;;;;;;;;;;;;;;;;26095:7;26104:18;:7;:16;:18::i;:::-;26078:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26034:104;26020:118;;;25750:394;;;:::o;38649:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32565:43::-;;;;:::o;27564:186::-;27686:4;27709:18;:25;27728:5;27709:25;;;;;;;;;;;;;;;:35;27735:8;27709:35;;;;;;;;;;;;;;;;;;;;;;;;;27702:42;;27564:186;;;;:::o;37820:192::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37929:1:::1;37909:22;;:8;:22;;;;37901:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37985:19;37995:8;37985:9;:19::i;:::-;37820:192:::0;:::o;12776:157::-;12861:4;12900:25;12885:40;;;:11;:40;;;;12878:47;;12776:157;;;:::o;20090:98::-;20143:7;20170:10;20163:17;;20090:98;:::o;28784:105::-;28841:4;28871:12;;28861:7;:22;28854:29;;28784:105;;;:::o;32387:172::-;32511:2;32484:15;:24;32500:7;32484:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32545:7;32541:2;32525:28;;32534:5;32525:28;;;;;;;;;;;;32387:172;;;:::o;30752:1529::-;30849:35;30887:20;30899:7;30887:11;:20::i;:::-;30849:58;;30916:22;30958:13;:18;;;30942:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;31011:12;:10;:12::i;:::-;30987:36;;:20;30999:7;30987:11;:20::i;:::-;:36;;;30942:81;:142;;;;31034:50;31051:13;:18;;;31071:12;:10;:12::i;:::-;31034:16;:50::i;:::-;30942:142;30916:169;;31110:17;31094:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31242:4;31220:26;;:13;:18;;;:26;;;31204:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;31331:1;31317:16;;:2;:16;;;;31309:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31384:43;31406:4;31412:2;31416:7;31425:1;31384:21;:43::i;:::-;31484:49;31501:1;31505:7;31514:13;:18;;;31484:8;:49::i;:::-;31572:1;31542:12;:18;31555:4;31542:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31608:1;31580:12;:16;31593:2;31580:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31639:43;;;;;;;;31654:2;31639:43;;;;;;31665:15;31639:43;;;;;31616:11;:20;31628:7;31616:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31910:19;31942:1;31932:7;:11;;;;:::i;:::-;31910:33;;31995:1;31954:43;;:11;:24;31966:11;31954:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;31950:236;;;32012:20;32020:11;32012:7;:20::i;:::-;32008:171;;;32072:97;;;;;;;;32099:13;:18;;;32072:97;;;;;;32130:13;:28;;;32072:97;;;;;32045:11;:24;32057:11;32045:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32008:171;31950:236;32218:7;32214:2;32199:27;;32208:4;32199:27;;;;;;;;;;;;32233:42;32254:4;32260:2;32264:7;32273:1;32233:20;:42::i;:::-;30842:1439;;;30752:1529;;;:::o;24597:606::-;24673:21;;:::i;:::-;24714:16;24722:7;24714;:16::i;:::-;24706:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24786:26;24834:12;24823:7;:23;24819:93;;24903:1;24888:12;24878:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;24857:47;;24819:93;24925:12;24940:7;24925:22;;24920:212;24957:18;24949:4;:26;24920:212;;24994:31;25028:11;:17;25040:4;25028:17;;;;;;;;;;;24994:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25084:1;25058:28;;:9;:14;;;:28;;;25054:71;;25106:9;25099:16;;;;;;;25054:71;24985:147;24977:6;;;;;:::i;:::-;;;;24920:212;;;;25140:57;;;;;;;;;;:::i;:::-;;;;;;;;24597:606;;;;:::o;38020:173::-;38076:16;38095:6;;;;;;;;;;;38076:25;;38121:8;38112:6;;:17;;;;;;;;;;;;;;;;;;38176:8;38145:40;;38166:8;38145:40;;;;;;;;;;;;38065:128;38020:173;:::o;28895:98::-;28960:27;28970:2;28974:8;28960:27;;;;;;;;;;;;:9;:27::i;:::-;28895:98;;:::o;34098:690::-;34235:4;34252:15;:2;:13;;;:15::i;:::-;34248:535;;;34307:2;34291:36;;;34328:12;:10;:12::i;:::-;34342:4;34348:7;34357:5;34291:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34278:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34539:1;34522:6;:13;:18;34518:215;;;34555:61;;;;;;;;;;:::i;:::-;;;;;;;;34518:215;34701:6;34695:13;34686:6;34682:2;34678:15;34671:38;34278:464;34423:45;;;34413:55;;;:6;:55;;;;34406:62;;;;;34248:535;34771:4;34764:11;;34098:690;;;;;;;:::o;39714:113::-;39774:13;39807:12;39800:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39714:113;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;35250:141::-;;;;;:::o;35777:140::-;;;;;:::o;29248:1272::-;29353:20;29376:12;;29353:35;;29417:1;29403:16;;:2;:16;;;;29395:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29594:21;29602:12;29594:7;:21::i;:::-;29593:22;29585:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29676:12;29664:8;:24;;29656:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29736:61;29766:1;29770:2;29774:12;29788:8;29736:21;:61::i;:::-;29806:30;29839:12;:16;29852:2;29839:16;;;;;;;;;;;;;;;29806:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29881:119;;;;;;;;29931:8;29901:11;:19;;;:39;;;;:::i;:::-;29881:119;;;;;;29984:8;29949:11;:24;;;:44;;;;:::i;:::-;29881:119;;;;;29862:12;:16;29875:2;29862:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30035:43;;;;;;;;30050:2;30035:43;;;;;;30061:15;30035:43;;;;;30007:11;:25;30019:12;30007:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30087:20;30110:12;30087:35;;30136:9;30131:281;30155:8;30151:1;:12;30131:281;;;30209:12;30205:2;30184:38;;30201:1;30184:38;;;;;;;;;;;;30249:59;30280:1;30284:2;30288:12;30302:5;30249:22;:59::i;:::-;30231:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;30390:14;;;;;:::i;:::-;;;;30165:3;;;;;:::i;:::-;;;;30131:281;;;;30435:12;30420;:27;;;;30454:60;30483:1;30487:2;30491:12;30505:8;30454:20;:60::i;:::-;29346:1174;;;29248:1272;;;:::o;2836:387::-;2896:4;3104:12;3171:7;3159:20;3151:28;;3214:1;3207:4;:8;3200:15;;;2836:387;;;:::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:323::-;5471:6;5520:2;5508:9;5499:7;5495:23;5491:32;5488:119;;;5526:79;;:::i;:::-;5488:119;5646:1;5671:50;5713:7;5704:6;5693:9;5689:22;5671:50;:::i;:::-;5661:60;;5617:114;5415:323;;;;:::o;5744:327::-;5802:6;5851:2;5839:9;5830:7;5826:23;5822:32;5819:119;;;5857:79;;:::i;:::-;5819:119;5977:1;6002:52;6046:7;6037:6;6026:9;6022:22;6002:52;:::i;:::-;5992:62;;5948:116;5744:327;;;;:::o;6077:349::-;6146:6;6195:2;6183:9;6174:7;6170:23;6166:32;6163:119;;;6201:79;;:::i;:::-;6163:119;6321:1;6346:63;6401:7;6392:6;6381:9;6377:22;6346:63;:::i;:::-;6336:73;;6292:127;6077:349;;;;:::o;6432:529::-;6503:6;6511;6560:2;6548:9;6539:7;6535:23;6531:32;6528:119;;;6566:79;;:::i;:::-;6528:119;6714:1;6703:9;6699:17;6686:31;6744:18;6736:6;6733:30;6730:117;;;6766:79;;:::i;:::-;6730:117;6879:65;6936:7;6927:6;6916:9;6912:22;6879:65;:::i;:::-;6861:83;;;;6657:297;6432:529;;;;;:::o;6967:329::-;7026:6;7075:2;7063:9;7054:7;7050:23;7046:32;7043:119;;;7081:79;;:::i;:::-;7043:119;7201:1;7226:53;7271:7;7262:6;7251:9;7247:22;7226:53;:::i;:::-;7216:63;;7172:117;6967:329;;;;:::o;7302:118::-;7389:24;7407:5;7389:24;:::i;:::-;7384:3;7377:37;7302:118;;:::o;7426:109::-;7507:21;7522:5;7507:21;:::i;:::-;7502:3;7495:34;7426:109;;:::o;7541:360::-;7627:3;7655:38;7687:5;7655:38;:::i;:::-;7709:70;7772:6;7767:3;7709:70;:::i;:::-;7702:77;;7788:52;7833:6;7828:3;7821:4;7814:5;7810:16;7788:52;:::i;:::-;7865:29;7887:6;7865:29;:::i;:::-;7860:3;7856:39;7849:46;;7631:270;7541:360;;;;:::o;7907:364::-;7995:3;8023:39;8056:5;8023:39;:::i;:::-;8078:71;8142:6;8137:3;8078:71;:::i;:::-;8071:78;;8158:52;8203:6;8198:3;8191:4;8184:5;8180:16;8158:52;:::i;:::-;8235:29;8257:6;8235:29;:::i;:::-;8230:3;8226:39;8219:46;;7999:272;7907:364;;;;:::o;8277:377::-;8383:3;8411:39;8444:5;8411:39;:::i;:::-;8466:89;8548:6;8543:3;8466:89;:::i;:::-;8459:96;;8564:52;8609:6;8604:3;8597:4;8590:5;8586:16;8564:52;:::i;:::-;8641:6;8636:3;8632:16;8625:23;;8387:267;8277:377;;;;:::o;8660:366::-;8802:3;8823:67;8887:2;8882:3;8823:67;:::i;:::-;8816:74;;8899:93;8988:3;8899:93;:::i;:::-;9017:2;9012:3;9008:12;9001:19;;8660:366;;;:::o;9032:365::-;9174:3;9195:66;9259:1;9254:3;9195:66;:::i;:::-;9188:73;;9270:93;9359:3;9270:93;:::i;:::-;9388:2;9383:3;9379:12;9372:19;;9032:365;;;:::o;9403:366::-;9545:3;9566:67;9630:2;9625:3;9566:67;:::i;:::-;9559:74;;9642:93;9731:3;9642:93;:::i;:::-;9760:2;9755:3;9751:12;9744:19;;9403:366;;;:::o;9775:::-;9917:3;9938:67;10002:2;9997:3;9938:67;:::i;:::-;9931:74;;10014:93;10103:3;10014:93;:::i;:::-;10132:2;10127:3;10123:12;10116:19;;9775:366;;;:::o;10147:::-;10289:3;10310:67;10374:2;10369:3;10310:67;:::i;:::-;10303:74;;10386:93;10475:3;10386:93;:::i;:::-;10504:2;10499:3;10495:12;10488:19;;10147:366;;;:::o;10519:::-;10661:3;10682:67;10746:2;10741:3;10682:67;:::i;:::-;10675:74;;10758:93;10847:3;10758:93;:::i;:::-;10876:2;10871:3;10867:12;10860:19;;10519:366;;;:::o;10891:::-;11033:3;11054:67;11118:2;11113:3;11054:67;:::i;:::-;11047:74;;11130:93;11219:3;11130:93;:::i;:::-;11248:2;11243:3;11239:12;11232:19;;10891:366;;;:::o;11263:::-;11405:3;11426:67;11490:2;11485:3;11426:67;:::i;:::-;11419:74;;11502:93;11591:3;11502:93;:::i;:::-;11620:2;11615:3;11611:12;11604:19;;11263:366;;;:::o;11635:::-;11777:3;11798:67;11862:2;11857:3;11798:67;:::i;:::-;11791:74;;11874:93;11963:3;11874:93;:::i;:::-;11992:2;11987:3;11983:12;11976:19;;11635:366;;;:::o;12007:::-;12149:3;12170:67;12234:2;12229:3;12170:67;:::i;:::-;12163:74;;12246:93;12335:3;12246:93;:::i;:::-;12364:2;12359:3;12355:12;12348:19;;12007:366;;;:::o;12379:::-;12521:3;12542:67;12606:2;12601:3;12542:67;:::i;:::-;12535:74;;12618:93;12707:3;12618:93;:::i;:::-;12736:2;12731:3;12727:12;12720:19;;12379:366;;;:::o;12751:::-;12893:3;12914:67;12978:2;12973:3;12914:67;:::i;:::-;12907:74;;12990:93;13079:3;12990:93;:::i;:::-;13108:2;13103:3;13099:12;13092:19;;12751:366;;;:::o;13123:::-;13265:3;13286:67;13350:2;13345:3;13286:67;:::i;:::-;13279:74;;13362:93;13451:3;13362:93;:::i;:::-;13480:2;13475:3;13471:12;13464:19;;13123:366;;;:::o;13495:::-;13637:3;13658:67;13722:2;13717:3;13658:67;:::i;:::-;13651:74;;13734:93;13823:3;13734:93;:::i;:::-;13852:2;13847:3;13843:12;13836:19;;13495:366;;;:::o;13867:::-;14009:3;14030:67;14094:2;14089:3;14030:67;:::i;:::-;14023:74;;14106:93;14195:3;14106:93;:::i;:::-;14224:2;14219:3;14215:12;14208:19;;13867:366;;;:::o;14239:::-;14381:3;14402:67;14466:2;14461:3;14402:67;:::i;:::-;14395:74;;14478:93;14567:3;14478:93;:::i;:::-;14596:2;14591:3;14587:12;14580:19;;14239:366;;;:::o;14611:::-;14753:3;14774:67;14838:2;14833:3;14774:67;:::i;:::-;14767:74;;14850:93;14939:3;14850:93;:::i;:::-;14968:2;14963:3;14959:12;14952:19;;14611:366;;;:::o;14983:::-;15125:3;15146:67;15210:2;15205:3;15146:67;:::i;:::-;15139:74;;15222:93;15311:3;15222:93;:::i;:::-;15340:2;15335:3;15331:12;15324:19;;14983:366;;;:::o;15355:::-;15497:3;15518:67;15582:2;15577:3;15518:67;:::i;:::-;15511:74;;15594:93;15683:3;15594:93;:::i;:::-;15712:2;15707:3;15703:12;15696:19;;15355:366;;;:::o;15727:::-;15869:3;15890:67;15954:2;15949:3;15890:67;:::i;:::-;15883:74;;15966:93;16055:3;15966:93;:::i;:::-;16084:2;16079:3;16075:12;16068:19;;15727:366;;;:::o;16099:::-;16241:3;16262:67;16326:2;16321:3;16262:67;:::i;:::-;16255:74;;16338:93;16427:3;16338:93;:::i;:::-;16456:2;16451:3;16447:12;16440:19;;16099:366;;;:::o;16471:::-;16613:3;16634:67;16698:2;16693:3;16634:67;:::i;:::-;16627:74;;16710:93;16799:3;16710:93;:::i;:::-;16828:2;16823:3;16819:12;16812:19;;16471:366;;;:::o;16843:::-;16985:3;17006:67;17070:2;17065:3;17006:67;:::i;:::-;16999:74;;17082:93;17171:3;17082:93;:::i;:::-;17200:2;17195:3;17191:12;17184:19;;16843:366;;;:::o;17215:::-;17357:3;17378:67;17442:2;17437:3;17378:67;:::i;:::-;17371:74;;17454:93;17543:3;17454:93;:::i;:::-;17572:2;17567:3;17563:12;17556:19;;17215:366;;;:::o;17587:::-;17729:3;17750:67;17814:2;17809:3;17750:67;:::i;:::-;17743:74;;17826:93;17915:3;17826:93;:::i;:::-;17944:2;17939:3;17935:12;17928:19;;17587:366;;;:::o;17959:::-;18101:3;18122:67;18186:2;18181:3;18122:67;:::i;:::-;18115:74;;18198:93;18287:3;18198:93;:::i;:::-;18316:2;18311:3;18307:12;18300:19;;17959:366;;;:::o;18331:118::-;18418:24;18436:5;18418:24;:::i;:::-;18413:3;18406:37;18331:118;;:::o;18455:435::-;18635:3;18657:95;18748:3;18739:6;18657:95;:::i;:::-;18650:102;;18769:95;18860:3;18851:6;18769:95;:::i;:::-;18762:102;;18881:3;18874:10;;18455:435;;;;;:::o;18896:222::-;18989:4;19027:2;19016:9;19012:18;19004:26;;19040:71;19108:1;19097:9;19093:17;19084:6;19040:71;:::i;:::-;18896:222;;;;:::o;19124:640::-;19319:4;19357:3;19346:9;19342:19;19334:27;;19371:71;19439:1;19428:9;19424:17;19415:6;19371:71;:::i;:::-;19452:72;19520:2;19509:9;19505:18;19496:6;19452:72;:::i;:::-;19534;19602:2;19591:9;19587:18;19578:6;19534:72;:::i;:::-;19653:9;19647:4;19643:20;19638:2;19627:9;19623:18;19616:48;19681:76;19752:4;19743:6;19681:76;:::i;:::-;19673:84;;19124:640;;;;;;;:::o;19770:210::-;19857:4;19895:2;19884:9;19880:18;19872:26;;19908:65;19970:1;19959:9;19955:17;19946:6;19908:65;:::i;:::-;19770:210;;;;:::o;19986:313::-;20099:4;20137:2;20126:9;20122:18;20114:26;;20186:9;20180:4;20176:20;20172:1;20161:9;20157:17;20150:47;20214:78;20287:4;20278:6;20214:78;:::i;:::-;20206:86;;19986:313;;;;:::o;20305:419::-;20471:4;20509:2;20498:9;20494:18;20486:26;;20558:9;20552:4;20548:20;20544:1;20533:9;20529:17;20522:47;20586:131;20712:4;20586:131;:::i;:::-;20578:139;;20305:419;;;:::o;20730:::-;20896:4;20934:2;20923:9;20919:18;20911:26;;20983:9;20977:4;20973:20;20969:1;20958:9;20954:17;20947:47;21011:131;21137:4;21011:131;:::i;:::-;21003:139;;20730:419;;;:::o;21155:::-;21321:4;21359:2;21348:9;21344:18;21336:26;;21408:9;21402:4;21398:20;21394:1;21383:9;21379:17;21372:47;21436:131;21562:4;21436:131;:::i;:::-;21428:139;;21155:419;;;:::o;21580:::-;21746:4;21784:2;21773:9;21769:18;21761:26;;21833:9;21827:4;21823:20;21819:1;21808:9;21804:17;21797:47;21861:131;21987:4;21861:131;:::i;:::-;21853:139;;21580:419;;;:::o;22005:::-;22171:4;22209:2;22198:9;22194:18;22186:26;;22258:9;22252:4;22248:20;22244:1;22233:9;22229:17;22222:47;22286:131;22412:4;22286:131;:::i;:::-;22278:139;;22005:419;;;:::o;22430:::-;22596:4;22634:2;22623:9;22619:18;22611:26;;22683:9;22677:4;22673:20;22669:1;22658:9;22654:17;22647:47;22711:131;22837:4;22711:131;:::i;:::-;22703:139;;22430:419;;;:::o;22855:::-;23021:4;23059:2;23048:9;23044:18;23036:26;;23108:9;23102:4;23098:20;23094:1;23083:9;23079:17;23072:47;23136:131;23262:4;23136:131;:::i;:::-;23128:139;;22855:419;;;:::o;23280:::-;23446:4;23484:2;23473:9;23469:18;23461:26;;23533:9;23527:4;23523:20;23519:1;23508:9;23504:17;23497:47;23561:131;23687:4;23561:131;:::i;:::-;23553:139;;23280:419;;;:::o;23705:::-;23871:4;23909:2;23898:9;23894:18;23886:26;;23958:9;23952:4;23948:20;23944:1;23933:9;23929:17;23922:47;23986:131;24112:4;23986:131;:::i;:::-;23978:139;;23705:419;;;:::o;24130:::-;24296:4;24334:2;24323:9;24319:18;24311:26;;24383:9;24377:4;24373:20;24369:1;24358:9;24354:17;24347:47;24411:131;24537:4;24411:131;:::i;:::-;24403:139;;24130:419;;;:::o;24555:::-;24721:4;24759:2;24748:9;24744:18;24736:26;;24808:9;24802:4;24798:20;24794:1;24783:9;24779:17;24772:47;24836:131;24962:4;24836:131;:::i;:::-;24828:139;;24555:419;;;:::o;24980:::-;25146:4;25184:2;25173:9;25169:18;25161:26;;25233:9;25227:4;25223:20;25219:1;25208:9;25204:17;25197:47;25261:131;25387:4;25261:131;:::i;:::-;25253:139;;24980:419;;;:::o;25405:::-;25571:4;25609:2;25598:9;25594:18;25586:26;;25658:9;25652:4;25648:20;25644:1;25633:9;25629:17;25622:47;25686:131;25812:4;25686:131;:::i;:::-;25678:139;;25405:419;;;:::o;25830:::-;25996:4;26034:2;26023:9;26019:18;26011:26;;26083:9;26077:4;26073:20;26069:1;26058:9;26054:17;26047:47;26111:131;26237:4;26111:131;:::i;:::-;26103:139;;25830:419;;;:::o;26255:::-;26421:4;26459:2;26448:9;26444:18;26436:26;;26508:9;26502:4;26498:20;26494:1;26483:9;26479:17;26472:47;26536:131;26662:4;26536:131;:::i;:::-;26528:139;;26255:419;;;:::o;26680:::-;26846:4;26884:2;26873:9;26869:18;26861:26;;26933:9;26927:4;26923:20;26919:1;26908:9;26904:17;26897:47;26961:131;27087:4;26961:131;:::i;:::-;26953:139;;26680:419;;;:::o;27105:::-;27271:4;27309:2;27298:9;27294:18;27286:26;;27358:9;27352:4;27348:20;27344:1;27333:9;27329:17;27322:47;27386:131;27512:4;27386:131;:::i;:::-;27378:139;;27105:419;;;:::o;27530:::-;27696:4;27734:2;27723:9;27719:18;27711:26;;27783:9;27777:4;27773:20;27769:1;27758:9;27754:17;27747:47;27811:131;27937:4;27811:131;:::i;:::-;27803:139;;27530:419;;;:::o;27955:::-;28121:4;28159:2;28148:9;28144:18;28136:26;;28208:9;28202:4;28198:20;28194:1;28183:9;28179:17;28172:47;28236:131;28362:4;28236:131;:::i;:::-;28228:139;;27955:419;;;:::o;28380:::-;28546:4;28584:2;28573:9;28569:18;28561:26;;28633:9;28627:4;28623:20;28619:1;28608:9;28604:17;28597:47;28661:131;28787:4;28661:131;:::i;:::-;28653:139;;28380:419;;;:::o;28805:::-;28971:4;29009:2;28998:9;28994:18;28986:26;;29058:9;29052:4;29048:20;29044:1;29033:9;29029:17;29022:47;29086:131;29212:4;29086:131;:::i;:::-;29078:139;;28805:419;;;:::o;29230:::-;29396:4;29434:2;29423:9;29419:18;29411:26;;29483:9;29477:4;29473:20;29469:1;29458:9;29454:17;29447:47;29511:131;29637:4;29511:131;:::i;:::-;29503:139;;29230:419;;;:::o;29655:::-;29821:4;29859:2;29848:9;29844:18;29836:26;;29908:9;29902:4;29898:20;29894:1;29883:9;29879:17;29872:47;29936:131;30062:4;29936:131;:::i;:::-;29928:139;;29655:419;;;:::o;30080:::-;30246:4;30284:2;30273:9;30269:18;30261:26;;30333:9;30327:4;30323:20;30319:1;30308:9;30304:17;30297:47;30361:131;30487:4;30361:131;:::i;:::-;30353:139;;30080:419;;;:::o;30505:::-;30671:4;30709:2;30698:9;30694:18;30686:26;;30758:9;30752:4;30748:20;30744:1;30733:9;30729:17;30722:47;30786:131;30912:4;30786:131;:::i;:::-;30778:139;;30505:419;;;:::o;30930:::-;31096:4;31134:2;31123:9;31119:18;31111:26;;31183:9;31177:4;31173:20;31169:1;31158:9;31154:17;31147:47;31211:131;31337:4;31211:131;:::i;:::-;31203:139;;30930:419;;;:::o;31355:222::-;31448:4;31486:2;31475:9;31471:18;31463:26;;31499:71;31567:1;31556:9;31552:17;31543:6;31499:71;:::i;:::-;31355:222;;;;:::o;31583:129::-;31617:6;31644:20;;:::i;:::-;31634:30;;31673:33;31701:4;31693:6;31673:33;:::i;:::-;31583:129;;;:::o;31718:75::-;31751:6;31784:2;31778:9;31768:19;;31718:75;:::o;31799:307::-;31860:4;31950:18;31942:6;31939:30;31936:56;;;31972:18;;:::i;:::-;31936:56;32010:29;32032:6;32010:29;:::i;:::-;32002:37;;32094:4;32088;32084:15;32076:23;;31799:307;;;:::o;32112:98::-;32163:6;32197:5;32191:12;32181:22;;32112:98;;;:::o;32216:99::-;32268:6;32302:5;32296:12;32286:22;;32216:99;;;:::o;32321:168::-;32404:11;32438:6;32433:3;32426:19;32478:4;32473:3;32469:14;32454:29;;32321:168;;;;:::o;32495:169::-;32579:11;32613:6;32608:3;32601:19;32653:4;32648:3;32644:14;32629:29;;32495:169;;;;:::o;32670:148::-;32772:11;32809:3;32794:18;;32670:148;;;;:::o;32824:273::-;32864:3;32883:20;32901:1;32883:20;:::i;:::-;32878:25;;32917:20;32935:1;32917:20;:::i;:::-;32912:25;;33039:1;33003:34;32999:42;32996:1;32993:49;32990:75;;;33045:18;;:::i;:::-;32990:75;33089:1;33086;33082:9;33075:16;;32824:273;;;;:::o;33103:305::-;33143:3;33162:20;33180:1;33162:20;:::i;:::-;33157:25;;33196:20;33214:1;33196:20;:::i;:::-;33191:25;;33350:1;33282:66;33278:74;33275:1;33272:81;33269:107;;;33356:18;;:::i;:::-;33269:107;33400:1;33397;33393:9;33386:16;;33103:305;;;;:::o;33414:185::-;33454:1;33471:20;33489:1;33471:20;:::i;:::-;33466:25;;33505:20;33523:1;33505:20;:::i;:::-;33500:25;;33544:1;33534:35;;33549:18;;:::i;:::-;33534:35;33591:1;33588;33584:9;33579:14;;33414:185;;;;:::o;33605:348::-;33645:7;33668:20;33686:1;33668:20;:::i;:::-;33663:25;;33702:20;33720:1;33702:20;:::i;:::-;33697:25;;33890:1;33822:66;33818:74;33815:1;33812:81;33807:1;33800:9;33793:17;33789:105;33786:131;;;33897:18;;:::i;:::-;33786:131;33945:1;33942;33938:9;33927:20;;33605:348;;;;:::o;33959:191::-;33999:4;34019:20;34037:1;34019:20;:::i;:::-;34014:25;;34053:20;34071:1;34053:20;:::i;:::-;34048:25;;34092:1;34089;34086:8;34083:34;;;34097:18;;:::i;:::-;34083:34;34142:1;34139;34135:9;34127:17;;33959:191;;;;:::o;34156:::-;34196:4;34216:20;34234:1;34216:20;:::i;:::-;34211:25;;34250:20;34268:1;34250:20;:::i;:::-;34245:25;;34289:1;34286;34283:8;34280:34;;;34294:18;;:::i;:::-;34280:34;34339:1;34336;34332:9;34324:17;;34156:191;;;;:::o;34353:96::-;34390:7;34419:24;34437:5;34419:24;:::i;:::-;34408:35;;34353:96;;;:::o;34455:90::-;34489:7;34532:5;34525:13;34518:21;34507:32;;34455:90;;;:::o;34551:149::-;34587:7;34627:66;34620:5;34616:78;34605:89;;34551:149;;;:::o;34706:118::-;34743:7;34783:34;34776:5;34772:46;34761:57;;34706:118;;;:::o;34830:126::-;34867:7;34907:42;34900:5;34896:54;34885:65;;34830:126;;;:::o;34962:77::-;34999:7;35028:5;35017:16;;34962:77;;;:::o;35045:154::-;35129:6;35124:3;35119;35106:30;35191:1;35182:6;35177:3;35173:16;35166:27;35045:154;;;:::o;35205:307::-;35273:1;35283:113;35297:6;35294:1;35291:13;35283:113;;;35382:1;35377:3;35373:11;35367:18;35363:1;35358:3;35354:11;35347:39;35319:2;35316:1;35312:10;35307:15;;35283:113;;;35414:6;35411:1;35408:13;35405:101;;;35494:1;35485:6;35480:3;35476:16;35469:27;35405:101;35254:258;35205:307;;;:::o;35518:171::-;35557:3;35580:24;35598:5;35580:24;:::i;:::-;35571:33;;35626:4;35619:5;35616:15;35613:41;;;35634:18;;:::i;:::-;35613:41;35681:1;35674:5;35670:13;35663:20;;35518:171;;;:::o;35695:320::-;35739:6;35776:1;35770:4;35766:12;35756:22;;35823:1;35817:4;35813:12;35844:18;35834:81;;35900:4;35892:6;35888:17;35878:27;;35834:81;35962:2;35954:6;35951:14;35931:18;35928:38;35925:84;;;35981:18;;:::i;:::-;35925:84;35746:269;35695:320;;;:::o;36021:281::-;36104:27;36126:4;36104:27;:::i;:::-;36096:6;36092:40;36234:6;36222:10;36219:22;36198:18;36186:10;36183:34;36180:62;36177:88;;;36245:18;;:::i;:::-;36177:88;36285:10;36281:2;36274:22;36064:238;36021:281;;:::o;36308:233::-;36347:3;36370:24;36388:5;36370:24;:::i;:::-;36361:33;;36416:66;36409:5;36406:77;36403:103;;;36486:18;;:::i;:::-;36403:103;36533:1;36526:5;36522:13;36515:20;;36308:233;;;:::o;36547:176::-;36579:1;36596:20;36614:1;36596:20;:::i;:::-;36591:25;;36630:20;36648:1;36630:20;:::i;:::-;36625:25;;36669:1;36659:35;;36674:18;;:::i;:::-;36659:35;36715:1;36712;36708:9;36703:14;;36547:176;;;;:::o;36729:180::-;36777:77;36774:1;36767:88;36874:4;36871:1;36864:15;36898:4;36895:1;36888:15;36915:180;36963:77;36960:1;36953:88;37060:4;37057:1;37050:15;37084:4;37081:1;37074:15;37101:180;37149:77;37146:1;37139:88;37246:4;37243:1;37236:15;37270:4;37267:1;37260:15;37287:180;37335:77;37332:1;37325:88;37432:4;37429:1;37422:15;37456:4;37453:1;37446:15;37473:180;37521:77;37518:1;37511:88;37618:4;37615:1;37608:15;37642:4;37639:1;37632:15;37659:117;37768:1;37765;37758:12;37782:117;37891:1;37888;37881:12;37905:117;38014:1;38011;38004:12;38028:117;38137:1;38134;38127:12;38151:117;38260:1;38257;38250:12;38274:117;38383:1;38380;38373:12;38397:102;38438:6;38489:2;38485:7;38480:2;38473:5;38469:14;38465:28;38455:38;;38397:102;;;:::o;38505:221::-;38645:34;38641:1;38633:6;38629:14;38622:58;38714:4;38709:2;38701:6;38697:15;38690:29;38505:221;:::o;38732:156::-;38872:8;38868:1;38860:6;38856:14;38849:32;38732:156;:::o;38894:225::-;39034:34;39030:1;39022:6;39018:14;39011:58;39103:8;39098:2;39090:6;39086:15;39079:33;38894:225;:::o;39125:229::-;39265:34;39261:1;39253:6;39249:14;39242:58;39334:12;39329:2;39321:6;39317:15;39310:37;39125:229;:::o;39360:160::-;39500:12;39496:1;39488:6;39484:14;39477:36;39360:160;:::o;39526:168::-;39666:20;39662:1;39654:6;39650:14;39643:44;39526:168;:::o;39700:222::-;39840:34;39836:1;39828:6;39824:14;39817:58;39909:5;39904:2;39896:6;39892:15;39885:30;39700:222;:::o;39928:224::-;40068:34;40064:1;40056:6;40052:14;40045:58;40137:7;40132:2;40124:6;40120:15;40113:32;39928:224;:::o;40158:244::-;40298:34;40294:1;40286:6;40282:14;40275:58;40367:27;40362:2;40354:6;40350:15;40343:52;40158:244;:::o;40408:172::-;40548:24;40544:1;40536:6;40532:14;40525:48;40408:172;:::o;40586:168::-;40726:20;40722:1;40714:6;40710:14;40703:44;40586:168;:::o;40760:230::-;40900:34;40896:1;40888:6;40884:14;40877:58;40969:13;40964:2;40956:6;40952:15;40945:38;40760:230;:::o;40996:225::-;41136:34;41132:1;41124:6;41120:14;41113:58;41205:8;41200:2;41192:6;41188:15;41181:33;40996:225;:::o;41227:182::-;41367:34;41363:1;41355:6;41351:14;41344:58;41227:182;:::o;41415:234::-;41555:34;41551:1;41543:6;41539:14;41532:58;41624:17;41619:2;41611:6;41607:15;41600:42;41415:234;:::o;41655:176::-;41795:28;41791:1;41783:6;41779:14;41772:52;41655:176;:::o;41837:237::-;41977:34;41973:1;41965:6;41961:14;41954:58;42046:20;42041:2;42033:6;42029:15;42022:45;41837:237;:::o;42080:172::-;42220:24;42216:1;42208:6;42204:14;42197:48;42080:172;:::o;42258:221::-;42398:34;42394:1;42386:6;42382:14;42375:58;42467:4;42462:2;42454:6;42450:15;42443:29;42258:221;:::o;42485:238::-;42625:34;42621:1;42613:6;42609:14;42602:58;42694:21;42689:2;42681:6;42677:15;42670:46;42485:238;:::o;42729:179::-;42869:31;42865:1;42857:6;42853:14;42846:55;42729:179;:::o;42914:220::-;43054:34;43050:1;43042:6;43038:14;43031:58;43123:3;43118:2;43110:6;43106:15;43099:28;42914:220;:::o;43140:233::-;43280:34;43276:1;43268:6;43264:14;43257:58;43349:16;43344:2;43336:6;43332:15;43325:41;43140:233;:::o;43379:234::-;43519:34;43515:1;43507:6;43503:14;43496:58;43588:17;43583:2;43575:6;43571:15;43564:42;43379:234;:::o;43619:232::-;43759:34;43755:1;43747:6;43743:14;43736:58;43828:15;43823:2;43815:6;43811:15;43804:40;43619:232;:::o;43857:221::-;43997:34;43993:1;43985:6;43981:14;43974:58;44066:4;44061:2;44053:6;44049:15;44042:29;43857:221;:::o;44084:122::-;44157:24;44175:5;44157:24;:::i;:::-;44150:5;44147:35;44137:63;;44196:1;44193;44186:12;44137:63;44084:122;:::o;44212:116::-;44282:21;44297:5;44282:21;:::i;:::-;44275:5;44272:32;44262:60;;44318:1;44315;44308:12;44262:60;44212:116;:::o;44334:120::-;44406:23;44423:5;44406:23;:::i;:::-;44399:5;44396:34;44386:62;;44444:1;44441;44434:12;44386:62;44334:120;:::o;44460:122::-;44533:24;44551:5;44533:24;:::i;:::-;44526:5;44523:35;44513:63;;44572:1;44569;44562:12;44513:63;44460:122;:::o
Swarm Source
ipfs://c3e0c5ed60a4cd95592a2aef3c927fa71923e6dc5286468446d3fba0d57542d2
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.