Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
343 SPACEGIRLS
Holders
58
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 SPACEGIRLSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Spacegirls
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-27 */ pragma solidity 0.8.7; // SPDX-License-Identifier: MIT /** * @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); } 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; } 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); } 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); } 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); } } } } /** * @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; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev 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; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } 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); } abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } 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); } } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract ContextMixin { function msgSender() internal view returns (address payable sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { sender = payable(msg.sender); } return sender; } } contract Initializable { bool inited = false; modifier initializer() { require(!inited, "already inited"); _; inited = true; } } contract EIP712Base is Initializable { struct EIP712Domain { string name; string version; address verifyingContract; bytes32 salt; } string constant public ERC712_VERSION = "1"; bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256( bytes( "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)" ) ); bytes32 internal domainSeperator; // supposed to be called once while initializing. // one of the contracts that inherits this contract follows proxy pattern // so it is not possible to do this in a constructor function _initializeEIP712( string memory name ) internal initializer { _setDomainSeperator(name); } function _setDomainSeperator(string memory name) internal { domainSeperator = keccak256( abi.encode( EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(ERC712_VERSION)), address(this), bytes32(getChainId()) ) ); } function getDomainSeperator() public view returns (bytes32) { return domainSeperator; } function getChainId() public view returns (uint256) { uint256 id; assembly { id := chainid() } return id; } /** * Accept message hash and returns hash message in EIP712 compatible form * So that it can be used to recover signer from signature signed using EIP712 formatted data * https://eips.ethereum.org/EIPS/eip-712 * "\\x19" makes the encoding deterministic * "\\x01" is the version byte to make it compatible to EIP-191 */ function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) { return keccak256( abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash) ); } } contract NativeMetaTransaction is EIP712Base { using SafeMath for uint256; bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256( bytes( "MetaTransaction(uint256 nonce,address from,bytes functionSignature)" ) ); event MetaTransactionExecuted( address userAddress, address payable relayerAddress, bytes functionSignature ); mapping(address => uint256) nonces; /* * Meta transaction structure. * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas * He should call the desired function directly in that case. */ struct MetaTransaction { uint256 nonce; address from; bytes functionSignature; } function executeMetaTransaction( address userAddress, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public payable returns (bytes memory) { MetaTransaction memory metaTx = MetaTransaction({ nonce: nonces[userAddress], from: userAddress, functionSignature: functionSignature }); require( verify(userAddress, metaTx, sigR, sigS, sigV), "Signer and signature do not match" ); // increase nonce for user (to avoid re-use) nonces[userAddress] = nonces[userAddress].add(1); emit MetaTransactionExecuted( userAddress, payable(msg.sender), functionSignature ); // Append userAddress and relayer address at the end to extract it from calling context (bool success, bytes memory returnData) = address(this).call( abi.encodePacked(functionSignature, userAddress) ); require(success, "Function call not successful"); return returnData; } function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) { return keccak256( abi.encode( META_TRANSACTION_TYPEHASH, metaTx.nonce, metaTx.from, keccak256(metaTx.functionSignature) ) ); } function getNonce(address user) public view returns (uint256 nonce) { nonce = nonces[user]; } function verify( address signer, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV ) internal view returns (bool) { require(signer != address(0), "NativeMetaTransaction: INVALID_SIGNER"); return signer == ecrecover( toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS ); } } contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } /** * @title ERC721Tradable * ERC721Tradable - ERC721 contract that whitelists a trading address, and has minting functionality. */ abstract contract ERC721Tradable is ContextMixin, ERC721Enumerable, NativeMetaTransaction, Ownable { using SafeMath for uint256; address proxyRegistryAddress; uint256 public currentTokenId = 0; constructor( string memory _name, string memory _symbol, address _proxyRegistryAddress ) ERC721(_name, _symbol) { proxyRegistryAddress = _proxyRegistryAddress; _initializeEIP712(_name); } /** * @dev Mints a token to an address with a tokenURI. * @param _to address of the future owner of the token */ function mintTo(address _to) public onlyOwner { uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId); _incrementTokenId(); } /** * @dev calculates the next token ID based on value of currentTokenId * @return uint256 for the next token ID */ function _getNextTokenId() internal view returns (uint256) { return currentTokenId.add(1); } /** * @dev increments the value of currentTokenId */ function _incrementTokenId() internal { currentTokenId++; } function baseTokenURI() virtual public view returns (string memory); function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { return string(abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId))); } /** * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll(address owner, address operator) override virtual public view returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } /** * This is used instead of msg.sender as transactions won't be sent by the original token owner, but by OpenSea. */ function _msgSender() internal override virtual view returns (address sender) { return ContextMixin.msgSender(); } } contract Payout { uint public totalWeight; address public owner; bool entered; modifier onlyOwner() { require(tx.origin == owner, "Not owner"); _; } modifier nonReentrant() { require(!entered); entered = true; _; entered = false; } mapping(address => uint) public weight; address payable [] public recipients; constructor() { owner = tx.origin; addRecipient(payable(0x919cF32020CAc97FC64736cbc86C333C9aBB7D02), 7000); addRecipient(payable(0xbC5E7dD0e75aafC3fc6c162FB0E73780717E618b), 1000); addRecipient(payable(0xED7a9ba069B0aF1e0D6ce10A842b21ce6c0e63E7), 1000); addRecipient(payable(0x134cA981eC91fAb7481c7ea8933A917BE86Db64b), 1000); } function addRecipient( address payable recipient_, uint weight_) onlyOwner public { if(weight[recipient_] == 0) { recipients.push(recipient_); } totalWeight = totalWeight - weight[recipient_] + weight_; weight[recipient_] = weight_; return; } receive() external payable nonReentrant { uint _amount = address(this).balance; for(uint8 i = 0; i < recipients.length ; i++) { recipients[i].transfer(payout(recipients[i], _amount)); } } function payout( address payable recipient_, uint amount_ ) public view returns(uint) { return amount_ * weight[recipient_] / totalWeight; } } contract Spacegirls is ERC721Tradable { string baseURI; uint256 public MAX_SUPPLY = 999; uint256 public basePrice = 1 * 1e17; uint256 public mintLimit = 10; uint256 public getOneFreeLimit = 10; uint256 public startTime = 1643162400; address payable payout; event Unpaused(); constructor() ERC721Tradable("Spacegirls", "SPACEGIRLS", address(0)) { baseURI = "https://spacegirls.art/.netlify/functions/grab_json.json?nftid="; proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; payout = payable(address(new Payout())); for(uint i = 1; i <= 20 ; i++) { _mint(0x919cF32020CAc97FC64736cbc86C333C9aBB7D02, i); } currentTokenId = 20; } function mint() external payable { require(startTime <= block.timestamp, "Mint isn't running"); uint256 quantity_ = msg.value / basePrice; currentTokenId = currentTokenId + quantity_; require(quantity_ != 0 && msg.value == basePrice * quantity_, "Incorrect Amount"); require(quantity_ <= mintLimit && currentTokenId <= MAX_SUPPLY, "Minting too many"); if(quantity_ >= getOneFreeLimit && currentTokenId + 1 <= MAX_SUPPLY) { quantity_ += 1; currentTokenId += 1; } for(uint i = 1; i <= quantity_; i++) { _mint(_msgSender(), currentTokenId - (quantity_ - i)); } (bool success, ) = payout.call{value: msg.value}(""); require(success, "Payout failed"); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); return string(abi.encodePacked(baseTokenURI(), Strings.toString(tokenId))); } function setProxyRegistry(address proxyRegistryAddress_) external onlyOwner { proxyRegistryAddress = proxyRegistryAddress_; } function setPrice(uint256 basePrice_) external onlyOwner { basePrice = basePrice_; } function setBaseURI(string memory baseURI_) external onlyOwner { baseURI = baseURI_; } function baseTokenURI() public view override returns (string memory) { return _baseURI(); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function _msgSender() internal view virtual override returns (address sender) { return ContextMixin.msgSender(); } }
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":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"inputs":[],"name":"ERC712_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeperator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOneFreeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"basePrice_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyRegistryAddress_","type":"address"}],"name":"setProxyRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a60006101000a81548160ff0219169083151502179055506000600f556103e760115567016345785d8a0000601255600a601355600a6014556361f0ab206015553480156200005557600080fd5b506040518060400160405280600a81526020017f53706163656769726c73000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f53504143454749524c5300000000000000000000000000000000000000000000815250600082828160009080519060200190620000de92919062000d17565b508060019080519060200190620000f792919062000d17565b5050506200011a6200010e620002bd60201b60201c565b620002d960201b60201c565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200016c836200039f60201b60201c565b5050506040518060600160405280603f815260200162006df8603f913960109080519060200190620001a092919062000d17565b5073a5409ec958c83c3f309868babaca7c86dcb077c1600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620002049062000da8565b604051809103906000f08015801562000221573d6000803e3d6000fd5b50601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600190505b60148111620002ae576200029873919cf32020cac97fc64736cbc86c333c9abb7d02826200042160201b60201c565b8080620002a5906200109f565b91505062000269565b506014600f8190555062001273565b6000620002d46200060760201b62001c181760201c565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600a60009054906101000a900460ff1615620003f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e99062000f56565b60405180910390fd5b6200040381620006ba60201b60201c565b6001600a60006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000494576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048b9062000f34565b60405180910390fd5b620004a5816200076960201b60201c565b15620004e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004df9062000ef0565b60405180910390fd5b620004fc60008383620007d560201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200054e919062000f89565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415620006b357600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050620006b7565b3390505b90565b6040518060800160405280604f815260200162006da9604f91398051906020012081805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012030620007316200091c60201b60201c565b60001b6040516020016200074a95949392919062000e93565b60405160208183030381529060405280519060200120600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620007ed8383836200092960201b62001cc91760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200083a5762000834816200092e60201b60201c565b62000882565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000881576200088083826200097760201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008cf57620008c98162000af460201b60201c565b62000917565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009165762000915828262000bd060201b60201c565b5b5b505050565b6000804690508091505090565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009918462000c5c60201b620013b81760201c565b6200099d919062000fe6565b905060006007600084815260200190815260200160002054905081811462000a83576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000b0a919062000fe6565b905060006009600084815260200190815260200160002054905060006008838154811062000b3d5762000b3c6200117a565b5b90600052602060002001549050806008838154811062000b625762000b616200117a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000bb45762000bb36200114b565b5b6001900381819060005260206000200160009055905550505050565b600062000be88362000c5c60201b620013b81760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cc79062000f12565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000d259062001069565b90600052602060002090601f01602090048101928262000d49576000855562000d95565b82601f1062000d6457805160ff191683800117855562000d95565b8280016001018555821562000d95579182015b8281111562000d9457825182559160200191906001019062000d77565b5b50905062000da4919062000db6565b5090565b610e718062005f3883390190565b5b8082111562000dd157600081600090555060010162000db7565b5090565b62000de08162001021565b82525050565b62000df18162001035565b82525050565b600062000e06601c8362000f78565b915062000e1382620011a9565b602082019050919050565b600062000e2d602a8362000f78565b915062000e3a82620011d2565b604082019050919050565b600062000e5460208362000f78565b915062000e618262001221565b602082019050919050565b600062000e7b600e8362000f78565b915062000e88826200124a565b602082019050919050565b600060a08201905062000eaa600083018862000de6565b62000eb9602083018762000de6565b62000ec8604083018662000de6565b62000ed7606083018562000dd5565b62000ee6608083018462000de6565b9695505050505050565b6000602082019050818103600083015262000f0b8162000df7565b9050919050565b6000602082019050818103600083015262000f2d8162000e1e565b9050919050565b6000602082019050818103600083015262000f4f8162000e45565b9050919050565b6000602082019050818103600083015262000f718162000e6c565b9050919050565b600082825260208201905092915050565b600062000f96826200105f565b915062000fa3836200105f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fdb5762000fda620010ed565b5b828201905092915050565b600062000ff3826200105f565b915062001000836200105f565b925082821015620010165762001015620010ed565b5b828203905092915050565b60006200102e826200103f565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200108257607f821691505b602082108114156200109957620010986200111c565b5b50919050565b6000620010ac826200105f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620010e257620010e1620010ed565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f616c726561647920696e69746564000000000000000000000000000000000000600082015250565b614cb580620012836000396000f3fe60806040526004361061020e5760003560e01c806355f804b311610118578063996517cf116100a0578063c7876ea41161006f578063c7876ea414610784578063c87b56dd146107af578063d547cfb7146107ec578063e985e9c514610817578063f2fde38b146108545761020e565b8063996517cf146106de578063a22cb46514610709578063adfdeef914610732578063b88d4fde1461075b5761020e565b8063755edd17116100e7578063755edd171461060b57806378e97925146106345780638da5cb5b1461065f57806391b7f5ed1461068a57806395d89b41146106b35761020e565b806355f804b3146105515780636352211e1461057a57806370a08231146105b7578063715018a6146105f45761020e565b806318160ddd1161019b5780632f745c591161016a5780632f745c591461045857806332cb6b0c146104955780633408e470146104c057806342842e0e146104eb5780634f6ccce7146105145761020e565b806318160ddd1461039c57806320379ee5146103c757806323b872dd146103f25780632d0335ab1461041b5761020e565b8063095ea7b3116101e2578063095ea7b3146102e35780630c53c51c1461030c5780630f7e59701461033c5780631249c58b1461036757806314ba1705146103715761020e565b80629a9b7b1461021357806301ffc9a71461023e57806306fdde031461027b578063081812fc146102a6575b600080fd5b34801561021f57600080fd5b5061022861087d565b6040516102359190613fc1565b60405180910390f35b34801561024a57600080fd5b506102656004803603810190610260919061343f565b610883565b6040516102729190613b9d565b60405180910390f35b34801561028757600080fd5b506102906108fd565b60405161029d9190613c7f565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c8919061350f565b61098f565b6040516102da9190613af8565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906133ff565b610a14565b005b61032660048036038101906103219190613368565b610b2c565b6040516103339190613c5d565b60405180910390f35b34801561034857600080fd5b50610351610d9e565b60405161035e9190613c7f565b60405180910390f35b61036f610dd7565b005b34801561037d57600080fd5b50610386611061565b6040516103939190613fc1565b60405180910390f35b3480156103a857600080fd5b506103b1611067565b6040516103be9190613fc1565b60405180910390f35b3480156103d357600080fd5b506103dc611074565b6040516103e99190613bb8565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190613252565b61107e565b005b34801561042757600080fd5b50610442600480360381019061043d91906131e5565b6110de565b60405161044f9190613fc1565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a91906133ff565b611127565b60405161048c9190613fc1565b60405180910390f35b3480156104a157600080fd5b506104aa6111cc565b6040516104b79190613fc1565b60405180910390f35b3480156104cc57600080fd5b506104d56111d2565b6040516104e29190613fc1565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190613252565b6111df565b005b34801561052057600080fd5b5061053b6004803603810190610536919061350f565b6111ff565b6040516105489190613fc1565b60405180910390f35b34801561055d57600080fd5b50610578600480360381019061057391906134c6565b611270565b005b34801561058657600080fd5b506105a1600480360381019061059c919061350f565b611306565b6040516105ae9190613af8565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d991906131e5565b6113b8565b6040516105eb9190613fc1565b60405180910390f35b34801561060057600080fd5b50610609611470565b005b34801561061757600080fd5b50610632600480360381019061062d91906131e5565b6114f8565b005b34801561064057600080fd5b50610649611596565b6040516106569190613fc1565b60405180910390f35b34801561066b57600080fd5b5061067461159c565b6040516106819190613af8565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac919061350f565b6115c6565b005b3480156106bf57600080fd5b506106c861164c565b6040516106d59190613c7f565b60405180910390f35b3480156106ea57600080fd5b506106f36116de565b6040516107009190613fc1565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613328565b6116e4565b005b34801561073e57600080fd5b50610759600480360381019061075491906131e5565b611865565b005b34801561076757600080fd5b50610782600480360381019061077d91906132a5565b611925565b005b34801561079057600080fd5b50610799611987565b6040516107a69190613fc1565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061350f565b61198d565b6040516107e39190613c7f565b60405180910390f35b3480156107f857600080fd5b50610801611a0f565b60405161080e9190613c7f565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190613212565b611a1e565b60405161084b9190613b9d565b60405180910390f35b34801561086057600080fd5b5061087b600480360381019061087691906131e5565b611b20565b005b600f5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f657506108f582611cce565b5b9050919050565b60606000805461090c906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610938906142b7565b80156109855780601f1061095a57610100808354040283529160200191610985565b820191906000526020600020905b81548152906001019060200180831161096857829003601f168201915b5050505050905090565b600061099a82611db0565b6109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d090613ec1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1f82611306565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8790613f61565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aaf611e1c565b73ffffffffffffffffffffffffffffffffffffffff161480610ade5750610add81610ad8611e1c565b611a1e565b5b610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613e41565b60405180910390fd5b610b278383611e2b565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610baf8782878787611ee4565b610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590613f21565b60405180910390fd5b610c416001600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fed90919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610cb793929190613b13565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610cec929190613a60565b604051602081830303815290604052604051610d089190613a49565b6000604051808303816000865af19150503d8060008114610d45576040519150601f19603f3d011682016040523d82523d6000602084013e610d4a565b606091505b509150915081610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8690613d21565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b426015541115610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390613dc1565b60405180910390fd5b600060125434610e2c9190614107565b905080600f54610e3c91906140b1565b600f8190555060008114158015610e5f575080601254610e5c9190614138565b34145b610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613ca1565b60405180910390fd5b6013548111158015610eb45750601154600f5411155b610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613d41565b60405180910390fd5b6014548110158015610f1557506011546001600f54610f1291906140b1565b11155b15610f4457600181610f2791906140b1565b90506001600f6000828254610f3c91906140b1565b925050819055505b6000600190505b818111610f8e57610f7b610f5d611e1c565b8284610f699190614192565b600f54610f769190614192565b612003565b8080610f869061431a565b915050610f4b565b506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610fd790613ae3565b60006040518083038185875af1925050503d8060008114611014576040519150601f19603f3d011682016040523d82523d6000602084013e611019565b606091505b505090508061105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613d81565b60405180910390fd5b5050565b60145481565b6000600880549050905090565b6000600b54905090565b61108f611089611e1c565b826121d1565b6110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590613f81565b60405180910390fd5b6110d98383836122af565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611132836113b8565b8210611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90613cc1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60115481565b6000804690508091505090565b6111fa83838360405180602001604052806000815250611925565b505050565b6000611209611067565b821061124a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124190613fa1565b60405180910390fd5b6008828154811061125e5761125d61447e565b5b90600052602060002001549050919050565b611278611e1c565b73ffffffffffffffffffffffffffffffffffffffff1661129661159c565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613ee1565b60405180910390fd5b8060109080519060200190611302929190612fba565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690613e81565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090613e61565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611478611e1c565b73ffffffffffffffffffffffffffffffffffffffff1661149661159c565b73ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613ee1565b60405180910390fd5b6114f6600061250b565b565b611500611e1c565b73ffffffffffffffffffffffffffffffffffffffff1661151e61159c565b73ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613ee1565b60405180910390fd5b600061157e6125d1565b905061158a8282612003565b6115926125ee565b5050565b60155481565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115ce611e1c565b73ffffffffffffffffffffffffffffffffffffffff166115ec61159c565b73ffffffffffffffffffffffffffffffffffffffff1614611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990613ee1565b60405180910390fd5b8060128190555050565b60606001805461165b906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611687906142b7565b80156116d45780601f106116a9576101008083540402835291602001916116d4565b820191906000526020600020905b8154815290600101906020018083116116b757829003601f168201915b5050505050905090565b60135481565b6116ec611e1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613de1565b60405180910390fd5b8060056000611767611e1c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611814611e1c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118599190613b9d565b60405180910390a35050565b61186d611e1c565b73ffffffffffffffffffffffffffffffffffffffff1661188b61159c565b73ffffffffffffffffffffffffffffffffffffffff16146118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890613ee1565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611936611930611e1c565b836121d1565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90613f81565b60405180910390fd5b61198184848484612608565b50505050565b60125481565b606061199882611db0565b6119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90613f41565b60405180910390fd5b6119df611a0f565b6119e883612664565b6040516020016119f9929190613a88565b6040516020818303038152906040529050919050565b6060611a196127c5565b905090565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611a969190613af8565b60206040518083038186803b158015611aae57600080fd5b505afa158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae69190613499565b73ffffffffffffffffffffffffffffffffffffffff161415611b0c576001915050611b1a565b611b168484612857565b9150505b92915050565b611b28611e1c565b73ffffffffffffffffffffffffffffffffffffffff16611b4661159c565b73ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613ee1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390613d01565b60405180910390fd5b611c158161250b565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611cc257600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611cc6565b3390505b90565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d9957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611da95750611da8826128eb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611e26611c18565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e9e83611306565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613e21565b60405180910390fd5b6001611f68611f6387612955565b6129bd565b83868660405160008152602001604052604051611f889493929190613c18565b6020604051602081039080840390855afa158015611faa573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611ffb91906140b1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90613ea1565b60405180910390fd5b61207c81611db0565b156120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b390613d61565b60405180910390fd5b6120c8600083836129f6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461211891906140b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006121dc82611db0565b61221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290613e01565b60405180910390fd5b600061222683611306565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061229557508373ffffffffffffffffffffffffffffffffffffffff1661227d8461098f565b73ffffffffffffffffffffffffffffffffffffffff16145b806122a657506122a58185611a1e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122cf82611306565b73ffffffffffffffffffffffffffffffffffffffff1614612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90613f01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613da1565b60405180910390fd5b6123a08383836129f6565b6123ab600082611e2b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123fb9190614192565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245291906140b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006125e96001600f54611fed90919063ffffffff16565b905090565b600f60008154809291906126019061431a565b9190505550565b6126138484846122af565b61261f84848484612b0a565b61265e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265590613ce1565b60405180910390fd5b50505050565b606060008214156126ac576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127c0565b600082905060005b600082146126de5780806126c79061431a565b915050600a826126d79190614107565b91506126b4565b60008167ffffffffffffffff8111156126fa576126f96144ad565b5b6040519080825280601f01601f19166020018201604052801561272c5781602001600182028036833780820191505090505b5090505b600085146127b9576001826127459190614192565b9150600a856127549190614391565b603061276091906140b1565b60f81b8183815181106127765761277561447e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127b29190614107565b9450612730565b8093505050505b919050565b6060601080546127d4906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054612800906142b7565b801561284d5780601f106128225761010080835404028352916020019161284d565b820191906000526020600020905b81548152906001019060200180831161283057829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051806080016040528060438152602001614c3d6043913980519060200120826000015183602001518460400151805190602001206040516020016129a09493929190613bd3565b604051602081830303815290604052805190602001209050919050565b60006129c7611074565b826040516020016129d9929190613aac565b604051602081830303815290604052805190602001209050919050565b612a01838383611cc9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4457612a3f81612ca1565b612a83565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a8257612a818382612cea565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ac657612ac181612e57565b612b05565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b0457612b038282612f28565b5b5b505050565b6000612b2b8473ffffffffffffffffffffffffffffffffffffffff16612fa7565b15612c94578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b54611e1c565b8786866040518563ffffffff1660e01b8152600401612b769493929190613b51565b602060405180830381600087803b158015612b9057600080fd5b505af1925050508015612bc157506040513d601f19601f82011682018060405250810190612bbe919061346c565b60015b612c44573d8060008114612bf1576040519150601f19603f3d011682016040523d82523d6000602084013e612bf6565b606091505b50600081511415612c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3390613ce1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c99565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cf7846113b8565b612d019190614192565b9050600060076000848152602001908152602001600020549050818114612de6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e6b9190614192565b9050600060096000848152602001908152602001600020549050600060088381548110612e9b57612e9a61447e565b5b906000526020600020015490508060088381548110612ebd57612ebc61447e565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f0c57612f0b61444f565b5b6001900381819060005260206000200160009055905550505050565b6000612f33836113b8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612fc6906142b7565b90600052602060002090601f016020900481019282612fe8576000855561302f565b82601f1061300157805160ff191683800117855561302f565b8280016001018555821561302f579182015b8281111561302e578251825591602001919060010190613013565b5b50905061303c9190613040565b5090565b5b80821115613059576000816000905550600101613041565b5090565b600061307061306b84614001565b613fdc565b90508281526020810184848401111561308c5761308b6144e1565b5b613097848285614275565b509392505050565b60006130b26130ad84614032565b613fdc565b9050828152602081018484840111156130ce576130cd6144e1565b5b6130d9848285614275565b509392505050565b6000813590506130f081614b9b565b92915050565b60008135905061310581614bb2565b92915050565b60008135905061311a81614bc9565b92915050565b60008135905061312f81614be0565b92915050565b60008151905061314481614be0565b92915050565b600082601f83011261315f5761315e6144dc565b5b813561316f84826020860161305d565b91505092915050565b60008151905061318781614bf7565b92915050565b600082601f8301126131a2576131a16144dc565b5b81356131b284826020860161309f565b91505092915050565b6000813590506131ca81614c0e565b92915050565b6000813590506131df81614c25565b92915050565b6000602082840312156131fb576131fa6144eb565b5b6000613209848285016130e1565b91505092915050565b60008060408385031215613229576132286144eb565b5b6000613237858286016130e1565b9250506020613248858286016130e1565b9150509250929050565b60008060006060848603121561326b5761326a6144eb565b5b6000613279868287016130e1565b935050602061328a868287016130e1565b925050604061329b868287016131bb565b9150509250925092565b600080600080608085870312156132bf576132be6144eb565b5b60006132cd878288016130e1565b94505060206132de878288016130e1565b93505060406132ef878288016131bb565b925050606085013567ffffffffffffffff8111156133105761330f6144e6565b5b61331c8782880161314a565b91505092959194509250565b6000806040838503121561333f5761333e6144eb565b5b600061334d858286016130e1565b925050602061335e858286016130f6565b9150509250929050565b600080600080600060a08688031215613384576133836144eb565b5b6000613392888289016130e1565b955050602086013567ffffffffffffffff8111156133b3576133b26144e6565b5b6133bf8882890161314a565b94505060406133d08882890161310b565b93505060606133e18882890161310b565b92505060806133f2888289016131d0565b9150509295509295909350565b60008060408385031215613416576134156144eb565b5b6000613424858286016130e1565b9250506020613435858286016131bb565b9150509250929050565b600060208284031215613455576134546144eb565b5b600061346384828501613120565b91505092915050565b600060208284031215613482576134816144eb565b5b600061349084828501613135565b91505092915050565b6000602082840312156134af576134ae6144eb565b5b60006134bd84828501613178565b91505092915050565b6000602082840312156134dc576134db6144eb565b5b600082013567ffffffffffffffff8111156134fa576134f96144e6565b5b6135068482850161318d565b91505092915050565b600060208284031215613525576135246144eb565b5b6000613533848285016131bb565b91505092915050565b613545816141d8565b82525050565b613554816141c6565b82525050565b61356b613566826141c6565b614363565b82525050565b61357a816141ea565b82525050565b613589816141f6565b82525050565b6135a061359b826141f6565b614375565b82525050565b60006135b182614063565b6135bb8185614079565b93506135cb818560208601614284565b6135d4816144f0565b840191505092915050565b60006135ea82614063565b6135f4818561408a565b9350613604818560208601614284565b80840191505092915050565b600061361b8261406e565b6136258185614095565b9350613635818560208601614284565b61363e816144f0565b840191505092915050565b60006136548261406e565b61365e81856140a6565b935061366e818560208601614284565b80840191505092915050565b6000613687601083614095565b91506136928261450e565b602082019050919050565b60006136aa602b83614095565b91506136b582614537565b604082019050919050565b60006136cd603283614095565b91506136d882614586565b604082019050919050565b60006136f0602683614095565b91506136fb826145d5565b604082019050919050565b6000613713601c83614095565b915061371e82614624565b602082019050919050565b6000613736601083614095565b91506137418261464d565b602082019050919050565b6000613759601c83614095565b915061376482614676565b602082019050919050565b600061377c6002836140a6565b91506137878261469f565b600282019050919050565b600061379f600d83614095565b91506137aa826146c8565b602082019050919050565b60006137c2602483614095565b91506137cd826146f1565b604082019050919050565b60006137e5601283614095565b91506137f082614740565b602082019050919050565b6000613808601983614095565b915061381382614769565b602082019050919050565b600061382b602c83614095565b915061383682614792565b604082019050919050565b600061384e602583614095565b9150613859826147e1565b604082019050919050565b6000613871603883614095565b915061387c82614830565b604082019050919050565b6000613894602a83614095565b915061389f8261487f565b604082019050919050565b60006138b7602983614095565b91506138c2826148ce565b604082019050919050565b60006138da602083614095565b91506138e58261491d565b602082019050919050565b60006138fd602c83614095565b915061390882614946565b604082019050919050565b6000613920602083614095565b915061392b82614995565b602082019050919050565b6000613943602983614095565b915061394e826149be565b604082019050919050565b6000613966602183614095565b915061397182614a0d565b604082019050919050565b6000613989602f83614095565b915061399482614a5c565b604082019050919050565b60006139ac602183614095565b91506139b782614aab565b604082019050919050565b60006139cf60008361408a565b91506139da82614afa565b600082019050919050565b60006139f2603183614095565b91506139fd82614afd565b604082019050919050565b6000613a15602c83614095565b9150613a2082614b4c565b604082019050919050565b613a348161425e565b82525050565b613a4381614268565b82525050565b6000613a5582846135df565b915081905092915050565b6000613a6c82856135df565b9150613a78828461355a565b6014820191508190509392505050565b6000613a948285613649565b9150613aa08284613649565b91508190509392505050565b6000613ab78261376f565b9150613ac3828561358f565b602082019150613ad3828461358f565b6020820191508190509392505050565b6000613aee826139c2565b9150819050919050565b6000602082019050613b0d600083018461354b565b92915050565b6000606082019050613b28600083018661354b565b613b35602083018561353c565b8181036040830152613b4781846135a6565b9050949350505050565b6000608082019050613b66600083018761354b565b613b73602083018661354b565b613b806040830185613a2b565b8181036060830152613b9281846135a6565b905095945050505050565b6000602082019050613bb26000830184613571565b92915050565b6000602082019050613bcd6000830184613580565b92915050565b6000608082019050613be86000830187613580565b613bf56020830186613a2b565b613c02604083018561354b565b613c0f6060830184613580565b95945050505050565b6000608082019050613c2d6000830187613580565b613c3a6020830186613a3a565b613c476040830185613580565b613c546060830184613580565b95945050505050565b60006020820190508181036000830152613c7781846135a6565b905092915050565b60006020820190508181036000830152613c998184613610565b905092915050565b60006020820190508181036000830152613cba8161367a565b9050919050565b60006020820190508181036000830152613cda8161369d565b9050919050565b60006020820190508181036000830152613cfa816136c0565b9050919050565b60006020820190508181036000830152613d1a816136e3565b9050919050565b60006020820190508181036000830152613d3a81613706565b9050919050565b60006020820190508181036000830152613d5a81613729565b9050919050565b60006020820190508181036000830152613d7a8161374c565b9050919050565b60006020820190508181036000830152613d9a81613792565b9050919050565b60006020820190508181036000830152613dba816137b5565b9050919050565b60006020820190508181036000830152613dda816137d8565b9050919050565b60006020820190508181036000830152613dfa816137fb565b9050919050565b60006020820190508181036000830152613e1a8161381e565b9050919050565b60006020820190508181036000830152613e3a81613841565b9050919050565b60006020820190508181036000830152613e5a81613864565b9050919050565b60006020820190508181036000830152613e7a81613887565b9050919050565b60006020820190508181036000830152613e9a816138aa565b9050919050565b60006020820190508181036000830152613eba816138cd565b9050919050565b60006020820190508181036000830152613eda816138f0565b9050919050565b60006020820190508181036000830152613efa81613913565b9050919050565b60006020820190508181036000830152613f1a81613936565b9050919050565b60006020820190508181036000830152613f3a81613959565b9050919050565b60006020820190508181036000830152613f5a8161397c565b9050919050565b60006020820190508181036000830152613f7a8161399f565b9050919050565b60006020820190508181036000830152613f9a816139e5565b9050919050565b60006020820190508181036000830152613fba81613a08565b9050919050565b6000602082019050613fd66000830184613a2b565b92915050565b6000613fe6613ff7565b9050613ff282826142e9565b919050565b6000604051905090565b600067ffffffffffffffff82111561401c5761401b6144ad565b5b614025826144f0565b9050602081019050919050565b600067ffffffffffffffff82111561404d5761404c6144ad565b5b614056826144f0565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140bc8261425e565b91506140c78361425e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140fc576140fb6143c2565b5b828201905092915050565b60006141128261425e565b915061411d8361425e565b92508261412d5761412c6143f1565b5b828204905092915050565b60006141438261425e565b915061414e8361425e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614187576141866143c2565b5b828202905092915050565b600061419d8261425e565b91506141a88361425e565b9250828210156141bb576141ba6143c2565b5b828203905092915050565b60006141d18261423e565b9050919050565b60006141e38261423e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614237826141c6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156142a2578082015181840152602081019050614287565b838111156142b1576000848401525b50505050565b600060028204905060018216806142cf57607f821691505b602082108114156142e3576142e2614420565b5b50919050565b6142f2826144f0565b810181811067ffffffffffffffff82111715614311576143106144ad565b5b80604052505050565b60006143258261425e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614358576143576143c2565b5b600182019050919050565b600061436e8261437f565b9050919050565b6000819050919050565b600061438a82614501565b9050919050565b600061439c8261425e565b91506143a78361425e565b9250826143b7576143b66143f1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f496e636f727265637420416d6f756e7400000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4d696e74696e6720746f6f206d616e7900000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f5061796f7574206661696c656400000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e742069736e27742072756e6e696e670000000000000000000000000000600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614ba4816141c6565b8114614baf57600080fd5b50565b614bbb816141ea565b8114614bc657600080fd5b50565b614bd2816141f6565b8114614bdd57600080fd5b50565b614be981614200565b8114614bf457600080fd5b50565b614c008161422c565b8114614c0b57600080fd5b50565b614c178161425e565b8114614c2257600080fd5b50565b614c2e81614268565b8114614c3957600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a26469706673582212204b6cff8910f23a8ea867715b1d61eb9e704131dfcb8c50a33fcb28771ab9978364736f6c6343000807003360806040523480156200001157600080fd5b5032600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200007b73919cf32020cac97fc64736cbc86c333c9abb7d02611b58620000f960201b60201c565b620000a373bc5e7dd0e75aafc3fc6c162fb0e73780717e618b6103e8620000f960201b60201c565b620000cb73ed7a9ba069b0af1e0d6ce10a842b21ce6c0e63e76103e8620000f960201b60201c565b620000f373134ca981ec91fab7481c7ea8933a917be86db64b6103e8620000f960201b60201c565b62000437565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146200018c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000183906200030a565b60405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141562000239576003829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000546200028991906200039a565b6200029591906200033d565b60008190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000620002f26009836200032c565b9150620002ff826200040e565b602082019050919050565b600060208201905081810360008301526200032581620002e3565b9050919050565b600082825260208201905092915050565b60006200034a82620003d5565b91506200035783620003d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200038f576200038e620003df565b5b828201905092915050565b6000620003a782620003d5565b9150620003b483620003d5565b925082821015620003ca57620003c9620003df565b5b828203905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b610a2a80620004476000396000f3fe6080604052600436106100595760003560e01c8063117de2fd146101b35780638da5cb5b146101f057806396c82e571461021b578063d1bc76a114610246578063f4396e2a14610283578063f7982243146102c0576101ae565b366101ae57600160149054906101000a900460ff161561007857600080fd5b60018060146101000a81548160ff021916908315150217905550600047905060005b6003805490508160ff16101561018f5760038160ff16815481106100c1576100c0610952565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61015060038460ff168154811061011f5761011e610952565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856102e9565b9081150290604051600060405180830381858888f1935050505015801561017b573d6000803e3d6000fd5b508080610187906108ca565b91505061009a565b50506000600160146101000a81548160ff021916908315150217905550005b600080fd5b3480156101bf57600080fd5b506101da60048036038101906101d5919061061b565b6102e9565b6040516101e7919061072e565b60405180910390f35b3480156101fc57600080fd5b5061020561034a565b60405161021291906106d8565b60405180910390f35b34801561022757600080fd5b50610230610370565b60405161023d919061072e565b60405180910390f35b34801561025257600080fd5b5061026d6004803603810190610268919061065b565b610376565b60405161027a91906106f3565b60405180910390f35b34801561028f57600080fd5b506102aa60048036038101906102a591906105ee565b6103b5565b6040516102b7919061072e565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e2919061061b565b6103cd565b005b60008054600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361033891906107e1565b61034291906107b0565b905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b6003818154811061038657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461045d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104549061070e565b60405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610509576003829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600054610557919061083b565b610561919061075a565b60008190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000813590506105be816109af565b92915050565b6000813590506105d3816109c6565b92915050565b6000813590506105e8816109dd565b92915050565b60006020828403121561060457610603610981565b5b6000610612848285016105af565b91505092915050565b6000806040838503121561063257610631610981565b5b6000610640858286016105c4565b9250506020610651858286016105d9565b9150509250929050565b60006020828403121561067157610670610981565b5b600061067f848285016105d9565b91505092915050565b61069181610881565b82525050565b6106a08161086f565b82525050565b60006106b3600983610749565b91506106be82610986565b602082019050919050565b6106d2816108b3565b82525050565b60006020820190506106ed6000830184610697565b92915050565b60006020820190506107086000830184610688565b92915050565b60006020820190508181036000830152610727816106a6565b9050919050565b600060208201905061074360008301846106c9565b92915050565b600082825260208201905092915050565b6000610765826108b3565b9150610770836108b3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156107a5576107a46108f4565b5b828201905092915050565b60006107bb826108b3565b91506107c6836108b3565b9250826107d6576107d5610923565b5b828204905092915050565b60006107ec826108b3565b91506107f7836108b3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156108305761082f6108f4565b5b828202905092915050565b6000610846826108b3565b9150610851836108b3565b925082821015610864576108636108f4565b5b828203905092915050565b600061087a82610893565b9050919050565b600061088c82610893565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006108d5826108bd565b915060ff8214156108e9576108e86108f4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b6109b88161086f565b81146109c357600080fd5b50565b6109cf81610881565b81146109da57600080fd5b50565b6109e6816108b3565b81146109f157600080fd5b5056fea2646970667358221220f99b0098e730f9d3e2e9b8a3f777873a8169f74c10c19e5b54dcb207a4f5162264736f6c63430008070033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c742968747470733a2f2f73706163656769726c732e6172742f2e6e65746c6966792f66756e6374696f6e732f677261625f6a736f6e2e6a736f6e3f6e667469643d
Deployed Bytecode
0x60806040526004361061020e5760003560e01c806355f804b311610118578063996517cf116100a0578063c7876ea41161006f578063c7876ea414610784578063c87b56dd146107af578063d547cfb7146107ec578063e985e9c514610817578063f2fde38b146108545761020e565b8063996517cf146106de578063a22cb46514610709578063adfdeef914610732578063b88d4fde1461075b5761020e565b8063755edd17116100e7578063755edd171461060b57806378e97925146106345780638da5cb5b1461065f57806391b7f5ed1461068a57806395d89b41146106b35761020e565b806355f804b3146105515780636352211e1461057a57806370a08231146105b7578063715018a6146105f45761020e565b806318160ddd1161019b5780632f745c591161016a5780632f745c591461045857806332cb6b0c146104955780633408e470146104c057806342842e0e146104eb5780634f6ccce7146105145761020e565b806318160ddd1461039c57806320379ee5146103c757806323b872dd146103f25780632d0335ab1461041b5761020e565b8063095ea7b3116101e2578063095ea7b3146102e35780630c53c51c1461030c5780630f7e59701461033c5780631249c58b1461036757806314ba1705146103715761020e565b80629a9b7b1461021357806301ffc9a71461023e57806306fdde031461027b578063081812fc146102a6575b600080fd5b34801561021f57600080fd5b5061022861087d565b6040516102359190613fc1565b60405180910390f35b34801561024a57600080fd5b506102656004803603810190610260919061343f565b610883565b6040516102729190613b9d565b60405180910390f35b34801561028757600080fd5b506102906108fd565b60405161029d9190613c7f565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c8919061350f565b61098f565b6040516102da9190613af8565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906133ff565b610a14565b005b61032660048036038101906103219190613368565b610b2c565b6040516103339190613c5d565b60405180910390f35b34801561034857600080fd5b50610351610d9e565b60405161035e9190613c7f565b60405180910390f35b61036f610dd7565b005b34801561037d57600080fd5b50610386611061565b6040516103939190613fc1565b60405180910390f35b3480156103a857600080fd5b506103b1611067565b6040516103be9190613fc1565b60405180910390f35b3480156103d357600080fd5b506103dc611074565b6040516103e99190613bb8565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190613252565b61107e565b005b34801561042757600080fd5b50610442600480360381019061043d91906131e5565b6110de565b60405161044f9190613fc1565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a91906133ff565b611127565b60405161048c9190613fc1565b60405180910390f35b3480156104a157600080fd5b506104aa6111cc565b6040516104b79190613fc1565b60405180910390f35b3480156104cc57600080fd5b506104d56111d2565b6040516104e29190613fc1565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190613252565b6111df565b005b34801561052057600080fd5b5061053b6004803603810190610536919061350f565b6111ff565b6040516105489190613fc1565b60405180910390f35b34801561055d57600080fd5b50610578600480360381019061057391906134c6565b611270565b005b34801561058657600080fd5b506105a1600480360381019061059c919061350f565b611306565b6040516105ae9190613af8565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d991906131e5565b6113b8565b6040516105eb9190613fc1565b60405180910390f35b34801561060057600080fd5b50610609611470565b005b34801561061757600080fd5b50610632600480360381019061062d91906131e5565b6114f8565b005b34801561064057600080fd5b50610649611596565b6040516106569190613fc1565b60405180910390f35b34801561066b57600080fd5b5061067461159c565b6040516106819190613af8565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac919061350f565b6115c6565b005b3480156106bf57600080fd5b506106c861164c565b6040516106d59190613c7f565b60405180910390f35b3480156106ea57600080fd5b506106f36116de565b6040516107009190613fc1565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613328565b6116e4565b005b34801561073e57600080fd5b50610759600480360381019061075491906131e5565b611865565b005b34801561076757600080fd5b50610782600480360381019061077d91906132a5565b611925565b005b34801561079057600080fd5b50610799611987565b6040516107a69190613fc1565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061350f565b61198d565b6040516107e39190613c7f565b60405180910390f35b3480156107f857600080fd5b50610801611a0f565b60405161080e9190613c7f565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190613212565b611a1e565b60405161084b9190613b9d565b60405180910390f35b34801561086057600080fd5b5061087b600480360381019061087691906131e5565b611b20565b005b600f5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f657506108f582611cce565b5b9050919050565b60606000805461090c906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610938906142b7565b80156109855780601f1061095a57610100808354040283529160200191610985565b820191906000526020600020905b81548152906001019060200180831161096857829003601f168201915b5050505050905090565b600061099a82611db0565b6109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d090613ec1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1f82611306565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8790613f61565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aaf611e1c565b73ffffffffffffffffffffffffffffffffffffffff161480610ade5750610add81610ad8611e1c565b611a1e565b5b610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613e41565b60405180910390fd5b610b278383611e2b565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610baf8782878787611ee4565b610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590613f21565b60405180910390fd5b610c416001600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fed90919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610cb793929190613b13565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610cec929190613a60565b604051602081830303815290604052604051610d089190613a49565b6000604051808303816000865af19150503d8060008114610d45576040519150601f19603f3d011682016040523d82523d6000602084013e610d4a565b606091505b509150915081610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8690613d21565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b426015541115610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390613dc1565b60405180910390fd5b600060125434610e2c9190614107565b905080600f54610e3c91906140b1565b600f8190555060008114158015610e5f575080601254610e5c9190614138565b34145b610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613ca1565b60405180910390fd5b6013548111158015610eb45750601154600f5411155b610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613d41565b60405180910390fd5b6014548110158015610f1557506011546001600f54610f1291906140b1565b11155b15610f4457600181610f2791906140b1565b90506001600f6000828254610f3c91906140b1565b925050819055505b6000600190505b818111610f8e57610f7b610f5d611e1c565b8284610f699190614192565b600f54610f769190614192565b612003565b8080610f869061431a565b915050610f4b565b506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610fd790613ae3565b60006040518083038185875af1925050503d8060008114611014576040519150601f19603f3d011682016040523d82523d6000602084013e611019565b606091505b505090508061105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613d81565b60405180910390fd5b5050565b60145481565b6000600880549050905090565b6000600b54905090565b61108f611089611e1c565b826121d1565b6110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590613f81565b60405180910390fd5b6110d98383836122af565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611132836113b8565b8210611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90613cc1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60115481565b6000804690508091505090565b6111fa83838360405180602001604052806000815250611925565b505050565b6000611209611067565b821061124a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124190613fa1565b60405180910390fd5b6008828154811061125e5761125d61447e565b5b90600052602060002001549050919050565b611278611e1c565b73ffffffffffffffffffffffffffffffffffffffff1661129661159c565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390613ee1565b60405180910390fd5b8060109080519060200190611302929190612fba565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690613e81565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090613e61565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611478611e1c565b73ffffffffffffffffffffffffffffffffffffffff1661149661159c565b73ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613ee1565b60405180910390fd5b6114f6600061250b565b565b611500611e1c565b73ffffffffffffffffffffffffffffffffffffffff1661151e61159c565b73ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613ee1565b60405180910390fd5b600061157e6125d1565b905061158a8282612003565b6115926125ee565b5050565b60155481565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115ce611e1c565b73ffffffffffffffffffffffffffffffffffffffff166115ec61159c565b73ffffffffffffffffffffffffffffffffffffffff1614611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990613ee1565b60405180910390fd5b8060128190555050565b60606001805461165b906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611687906142b7565b80156116d45780601f106116a9576101008083540402835291602001916116d4565b820191906000526020600020905b8154815290600101906020018083116116b757829003601f168201915b5050505050905090565b60135481565b6116ec611e1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613de1565b60405180910390fd5b8060056000611767611e1c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611814611e1c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118599190613b9d565b60405180910390a35050565b61186d611e1c565b73ffffffffffffffffffffffffffffffffffffffff1661188b61159c565b73ffffffffffffffffffffffffffffffffffffffff16146118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890613ee1565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611936611930611e1c565b836121d1565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90613f81565b60405180910390fd5b61198184848484612608565b50505050565b60125481565b606061199882611db0565b6119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90613f41565b60405180910390fd5b6119df611a0f565b6119e883612664565b6040516020016119f9929190613a88565b6040516020818303038152906040529050919050565b6060611a196127c5565b905090565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611a969190613af8565b60206040518083038186803b158015611aae57600080fd5b505afa158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae69190613499565b73ffffffffffffffffffffffffffffffffffffffff161415611b0c576001915050611b1a565b611b168484612857565b9150505b92915050565b611b28611e1c565b73ffffffffffffffffffffffffffffffffffffffff16611b4661159c565b73ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613ee1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390613d01565b60405180910390fd5b611c158161250b565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611cc257600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611cc6565b3390505b90565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d9957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611da95750611da8826128eb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611e26611c18565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e9e83611306565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613e21565b60405180910390fd5b6001611f68611f6387612955565b6129bd565b83868660405160008152602001604052604051611f889493929190613c18565b6020604051602081039080840390855afa158015611faa573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611ffb91906140b1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90613ea1565b60405180910390fd5b61207c81611db0565b156120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b390613d61565b60405180910390fd5b6120c8600083836129f6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461211891906140b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006121dc82611db0565b61221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290613e01565b60405180910390fd5b600061222683611306565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061229557508373ffffffffffffffffffffffffffffffffffffffff1661227d8461098f565b73ffffffffffffffffffffffffffffffffffffffff16145b806122a657506122a58185611a1e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122cf82611306565b73ffffffffffffffffffffffffffffffffffffffff1614612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90613f01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613da1565b60405180910390fd5b6123a08383836129f6565b6123ab600082611e2b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123fb9190614192565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245291906140b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006125e96001600f54611fed90919063ffffffff16565b905090565b600f60008154809291906126019061431a565b9190505550565b6126138484846122af565b61261f84848484612b0a565b61265e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265590613ce1565b60405180910390fd5b50505050565b606060008214156126ac576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127c0565b600082905060005b600082146126de5780806126c79061431a565b915050600a826126d79190614107565b91506126b4565b60008167ffffffffffffffff8111156126fa576126f96144ad565b5b6040519080825280601f01601f19166020018201604052801561272c5781602001600182028036833780820191505090505b5090505b600085146127b9576001826127459190614192565b9150600a856127549190614391565b603061276091906140b1565b60f81b8183815181106127765761277561447e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127b29190614107565b9450612730565b8093505050505b919050565b6060601080546127d4906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054612800906142b7565b801561284d5780601f106128225761010080835404028352916020019161284d565b820191906000526020600020905b81548152906001019060200180831161283057829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051806080016040528060438152602001614c3d6043913980519060200120826000015183602001518460400151805190602001206040516020016129a09493929190613bd3565b604051602081830303815290604052805190602001209050919050565b60006129c7611074565b826040516020016129d9929190613aac565b604051602081830303815290604052805190602001209050919050565b612a01838383611cc9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4457612a3f81612ca1565b612a83565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a8257612a818382612cea565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ac657612ac181612e57565b612b05565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b0457612b038282612f28565b5b5b505050565b6000612b2b8473ffffffffffffffffffffffffffffffffffffffff16612fa7565b15612c94578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b54611e1c565b8786866040518563ffffffff1660e01b8152600401612b769493929190613b51565b602060405180830381600087803b158015612b9057600080fd5b505af1925050508015612bc157506040513d601f19601f82011682018060405250810190612bbe919061346c565b60015b612c44573d8060008114612bf1576040519150601f19603f3d011682016040523d82523d6000602084013e612bf6565b606091505b50600081511415612c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3390613ce1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c99565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cf7846113b8565b612d019190614192565b9050600060076000848152602001908152602001600020549050818114612de6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e6b9190614192565b9050600060096000848152602001908152602001600020549050600060088381548110612e9b57612e9a61447e565b5b906000526020600020015490508060088381548110612ebd57612ebc61447e565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f0c57612f0b61444f565b5b6001900381819060005260206000200160009055905550505050565b6000612f33836113b8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612fc6906142b7565b90600052602060002090601f016020900481019282612fe8576000855561302f565b82601f1061300157805160ff191683800117855561302f565b8280016001018555821561302f579182015b8281111561302e578251825591602001919060010190613013565b5b50905061303c9190613040565b5090565b5b80821115613059576000816000905550600101613041565b5090565b600061307061306b84614001565b613fdc565b90508281526020810184848401111561308c5761308b6144e1565b5b613097848285614275565b509392505050565b60006130b26130ad84614032565b613fdc565b9050828152602081018484840111156130ce576130cd6144e1565b5b6130d9848285614275565b509392505050565b6000813590506130f081614b9b565b92915050565b60008135905061310581614bb2565b92915050565b60008135905061311a81614bc9565b92915050565b60008135905061312f81614be0565b92915050565b60008151905061314481614be0565b92915050565b600082601f83011261315f5761315e6144dc565b5b813561316f84826020860161305d565b91505092915050565b60008151905061318781614bf7565b92915050565b600082601f8301126131a2576131a16144dc565b5b81356131b284826020860161309f565b91505092915050565b6000813590506131ca81614c0e565b92915050565b6000813590506131df81614c25565b92915050565b6000602082840312156131fb576131fa6144eb565b5b6000613209848285016130e1565b91505092915050565b60008060408385031215613229576132286144eb565b5b6000613237858286016130e1565b9250506020613248858286016130e1565b9150509250929050565b60008060006060848603121561326b5761326a6144eb565b5b6000613279868287016130e1565b935050602061328a868287016130e1565b925050604061329b868287016131bb565b9150509250925092565b600080600080608085870312156132bf576132be6144eb565b5b60006132cd878288016130e1565b94505060206132de878288016130e1565b93505060406132ef878288016131bb565b925050606085013567ffffffffffffffff8111156133105761330f6144e6565b5b61331c8782880161314a565b91505092959194509250565b6000806040838503121561333f5761333e6144eb565b5b600061334d858286016130e1565b925050602061335e858286016130f6565b9150509250929050565b600080600080600060a08688031215613384576133836144eb565b5b6000613392888289016130e1565b955050602086013567ffffffffffffffff8111156133b3576133b26144e6565b5b6133bf8882890161314a565b94505060406133d08882890161310b565b93505060606133e18882890161310b565b92505060806133f2888289016131d0565b9150509295509295909350565b60008060408385031215613416576134156144eb565b5b6000613424858286016130e1565b9250506020613435858286016131bb565b9150509250929050565b600060208284031215613455576134546144eb565b5b600061346384828501613120565b91505092915050565b600060208284031215613482576134816144eb565b5b600061349084828501613135565b91505092915050565b6000602082840312156134af576134ae6144eb565b5b60006134bd84828501613178565b91505092915050565b6000602082840312156134dc576134db6144eb565b5b600082013567ffffffffffffffff8111156134fa576134f96144e6565b5b6135068482850161318d565b91505092915050565b600060208284031215613525576135246144eb565b5b6000613533848285016131bb565b91505092915050565b613545816141d8565b82525050565b613554816141c6565b82525050565b61356b613566826141c6565b614363565b82525050565b61357a816141ea565b82525050565b613589816141f6565b82525050565b6135a061359b826141f6565b614375565b82525050565b60006135b182614063565b6135bb8185614079565b93506135cb818560208601614284565b6135d4816144f0565b840191505092915050565b60006135ea82614063565b6135f4818561408a565b9350613604818560208601614284565b80840191505092915050565b600061361b8261406e565b6136258185614095565b9350613635818560208601614284565b61363e816144f0565b840191505092915050565b60006136548261406e565b61365e81856140a6565b935061366e818560208601614284565b80840191505092915050565b6000613687601083614095565b91506136928261450e565b602082019050919050565b60006136aa602b83614095565b91506136b582614537565b604082019050919050565b60006136cd603283614095565b91506136d882614586565b604082019050919050565b60006136f0602683614095565b91506136fb826145d5565b604082019050919050565b6000613713601c83614095565b915061371e82614624565b602082019050919050565b6000613736601083614095565b91506137418261464d565b602082019050919050565b6000613759601c83614095565b915061376482614676565b602082019050919050565b600061377c6002836140a6565b91506137878261469f565b600282019050919050565b600061379f600d83614095565b91506137aa826146c8565b602082019050919050565b60006137c2602483614095565b91506137cd826146f1565b604082019050919050565b60006137e5601283614095565b91506137f082614740565b602082019050919050565b6000613808601983614095565b915061381382614769565b602082019050919050565b600061382b602c83614095565b915061383682614792565b604082019050919050565b600061384e602583614095565b9150613859826147e1565b604082019050919050565b6000613871603883614095565b915061387c82614830565b604082019050919050565b6000613894602a83614095565b915061389f8261487f565b604082019050919050565b60006138b7602983614095565b91506138c2826148ce565b604082019050919050565b60006138da602083614095565b91506138e58261491d565b602082019050919050565b60006138fd602c83614095565b915061390882614946565b604082019050919050565b6000613920602083614095565b915061392b82614995565b602082019050919050565b6000613943602983614095565b915061394e826149be565b604082019050919050565b6000613966602183614095565b915061397182614a0d565b604082019050919050565b6000613989602f83614095565b915061399482614a5c565b604082019050919050565b60006139ac602183614095565b91506139b782614aab565b604082019050919050565b60006139cf60008361408a565b91506139da82614afa565b600082019050919050565b60006139f2603183614095565b91506139fd82614afd565b604082019050919050565b6000613a15602c83614095565b9150613a2082614b4c565b604082019050919050565b613a348161425e565b82525050565b613a4381614268565b82525050565b6000613a5582846135df565b915081905092915050565b6000613a6c82856135df565b9150613a78828461355a565b6014820191508190509392505050565b6000613a948285613649565b9150613aa08284613649565b91508190509392505050565b6000613ab78261376f565b9150613ac3828561358f565b602082019150613ad3828461358f565b6020820191508190509392505050565b6000613aee826139c2565b9150819050919050565b6000602082019050613b0d600083018461354b565b92915050565b6000606082019050613b28600083018661354b565b613b35602083018561353c565b8181036040830152613b4781846135a6565b9050949350505050565b6000608082019050613b66600083018761354b565b613b73602083018661354b565b613b806040830185613a2b565b8181036060830152613b9281846135a6565b905095945050505050565b6000602082019050613bb26000830184613571565b92915050565b6000602082019050613bcd6000830184613580565b92915050565b6000608082019050613be86000830187613580565b613bf56020830186613a2b565b613c02604083018561354b565b613c0f6060830184613580565b95945050505050565b6000608082019050613c2d6000830187613580565b613c3a6020830186613a3a565b613c476040830185613580565b613c546060830184613580565b95945050505050565b60006020820190508181036000830152613c7781846135a6565b905092915050565b60006020820190508181036000830152613c998184613610565b905092915050565b60006020820190508181036000830152613cba8161367a565b9050919050565b60006020820190508181036000830152613cda8161369d565b9050919050565b60006020820190508181036000830152613cfa816136c0565b9050919050565b60006020820190508181036000830152613d1a816136e3565b9050919050565b60006020820190508181036000830152613d3a81613706565b9050919050565b60006020820190508181036000830152613d5a81613729565b9050919050565b60006020820190508181036000830152613d7a8161374c565b9050919050565b60006020820190508181036000830152613d9a81613792565b9050919050565b60006020820190508181036000830152613dba816137b5565b9050919050565b60006020820190508181036000830152613dda816137d8565b9050919050565b60006020820190508181036000830152613dfa816137fb565b9050919050565b60006020820190508181036000830152613e1a8161381e565b9050919050565b60006020820190508181036000830152613e3a81613841565b9050919050565b60006020820190508181036000830152613e5a81613864565b9050919050565b60006020820190508181036000830152613e7a81613887565b9050919050565b60006020820190508181036000830152613e9a816138aa565b9050919050565b60006020820190508181036000830152613eba816138cd565b9050919050565b60006020820190508181036000830152613eda816138f0565b9050919050565b60006020820190508181036000830152613efa81613913565b9050919050565b60006020820190508181036000830152613f1a81613936565b9050919050565b60006020820190508181036000830152613f3a81613959565b9050919050565b60006020820190508181036000830152613f5a8161397c565b9050919050565b60006020820190508181036000830152613f7a8161399f565b9050919050565b60006020820190508181036000830152613f9a816139e5565b9050919050565b60006020820190508181036000830152613fba81613a08565b9050919050565b6000602082019050613fd66000830184613a2b565b92915050565b6000613fe6613ff7565b9050613ff282826142e9565b919050565b6000604051905090565b600067ffffffffffffffff82111561401c5761401b6144ad565b5b614025826144f0565b9050602081019050919050565b600067ffffffffffffffff82111561404d5761404c6144ad565b5b614056826144f0565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140bc8261425e565b91506140c78361425e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140fc576140fb6143c2565b5b828201905092915050565b60006141128261425e565b915061411d8361425e565b92508261412d5761412c6143f1565b5b828204905092915050565b60006141438261425e565b915061414e8361425e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614187576141866143c2565b5b828202905092915050565b600061419d8261425e565b91506141a88361425e565b9250828210156141bb576141ba6143c2565b5b828203905092915050565b60006141d18261423e565b9050919050565b60006141e38261423e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614237826141c6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156142a2578082015181840152602081019050614287565b838111156142b1576000848401525b50505050565b600060028204905060018216806142cf57607f821691505b602082108114156142e3576142e2614420565b5b50919050565b6142f2826144f0565b810181811067ffffffffffffffff82111715614311576143106144ad565b5b80604052505050565b60006143258261425e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614358576143576143c2565b5b600182019050919050565b600061436e8261437f565b9050919050565b6000819050919050565b600061438a82614501565b9050919050565b600061439c8261425e565b91506143a78361425e565b9250826143b7576143b66143f1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f496e636f727265637420416d6f756e7400000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4d696e74696e6720746f6f206d616e7900000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f5061796f7574206661696c656400000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e742069736e27742072756e6e696e670000000000000000000000000000600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614ba4816141c6565b8114614baf57600080fd5b50565b614bbb816141ea565b8114614bc657600080fd5b50565b614bd2816141f6565b8114614bdd57600080fd5b50565b614be981614200565b8114614bf457600080fd5b50565b614c008161422c565b8114614c0b57600080fd5b50565b614c178161425e565b8114614c2257600080fd5b50565b614c2e81614268565b8114614c3957600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a26469706673582212204b6cff8910f23a8ea867715b1d61eb9e704131dfcb8c50a33fcb28771ab9978364736f6c63430008070033
Deployed Bytecode Sourcemap
57406:2818:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53631:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32860:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20338:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21897:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21420:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51000:1151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48265:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58189:845;;;:::i;:::-;;57588:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33500:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49274:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22787:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52577:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33168:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57472:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49383:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23197:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33690:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59702:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20032:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19762:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40062:94;;;;;;;;;;;;;:::i;:::-;;54059:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57630:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39411:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59596:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20507:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57552:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22190:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59422:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23453:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57510:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59042:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59814:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55028:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40311:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53631:33;;;;:::o;32860:224::-;32962:4;33001:35;32986:50;;;:11;:50;;;;:90;;;;33040:36;33064:11;33040:23;:36::i;:::-;32986:90;32979:97;;32860:224;;;:::o;20338:100::-;20392:13;20425:5;20418:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20338:100;:::o;21897:221::-;21973:7;22001:16;22009:7;22001;:16::i;:::-;21993:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22086:15;:24;22102:7;22086:24;;;;;;;;;;;;;;;;;;;;;22079:31;;21897:221;;;:::o;21420:411::-;21501:13;21517:23;21532:7;21517:14;:23::i;:::-;21501:39;;21565:5;21559:11;;:2;:11;;;;21551:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21659:5;21643:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21668:37;21685:5;21692:12;:10;:12::i;:::-;21668:16;:37::i;:::-;21643:62;21621:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;21802:21;21811:2;21815:7;21802:8;:21::i;:::-;21490:341;21420:411;;:::o;51000:1151::-;51201:12;51226:29;51258:152;;;;;;;;51296:6;:19;51303:11;51296:19;;;;;;;;;;;;;;;;51258:152;;;;51336:11;51258:152;;;;;;51381:17;51258:152;;;51226:184;;51445:45;51452:11;51465:6;51473:4;51479;51485;51445:6;:45::i;:::-;51423:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;51640:26;51664:1;51640:6;:19;51647:11;51640:19;;;;;;;;;;;;;;;;:23;;:26;;;;:::i;:::-;51618:6;:19;51625:11;51618:19;;;;;;;;;;;;;;;:48;;;;51684:126;51722:11;51756:10;51782:17;51684:126;;;;;;;;:::i;:::-;;;;;;;;51921:12;51935:23;51970:4;51962:18;;52012:17;52031:11;51995:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51962:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51920:134;;;;52073:7;52065:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;52133:10;52126:17;;;;;51000:1151;;;;;;;:::o;48265:43::-;;;;;;;;;;;;;;;;;;;:::o;58189:845::-;58254:15;58241:9;;:28;;58233:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;58303:17;58335:9;;58323;:21;;;;:::i;:::-;58303:41;;58389:9;58372:14;;:26;;;;:::i;:::-;58355:14;:43;;;;58430:1;58417:9;:14;;:52;;;;;58460:9;58448;;:21;;;;:::i;:::-;58435:9;:34;58417:52;58409:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;58522:9;;58509;:22;;:54;;;;;58553:10;;58535:14;;:28;;58509:54;58501:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;58613:15;;58600:9;:28;;:78;;;;;58668:10;;58663:1;58646:14;;:18;;;;:::i;:::-;:32;;58600:78;58597:158;;;58708:1;58695:14;;;;;:::i;:::-;;;58742:1;58724:14;;:19;;;;;;;:::i;:::-;;;;;;;;58597:158;58779:6;58788:1;58779:10;;58775:143;58809:9;58804:1;:14;58775:143;;58853:53;58859:12;:10;:12::i;:::-;58903:1;58891:9;:13;;;;:::i;:::-;58873:14;;:32;;;;:::i;:::-;58853:5;:53::i;:::-;58833:3;;;;;:::i;:::-;;;;58775:143;;;;58931:12;58949:6;;;;;;;;;;;:11;;58968:9;58949:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58930:52;;;59001:7;58993:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;58222:812;;58189:845::o;57588:35::-;;;;:::o;33500:113::-;33561:7;33588:10;:17;;;;33581:24;;33500:113;:::o;49274:101::-;49325:7;49352:15;;49345:22;;49274:101;:::o;22787:339::-;22982:41;23001:12;:10;:12::i;:::-;23015:7;22982:18;:41::i;:::-;22974:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23090:28;23100:4;23106:2;23110:7;23090:9;:28::i;:::-;22787:339;;;:::o;52577:107::-;52630:13;52664:6;:12;52671:4;52664:12;;;;;;;;;;;;;;;;52656:20;;52577:107;;;:::o;33168:256::-;33265:7;33301:23;33318:5;33301:16;:23::i;:::-;33293:5;:31;33285:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33390:12;:19;33403:5;33390:19;;;;;;;;;;;;;;;:26;33410:5;33390:26;;;;;;;;;;;;33383:33;;33168:256;;;;:::o;57472:31::-;;;;:::o;49383:161::-;49426:7;49446:10;49497:9;49491:15;;49534:2;49527:9;;;49383:161;:::o;23197:185::-;23335:39;23352:4;23358:2;23362:7;23335:39;;;;;;;;;;;;:16;:39::i;:::-;23197:185;;;:::o;33690:233::-;33765:7;33801:30;:28;:30::i;:::-;33793:5;:38;33785:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33898:10;33909:5;33898:17;;;;;;;;:::i;:::-;;;;;;;;;;33891:24;;33690:233;;;:::o;59702:100::-;39642:12;:10;:12::i;:::-;39631:23;;:7;:5;:7::i;:::-;:23;;;39623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59786:8:::1;59776:7;:18;;;;;;;;;;;;:::i;:::-;;59702:100:::0;:::o;20032:239::-;20104:7;20124:13;20140:7;:16;20148:7;20140:16;;;;;;;;;;;;;;;;;;;;;20124:32;;20192:1;20175:19;;:5;:19;;;;20167:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20258:5;20251:12;;;20032:239;;;:::o;19762:208::-;19834:7;19879:1;19862:19;;:5;:19;;;;19854:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19946:9;:16;19956:5;19946:16;;;;;;;;;;;;;;;;19939:23;;19762:208;;;:::o;40062:94::-;39642:12;:10;:12::i;:::-;39631:23;;:7;:5;:7::i;:::-;:23;;;39623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40127:21:::1;40145:1;40127:9;:21::i;:::-;40062:94::o:0;54059:166::-;39642:12;:10;:12::i;:::-;39631:23;;:7;:5;:7::i;:::-;:23;;;39623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54116:18:::1;54137:17;:15;:17::i;:::-;54116:38;;54165:22;54171:3;54176:10;54165:5;:22::i;:::-;54198:19;:17;:19::i;:::-;54105:120;54059:166:::0;:::o;57630:37::-;;;;:::o;39411:87::-;39457:7;39484:6;;;;;;;;;;;39477:13;;39411:87;:::o;59596:98::-;39642:12;:10;:12::i;:::-;39631:23;;:7;:5;:7::i;:::-;:23;;;39623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59676:10:::1;59664:9;:22;;;;59596:98:::0;:::o;20507:104::-;20563:13;20596:7;20589:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20507:104;:::o;57552:29::-;;;;:::o;22190:295::-;22305:12;:10;:12::i;:::-;22293:24;;:8;:24;;;;22285:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22405:8;22360:18;:32;22379:12;:10;:12::i;:::-;22360:32;;;;;;;;;;;;;;;:42;22393:8;22360:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22458:8;22429:48;;22444:12;:10;:12::i;:::-;22429:48;;;22468:8;22429:48;;;;;;:::i;:::-;;;;;;;;22190:295;;:::o;59422:162::-;39642:12;:10;:12::i;:::-;39631:23;;:7;:5;:7::i;:::-;:23;;;39623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59555:21:::1;59532:20;;:44;;;;;;;;;;;;;;;;;;59422:162:::0;:::o;23453:328::-;23628:41;23647:12;:10;:12::i;:::-;23661:7;23628:18;:41::i;:::-;23620:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23734:39;23748:4;23754:2;23758:7;23767:5;23734:13;:39::i;:::-;23453:328;;;;:::o;57510:35::-;;;;:::o;59042:370::-;59160:13;59213:16;59221:7;59213;:16::i;:::-;59191:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;59361:14;:12;:14::i;:::-;59377:25;59394:7;59377:16;:25::i;:::-;59344:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59317:87;;59042:370;;;:::o;59814:105::-;59868:13;59901:10;:8;:10::i;:::-;59894:17;;59814:105;:::o;55028:462::-;55170:4;55255:27;55299:20;;;;;;;;;;;55255:65;;55376:8;55335:49;;55343:13;:21;;;55365:5;55343:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55335:49;;;55331:93;;;55408:4;55401:11;;;;;55331:93;55443:39;55466:5;55473:8;55443:22;:39::i;:::-;55436:46;;;55028:462;;;;;:::o;40311:192::-;39642:12;:10;:12::i;:::-;39631:23;;:7;:5;:7::i;:::-;:23;;;39623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40420:1:::1;40400:22;;:8;:22;;;;40392:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40476:19;40486:8;40476:9;:19::i;:::-;40311:192:::0;:::o;47245:650::-;47316:22;47382:4;47360:27;;:10;:27;;;47356:508;;;47404:18;47425:8;;47404:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47448:13;47464:8;;:15;;47448:31;;47716:42;47686:5;47679;47675:17;47669:24;47643:134;47633:144;;47503:289;;47356:508;;;47841:10;47824:28;;47356:508;47245:650;:::o;31383:126::-;;;;:::o;19393:305::-;19495:4;19547:25;19532:40;;;:11;:40;;;;:105;;;;19604:33;19589:48;;;:11;:48;;;;19532:105;:158;;;;19654:36;19678:11;19654:23;:36::i;:::-;19532:158;19512:178;;19393:305;;;:::o;25291:127::-;25356:4;25408:1;25380:30;;:7;:16;25388:7;25380:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25373:37;;25291:127;;;:::o;60043:178::-;60150:14;60189:24;:22;:24::i;:::-;60182:31;;60043:178;:::o;29273:174::-;29375:2;29348:15;:24;29364:7;29348:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29431:7;29427:2;29393:46;;29402:23;29417:7;29402:14;:23::i;:::-;29393:46;;;;;;;;;;;;29273:174;;:::o;52692:486::-;52870:4;52913:1;52895:20;;:6;:20;;;;52887:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;53011:159;53039:47;53058:27;53078:6;53058:19;:27::i;:::-;53039:18;:47::i;:::-;53105:4;53128;53151;53011:159;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52988:182;;:6;:182;;;52968:202;;52692:486;;;;;;;:::o;43042:98::-;43100:7;43131:1;43127;:5;;;;:::i;:::-;43120:12;;43042:98;;;;:::o;27269:382::-;27363:1;27349:16;;:2;:16;;;;27341:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27422:16;27430:7;27422;:16::i;:::-;27421:17;27413:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27484:45;27513:1;27517:2;27521:7;27484:20;:45::i;:::-;27559:1;27542:9;:13;27552:2;27542:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27590:2;27571:7;:16;27579:7;27571:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27635:7;27631:2;27610:33;;27627:1;27610:33;;;;;;;;;;;;27269:382;;:::o;25585:348::-;25678:4;25703:16;25711:7;25703;:16::i;:::-;25695:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25779:13;25795:23;25810:7;25795:14;:23::i;:::-;25779:39;;25848:5;25837:16;;:7;:16;;;:51;;;;25881:7;25857:31;;:20;25869:7;25857:11;:20::i;:::-;:31;;;25837:51;:87;;;;25892:32;25909:5;25916:7;25892:16;:32::i;:::-;25837:87;25829:96;;;25585:348;;;;:::o;28577:578::-;28736:4;28709:31;;:23;28724:7;28709:14;:23::i;:::-;:31;;;28701:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28819:1;28805:16;;:2;:16;;;;28797:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28875:39;28896:4;28902:2;28906:7;28875:20;:39::i;:::-;28979:29;28996:1;29000:7;28979:8;:29::i;:::-;29040:1;29021:9;:15;29031:4;29021:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29069:1;29052:9;:13;29062:2;29052:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29100:2;29081:7;:16;29089:7;29081:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29139:7;29135:2;29120:27;;29129:4;29120:27;;;;;;;;;;;;28577:578;;;:::o;40511:173::-;40567:16;40586:6;;;;;;;;;;;40567:25;;40612:8;40603:6;;:17;;;;;;;;;;;;;;;;;;40667:8;40636:40;;40657:8;40636:40;;;;;;;;;;;;40556:128;40511:173;:::o;54372:106::-;54422:7;54449:21;54468:1;54449:14;;:18;;:21;;;;:::i;:::-;54442:28;;54372:106;:::o;54556:73::-;54605:14;;:16;;;;;;;;;:::i;:::-;;;;;;54556:73::o;24663:315::-;24820:28;24830:4;24836:2;24840:7;24820:9;:28::i;:::-;24867:48;24890:4;24896:2;24900:7;24909:5;24867:22;:48::i;:::-;24859:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24663:315;;;;:::o;15516:723::-;15572:13;15802:1;15793:5;:10;15789:53;;;15820:10;;;;;;;;;;;;;;;;;;;;;15789:53;15852:12;15867:5;15852:20;;15883:14;15908:78;15923:1;15915:4;:9;15908:78;;15941:8;;;;;:::i;:::-;;;;15972:2;15964:10;;;;;:::i;:::-;;;15908:78;;;15996:19;16028:6;16018:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15996:39;;16046:154;16062:1;16053:5;:10;16046:154;;16090:1;16080:11;;;;;:::i;:::-;;;16157:2;16149:5;:10;;;;:::i;:::-;16136:2;:24;;;;:::i;:::-;16123:39;;16106:6;16113;16106:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16186:2;16177:11;;;;;:::i;:::-;;;16046:154;;;16224:6;16210:21;;;;;15516:723;;;;:::o;59927:108::-;59987:13;60020:7;60013:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59927:108;:::o;22556:164::-;22653:4;22677:18;:25;22696:5;22677:25;;;;;;;;;;;;;;;:35;22703:8;22677:35;;;;;;;;;;;;;;;;;;;;;;;;;22670:42;;22556:164;;;;:::o;18002:157::-;18087:4;18126:25;18111:40;;;:11;:40;;;;18104:47;;18002:157;;;:::o;52159:410::-;52269:7;50336:100;;;;;;;;;;;;;;;;;50316:127;;;;;;52423:6;:12;;;52458:6;:11;;;52502:6;:24;;;52492:35;;;;;;52342:204;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52314:247;;;;;;52294:267;;52159:410;;;:::o;49913:258::-;50012:7;50114:20;:18;:20::i;:::-;50136:11;50085:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50057:106;;;;;;50037:126;;49913:258;;;:::o;34536:589::-;34680:45;34707:4;34713:2;34717:7;34680:26;:45::i;:::-;34758:1;34742:18;;:4;:18;;;34738:187;;;34777:40;34809:7;34777:31;:40::i;:::-;34738:187;;;34847:2;34839:10;;:4;:10;;;34835:90;;34866:47;34899:4;34905:7;34866:32;:47::i;:::-;34835:90;34738:187;34953:1;34939:16;;:2;:16;;;34935:183;;;34972:45;35009:7;34972:36;:45::i;:::-;34935:183;;;35045:4;35039:10;;:2;:10;;;35035:83;;35066:40;35094:2;35098:7;35066:27;:40::i;:::-;35035:83;34935:183;34536:589;;;:::o;30012:799::-;30167:4;30188:15;:2;:13;;;:15::i;:::-;30184:620;;;30240:2;30224:36;;;30261:12;:10;:12::i;:::-;30275:4;30281:7;30290:5;30224:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30220:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30483:1;30466:6;:13;:18;30462:272;;;30509:60;;;;;;;;;;:::i;:::-;;;;;;;;30462:272;30684:6;30678:13;30669:6;30665:2;30661:15;30654:38;30220:529;30357:41;;;30347:51;;;:6;:51;;;;30340:58;;;;;30184:620;30788:4;30781:11;;30012:799;;;;;;;:::o;35848:164::-;35952:10;:17;;;;35925:15;:24;35941:7;35925:24;;;;;;;;;;;:44;;;;35980:10;35996:7;35980:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35848:164;:::o;36639:988::-;36905:22;36955:1;36930:22;36947:4;36930:16;:22::i;:::-;:26;;;;:::i;:::-;36905:51;;36967:18;36988:17;:26;37006:7;36988:26;;;;;;;;;;;;36967:47;;37135:14;37121:10;:28;37117:328;;37166:19;37188:12;:18;37201:4;37188:18;;;;;;;;;;;;;;;:34;37207:14;37188:34;;;;;;;;;;;;37166:56;;37272:11;37239:12;:18;37252:4;37239:18;;;;;;;;;;;;;;;:30;37258:10;37239:30;;;;;;;;;;;:44;;;;37389:10;37356:17;:30;37374:11;37356:30;;;;;;;;;;;:43;;;;37151:294;37117:328;37541:17;:26;37559:7;37541:26;;;;;;;;;;;37534:33;;;37585:12;:18;37598:4;37585:18;;;;;;;;;;;;;;;:34;37604:14;37585:34;;;;;;;;;;;37578:41;;;36720:907;;36639:988;;:::o;37922:1079::-;38175:22;38220:1;38200:10;:17;;;;:21;;;;:::i;:::-;38175:46;;38232:18;38253:15;:24;38269:7;38253:24;;;;;;;;;;;;38232:45;;38604:19;38626:10;38637:14;38626:26;;;;;;;;:::i;:::-;;;;;;;;;;38604:48;;38690:11;38665:10;38676;38665:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;38801:10;38770:15;:28;38786:11;38770:28;;;;;;;;;;;:41;;;;38942:15;:24;38958:7;38942:24;;;;;;;;;;;38935:31;;;38977:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37993:1008;;;37922:1079;:::o;35426:221::-;35511:14;35528:20;35545:2;35528:16;:20::i;:::-;35511:37;;35586:7;35559:12;:16;35572:2;35559:16;;;;;;;;;;;;;;;:24;35576:6;35559:24;;;;;;;;;;;:34;;;;35633:6;35604:17;:26;35622:7;35604:26;;;;;;;;;;;:35;;;;35500:147;35426:221;;:::o;7243:387::-;7303:4;7511:12;7578:7;7566:20;7558:28;;7621:1;7614:4;:8;7607:15;;;7243:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:139::-;1171:5;1209:6;1196:20;1187:29;;1225:33;1252:5;1225:33;:::i;:::-;1125:139;;;;:::o;1270:137::-;1315:5;1353:6;1340:20;1331:29;;1369:32;1395:5;1369:32;:::i;:::-;1270:137;;;;:::o;1413:141::-;1469:5;1500:6;1494:13;1485:22;;1516:32;1542:5;1516:32;:::i;:::-;1413:141;;;;:::o;1573:338::-;1628:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:122;;1685:79;;:::i;:::-;1644:122;1802:6;1789:20;1827:78;1901:3;1893:6;1886:4;1878:6;1874:17;1827:78;:::i;:::-;1818:87;;1634:277;1573:338;;;;:::o;1917:201::-;2003:5;2034:6;2028:13;2019:22;;2050:62;2106:5;2050:62;:::i;:::-;1917:201;;;;:::o;2138:340::-;2194:5;2243:3;2236:4;2228:6;2224:17;2220:27;2210:122;;2251:79;;:::i;:::-;2210:122;2368:6;2355:20;2393:79;2468:3;2460:6;2453:4;2445:6;2441:17;2393:79;:::i;:::-;2384:88;;2200:278;2138:340;;;;:::o;2484:139::-;2530:5;2568:6;2555:20;2546:29;;2584:33;2611:5;2584:33;:::i;:::-;2484:139;;;;:::o;2629:135::-;2673:5;2711:6;2698:20;2689:29;;2727:31;2752:5;2727:31;:::i;:::-;2629:135;;;;:::o;2770:329::-;2829:6;2878:2;2866:9;2857:7;2853:23;2849:32;2846:119;;;2884:79;;:::i;:::-;2846:119;3004:1;3029:53;3074:7;3065:6;3054:9;3050:22;3029:53;:::i;:::-;3019:63;;2975:117;2770:329;;;;:::o;3105:474::-;3173:6;3181;3230:2;3218:9;3209:7;3205:23;3201:32;3198:119;;;3236:79;;:::i;:::-;3198:119;3356:1;3381:53;3426:7;3417:6;3406:9;3402:22;3381:53;:::i;:::-;3371:63;;3327:117;3483:2;3509:53;3554:7;3545:6;3534:9;3530:22;3509:53;:::i;:::-;3499:63;;3454:118;3105:474;;;;;:::o;3585:619::-;3662:6;3670;3678;3727:2;3715:9;3706:7;3702:23;3698:32;3695:119;;;3733:79;;:::i;:::-;3695:119;3853:1;3878:53;3923:7;3914:6;3903:9;3899:22;3878:53;:::i;:::-;3868:63;;3824:117;3980:2;4006:53;4051:7;4042:6;4031:9;4027:22;4006:53;:::i;:::-;3996:63;;3951:118;4108:2;4134:53;4179:7;4170:6;4159:9;4155:22;4134:53;:::i;:::-;4124:63;;4079:118;3585:619;;;;;:::o;4210:943::-;4305:6;4313;4321;4329;4378:3;4366:9;4357:7;4353:23;4349:33;4346:120;;;4385:79;;:::i;:::-;4346:120;4505:1;4530:53;4575:7;4566:6;4555:9;4551:22;4530:53;:::i;:::-;4520:63;;4476:117;4632:2;4658:53;4703:7;4694:6;4683:9;4679:22;4658:53;:::i;:::-;4648:63;;4603:118;4760:2;4786:53;4831:7;4822:6;4811:9;4807:22;4786:53;:::i;:::-;4776:63;;4731:118;4916:2;4905:9;4901:18;4888:32;4947:18;4939:6;4936:30;4933:117;;;4969:79;;:::i;:::-;4933:117;5074:62;5128:7;5119:6;5108:9;5104:22;5074:62;:::i;:::-;5064:72;;4859:287;4210:943;;;;;;;:::o;5159:468::-;5224:6;5232;5281:2;5269:9;5260:7;5256:23;5252:32;5249:119;;;5287:79;;:::i;:::-;5249:119;5407:1;5432:53;5477:7;5468:6;5457:9;5453:22;5432:53;:::i;:::-;5422:63;;5378:117;5534:2;5560:50;5602:7;5593:6;5582:9;5578:22;5560:50;:::i;:::-;5550:60;;5505:115;5159:468;;;;;:::o;5633:1085::-;5735:6;5743;5751;5759;5767;5816:3;5804:9;5795:7;5791:23;5787:33;5784:120;;;5823:79;;:::i;:::-;5784:120;5943:1;5968:53;6013:7;6004:6;5993:9;5989:22;5968:53;:::i;:::-;5958:63;;5914:117;6098:2;6087:9;6083:18;6070:32;6129:18;6121:6;6118:30;6115:117;;;6151:79;;:::i;:::-;6115:117;6256:62;6310:7;6301:6;6290:9;6286:22;6256:62;:::i;:::-;6246:72;;6041:287;6367:2;6393:53;6438:7;6429:6;6418:9;6414:22;6393:53;:::i;:::-;6383:63;;6338:118;6495:2;6521:53;6566:7;6557:6;6546:9;6542:22;6521:53;:::i;:::-;6511:63;;6466:118;6623:3;6650:51;6693:7;6684:6;6673:9;6669:22;6650:51;:::i;:::-;6640:61;;6594:117;5633:1085;;;;;;;;:::o;6724:474::-;6792:6;6800;6849:2;6837:9;6828:7;6824:23;6820:32;6817:119;;;6855:79;;:::i;:::-;6817:119;6975:1;7000:53;7045:7;7036:6;7025:9;7021:22;7000:53;:::i;:::-;6990:63;;6946:117;7102:2;7128:53;7173:7;7164:6;7153:9;7149:22;7128:53;:::i;:::-;7118:63;;7073:118;6724:474;;;;;:::o;7204:327::-;7262:6;7311:2;7299:9;7290:7;7286:23;7282:32;7279:119;;;7317:79;;:::i;:::-;7279:119;7437:1;7462:52;7506:7;7497:6;7486:9;7482:22;7462:52;:::i;:::-;7452:62;;7408:116;7204:327;;;;:::o;7537:349::-;7606:6;7655:2;7643:9;7634:7;7630:23;7626:32;7623:119;;;7661:79;;:::i;:::-;7623:119;7781:1;7806:63;7861:7;7852:6;7841:9;7837:22;7806:63;:::i;:::-;7796:73;;7752:127;7537:349;;;;:::o;7892:409::-;7991:6;8040:2;8028:9;8019:7;8015:23;8011:32;8008:119;;;8046:79;;:::i;:::-;8008:119;8166:1;8191:93;8276:7;8267:6;8256:9;8252:22;8191:93;:::i;:::-;8181:103;;8137:157;7892:409;;;;:::o;8307:509::-;8376:6;8425:2;8413:9;8404:7;8400:23;8396:32;8393:119;;;8431:79;;:::i;:::-;8393:119;8579:1;8568:9;8564:17;8551:31;8609:18;8601:6;8598:30;8595:117;;;8631:79;;:::i;:::-;8595:117;8736:63;8791:7;8782:6;8771:9;8767:22;8736:63;:::i;:::-;8726:73;;8522:287;8307:509;;;;:::o;8822:329::-;8881:6;8930:2;8918:9;8909:7;8905:23;8901:32;8898:119;;;8936:79;;:::i;:::-;8898:119;9056:1;9081:53;9126:7;9117:6;9106:9;9102:22;9081:53;:::i;:::-;9071:63;;9027:117;8822:329;;;;:::o;9157:142::-;9260:32;9286:5;9260:32;:::i;:::-;9255:3;9248:45;9157:142;;:::o;9305:118::-;9392:24;9410:5;9392:24;:::i;:::-;9387:3;9380:37;9305:118;;:::o;9429:157::-;9534:45;9554:24;9572:5;9554:24;:::i;:::-;9534:45;:::i;:::-;9529:3;9522:58;9429:157;;:::o;9592:109::-;9673:21;9688:5;9673:21;:::i;:::-;9668:3;9661:34;9592:109;;:::o;9707:118::-;9794:24;9812:5;9794:24;:::i;:::-;9789:3;9782:37;9707:118;;:::o;9831:157::-;9936:45;9956:24;9974:5;9956:24;:::i;:::-;9936:45;:::i;:::-;9931:3;9924:58;9831:157;;:::o;9994:360::-;10080:3;10108:38;10140:5;10108:38;:::i;:::-;10162:70;10225:6;10220:3;10162:70;:::i;:::-;10155:77;;10241:52;10286:6;10281:3;10274:4;10267:5;10263:16;10241:52;:::i;:::-;10318:29;10340:6;10318:29;:::i;:::-;10313:3;10309:39;10302:46;;10084:270;9994:360;;;;:::o;10360:373::-;10464:3;10492:38;10524:5;10492:38;:::i;:::-;10546:88;10627:6;10622:3;10546:88;:::i;:::-;10539:95;;10643:52;10688:6;10683:3;10676:4;10669:5;10665:16;10643:52;:::i;:::-;10720:6;10715:3;10711:16;10704:23;;10468:265;10360:373;;;;:::o;10739:364::-;10827:3;10855:39;10888:5;10855:39;:::i;:::-;10910:71;10974:6;10969:3;10910:71;:::i;:::-;10903:78;;10990:52;11035:6;11030:3;11023:4;11016:5;11012:16;10990:52;:::i;:::-;11067:29;11089:6;11067:29;:::i;:::-;11062:3;11058:39;11051:46;;10831:272;10739:364;;;;:::o;11109:377::-;11215:3;11243:39;11276:5;11243:39;:::i;:::-;11298:89;11380:6;11375:3;11298:89;:::i;:::-;11291:96;;11396:52;11441:6;11436:3;11429:4;11422:5;11418:16;11396:52;:::i;:::-;11473:6;11468:3;11464:16;11457:23;;11219:267;11109:377;;;;:::o;11492:366::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11492:366;;;:::o;11864:::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;11864:366;;;:::o;12236:::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12608:366;;;:::o;12980:::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;12980:366;;;:::o;13352:::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13352:366;;;:::o;13724:::-;13866:3;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13963:93;14052:3;13963:93;:::i;:::-;14081:2;14076:3;14072:12;14065:19;;13724:366;;;:::o;14096:400::-;14256:3;14277:84;14359:1;14354:3;14277:84;:::i;:::-;14270:91;;14370:93;14459:3;14370:93;:::i;:::-;14488:1;14483:3;14479:11;14472:18;;14096:400;;;:::o;14502:366::-;14644:3;14665:67;14729:2;14724:3;14665:67;:::i;:::-;14658:74;;14741:93;14830:3;14741:93;:::i;:::-;14859:2;14854:3;14850:12;14843:19;;14502:366;;;:::o;14874:::-;15016:3;15037:67;15101:2;15096:3;15037:67;:::i;:::-;15030:74;;15113:93;15202:3;15113:93;:::i;:::-;15231:2;15226:3;15222:12;15215:19;;14874:366;;;:::o;15246:::-;15388:3;15409:67;15473:2;15468:3;15409:67;:::i;:::-;15402:74;;15485:93;15574:3;15485:93;:::i;:::-;15603:2;15598:3;15594:12;15587:19;;15246:366;;;:::o;15618:::-;15760:3;15781:67;15845:2;15840:3;15781:67;:::i;:::-;15774:74;;15857:93;15946:3;15857:93;:::i;:::-;15975:2;15970:3;15966:12;15959:19;;15618:366;;;:::o;15990:::-;16132:3;16153:67;16217:2;16212:3;16153:67;:::i;:::-;16146:74;;16229:93;16318:3;16229:93;:::i;:::-;16347:2;16342:3;16338:12;16331:19;;15990:366;;;:::o;16362:::-;16504:3;16525:67;16589:2;16584:3;16525:67;:::i;:::-;16518:74;;16601:93;16690:3;16601:93;:::i;:::-;16719:2;16714:3;16710:12;16703:19;;16362:366;;;:::o;16734:::-;16876:3;16897:67;16961:2;16956:3;16897:67;:::i;:::-;16890:74;;16973:93;17062:3;16973:93;:::i;:::-;17091:2;17086:3;17082:12;17075:19;;16734:366;;;:::o;17106:::-;17248:3;17269:67;17333:2;17328:3;17269:67;:::i;:::-;17262:74;;17345:93;17434:3;17345:93;:::i;:::-;17463:2;17458:3;17454:12;17447:19;;17106:366;;;:::o;17478:::-;17620:3;17641:67;17705:2;17700:3;17641:67;:::i;:::-;17634:74;;17717:93;17806:3;17717:93;:::i;:::-;17835:2;17830:3;17826:12;17819:19;;17478:366;;;:::o;17850:::-;17992:3;18013:67;18077:2;18072:3;18013:67;:::i;:::-;18006:74;;18089:93;18178:3;18089:93;:::i;:::-;18207:2;18202:3;18198:12;18191:19;;17850:366;;;:::o;18222:::-;18364:3;18385:67;18449:2;18444:3;18385:67;:::i;:::-;18378:74;;18461:93;18550:3;18461:93;:::i;:::-;18579:2;18574:3;18570:12;18563:19;;18222:366;;;:::o;18594:::-;18736:3;18757:67;18821:2;18816:3;18757:67;:::i;:::-;18750:74;;18833:93;18922:3;18833:93;:::i;:::-;18951:2;18946:3;18942:12;18935:19;;18594:366;;;:::o;18966:::-;19108:3;19129:67;19193:2;19188:3;19129:67;:::i;:::-;19122:74;;19205:93;19294:3;19205:93;:::i;:::-;19323:2;19318:3;19314:12;19307:19;;18966:366;;;:::o;19338:::-;19480:3;19501:67;19565:2;19560:3;19501:67;:::i;:::-;19494:74;;19577:93;19666:3;19577:93;:::i;:::-;19695:2;19690:3;19686:12;19679:19;;19338:366;;;:::o;19710:::-;19852:3;19873:67;19937:2;19932:3;19873:67;:::i;:::-;19866:74;;19949:93;20038:3;19949:93;:::i;:::-;20067:2;20062:3;20058:12;20051:19;;19710:366;;;:::o;20082:::-;20224:3;20245:67;20309:2;20304:3;20245:67;:::i;:::-;20238:74;;20321:93;20410:3;20321:93;:::i;:::-;20439:2;20434:3;20430:12;20423:19;;20082:366;;;:::o;20454:398::-;20613:3;20634:83;20715:1;20710:3;20634:83;:::i;:::-;20627:90;;20726:93;20815:3;20726:93;:::i;:::-;20844:1;20839:3;20835:11;20828:18;;20454:398;;;:::o;20858:366::-;21000:3;21021:67;21085:2;21080:3;21021:67;:::i;:::-;21014:74;;21097:93;21186:3;21097:93;:::i;:::-;21215:2;21210:3;21206:12;21199:19;;20858:366;;;:::o;21230:::-;21372:3;21393:67;21457:2;21452:3;21393:67;:::i;:::-;21386:74;;21469:93;21558:3;21469:93;:::i;:::-;21587:2;21582:3;21578:12;21571:19;;21230:366;;;:::o;21602:118::-;21689:24;21707:5;21689:24;:::i;:::-;21684:3;21677:37;21602:118;;:::o;21726:112::-;21809:22;21825:5;21809:22;:::i;:::-;21804:3;21797:35;21726:112;;:::o;21844:271::-;21974:3;21996:93;22085:3;22076:6;21996:93;:::i;:::-;21989:100;;22106:3;22099:10;;21844:271;;;;:::o;22121:412::-;22279:3;22301:93;22390:3;22381:6;22301:93;:::i;:::-;22294:100;;22404:75;22475:3;22466:6;22404:75;:::i;:::-;22504:2;22499:3;22495:12;22488:19;;22524:3;22517:10;;22121:412;;;;;:::o;22539:435::-;22719:3;22741:95;22832:3;22823:6;22741:95;:::i;:::-;22734:102;;22853:95;22944:3;22935:6;22853:95;:::i;:::-;22846:102;;22965:3;22958:10;;22539:435;;;;;:::o;22980:663::-;23221:3;23243:148;23387:3;23243:148;:::i;:::-;23236:155;;23401:75;23472:3;23463:6;23401:75;:::i;:::-;23501:2;23496:3;23492:12;23485:19;;23514:75;23585:3;23576:6;23514:75;:::i;:::-;23614:2;23609:3;23605:12;23598:19;;23634:3;23627:10;;22980:663;;;;;:::o;23649:379::-;23833:3;23855:147;23998:3;23855:147;:::i;:::-;23848:154;;24019:3;24012:10;;23649:379;;;:::o;24034:222::-;24127:4;24165:2;24154:9;24150:18;24142:26;;24178:71;24246:1;24235:9;24231:17;24222:6;24178:71;:::i;:::-;24034:222;;;;:::o;24262:561::-;24445:4;24483:2;24472:9;24468:18;24460:26;;24496:71;24564:1;24553:9;24549:17;24540:6;24496:71;:::i;:::-;24577:88;24661:2;24650:9;24646:18;24637:6;24577:88;:::i;:::-;24712:9;24706:4;24702:20;24697:2;24686:9;24682:18;24675:48;24740:76;24811:4;24802:6;24740:76;:::i;:::-;24732:84;;24262:561;;;;;;:::o;24829:640::-;25024:4;25062:3;25051:9;25047:19;25039:27;;25076:71;25144:1;25133:9;25129:17;25120:6;25076:71;:::i;:::-;25157:72;25225:2;25214:9;25210:18;25201:6;25157:72;:::i;:::-;25239;25307:2;25296:9;25292:18;25283:6;25239:72;:::i;:::-;25358:9;25352:4;25348:20;25343:2;25332:9;25328:18;25321:48;25386:76;25457:4;25448:6;25386:76;:::i;:::-;25378:84;;24829:640;;;;;;;:::o;25475:210::-;25562:4;25600:2;25589:9;25585:18;25577:26;;25613:65;25675:1;25664:9;25660:17;25651:6;25613:65;:::i;:::-;25475:210;;;;:::o;25691:222::-;25784:4;25822:2;25811:9;25807:18;25799:26;;25835:71;25903:1;25892:9;25888:17;25879:6;25835:71;:::i;:::-;25691:222;;;;:::o;25919:553::-;26096:4;26134:3;26123:9;26119:19;26111:27;;26148:71;26216:1;26205:9;26201:17;26192:6;26148:71;:::i;:::-;26229:72;26297:2;26286:9;26282:18;26273:6;26229:72;:::i;:::-;26311;26379:2;26368:9;26364:18;26355:6;26311:72;:::i;:::-;26393;26461:2;26450:9;26446:18;26437:6;26393:72;:::i;:::-;25919:553;;;;;;;:::o;26478:545::-;26651:4;26689:3;26678:9;26674:19;26666:27;;26703:71;26771:1;26760:9;26756:17;26747:6;26703:71;:::i;:::-;26784:68;26848:2;26837:9;26833:18;26824:6;26784:68;:::i;:::-;26862:72;26930:2;26919:9;26915:18;26906:6;26862:72;:::i;:::-;26944;27012:2;27001:9;26997:18;26988:6;26944:72;:::i;:::-;26478:545;;;;;;;:::o;27029:309::-;27140:4;27178:2;27167:9;27163:18;27155:26;;27227:9;27221:4;27217:20;27213:1;27202:9;27198:17;27191:47;27255:76;27326:4;27317:6;27255:76;:::i;:::-;27247:84;;27029:309;;;;:::o;27344:313::-;27457:4;27495:2;27484:9;27480:18;27472:26;;27544:9;27538:4;27534:20;27530:1;27519:9;27515:17;27508:47;27572:78;27645:4;27636:6;27572:78;:::i;:::-;27564:86;;27344:313;;;;:::o;27663:419::-;27829:4;27867:2;27856:9;27852:18;27844:26;;27916:9;27910:4;27906:20;27902:1;27891:9;27887:17;27880:47;27944:131;28070:4;27944:131;:::i;:::-;27936:139;;27663:419;;;:::o;28088:::-;28254:4;28292:2;28281:9;28277:18;28269:26;;28341:9;28335:4;28331:20;28327:1;28316:9;28312:17;28305:47;28369:131;28495:4;28369:131;:::i;:::-;28361:139;;28088:419;;;:::o;28513:::-;28679:4;28717:2;28706:9;28702:18;28694:26;;28766:9;28760:4;28756:20;28752:1;28741:9;28737:17;28730:47;28794:131;28920:4;28794:131;:::i;:::-;28786:139;;28513:419;;;:::o;28938:::-;29104:4;29142:2;29131:9;29127:18;29119:26;;29191:9;29185:4;29181:20;29177:1;29166:9;29162:17;29155:47;29219:131;29345:4;29219:131;:::i;:::-;29211:139;;28938:419;;;:::o;29363:::-;29529:4;29567:2;29556:9;29552:18;29544:26;;29616:9;29610:4;29606:20;29602:1;29591:9;29587:17;29580:47;29644:131;29770:4;29644:131;:::i;:::-;29636:139;;29363:419;;;:::o;29788:::-;29954:4;29992:2;29981:9;29977:18;29969:26;;30041:9;30035:4;30031:20;30027:1;30016:9;30012:17;30005:47;30069:131;30195:4;30069:131;:::i;:::-;30061:139;;29788:419;;;:::o;30213:::-;30379:4;30417:2;30406:9;30402:18;30394:26;;30466:9;30460:4;30456:20;30452:1;30441:9;30437:17;30430:47;30494:131;30620:4;30494:131;:::i;:::-;30486:139;;30213:419;;;:::o;30638:::-;30804:4;30842:2;30831:9;30827:18;30819:26;;30891:9;30885:4;30881:20;30877:1;30866:9;30862:17;30855:47;30919:131;31045:4;30919:131;:::i;:::-;30911:139;;30638:419;;;:::o;31063:::-;31229:4;31267:2;31256:9;31252:18;31244:26;;31316:9;31310:4;31306:20;31302:1;31291:9;31287:17;31280:47;31344:131;31470:4;31344:131;:::i;:::-;31336:139;;31063:419;;;:::o;31488:::-;31654:4;31692:2;31681:9;31677:18;31669:26;;31741:9;31735:4;31731:20;31727:1;31716:9;31712:17;31705:47;31769:131;31895:4;31769:131;:::i;:::-;31761:139;;31488:419;;;:::o;31913:::-;32079:4;32117:2;32106:9;32102:18;32094:26;;32166:9;32160:4;32156:20;32152:1;32141:9;32137:17;32130:47;32194:131;32320:4;32194:131;:::i;:::-;32186:139;;31913:419;;;:::o;32338:::-;32504:4;32542:2;32531:9;32527:18;32519:26;;32591:9;32585:4;32581:20;32577:1;32566:9;32562:17;32555:47;32619:131;32745:4;32619:131;:::i;:::-;32611:139;;32338:419;;;:::o;32763:::-;32929:4;32967:2;32956:9;32952:18;32944:26;;33016:9;33010:4;33006:20;33002:1;32991:9;32987:17;32980:47;33044:131;33170:4;33044:131;:::i;:::-;33036:139;;32763:419;;;:::o;33188:::-;33354:4;33392:2;33381:9;33377:18;33369:26;;33441:9;33435:4;33431:20;33427:1;33416:9;33412:17;33405:47;33469:131;33595:4;33469:131;:::i;:::-;33461:139;;33188:419;;;:::o;33613:::-;33779:4;33817:2;33806:9;33802:18;33794:26;;33866:9;33860:4;33856:20;33852:1;33841:9;33837:17;33830:47;33894:131;34020:4;33894:131;:::i;:::-;33886:139;;33613:419;;;:::o;34038:::-;34204:4;34242:2;34231:9;34227:18;34219:26;;34291:9;34285:4;34281:20;34277:1;34266:9;34262:17;34255:47;34319:131;34445:4;34319:131;:::i;:::-;34311:139;;34038:419;;;:::o;34463:::-;34629:4;34667:2;34656:9;34652:18;34644:26;;34716:9;34710:4;34706:20;34702:1;34691:9;34687:17;34680:47;34744:131;34870:4;34744:131;:::i;:::-;34736:139;;34463:419;;;:::o;34888:::-;35054:4;35092:2;35081:9;35077:18;35069:26;;35141:9;35135:4;35131:20;35127:1;35116:9;35112:17;35105:47;35169:131;35295:4;35169:131;:::i;:::-;35161:139;;34888:419;;;:::o;35313:::-;35479:4;35517:2;35506:9;35502:18;35494:26;;35566:9;35560:4;35556:20;35552:1;35541:9;35537:17;35530:47;35594:131;35720:4;35594:131;:::i;:::-;35586:139;;35313:419;;;:::o;35738:::-;35904:4;35942:2;35931:9;35927:18;35919:26;;35991:9;35985:4;35981:20;35977:1;35966:9;35962:17;35955:47;36019:131;36145:4;36019:131;:::i;:::-;36011:139;;35738:419;;;:::o;36163:::-;36329:4;36367:2;36356:9;36352:18;36344:26;;36416:9;36410:4;36406:20;36402:1;36391:9;36387:17;36380:47;36444:131;36570:4;36444:131;:::i;:::-;36436:139;;36163:419;;;:::o;36588:::-;36754:4;36792:2;36781:9;36777:18;36769:26;;36841:9;36835:4;36831:20;36827:1;36816:9;36812:17;36805:47;36869:131;36995:4;36869:131;:::i;:::-;36861:139;;36588:419;;;:::o;37013:::-;37179:4;37217:2;37206:9;37202:18;37194:26;;37266:9;37260:4;37256:20;37252:1;37241:9;37237:17;37230:47;37294:131;37420:4;37294:131;:::i;:::-;37286:139;;37013:419;;;:::o;37438:::-;37604:4;37642:2;37631:9;37627:18;37619:26;;37691:9;37685:4;37681:20;37677:1;37666:9;37662:17;37655:47;37719:131;37845:4;37719:131;:::i;:::-;37711:139;;37438:419;;;:::o;37863:::-;38029:4;38067:2;38056:9;38052:18;38044:26;;38116:9;38110:4;38106:20;38102:1;38091:9;38087:17;38080:47;38144:131;38270:4;38144:131;:::i;:::-;38136:139;;37863:419;;;:::o;38288:222::-;38381:4;38419:2;38408:9;38404:18;38396:26;;38432:71;38500:1;38489:9;38485:17;38476:6;38432:71;:::i;:::-;38288:222;;;;:::o;38516:129::-;38550:6;38577:20;;:::i;:::-;38567:30;;38606:33;38634:4;38626:6;38606:33;:::i;:::-;38516:129;;;:::o;38651:75::-;38684:6;38717:2;38711:9;38701:19;;38651:75;:::o;38732:307::-;38793:4;38883:18;38875:6;38872:30;38869:56;;;38905:18;;:::i;:::-;38869:56;38943:29;38965:6;38943:29;:::i;:::-;38935:37;;39027:4;39021;39017:15;39009:23;;38732:307;;;:::o;39045:308::-;39107:4;39197:18;39189:6;39186:30;39183:56;;;39219:18;;:::i;:::-;39183:56;39257:29;39279:6;39257:29;:::i;:::-;39249:37;;39341:4;39335;39331:15;39323:23;;39045:308;;;:::o;39359:98::-;39410:6;39444:5;39438:12;39428:22;;39359:98;;;:::o;39463:99::-;39515:6;39549:5;39543:12;39533:22;;39463:99;;;:::o;39568:168::-;39651:11;39685:6;39680:3;39673:19;39725:4;39720:3;39716:14;39701:29;;39568:168;;;;:::o;39742:147::-;39843:11;39880:3;39865:18;;39742:147;;;;:::o;39895:169::-;39979:11;40013:6;40008:3;40001:19;40053:4;40048:3;40044:14;40029:29;;39895:169;;;;:::o;40070:148::-;40172:11;40209:3;40194:18;;40070:148;;;;:::o;40224:305::-;40264:3;40283:20;40301:1;40283:20;:::i;:::-;40278:25;;40317:20;40335:1;40317:20;:::i;:::-;40312:25;;40471:1;40403:66;40399:74;40396:1;40393:81;40390:107;;;40477:18;;:::i;:::-;40390:107;40521:1;40518;40514:9;40507:16;;40224:305;;;;:::o;40535:185::-;40575:1;40592:20;40610:1;40592:20;:::i;:::-;40587:25;;40626:20;40644:1;40626:20;:::i;:::-;40621:25;;40665:1;40655:35;;40670:18;;:::i;:::-;40655:35;40712:1;40709;40705:9;40700:14;;40535:185;;;;:::o;40726:348::-;40766:7;40789:20;40807:1;40789:20;:::i;:::-;40784:25;;40823:20;40841:1;40823:20;:::i;:::-;40818:25;;41011:1;40943:66;40939:74;40936:1;40933:81;40928:1;40921:9;40914:17;40910:105;40907:131;;;41018:18;;:::i;:::-;40907:131;41066:1;41063;41059:9;41048:20;;40726:348;;;;:::o;41080:191::-;41120:4;41140:20;41158:1;41140:20;:::i;:::-;41135:25;;41174:20;41192:1;41174:20;:::i;:::-;41169:25;;41213:1;41210;41207:8;41204:34;;;41218:18;;:::i;:::-;41204:34;41263:1;41260;41256:9;41248:17;;41080:191;;;;:::o;41277:96::-;41314:7;41343:24;41361:5;41343:24;:::i;:::-;41332:35;;41277:96;;;:::o;41379:104::-;41424:7;41453:24;41471:5;41453:24;:::i;:::-;41442:35;;41379:104;;;:::o;41489:90::-;41523:7;41566:5;41559:13;41552:21;41541:32;;41489:90;;;:::o;41585:77::-;41622:7;41651:5;41640:16;;41585:77;;;:::o;41668:149::-;41704:7;41744:66;41737:5;41733:78;41722:89;;41668:149;;;:::o;41823:125::-;41889:7;41918:24;41936:5;41918:24;:::i;:::-;41907:35;;41823:125;;;:::o;41954:126::-;41991:7;42031:42;42024:5;42020:54;42009:65;;41954:126;;;:::o;42086:77::-;42123:7;42152:5;42141:16;;42086:77;;;:::o;42169:86::-;42204:7;42244:4;42237:5;42233:16;42222:27;;42169:86;;;:::o;42261:154::-;42345:6;42340:3;42335;42322:30;42407:1;42398:6;42393:3;42389:16;42382:27;42261:154;;;:::o;42421:307::-;42489:1;42499:113;42513:6;42510:1;42507:13;42499:113;;;42598:1;42593:3;42589:11;42583:18;42579:1;42574:3;42570:11;42563:39;42535:2;42532:1;42528:10;42523:15;;42499:113;;;42630:6;42627:1;42624:13;42621:101;;;42710:1;42701:6;42696:3;42692:16;42685:27;42621:101;42470:258;42421:307;;;:::o;42734:320::-;42778:6;42815:1;42809:4;42805:12;42795:22;;42862:1;42856:4;42852:12;42883:18;42873:81;;42939:4;42931:6;42927:17;42917:27;;42873:81;43001:2;42993:6;42990:14;42970:18;42967:38;42964:84;;;43020:18;;:::i;:::-;42964:84;42785:269;42734:320;;;:::o;43060:281::-;43143:27;43165:4;43143:27;:::i;:::-;43135:6;43131:40;43273:6;43261:10;43258:22;43237:18;43225:10;43222:34;43219:62;43216:88;;;43284:18;;:::i;:::-;43216:88;43324:10;43320:2;43313:22;43103:238;43060:281;;:::o;43347:233::-;43386:3;43409:24;43427:5;43409:24;:::i;:::-;43400:33;;43455:66;43448:5;43445:77;43442:103;;;43525:18;;:::i;:::-;43442:103;43572:1;43565:5;43561:13;43554:20;;43347:233;;;:::o;43586:100::-;43625:7;43654:26;43674:5;43654:26;:::i;:::-;43643:37;;43586:100;;;:::o;43692:79::-;43731:7;43760:5;43749:16;;43692:79;;;:::o;43777:94::-;43816:7;43845:20;43859:5;43845:20;:::i;:::-;43834:31;;43777:94;;;:::o;43877:176::-;43909:1;43926:20;43944:1;43926:20;:::i;:::-;43921:25;;43960:20;43978:1;43960:20;:::i;:::-;43955:25;;43999:1;43989:35;;44004:18;;:::i;:::-;43989:35;44045:1;44042;44038:9;44033:14;;43877:176;;;;:::o;44059:180::-;44107:77;44104:1;44097:88;44204:4;44201:1;44194:15;44228:4;44225:1;44218:15;44245:180;44293:77;44290:1;44283:88;44390:4;44387:1;44380:15;44414:4;44411:1;44404:15;44431:180;44479:77;44476:1;44469:88;44576:4;44573:1;44566:15;44600:4;44597:1;44590:15;44617:180;44665:77;44662:1;44655:88;44762:4;44759:1;44752:15;44786:4;44783:1;44776:15;44803:180;44851:77;44848:1;44841:88;44948:4;44945:1;44938:15;44972:4;44969:1;44962:15;44989:180;45037:77;45034:1;45027:88;45134:4;45131:1;45124:15;45158:4;45155:1;45148:15;45175:117;45284:1;45281;45274:12;45298:117;45407:1;45404;45397:12;45421:117;45530:1;45527;45520:12;45544:117;45653:1;45650;45643:12;45667:102;45708:6;45759:2;45755:7;45750:2;45743:5;45739:14;45735:28;45725:38;;45667:102;;;:::o;45775:94::-;45808:8;45856:5;45852:2;45848:14;45827:35;;45775:94;;;:::o;45875:166::-;46015:18;46011:1;46003:6;45999:14;45992:42;45875:166;:::o;46047:230::-;46187:34;46183:1;46175:6;46171:14;46164:58;46256:13;46251:2;46243:6;46239:15;46232:38;46047:230;:::o;46283:237::-;46423:34;46419:1;46411:6;46407:14;46400:58;46492:20;46487:2;46479:6;46475:15;46468:45;46283:237;:::o;46526:225::-;46666:34;46662:1;46654:6;46650:14;46643:58;46735:8;46730:2;46722:6;46718:15;46711:33;46526:225;:::o;46757:178::-;46897:30;46893:1;46885:6;46881:14;46874:54;46757:178;:::o;46941:166::-;47081:18;47077:1;47069:6;47065:14;47058:42;46941:166;:::o;47113:178::-;47253:30;47249:1;47241:6;47237:14;47230:54;47113:178;:::o;47297:214::-;47437:66;47433:1;47425:6;47421:14;47414:90;47297:214;:::o;47517:163::-;47657:15;47653:1;47645:6;47641:14;47634:39;47517:163;:::o;47686:223::-;47826:34;47822:1;47814:6;47810:14;47803:58;47895:6;47890:2;47882:6;47878:15;47871:31;47686:223;:::o;47915:168::-;48055:20;48051:1;48043:6;48039:14;48032:44;47915:168;:::o;48089:175::-;48229:27;48225:1;48217:6;48213:14;48206:51;48089:175;:::o;48270:231::-;48410:34;48406:1;48398:6;48394:14;48387:58;48479:14;48474:2;48466:6;48462:15;48455:39;48270:231;:::o;48507:224::-;48647:34;48643:1;48635:6;48631:14;48624:58;48716:7;48711:2;48703:6;48699:15;48692:32;48507:224;:::o;48737:243::-;48877:34;48873:1;48865:6;48861:14;48854:58;48946:26;48941:2;48933:6;48929:15;48922:51;48737:243;:::o;48986:229::-;49126:34;49122:1;49114:6;49110:14;49103:58;49195:12;49190:2;49182:6;49178:15;49171:37;48986:229;:::o;49221:228::-;49361:34;49357:1;49349:6;49345:14;49338:58;49430:11;49425:2;49417:6;49413:15;49406:36;49221:228;:::o;49455:182::-;49595:34;49591:1;49583:6;49579:14;49572:58;49455:182;:::o;49643:231::-;49783:34;49779:1;49771:6;49767:14;49760:58;49852:14;49847:2;49839:6;49835:15;49828:39;49643:231;:::o;49880:182::-;50020:34;50016:1;50008:6;50004:14;49997:58;49880:182;:::o;50068:228::-;50208:34;50204:1;50196:6;50192:14;50185:58;50277:11;50272:2;50264:6;50260:15;50253:36;50068:228;:::o;50302:220::-;50442:34;50438:1;50430:6;50426:14;50419:58;50511:3;50506:2;50498:6;50494:15;50487:28;50302:220;:::o;50528:234::-;50668:34;50664:1;50656:6;50652:14;50645:58;50737:17;50732:2;50724:6;50720:15;50713:42;50528:234;:::o;50768:220::-;50908:34;50904:1;50896:6;50892:14;50885:58;50977:3;50972:2;50964:6;50960:15;50953:28;50768:220;:::o;50994:114::-;;:::o;51114:236::-;51254:34;51250:1;51242:6;51238:14;51231:58;51323:19;51318:2;51310:6;51306:15;51299:44;51114:236;:::o;51356:231::-;51496:34;51492:1;51484:6;51480:14;51473:58;51565:14;51560:2;51552:6;51548:15;51541:39;51356:231;:::o;51593:122::-;51666:24;51684:5;51666:24;:::i;:::-;51659:5;51656:35;51646:63;;51705:1;51702;51695:12;51646:63;51593:122;:::o;51721:116::-;51791:21;51806:5;51791:21;:::i;:::-;51784:5;51781:32;51771:60;;51827:1;51824;51817:12;51771:60;51721:116;:::o;51843:122::-;51916:24;51934:5;51916:24;:::i;:::-;51909:5;51906:35;51896:63;;51955:1;51952;51945:12;51896:63;51843:122;:::o;51971:120::-;52043:23;52060:5;52043:23;:::i;:::-;52036:5;52033:34;52023:62;;52081:1;52078;52071:12;52023:62;51971:120;:::o;52097:180::-;52199:53;52246:5;52199:53;:::i;:::-;52192:5;52189:64;52179:92;;52267:1;52264;52257:12;52179:92;52097:180;:::o;52283:122::-;52356:24;52374:5;52356:24;:::i;:::-;52349:5;52346:35;52336:63;;52395:1;52392;52385:12;52336:63;52283:122;:::o;52411:118::-;52482:22;52498:5;52482:22;:::i;:::-;52475:5;52472:33;52462:61;;52519:1;52516;52509:12;52462:61;52411:118;:::o
Swarm Source
ipfs://f99b0098e730f9d3e2e9b8a3f777873a8169f74c10c19e5b54dcb207a4f51622
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.