Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,064 RH
Holders
324
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 RHLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Rhider
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; import "./Ownable.sol"; import "./ERC721T.sol"; import "./Strings.sol"; import "./DefaultOperatorFilterer.sol"; import "./ReentrancyGuard.sol"; contract Rhider is ERC721T, Ownable, DefaultOperatorFilterer, ReentrancyGuard { using Strings for uint; /** * @dev Data structure of Moon */ struct Moon { address owner; bool celestialType; } uint public MAX_SUPPLY = 5155; uint public PRICE = 0 ether; uint public MAX_QTY = 1; Moon[] public moons; bool public isWhiteMintActive = false; mapping(address => uint) private _balances; string private _tokenURIPrefix="ipfs://"; string private _tokenURISuffix = ".json"; mapping(address => uint) public whitelisted; mapping(address => uint) public minted; constructor() ERC721T("RhiderNFT", "RH"){ } /** * @dev Returns the number of tokens in ``owners``'s account. */ function balanceOf(address account) public view override returns (uint) { require(account != address(0), "RH: balance query for the zero address"); return _balances[account]; } /** * @dev Returns the bool of tokens if``owner``'s account contains the tokenIds. */ function isOwnerOf( address account, uint[] calldata tokenIds ) external view returns( bool ){ for(uint i; i < tokenIds.length; ++i ){ if( moons[ tokenIds[i] ].owner != account ) return false; } return true; } /** * @dev Returns the owner of the `tokenId` token. * */ function ownerOf( uint tokenId ) public override view returns( address owner_ ){ address owner = moons[tokenId-1].owner; require(owner != address(0), "RH: query for nonexistent token"); return owner; } /** * @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(uint index) external view returns (uint) { require(index <= totalSupply(), "RH: global index out of bounds"); return index; } /** * @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, uint index) public view returns (uint tokenId) { uint count; for( uint i; i <= moons.length; ++i ){ if( owner == moons[i].owner ){ if( count == index ) return i+1; else ++count; } } revert("ERC721Enumerable: owner index out of bounds"); } /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint tokenId) external view override returns (string memory) { require(_exists(tokenId), "RH: URI query for nonexistent token"); return string(abi.encodePacked(_tokenURIPrefix, tokenId.toString(), _tokenURISuffix)); } /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() public view returns( uint totalSupply_ ){ return moons.length; } function setWhitelist(address[] calldata userList, uint allowed) public onlyOwner { require(userList.length > 0, "RH: userList must be greater than 0"); for(uint i; i < userList.length; i++) { whitelisted[userList[i]] = allowed; } } /** * @dev Returns the list of tokenIds stored by the owner's account. */ function walletOfOwner( address account ) external view returns( uint[] memory ){ uint quantity = balanceOf( account ); uint[] memory wallet = new uint[]( quantity ); for( uint i; i < quantity; ++i ){ wallet[i] = tokenOfOwnerByIndex( account, i ); } return wallet; } /** * @dev mints token based on the number of qty specified. */ function mint( uint quantity ) external payable nonReentrant { require(whitelisted[msg.sender] > 0, "RH: You were not selected to the WL"); require(isWhiteMintActive, "RH: Minting needs to be enabled."); require(whitelisted[msg.sender] >= quantity, "RH: Account is less than the qty limit"); require(minted[msg.sender] + quantity <= MAX_QTY, "RH: Quantity must be less than or equal MAX_QTY"); minted[msg.sender] += quantity; require( msg.value >= PRICE , "RH: Ether sent is not correct" ); uint supply = totalSupply(); require( supply + quantity <= MAX_SUPPLY, "RH: Mint/order exceeds supply" ); for(uint i; i < quantity; i++){ uint tokenId = ++supply ; _mint( msg.sender, tokenId ); } } /** * @dev Returns the balance amount of the Contract address. */ function getBalanceofContract() external view returns (uint256) { return address(this).balance; } /** * @dev Withdraws an amount from the contract balance. */ function withdraw(uint256 amount_) public onlyOwner { require(address(this).balance >= amount_, "Address: insufficient balance"); // This will payout the owner 100% of the contract balance. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: amount_}(""); require(os); // ============================================================================= } /** * @dev Allows team to mint the token without restriction. */ function team_mint(uint[] calldata quantity, address[] calldata recipient) public onlyOwner{ require(quantity.length == recipient.length, "RH: Must provide equal quantities and recipients" ); uint totalQuantity; uint supply = totalSupply(); for(uint i; i < quantity.length; ++i){ totalQuantity += quantity[i]; } require( supply + totalQuantity < MAX_SUPPLY, "RH: Mint/order exceeds supply" ); for(uint i; i < recipient.length; ++i){ for(uint j; j < quantity[i]; ++j){ uint tokenId = ++supply; _mint( recipient[i], tokenId); } } } /** * @dev Owner/Delegate sets the Minting flag. */ function setWhitelistActive(bool isWhitelistActive_) external onlyOwner{ require( isWhiteMintActive != isWhitelistActive_ , "RH: New value matches old" ); isWhiteMintActive = isWhitelistActive_; } /** * @dev Owner/Delegates sets the BaseURI of IPFS. */ function setBaseURI(string memory prefix) external onlyOwner{ _tokenURIPrefix = prefix; } /** * @dev Owner/Delegate sets the Max supply of the token. */ function setMaxSupply(uint maxSupply) external onlyOwner{ require( MAX_SUPPLY != maxSupply, "RH: New value matches old" ); require( maxSupply >= totalSupply(), "RH: Specified supply is lower than current balance" ); MAX_SUPPLY = maxSupply; } /** * @dev Owner/Delegate sets the Max. qty */ function setMaxQty(uint maxQty) external onlyOwner{ require( MAX_QTY != maxQty, "RH: New value matches old" ); MAX_QTY = maxQty; } /** * @dev Owner/Delegate sets the minting price. */ function setPrice(uint price) external onlyOwner{ require( PRICE != price, "RH: New value matches old" ); PRICE = price; } /** * @dev increment and decrement balances based on address from and to. */ function _beforeTokenTransfer(address from, address to) internal { if( from != address(0) ) --_balances[ from ]; if( to != address(0) ) ++_balances[ to ]; } /** * @dev returns bool if the tokenId exist. */ function _exists(uint tokenId) internal view override returns (bool) { return tokenId>0 && tokenId <= moons.length && moons[tokenId-1].owner != address(0); } /** * @dev mints token based address and tokenId */ function _mint(address to, uint tokenId) internal { _beforeTokenTransfer(address(0), to); moons.push(Moon(to,false)); emit Transfer(address(0), to, tokenId); } /** * @dev transfer tokenId to other address. */ function _transfer(address from, address to, uint tokenId) internal override { require(moons[tokenId-1].owner == from, "RH: transfer of token that is not owned"); // Clear approvals from the previous owner _approve(address(0), tokenId); _beforeTokenTransfer(from, to); moons[tokenId-1].owner = to; emit Transfer(from, to, tokenId); } function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) { super.setApprovalForAll(operator, approved); } function approve(address operator, uint256 tokenId) public override onlyAllowedOperatorApproval(operator) { super.approve(operator, tokenId); } function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId, data); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import {OperatorFilterer} from "./OperatorFilterer.sol"; /** * @title DefaultOperatorFilterer * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription. */ abstract contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: BSD-3-Clause pragma solidity ^0.8.0; /**************************************** * @author: squeebo_nft * * @team: GoldenX * **************************************** * Blimpie-ERC721 provides low-gas * * mints + transfers * ****************************************/ import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./ERC165.sol"; abstract contract ERC721T is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; mapping(uint => address) internal _tokenApprovals; mapping(address => mapping(address => bool)) internal _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } //public function balanceOf(address owner) public view virtual override returns( uint ); function name() external view virtual override returns (string memory) { return _name; } function ownerOf(uint tokenId) public view virtual override returns (address); function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function symbol() external view virtual override returns (string memory) { return _symbol; } /* function totalSupply() public view virtual returns (uint) { return _owners.length - (_offset + _burned); } */ function approve(address to, uint tokenId) public virtual override { address owner = 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); } function getApproved(uint tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } 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); } function transferFrom( address from, address to, uint 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); } function safeTransferFrom( address from, address to, uint tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } //internal function _approve(address to, uint tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint 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; } } function _exists(uint tokenId) internal view virtual returns (bool); function _isApprovedOrOwner(address spender, uint tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeTransfer( address from, address to, uint tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _transfer(address from, address to, uint tokenId) internal virtual; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function unregister(address addr) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import {IOperatorFilterRegistry} from "./IOperatorFilterRegistry.sol"; /** * @title OperatorFilterer * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another * registrant's entries in the OperatorFilterRegistry. * @dev This smart contract is meant to be inherited by token contracts so they can use the following: * - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods. * - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods. */ abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from != msg.sender) { _checkFilterOperator(msg.sender); } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { _checkFilterOperator(operator); _; } function _checkFilterOperator(address operator) internal view virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_QTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceofContract","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"isOwnerOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhiteMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"moons","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"celestialType","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner_","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":"prefix","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxQty","type":"uint256"}],"name":"setMaxQty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"userList","type":"address[]"},{"internalType":"uint256","name":"allowed","type":"uint256"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isWhitelistActive_","type":"bool"}],"name":"setWhitelistActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"team_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","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":"totalSupply_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
611423600655600060079081556001600855600a805460ff1916905560c0604052608090815266697066733a2f2f60c81b60a052600c906200004290826200035b565b50604080518082019091526005815264173539b7b760d91b6020820152600d906200006e90826200035b565b503480156200007c57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb6600160405180604001604052806009815260200168149a1a59195c93919560ba1b815250604051806040016040528060028152602001610a4960f31b8152508160009081620000e291906200035b565b506001620000f182826200035b565b5050506200010e620001086200026060201b60201c565b62000264565b6daaeb6d7670e522a718067333cd4e3b1562000253578015620001a157604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200018257600080fd5b505af115801562000197573d6000803e3d6000fd5b5050505062000253565b6001600160a01b03821615620001f25760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440162000167565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200023957600080fd5b505af11580156200024e573d6000803e3d6000fd5b505050505b5050600160055562000427565b3390565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002e157607f821691505b6020821081036200030257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035657600081815260208120601f850160051c81016020861015620003315750805b601f850160051c820191505b8181101562000352578281556001016200033d565b5050505b505050565b81516001600160401b03811115620003775762000377620002b6565b6200038f81620003888454620002cc565b8462000308565b602080601f831160018114620003c75760008415620003ae5750858301515b600019600386901b1c1916600185901b17855562000352565b600085815260208120601f198616915b82811015620003f857888601518255948401946001909101908401620003d7565b5085821015620004175787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612f2f80620004376000396000f3fe6080604052600436106102a05760003560e01c80635ecc02221161016e57806395d89b41116100cb578063c87b56dd1161007f578063d936547e11610064578063d936547e1461073a578063e985e9c514610767578063f2fde38b146107b057600080fd5b8063c87b56dd14610700578063d054eef61461072057600080fd5b8063a22cb465116100b0578063a22cb465146106a0578063b88d4fde146106c0578063c3b754dc146106e057600080fd5b806395d89b4114610678578063a0712d681461068d57600080fd5b80637c0ba74f116101225780638d859f3e116101075780638d859f3e146106245780638da5cb5b1461063a57806391b7f5ed1461065857600080fd5b80637c0ba74f146105e45780638d814a8c1461060457600080fd5b80636f8b44b0116101535780636f8b44b01461058f57806370a08231146105af578063715018a6146105cf57600080fd5b80635ecc02221461055c5780636352211e1461056f57600080fd5b80632e1a7d4d1161021c578063438b6300116101d05780634ee6bb23116101b55780634ee6bb23146104dd5780634f6ccce71461051c57806355f804b31461053c57600080fd5b8063438b6300146104905780634d44660c146104bd57600080fd5b806332cb6b0c1161020157806332cb6b0c1461043857806341f434341461044e57806342842e0e1461047057600080fd5b80632e1a7d4d146103f85780632f745c591461041857600080fd5b806318160ddd116102735780631e7269c5116102585780631e7269c51461038b57806323b872dd146103b8578063272ff248146103d857600080fd5b806318160ddd146103565780631c96cae91461037557600080fd5b806301ffc9a7146102a557806306fdde03146102da578063081812fc146102fc578063095ea7b314610334575b600080fd5b3480156102b157600080fd5b506102c56102c036600461271e565b6107d0565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b506102ef61086d565b6040516102d1919061278b565b34801561030857600080fd5b5061031c61031736600461279e565b6108ff565b6040516001600160a01b0390911681526020016102d1565b34801561034057600080fd5b5061035461034f3660046127d3565b61098c565b005b34801561036257600080fd5b506009545b6040519081526020016102d1565b34801561038157600080fd5b5061036760085481565b34801561039757600080fd5b506103676103a63660046127fd565b600f6020526000908152604090205481565b3480156103c457600080fd5b506103546103d3366004612818565b6109a5565b3480156103e457600080fd5b506103546103f336600461279e565b6109d0565b34801561040457600080fd5b5061035461041336600461279e565b610a80565b34801561042457600080fd5b506103676104333660046127d3565b610b9f565b34801561044457600080fd5b5061036760065481565b34801561045a57600080fd5b5061031c6daaeb6d7670e522a718067333cd4e81565b34801561047c57600080fd5b5061035461048b366004612818565b610c86565b34801561049c57600080fd5b506104b06104ab3660046127fd565b610cab565b6040516102d19190612854565b3480156104c957600080fd5b506102c56104d83660046128e4565b610d4b565b3480156104e957600080fd5b506104fd6104f836600461279e565b610dcd565b604080516001600160a01b0390931683529015156020830152016102d1565b34801561052857600080fd5b5061036761053736600461279e565b610e02565b34801561054857600080fd5b506103546105573660046129c3565b610e60565b34801561056857600080fd5b5047610367565b34801561057b57600080fd5b5061031c61058a36600461279e565b610ec6565b34801561059b57600080fd5b506103546105aa36600461279e565b610f4a565b3480156105bb57600080fd5b506103676105ca3660046127fd565b611072565b3480156105db57600080fd5b506103546110f5565b3480156105f057600080fd5b506103546105ff366004612a0c565b61115b565b34801561061057600080fd5b5061035461061f366004612a78565b61136d565b34801561063057600080fd5b5061036760075481565b34801561064657600080fd5b506004546001600160a01b031661031c565b34801561066457600080fd5b5061035461067336600461279e565b61149d565b34801561068457600080fd5b506102ef61154d565b61035461069b36600461279e565b61155c565b3480156106ac57600080fd5b506103546106bb366004612ad2565b6118bf565b3480156106cc57600080fd5b506103546106db366004612b09565b6118d3565b3480156106ec57600080fd5b506103546106fb366004612b85565b611900565b34801561070c57600080fd5b506102ef61071b36600461279e565b6119c7565b34801561072c57600080fd5b50600a546102c59060ff1681565b34801561074657600080fd5b506103676107553660046127fd565b600e6020526000908152604090205481565b34801561077357600080fd5b506102c5610782366004612ba2565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b3480156107bc57600080fd5b506103546107cb3660046127fd565b611a79565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061083357506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061086757507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b60606000805461087c90612bd5565b80601f01602080910402602001604051908101604052809291908181526020018280546108a890612bd5565b80156108f55780601f106108ca576101008083540402835291602001916108f5565b820191906000526020600020905b8154815290600101906020018083116108d857829003601f168201915b5050505050905090565b600061090a82611b44565b6109705760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b8161099681611b9a565b6109a08383611c85565b505050565b826001600160a01b03811633146109bf576109bf33611b9a565b6109ca848484611db1565b50505050565b6004546001600160a01b03163314610a2a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b8060085403610a7b5760405162461bcd60e51b815260206004820152601960248201527f52483a204e65772076616c7565206d617463686573206f6c64000000000000006044820152606401610967565b600855565b6004546001600160a01b03163314610ada5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b80471015610b2a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610967565b6000610b3e6004546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610b88576040519150601f19603f3d011682016040523d82523d6000602084013e610b8d565b606091505b5050905080610b9b57600080fd5b5050565b60008060005b6009548111610c175760098181548110610bc157610bc1612c0f565b6000918252602090912001546001600160a01b0390811690861603610c0757838203610bfb57610bf2816001612c3b565b92505050610867565b610c0482612c4e565b91505b610c1081612c4e565b9050610ba5565b5060405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610967565b826001600160a01b0381163314610ca057610ca033611b9a565b6109ca848484611e38565b60606000610cb883611072565b905060008167ffffffffffffffff811115610cd557610cd5612937565b604051908082528060200260200182016040528015610cfe578160200160208202803683370190505b50905060005b82811015610d4357610d168582610b9f565b828281518110610d2857610d28612c0f565b6020908102919091010152610d3c81612c4e565b9050610d04565b509392505050565b6000805b82811015610dc057846001600160a01b03166009858584818110610d7557610d75612c0f565b9050602002013581548110610d8c57610d8c612c0f565b6000918252602090912001546001600160a01b031614610db0576000915050610dc6565b610db981612c4e565b9050610d4f565b50600190505b9392505050565b60098181548110610ddd57600080fd5b6000918252602090912001546001600160a01b0381169150600160a01b900460ff1682565b6000610e0d60095490565b821115610e5c5760405162461bcd60e51b815260206004820152601e60248201527f52483a20676c6f62616c20696e646578206f7574206f6620626f756e647300006044820152606401610967565b5090565b6004546001600160a01b03163314610eba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b600c610b9b8282612cb5565b6000806009610ed6600185612d75565b81548110610ee657610ee6612c0f565b6000918252602090912001546001600160a01b03169050806108675760405162461bcd60e51b815260206004820152601f60248201527f52483a20717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610967565b6004546001600160a01b03163314610fa45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b8060065403610ff55760405162461bcd60e51b815260206004820152601960248201527f52483a204e65772076616c7565206d617463686573206f6c64000000000000006044820152606401610967565b60095481101561106d5760405162461bcd60e51b815260206004820152603260248201527f52483a2053706563696669656420737570706c79206973206c6f77657220746860448201527f616e2063757272656e742062616c616e636500000000000000000000000000006064820152608401610967565b600655565b60006001600160a01b0382166110d95760405162461bcd60e51b815260206004820152602660248201527f52483a2062616c616e636520717565727920666f7220746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b506001600160a01b03166000908152600b602052604090205490565b6004546001600160a01b0316331461114f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b6111596000611e53565b565b6004546001600160a01b031633146111b55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b82811461122a5760405162461bcd60e51b815260206004820152603060248201527f52483a204d7573742070726f7669646520657175616c207175616e746974696560448201527f7320616e6420726563697069656e7473000000000000000000000000000000006064820152608401610967565b60008061123660095490565b905060005b858110156112795786868281811061125557611255612c0f565b90506020020135836112679190612c3b565b925061127281612c4e565b905061123b565b506006546112878383612c3b565b106112d45760405162461bcd60e51b815260206004820152601d60248201527f52483a204d696e742f6f72646572206578636565647320737570706c790000006044820152606401610967565b60005b838110156113645760005b8787838181106112f4576112f4612c0f565b9050602002013581101561135357600061130d84612c4e565b935083905061134287878581811061132757611327612c0f565b905060200201602081019061133c91906127fd565b82611eb2565b5061134c81612c4e565b90506112e2565b5061135d81612c4e565b90506112d7565b50505050505050565b6004546001600160a01b031633146113c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b8161143a5760405162461bcd60e51b815260206004820152602360248201527f52483a20757365724c697374206d75737420626520677265617465722074686160448201527f6e203000000000000000000000000000000000000000000000000000000000006064820152608401610967565b60005b828110156109ca5781600e600086868581811061145c5761145c612c0f565b905060200201602081019061147191906127fd565b6001600160a01b031681526020810191909152604001600020558061149581612c4e565b91505061143d565b6004546001600160a01b031633146114f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b80600754036115485760405162461bcd60e51b815260206004820152601960248201527f52483a204e65772076616c7565206d617463686573206f6c64000000000000006044820152606401610967565b600755565b60606001805461087c90612bd5565b6002600554036115ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610967565b6002600555336000908152600e60205260409020546116355760405162461bcd60e51b815260206004820152602360248201527f52483a20596f752077657265206e6f742073656c656374656420746f2074686560448201527f20574c00000000000000000000000000000000000000000000000000000000006064820152608401610967565b600a5460ff166116875760405162461bcd60e51b815260206004820181905260248201527f52483a204d696e74696e67206e6565647320746f20626520656e61626c65642e6044820152606401610967565b336000908152600e602052604090205481111561170c5760405162461bcd60e51b815260206004820152602660248201527f52483a204163636f756e74206973206c657373207468616e207468652071747960448201527f206c696d697400000000000000000000000000000000000000000000000000006064820152608401610967565b600854336000908152600f602052604090205461172a908390612c3b565b111561179e5760405162461bcd60e51b815260206004820152602f60248201527f52483a205175616e74697479206d757374206265206c657373207468616e206f60448201527f7220657175616c204d41585f51545900000000000000000000000000000000006064820152608401610967565b336000908152600f6020526040812080548392906117bd908490612c3b565b90915550506007543410156118145760405162461bcd60e51b815260206004820152601d60248201527f52483a2045746865722073656e74206973206e6f7420636f72726563740000006044820152606401610967565b600061181f60095490565b60065490915061182f8383612c3b565b111561187d5760405162461bcd60e51b815260206004820152601d60248201527f52483a204d696e742f6f72646572206578636565647320737570706c790000006044820152606401610967565b60005b828110156118b557600061189383612c4e565b92508290506118a23382611eb2565b50806118ad81612c4e565b915050611880565b5050600160055550565b816118c981611b9a565b6109a08383611f7e565b836001600160a01b03811633146118ed576118ed33611b9a565b6118f985858585612042565b5050505050565b6004546001600160a01b0316331461195a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b600a5481151560ff9091161515036119b45760405162461bcd60e51b815260206004820152601960248201527f52483a204e65772076616c7565206d617463686573206f6c64000000000000006044820152606401610967565b600a805460ff1916911515919091179055565b60606119d282611b44565b611a445760405162461bcd60e51b815260206004820152602360248201527f52483a2055524920717565727920666f72206e6f6e6578697374656e7420746f60448201527f6b656e00000000000000000000000000000000000000000000000000000000006064820152608401610967565b600c611a4f836120ca565b600d604051602001611a6393929190612dfb565b6040516020818303038152906040529050919050565b6004546001600160a01b03163314611ad35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b6001600160a01b038116611b385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b611b4181611e53565b50565b60008082118015611b5757506009548211155b8015610867575060006009611b6d600185612d75565b81548110611b7d57611b7d612c0f565b6000918252602090912001546001600160a01b0316141592915050565b6daaeb6d7670e522a718067333cd4e3b15611b41576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c449190612e2e565b611b41576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610967565b6000611c9082610ec6565b9050806001600160a01b0316836001600160a01b031603611d195760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610967565b336001600160a01b0382161480611d355750611d358133610782565b611da75760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610967565b6109a08383612207565b611dbb3382612282565b611e2d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610967565b6109a0838383612368565b6109a0838383604051806020016040528060008152506118d3565b600480546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611ebd6000836124b1565b6040805180820182526001600160a01b038085168083526000602084018181526009805460018101825590835294517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af909501805491511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009092169590941694909417939093179091559151839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b336001600160a01b03831603611fd65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610967565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61204c3383612282565b6120be5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610967565b6109ca84848484612528565b60608160000361210d57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612137578061212181612c4e565b91506121309050600a83612e61565b9150612111565b60008167ffffffffffffffff81111561215257612152612937565b6040519080825280601f01601f19166020018201604052801561217c576020820181803683370190505b5090505b84156121ff57612191600183612d75565b915061219e600a86612e75565b6121a9906030612c3b565b60f81b8183815181106121be576121be612c0f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506121f8600a86612e61565b9450612180565b949350505050565b6000818152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155819061224982610ec6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061228d82611b44565b6122ee5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610967565b60006122f983610ec6565b9050806001600160a01b0316846001600160a01b031614806123345750836001600160a01b0316612329846108ff565b6001600160a01b0316145b806121ff57506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff166121ff565b6001600160a01b038316600961237f600184612d75565b8154811061238f5761238f612c0f565b6000918252602090912001546001600160a01b0316146124175760405162461bcd60e51b815260206004820152602760248201527f52483a207472616e73666572206f6620746f6b656e2074686174206973206e6f60448201527f74206f776e6564000000000000000000000000000000000000000000000000006064820152608401610967565b612422600082612207565b61242c83836124b1565b81600961243a600184612d75565b8154811061244a5761244a612c0f565b60009182526020822001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6001600160a01b038216156124eb576001600160a01b0382166000908152600b6020526040812080549091906124e690612e89565b909155505b6001600160a01b03811615610b9b576001600160a01b0381166000908152600b60205260408120805490919061252090612c4e565b909155505050565b612533848484612368565b61253f848484846125b1565b6109ca5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610967565b60006001600160a01b0384163b156126fd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906125f5903390899088908890600401612ea0565b6020604051808303816000875af1925050508015612630575060408051601f3d908101601f1916820190925261262d91810190612edc565b60015b6126e3573d80801561265e576040519150601f19603f3d011682016040523d82523d6000602084013e612663565b606091505b5080516000036126db5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610967565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121ff565b506001949350505050565b6001600160e01b031981168114611b4157600080fd5b60006020828403121561273057600080fd5b8135610dc681612708565b60005b8381101561275657818101518382015260200161273e565b50506000910152565b6000815180845261277781602086016020860161273b565b601f01601f19169290920160200192915050565b602081526000610dc6602083018461275f565b6000602082840312156127b057600080fd5b5035919050565b80356001600160a01b03811681146127ce57600080fd5b919050565b600080604083850312156127e657600080fd5b6127ef836127b7565b946020939093013593505050565b60006020828403121561280f57600080fd5b610dc6826127b7565b60008060006060848603121561282d57600080fd5b612836846127b7565b9250612844602085016127b7565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561288c57835183529284019291840191600101612870565b50909695505050505050565b60008083601f8401126128aa57600080fd5b50813567ffffffffffffffff8111156128c257600080fd5b6020830191508360208260051b85010111156128dd57600080fd5b9250929050565b6000806000604084860312156128f957600080fd5b612902846127b7565b9250602084013567ffffffffffffffff81111561291e57600080fd5b61292a86828701612898565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561296857612968612937565b604051601f8501601f19908116603f0116810190828211818310171561299057612990612937565b816040528093508581528686860111156129a957600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156129d557600080fd5b813567ffffffffffffffff8111156129ec57600080fd5b8201601f810184136129fd57600080fd5b6121ff8482356020840161294d565b60008060008060408587031215612a2257600080fd5b843567ffffffffffffffff80821115612a3a57600080fd5b612a4688838901612898565b90965094506020870135915080821115612a5f57600080fd5b50612a6c87828801612898565b95989497509550505050565b600080600060408486031215612a8d57600080fd5b833567ffffffffffffffff811115612aa457600080fd5b612ab086828701612898565b909790965060209590950135949350505050565b8015158114611b4157600080fd5b60008060408385031215612ae557600080fd5b612aee836127b7565b91506020830135612afe81612ac4565b809150509250929050565b60008060008060808587031215612b1f57600080fd5b612b28856127b7565b9350612b36602086016127b7565b925060408501359150606085013567ffffffffffffffff811115612b5957600080fd5b8501601f81018713612b6a57600080fd5b612b798782356020840161294d565b91505092959194509250565b600060208284031215612b9757600080fd5b8135610dc681612ac4565b60008060408385031215612bb557600080fd5b612bbe836127b7565b9150612bcc602084016127b7565b90509250929050565b600181811c90821680612be957607f821691505b602082108103612c0957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561086757610867612c25565b600060018201612c6057612c60612c25565b5060010190565b601f8211156109a057600081815260208120601f850160051c81016020861015612c8e5750805b601f850160051c820191505b81811015612cad57828155600101612c9a565b505050505050565b815167ffffffffffffffff811115612ccf57612ccf612937565b612ce381612cdd8454612bd5565b84612c67565b602080601f831160018114612d185760008415612d005750858301515b600019600386901b1c1916600185901b178555612cad565b600085815260208120601f198616915b82811015612d4757888601518255948401946001909101908401612d28565b5085821015612d655787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561086757610867612c25565b60008154612d9581612bd5565b60018281168015612dad5760018114612dc257612df1565b60ff1984168752821515830287019450612df1565b8560005260208060002060005b85811015612de85781548a820152908401908201612dcf565b50505082870194505b5050505092915050565b6000612e078286612d88565b8451612e1781836020890161273b565b612e2381830186612d88565b979650505050505050565b600060208284031215612e4057600080fd5b8151610dc681612ac4565b634e487b7160e01b600052601260045260246000fd5b600082612e7057612e70612e4b565b500490565b600082612e8457612e84612e4b565b500690565b600081612e9857612e98612c25565b506000190190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612ed2608083018461275f565b9695505050505050565b600060208284031215612eee57600080fd5b8151610dc68161270856fea2646970667358221220086cdb6b440b24b62df671f82846d93ba931085194a08a6849b03e7c2c0722f264736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102a05760003560e01c80635ecc02221161016e57806395d89b41116100cb578063c87b56dd1161007f578063d936547e11610064578063d936547e1461073a578063e985e9c514610767578063f2fde38b146107b057600080fd5b8063c87b56dd14610700578063d054eef61461072057600080fd5b8063a22cb465116100b0578063a22cb465146106a0578063b88d4fde146106c0578063c3b754dc146106e057600080fd5b806395d89b4114610678578063a0712d681461068d57600080fd5b80637c0ba74f116101225780638d859f3e116101075780638d859f3e146106245780638da5cb5b1461063a57806391b7f5ed1461065857600080fd5b80637c0ba74f146105e45780638d814a8c1461060457600080fd5b80636f8b44b0116101535780636f8b44b01461058f57806370a08231146105af578063715018a6146105cf57600080fd5b80635ecc02221461055c5780636352211e1461056f57600080fd5b80632e1a7d4d1161021c578063438b6300116101d05780634ee6bb23116101b55780634ee6bb23146104dd5780634f6ccce71461051c57806355f804b31461053c57600080fd5b8063438b6300146104905780634d44660c146104bd57600080fd5b806332cb6b0c1161020157806332cb6b0c1461043857806341f434341461044e57806342842e0e1461047057600080fd5b80632e1a7d4d146103f85780632f745c591461041857600080fd5b806318160ddd116102735780631e7269c5116102585780631e7269c51461038b57806323b872dd146103b8578063272ff248146103d857600080fd5b806318160ddd146103565780631c96cae91461037557600080fd5b806301ffc9a7146102a557806306fdde03146102da578063081812fc146102fc578063095ea7b314610334575b600080fd5b3480156102b157600080fd5b506102c56102c036600461271e565b6107d0565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b506102ef61086d565b6040516102d1919061278b565b34801561030857600080fd5b5061031c61031736600461279e565b6108ff565b6040516001600160a01b0390911681526020016102d1565b34801561034057600080fd5b5061035461034f3660046127d3565b61098c565b005b34801561036257600080fd5b506009545b6040519081526020016102d1565b34801561038157600080fd5b5061036760085481565b34801561039757600080fd5b506103676103a63660046127fd565b600f6020526000908152604090205481565b3480156103c457600080fd5b506103546103d3366004612818565b6109a5565b3480156103e457600080fd5b506103546103f336600461279e565b6109d0565b34801561040457600080fd5b5061035461041336600461279e565b610a80565b34801561042457600080fd5b506103676104333660046127d3565b610b9f565b34801561044457600080fd5b5061036760065481565b34801561045a57600080fd5b5061031c6daaeb6d7670e522a718067333cd4e81565b34801561047c57600080fd5b5061035461048b366004612818565b610c86565b34801561049c57600080fd5b506104b06104ab3660046127fd565b610cab565b6040516102d19190612854565b3480156104c957600080fd5b506102c56104d83660046128e4565b610d4b565b3480156104e957600080fd5b506104fd6104f836600461279e565b610dcd565b604080516001600160a01b0390931683529015156020830152016102d1565b34801561052857600080fd5b5061036761053736600461279e565b610e02565b34801561054857600080fd5b506103546105573660046129c3565b610e60565b34801561056857600080fd5b5047610367565b34801561057b57600080fd5b5061031c61058a36600461279e565b610ec6565b34801561059b57600080fd5b506103546105aa36600461279e565b610f4a565b3480156105bb57600080fd5b506103676105ca3660046127fd565b611072565b3480156105db57600080fd5b506103546110f5565b3480156105f057600080fd5b506103546105ff366004612a0c565b61115b565b34801561061057600080fd5b5061035461061f366004612a78565b61136d565b34801561063057600080fd5b5061036760075481565b34801561064657600080fd5b506004546001600160a01b031661031c565b34801561066457600080fd5b5061035461067336600461279e565b61149d565b34801561068457600080fd5b506102ef61154d565b61035461069b36600461279e565b61155c565b3480156106ac57600080fd5b506103546106bb366004612ad2565b6118bf565b3480156106cc57600080fd5b506103546106db366004612b09565b6118d3565b3480156106ec57600080fd5b506103546106fb366004612b85565b611900565b34801561070c57600080fd5b506102ef61071b36600461279e565b6119c7565b34801561072c57600080fd5b50600a546102c59060ff1681565b34801561074657600080fd5b506103676107553660046127fd565b600e6020526000908152604090205481565b34801561077357600080fd5b506102c5610782366004612ba2565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b3480156107bc57600080fd5b506103546107cb3660046127fd565b611a79565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061083357506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061086757507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b60606000805461087c90612bd5565b80601f01602080910402602001604051908101604052809291908181526020018280546108a890612bd5565b80156108f55780601f106108ca576101008083540402835291602001916108f5565b820191906000526020600020905b8154815290600101906020018083116108d857829003601f168201915b5050505050905090565b600061090a82611b44565b6109705760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b8161099681611b9a565b6109a08383611c85565b505050565b826001600160a01b03811633146109bf576109bf33611b9a565b6109ca848484611db1565b50505050565b6004546001600160a01b03163314610a2a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b8060085403610a7b5760405162461bcd60e51b815260206004820152601960248201527f52483a204e65772076616c7565206d617463686573206f6c64000000000000006044820152606401610967565b600855565b6004546001600160a01b03163314610ada5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b80471015610b2a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610967565b6000610b3e6004546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610b88576040519150601f19603f3d011682016040523d82523d6000602084013e610b8d565b606091505b5050905080610b9b57600080fd5b5050565b60008060005b6009548111610c175760098181548110610bc157610bc1612c0f565b6000918252602090912001546001600160a01b0390811690861603610c0757838203610bfb57610bf2816001612c3b565b92505050610867565b610c0482612c4e565b91505b610c1081612c4e565b9050610ba5565b5060405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610967565b826001600160a01b0381163314610ca057610ca033611b9a565b6109ca848484611e38565b60606000610cb883611072565b905060008167ffffffffffffffff811115610cd557610cd5612937565b604051908082528060200260200182016040528015610cfe578160200160208202803683370190505b50905060005b82811015610d4357610d168582610b9f565b828281518110610d2857610d28612c0f565b6020908102919091010152610d3c81612c4e565b9050610d04565b509392505050565b6000805b82811015610dc057846001600160a01b03166009858584818110610d7557610d75612c0f565b9050602002013581548110610d8c57610d8c612c0f565b6000918252602090912001546001600160a01b031614610db0576000915050610dc6565b610db981612c4e565b9050610d4f565b50600190505b9392505050565b60098181548110610ddd57600080fd5b6000918252602090912001546001600160a01b0381169150600160a01b900460ff1682565b6000610e0d60095490565b821115610e5c5760405162461bcd60e51b815260206004820152601e60248201527f52483a20676c6f62616c20696e646578206f7574206f6620626f756e647300006044820152606401610967565b5090565b6004546001600160a01b03163314610eba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b600c610b9b8282612cb5565b6000806009610ed6600185612d75565b81548110610ee657610ee6612c0f565b6000918252602090912001546001600160a01b03169050806108675760405162461bcd60e51b815260206004820152601f60248201527f52483a20717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610967565b6004546001600160a01b03163314610fa45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b8060065403610ff55760405162461bcd60e51b815260206004820152601960248201527f52483a204e65772076616c7565206d617463686573206f6c64000000000000006044820152606401610967565b60095481101561106d5760405162461bcd60e51b815260206004820152603260248201527f52483a2053706563696669656420737570706c79206973206c6f77657220746860448201527f616e2063757272656e742062616c616e636500000000000000000000000000006064820152608401610967565b600655565b60006001600160a01b0382166110d95760405162461bcd60e51b815260206004820152602660248201527f52483a2062616c616e636520717565727920666f7220746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b506001600160a01b03166000908152600b602052604090205490565b6004546001600160a01b0316331461114f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b6111596000611e53565b565b6004546001600160a01b031633146111b55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b82811461122a5760405162461bcd60e51b815260206004820152603060248201527f52483a204d7573742070726f7669646520657175616c207175616e746974696560448201527f7320616e6420726563697069656e7473000000000000000000000000000000006064820152608401610967565b60008061123660095490565b905060005b858110156112795786868281811061125557611255612c0f565b90506020020135836112679190612c3b565b925061127281612c4e565b905061123b565b506006546112878383612c3b565b106112d45760405162461bcd60e51b815260206004820152601d60248201527f52483a204d696e742f6f72646572206578636565647320737570706c790000006044820152606401610967565b60005b838110156113645760005b8787838181106112f4576112f4612c0f565b9050602002013581101561135357600061130d84612c4e565b935083905061134287878581811061132757611327612c0f565b905060200201602081019061133c91906127fd565b82611eb2565b5061134c81612c4e565b90506112e2565b5061135d81612c4e565b90506112d7565b50505050505050565b6004546001600160a01b031633146113c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b8161143a5760405162461bcd60e51b815260206004820152602360248201527f52483a20757365724c697374206d75737420626520677265617465722074686160448201527f6e203000000000000000000000000000000000000000000000000000000000006064820152608401610967565b60005b828110156109ca5781600e600086868581811061145c5761145c612c0f565b905060200201602081019061147191906127fd565b6001600160a01b031681526020810191909152604001600020558061149581612c4e565b91505061143d565b6004546001600160a01b031633146114f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b80600754036115485760405162461bcd60e51b815260206004820152601960248201527f52483a204e65772076616c7565206d617463686573206f6c64000000000000006044820152606401610967565b600755565b60606001805461087c90612bd5565b6002600554036115ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610967565b6002600555336000908152600e60205260409020546116355760405162461bcd60e51b815260206004820152602360248201527f52483a20596f752077657265206e6f742073656c656374656420746f2074686560448201527f20574c00000000000000000000000000000000000000000000000000000000006064820152608401610967565b600a5460ff166116875760405162461bcd60e51b815260206004820181905260248201527f52483a204d696e74696e67206e6565647320746f20626520656e61626c65642e6044820152606401610967565b336000908152600e602052604090205481111561170c5760405162461bcd60e51b815260206004820152602660248201527f52483a204163636f756e74206973206c657373207468616e207468652071747960448201527f206c696d697400000000000000000000000000000000000000000000000000006064820152608401610967565b600854336000908152600f602052604090205461172a908390612c3b565b111561179e5760405162461bcd60e51b815260206004820152602f60248201527f52483a205175616e74697479206d757374206265206c657373207468616e206f60448201527f7220657175616c204d41585f51545900000000000000000000000000000000006064820152608401610967565b336000908152600f6020526040812080548392906117bd908490612c3b565b90915550506007543410156118145760405162461bcd60e51b815260206004820152601d60248201527f52483a2045746865722073656e74206973206e6f7420636f72726563740000006044820152606401610967565b600061181f60095490565b60065490915061182f8383612c3b565b111561187d5760405162461bcd60e51b815260206004820152601d60248201527f52483a204d696e742f6f72646572206578636565647320737570706c790000006044820152606401610967565b60005b828110156118b557600061189383612c4e565b92508290506118a23382611eb2565b50806118ad81612c4e565b915050611880565b5050600160055550565b816118c981611b9a565b6109a08383611f7e565b836001600160a01b03811633146118ed576118ed33611b9a565b6118f985858585612042565b5050505050565b6004546001600160a01b0316331461195a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b600a5481151560ff9091161515036119b45760405162461bcd60e51b815260206004820152601960248201527f52483a204e65772076616c7565206d617463686573206f6c64000000000000006044820152606401610967565b600a805460ff1916911515919091179055565b60606119d282611b44565b611a445760405162461bcd60e51b815260206004820152602360248201527f52483a2055524920717565727920666f72206e6f6e6578697374656e7420746f60448201527f6b656e00000000000000000000000000000000000000000000000000000000006064820152608401610967565b600c611a4f836120ca565b600d604051602001611a6393929190612dfb565b6040516020818303038152906040529050919050565b6004546001600160a01b03163314611ad35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610967565b6001600160a01b038116611b385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b611b4181611e53565b50565b60008082118015611b5757506009548211155b8015610867575060006009611b6d600185612d75565b81548110611b7d57611b7d612c0f565b6000918252602090912001546001600160a01b0316141592915050565b6daaeb6d7670e522a718067333cd4e3b15611b41576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c449190612e2e565b611b41576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610967565b6000611c9082610ec6565b9050806001600160a01b0316836001600160a01b031603611d195760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610967565b336001600160a01b0382161480611d355750611d358133610782565b611da75760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610967565b6109a08383612207565b611dbb3382612282565b611e2d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610967565b6109a0838383612368565b6109a0838383604051806020016040528060008152506118d3565b600480546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611ebd6000836124b1565b6040805180820182526001600160a01b038085168083526000602084018181526009805460018101825590835294517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af909501805491511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009092169590941694909417939093179091559151839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b336001600160a01b03831603611fd65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610967565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61204c3383612282565b6120be5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610967565b6109ca84848484612528565b60608160000361210d57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612137578061212181612c4e565b91506121309050600a83612e61565b9150612111565b60008167ffffffffffffffff81111561215257612152612937565b6040519080825280601f01601f19166020018201604052801561217c576020820181803683370190505b5090505b84156121ff57612191600183612d75565b915061219e600a86612e75565b6121a9906030612c3b565b60f81b8183815181106121be576121be612c0f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506121f8600a86612e61565b9450612180565b949350505050565b6000818152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155819061224982610ec6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061228d82611b44565b6122ee5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610967565b60006122f983610ec6565b9050806001600160a01b0316846001600160a01b031614806123345750836001600160a01b0316612329846108ff565b6001600160a01b0316145b806121ff57506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff166121ff565b6001600160a01b038316600961237f600184612d75565b8154811061238f5761238f612c0f565b6000918252602090912001546001600160a01b0316146124175760405162461bcd60e51b815260206004820152602760248201527f52483a207472616e73666572206f6620746f6b656e2074686174206973206e6f60448201527f74206f776e6564000000000000000000000000000000000000000000000000006064820152608401610967565b612422600082612207565b61242c83836124b1565b81600961243a600184612d75565b8154811061244a5761244a612c0f565b60009182526020822001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6001600160a01b038216156124eb576001600160a01b0382166000908152600b6020526040812080549091906124e690612e89565b909155505b6001600160a01b03811615610b9b576001600160a01b0381166000908152600b60205260408120805490919061252090612c4e565b909155505050565b612533848484612368565b61253f848484846125b1565b6109ca5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610967565b60006001600160a01b0384163b156126fd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906125f5903390899088908890600401612ea0565b6020604051808303816000875af1925050508015612630575060408051601f3d908101601f1916820190925261262d91810190612edc565b60015b6126e3573d80801561265e576040519150601f19603f3d011682016040523d82523d6000602084013e612663565b606091505b5080516000036126db5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610967565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121ff565b506001949350505050565b6001600160e01b031981168114611b4157600080fd5b60006020828403121561273057600080fd5b8135610dc681612708565b60005b8381101561275657818101518382015260200161273e565b50506000910152565b6000815180845261277781602086016020860161273b565b601f01601f19169290920160200192915050565b602081526000610dc6602083018461275f565b6000602082840312156127b057600080fd5b5035919050565b80356001600160a01b03811681146127ce57600080fd5b919050565b600080604083850312156127e657600080fd5b6127ef836127b7565b946020939093013593505050565b60006020828403121561280f57600080fd5b610dc6826127b7565b60008060006060848603121561282d57600080fd5b612836846127b7565b9250612844602085016127b7565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561288c57835183529284019291840191600101612870565b50909695505050505050565b60008083601f8401126128aa57600080fd5b50813567ffffffffffffffff8111156128c257600080fd5b6020830191508360208260051b85010111156128dd57600080fd5b9250929050565b6000806000604084860312156128f957600080fd5b612902846127b7565b9250602084013567ffffffffffffffff81111561291e57600080fd5b61292a86828701612898565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561296857612968612937565b604051601f8501601f19908116603f0116810190828211818310171561299057612990612937565b816040528093508581528686860111156129a957600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156129d557600080fd5b813567ffffffffffffffff8111156129ec57600080fd5b8201601f810184136129fd57600080fd5b6121ff8482356020840161294d565b60008060008060408587031215612a2257600080fd5b843567ffffffffffffffff80821115612a3a57600080fd5b612a4688838901612898565b90965094506020870135915080821115612a5f57600080fd5b50612a6c87828801612898565b95989497509550505050565b600080600060408486031215612a8d57600080fd5b833567ffffffffffffffff811115612aa457600080fd5b612ab086828701612898565b909790965060209590950135949350505050565b8015158114611b4157600080fd5b60008060408385031215612ae557600080fd5b612aee836127b7565b91506020830135612afe81612ac4565b809150509250929050565b60008060008060808587031215612b1f57600080fd5b612b28856127b7565b9350612b36602086016127b7565b925060408501359150606085013567ffffffffffffffff811115612b5957600080fd5b8501601f81018713612b6a57600080fd5b612b798782356020840161294d565b91505092959194509250565b600060208284031215612b9757600080fd5b8135610dc681612ac4565b60008060408385031215612bb557600080fd5b612bbe836127b7565b9150612bcc602084016127b7565b90509250929050565b600181811c90821680612be957607f821691505b602082108103612c0957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561086757610867612c25565b600060018201612c6057612c60612c25565b5060010190565b601f8211156109a057600081815260208120601f850160051c81016020861015612c8e5750805b601f850160051c820191505b81811015612cad57828155600101612c9a565b505050505050565b815167ffffffffffffffff811115612ccf57612ccf612937565b612ce381612cdd8454612bd5565b84612c67565b602080601f831160018114612d185760008415612d005750858301515b600019600386901b1c1916600185901b178555612cad565b600085815260208120601f198616915b82811015612d4757888601518255948401946001909101908401612d28565b5085821015612d655787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561086757610867612c25565b60008154612d9581612bd5565b60018281168015612dad5760018114612dc257612df1565b60ff1984168752821515830287019450612df1565b8560005260208060002060005b85811015612de85781548a820152908401908201612dcf565b50505082870194505b5050505092915050565b6000612e078286612d88565b8451612e1781836020890161273b565b612e2381830186612d88565b979650505050505050565b600060208284031215612e4057600080fd5b8151610dc681612ac4565b634e487b7160e01b600052601260045260246000fd5b600082612e7057612e70612e4b565b500490565b600082612e8457612e84612e4b565b500690565b600081612e9857612e98612c25565b506000190190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612ed2608083018461275f565b9695505050505050565b600060208284031215612eee57600080fd5b8151610dc68161270856fea2646970667358221220086cdb6b440b24b62df671f82846d93ba931085194a08a6849b03e7c2c0722f264736f6c63430008110033
Deployed Bytecode Sourcemap
223:9237:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1270:305:4;;;;;;;;;;-1:-1:-1;1270:305:4;;;;;:::i;:::-;;:::i;:::-;;;611:14:15;;604:22;586:41;;574:2;559:18;1270:305:4;;;;;;;;1074:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2252:216::-;;;;;;;;;;-1:-1:-1;2252:216:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1743:55:15;;;1725:74;;1713:2;1698:18;2252:216:4;1579:226:15;8744:153:13;;;;;;;;;;-1:-1:-1;8744:153:13;;;;;:::i;:::-;;:::i;:::-;;3118:95;;;;;;;;;;-1:-1:-1;3195:5:13;:12;3118:95;;;2416:25:15;;;2404:2;2389:18;3118:95:13;2270:177:15;531:23:13;;;;;;;;;;;;;;;;823:38;;;;;;;;;;-1:-1:-1;823:38:13;;;;;:::i;:::-;;;;;;;;;;;;;;8903:159;;;;;;;;;;-1:-1:-1;8903:159:13;;;;;:::i;:::-;;:::i;7037:143::-;;;;;;;;;;-1:-1:-1;7037:143:13;;;;;:::i;:::-;;:::i;4965:539::-;;;;;;;;;;-1:-1:-1;4965:539:13;;;;;:::i;:::-;;:::i;2328:361::-;;;;;;;;;;-1:-1:-1;2328:361:13;;;;;:::i;:::-;;:::i;456:31::-;;;;;;;;;;;;;;;;753:143:10;;;;;;;;;;;;853:42;753:143;;9068:167:13;;;;;;;;;;-1:-1:-1;9068:167:13;;;;;:::i;:::-;;:::i;3561:303::-;;;;;;;;;;-1:-1:-1;3561:303:13;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1291:245::-;;;;;;;;;;-1:-1:-1;1291:245:13;;;;;:::i;:::-;;:::i;563:19::-;;;;;;;;;;-1:-1:-1;563:19:13;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4950:55:15;;;4932:74;;5049:14;;5042:22;5037:2;5022:18;;5015:50;4905:18;563:19:13;4764:307:15;1995:160:13;;;;;;;;;;-1:-1:-1;1995:160:13;;;;;:::i;:::-;;:::i;6544:97::-;;;;;;;;;;-1:-1:-1;6544:97:13;;;;;:::i;:::-;;:::i;4786:105::-;;;;;;;;;;-1:-1:-1;4864:21:13;4786:105;;1610:219;;;;;;;;;;-1:-1:-1;1610:219:13;;;;;:::i;:::-;;:::i;6717:259::-;;;;;;;;;;-1:-1:-1;6717:259:13;;;;;:::i;:::-;;:::i;1003:189::-;;;;;;;;;;-1:-1:-1;1003:189:13;;;;;:::i;:::-;;:::i;1650:94:11:-;;;;;;;;;;;;;:::i;5586:615:13:-;;;;;;;;;;-1:-1:-1;5586:615:13;;;;;:::i;:::-;;:::i;3219:257::-;;;;;;;;;;-1:-1:-1;3219:257:13;;;;;:::i;:::-;;:::i;492:34::-;;;;;;;;;;;;;;;;999:87:11;;;;;;;;;;-1:-1:-1;1072:6:11;;-1:-1:-1;;;;;1072:6:11;999:87;;7246:135:13;;;;;;;;;;-1:-1:-1;7246:135:13;;;;;:::i;:::-;;:::i;1583:106:4:-;;;;;;;;;;;;;:::i;3946:757:13:-;;;;;;:::i;:::-;;:::i;8566:172::-;;;;;;;;;;-1:-1:-1;8566:172:13;;;;;:::i;:::-;;:::i;9241:216::-;;;;;;;;;;-1:-1:-1;9241:216:13;;;;;:::i;:::-;;:::i;6266:209::-;;;;;;;;;;-1:-1:-1;6266:209:13;;;;;:::i;:::-;;:::i;2784:248::-;;;;;;;;;;-1:-1:-1;2784:248:13;;;;;:::i;:::-;;:::i;589:37::-;;;;;;;;;;-1:-1:-1;589:37:13;;;;;;;;773:43;;;;;;;;;;-1:-1:-1;773:43:13;;;;;:::i;:::-;;;;;;;;;;;;;;2476:164:4;;;;;;;;;;-1:-1:-1;2476:164:4;;;;;:::i;:::-;-1:-1:-1;;;;;2597:25:4;;;2573:4;2597:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;2476:164;1899:192:11;;;;;;;;;;-1:-1:-1;1899:192:11;;;;;:::i;:::-;;:::i;1270:305:4:-;1372:4;-1:-1:-1;;;;;;1409:40:4;;1424:25;1409:40;;:105;;-1:-1:-1;;;;;;;1466:48:4;;1481:33;1466:48;1409:105;:158;;;-1:-1:-1;911:25:3;-1:-1:-1;;;;;;896:40:3;;;1531:36:4;1389:178;1270:305;-1:-1:-1;;1270:305:4:o;1074:102::-;1130:13;1163:5;1156:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1074:102;:::o;2252:216::-;2325:7;2353:16;2361:7;2353;:16::i;:::-;2345:73;;;;-1:-1:-1;;;2345:73:4;;9916:2:15;2345:73:4;;;9898:21:15;9955:2;9935:18;;;9928:30;9994:34;9974:18;;;9967:62;-1:-1:-1;;;10045:18:15;;;10038:42;10097:19;;2345:73:4;;;;;;;;;-1:-1:-1;2436:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;2436:24:4;;2252:216::o;8744:153:13:-;8840:8;2274:30:10;2295:8;2274:20;:30::i;:::-;8859:32:13::1;8873:8;8883:7;8859:13;:32::i;:::-;8744:153:::0;;;:::o;8903:159::-;9004:4;-1:-1:-1;;;;;2094:18:10;;2102:10;2094:18;2090:83;;2129:32;2150:10;2129:20;:32::i;:::-;9019:37:13::1;9038:4;9044:2;9048:7;9019:18;:37::i;:::-;8903:159:::0;;;;:::o;7037:143::-;1072:6:11;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;7114:6:13::1;7103:7;;:17:::0;7094:57:::1;;;::::0;-1:-1:-1;;;7094:57:13;;10690:2:15;7094:57:13::1;::::0;::::1;10672:21:15::0;10729:2;10709:18;;;10702:30;10768:27;10748:18;;;10741:55;10813:18;;7094:57:13::1;10488:349:15::0;7094:57:13::1;7158:7;:16:::0;7037:143::o;4965:539::-;1072:6:11;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;5057:7:13::1;5032:21;:32;;5024:74;;;::::0;-1:-1:-1;;;5024:74:13;;11044:2:15;5024:74:13::1;::::0;::::1;11026:21:15::0;11083:2;11063:18;;;11056:30;11122:31;11102:18;;;11095:59;11171:18;;5024:74:13::1;10842:353:15::0;5024:74:13::1;5340:7;5361;1072:6:11::0;;-1:-1:-1;;;;;1072:6:11;;999:87;5361:7:13::1;-1:-1:-1::0;;;;;5353:21:13::1;5382:7;5353:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5339:55;;;5409:2;5401:11;;;::::0;::::1;;5017:487;4965:539:::0;:::o;2328:361::-;2405:12;2426:10;2448:6;2443:179;2461:5;:12;2456:17;;2443:179;;2502:5;2508:1;2502:8;;;;;;;;:::i;:::-;;;;;;;;;;:14;-1:-1:-1;;;;;2502:14:13;;;2493:23;;;;2489:126;;2542:5;2533;:14;2529:76;;2568:3;:1;2570;2568:3;:::i;:::-;2561:10;;;;;;2529:76;2598:7;;;:::i;:::-;;;2529:76;2475:3;;;:::i;:::-;;;2443:179;;;-1:-1:-1;2630:53:13;;-1:-1:-1;;;2630:53:13;;12260:2:15;2630:53:13;;;12242:21:15;12299:2;12279:18;;;12272:30;12338:34;12318:18;;;12311:62;12409:13;12389:18;;;12382:41;12440:19;;2630:53:13;12058:407:15;9068:167:13;9173:4;-1:-1:-1;;;;;2094:18:10;;2102:10;2094:18;2090:83;;2129:32;2150:10;2129:20;:32::i;:::-;9188:41:13::1;9211:4;9217:2;9221:7;9188:22;:41::i;3561:303::-:0;3626:13;3648;3664:20;3675:7;3664:9;:20::i;:::-;3648:36;;3691:20;3726:8;3714:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:22:13;;3691:45;;3748:6;3743:96;3760:8;3756:1;:12;3743:96;;;3798:33;3819:7;3828:1;3798:19;:33::i;:::-;3786:6;3793:1;3786:9;;;;;;;;:::i;:::-;;;;;;;;;;:45;3770:3;;;:::i;:::-;;;3743:96;;;-1:-1:-1;3852:6:13;3561:303;-1:-1:-1;;;3561:303:13:o;1291:245::-;1378:4;1395:6;1391:120;1403:19;;;1391:120;;;1472:7;-1:-1:-1;;;;;1442:37:13;:5;1449:8;;1458:1;1449:11;;;;;;;:::i;:::-;;;;;;;1442:20;;;;;;;;:::i;:::-;;;;;;;;;;:26;-1:-1:-1;;;;;1442:26:13;:37;1438:65;;1498:5;1491:12;;;;;1438:65;1424:3;;;:::i;:::-;;;1391:120;;;;1526:4;1519:11;;1291:245;;;;;;:::o;563:19::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;563:19:13;;;-1:-1:-1;;;;563:19:13;;;;;:::o;1995:160::-;2052:4;2082:13;3195:5;:12;;3118:95;2082:13;2073:5;:22;;2065:65;;;;-1:-1:-1;;;2065:65:13;;12672:2:15;2065:65:13;;;12654:21:15;12711:2;12691:18;;;12684:30;12750:32;12730:18;;;12723:60;12800:18;;2065:65:13;12470:354:15;2065:65:13;-1:-1:-1;2144:5:13;1995:160::o;6544:97::-;1072:6:11;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;6611:15:13::1;:24;6629:6:::0;6611:15;:24:::1;:::i;1610:219::-:0;1673:14;;1712:5;1718:9;1726:1;1718:7;:9;:::i;:::-;1712:16;;;;;;;;:::i;:::-;;;;;;;;;;:22;-1:-1:-1;;;;;1712:22:13;;-1:-1:-1;1712:22:13;1741:63;;;;-1:-1:-1;;;1741:63:13;;15368:2:15;1741:63:13;;;15350:21:15;15407:2;15387:18;;;15380:30;15446:33;15426:18;;;15419:61;15497:18;;1741:63:13;15166:355:15;6717:259:13;1072:6:11;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;6803:9:13::1;6789:10;;:23:::0;6780:63:::1;;;::::0;-1:-1:-1;;;6780:63:13;;10690:2:15;6780:63:13::1;::::0;::::1;10672:21:15::0;10729:2;10709:18;;;10702:30;10768:27;10748:18;;;10741:55;10813:18;;6780:63:13::1;10488:349:15::0;6780:63:13::1;3195:5:::0;:12;6859:9:::1;:26;;6850:91;;;::::0;-1:-1:-1;;;6850:91:13;;15728:2:15;6850:91:13::1;::::0;::::1;15710:21:15::0;15767:2;15747:18;;;15740:30;15806:34;15786:18;;;15779:62;15877:20;15857:18;;;15850:48;15915:19;;6850:91:13::1;15526:414:15::0;6850:91:13::1;6948:10;:22:::0;6717:259::o;1003:189::-;1069:4;-1:-1:-1;;;;;1090:21:13;;1082:72;;;;-1:-1:-1;;;1082:72:13;;16147:2:15;1082:72:13;;;16129:21:15;16186:2;16166:18;;;16159:30;16225:34;16205:18;;;16198:62;-1:-1:-1;;;16276:18:15;;;16269:36;16322:19;;1082:72:13;15945:402:15;1082:72:13;-1:-1:-1;;;;;;1168:18:13;;;;;:9;:18;;;;;;;1003:189::o;1650:94:11:-;1072:6;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;5586:615:13:-;1072:6:11;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;5692:35:13;;::::1;5684:97;;;::::0;-1:-1:-1;;;5684:97:13;;16554:2:15;5684:97:13::1;::::0;::::1;16536:21:15::0;16593:2;16573:18;;;16566:30;16632:34;16612:18;;;16605:62;16703:18;16683;;;16676:46;16739:19;;5684:97:13::1;16352:412:15::0;5684:97:13::1;5790:18;5815:11:::0;5829:13:::1;3195:5:::0;:12;;3118:95;5829:13:::1;5815:27;;5853:6;5849:82;5861:19:::0;;::::1;5849:82;;;5912:8;;5921:1;5912:11;;;;;;;:::i;:::-;;;;;;;5895:28;;;;;:::i;:::-;::::0;-1:-1:-1;5882:3:13::1;::::0;::::1;:::i;:::-;;;5849:82;;;-1:-1:-1::0;5971:10:13::1;::::0;5946:22:::1;5955:13:::0;5946:6;:22:::1;:::i;:::-;:35;5937:79;;;::::0;-1:-1:-1;;;5937:79:13;;16971:2:15;5937:79:13::1;::::0;::::1;16953:21:15::0;17010:2;16990:18;;;16983:30;17049:31;17029:18;;;17022:59;17098:18;;5937:79:13::1;16769:353:15::0;5937:79:13::1;6029:6;6025:171;6037:20:::0;;::::1;6025:171;;;6076:6;6072:117;6088:8;;6097:1;6088:11;;;;;;;:::i;:::-;;;;;;;6084:1;:15;6072:117;;;6116:12;6131:8;::::0;::::1;:::i;:::-;;;;6116:23;;6150:29;6157:9;;6167:1;6157:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6171:7;6150:5;:29::i;:::-;-1:-1:-1::0;6101:3:13::1;::::0;::::1;:::i;:::-;;;6072:117;;;-1:-1:-1::0;6059:3:13::1;::::0;::::1;:::i;:::-;;;6025:171;;;;5677:524;;5586:615:::0;;;;:::o;3219:257::-;1072:6:11;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;3316:19:13;3308:67:::1;;;::::0;-1:-1:-1;;;3308:67:13;;17329:2:15;3308:67:13::1;::::0;::::1;17311:21:15::0;17368:2;17348:18;;;17341:30;17407:34;17387:18;;;17380:62;17478:5;17458:18;;;17451:33;17501:19;;3308:67:13::1;17127:399:15::0;3308:67:13::1;3386:6;3382:89;3394:19:::0;;::::1;3382:89;;;3456:7;3429:11;:24;3441:8;;3450:1;3441:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3429:24:13::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;3429:24:13;:34;3415:3;::::1;::::0;::::1;:::i;:::-;;;;3382:89;;7246:135:::0;1072:6:11;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;7319:5:13::1;7310;;:14:::0;7301:54:::1;;;::::0;-1:-1:-1;;;7301:54:13;;10690:2:15;7301:54:13::1;::::0;::::1;10672:21:15::0;10729:2;10709:18;;;10702:30;10768:27;10748:18;;;10741:55;10813:18;;7301:54:13::1;10488:349:15::0;7301:54:13::1;7362:5;:13:::0;7246:135::o;1583:106:4:-;1641:13;1674:7;1667:14;;;;;:::i;3946:757:13:-;1778:1:12;2376:7;;:19;2368:63;;;;-1:-1:-1;;;2368:63:12;;17733:2:15;2368:63:12;;;17715:21:15;17772:2;17752:18;;;17745:30;17811:33;17791:18;;;17784:61;17862:18;;2368:63:12;17531:355:15;2368:63:12;1778:1;2509:7;:18;4034:10:13::1;4048:1;4022:23:::0;;;:11:::1;:23;::::0;;;;;4014:75:::1;;;::::0;-1:-1:-1;;;4014:75:13;;18093:2:15;4014:75:13::1;::::0;::::1;18075:21:15::0;18132:2;18112:18;;;18105:30;18171:34;18151:18;;;18144:62;18242:5;18222:18;;;18215:33;18265:19;;4014:75:13::1;17891:399:15::0;4014:75:13::1;4104:17;::::0;::::1;;4096:62;;;::::0;-1:-1:-1;;;4096:62:13;;18497:2:15;4096:62:13::1;::::0;::::1;18479:21:15::0;;;18516:18;;;18509:30;18575:34;18555:18;;;18548:62;18627:18;;4096:62:13::1;18295:356:15::0;4096:62:13::1;4185:10;4173:23;::::0;;;:11:::1;:23;::::0;;;;;:35;-1:-1:-1;4173:35:13::1;4165:86;;;::::0;-1:-1:-1;;;4165:86:13;;18858:2:15;4165:86:13::1;::::0;::::1;18840:21:15::0;18897:2;18877:18;;;18870:30;18936:34;18916:18;;;18909:62;19007:8;18987:18;;;18980:36;19033:19;;4165:86:13::1;18656:402:15::0;4165:86:13::1;4299:7;::::0;4273:10:::1;4266:18;::::0;;;:6:::1;:18;::::0;;;;;:29:::1;::::0;4287:8;;4266:29:::1;:::i;:::-;:40;;4258:100;;;::::0;-1:-1:-1;;;4258:100:13;;19265:2:15;4258:100:13::1;::::0;::::1;19247:21:15::0;19304:2;19284:18;;;19277:30;19343:34;19323:18;;;19316:62;19414:17;19394:18;;;19387:45;19449:19;;4258:100:13::1;19063:411:15::0;4258:100:13::1;4372:10;4365:18;::::0;;;:6:::1;:18;::::0;;;;:30;;4387:8;;4365:18;:30:::1;::::0;4387:8;;4365:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;4424:5:13::1;::::0;4411:9:::1;:18;;4402:63;;;::::0;-1:-1:-1;;;4402:63:13;;19681:2:15;4402:63:13::1;::::0;::::1;19663:21:15::0;19720:2;19700:18;;;19693:30;19759:31;19739:18;;;19732:59;19808:18;;4402:63:13::1;19479:353:15::0;4402:63:13::1;4472:11;4486:13;3195:5:::0;:12;;3118:95;4486:13:::1;4536:10;::::0;4472:27;;-1:-1:-1;4515:17:13::1;4524:8:::0;4472:27;4515:17:::1;:::i;:::-;:31;;4506:75;;;::::0;-1:-1:-1;;;4506:75:13;;16971:2:15;4506:75:13::1;::::0;::::1;16953:21:15::0;17010:2;16990:18;;;16983:30;17049:31;17029:18;;;17022:59;17098:18;;4506:75:13::1;16769:353:15::0;4506:75:13::1;4592:6;4588:110;4604:8;4600:1;:12;4588:110;;;4628:12;4644:8;::::0;::::1;:::i;:::-;;;;4628:24;;4662:28;4669:10;4681:7;4662:5;:28::i;:::-;-1:-1:-1::0;4614:3:13;::::1;::::0;::::1;:::i;:::-;;;;4588:110;;;-1:-1:-1::0;;1734:1:12;2688:7;:22;-1:-1:-1;3946:757:13:o;8566:172::-;8670:8;2274:30:10;2295:8;2274:20;:30::i;:::-;8689:43:13::1;8713:8;8723;8689:23;:43::i;9241:216::-:0;9386:4;-1:-1:-1;;;;;2094:18:10;;2102:10;2094:18;2090:83;;2129:32;2150:10;2129:20;:32::i;:::-;9404:47:13::1;9427:4;9433:2;9437:7;9446:4;9404:22;:47::i;:::-;9241:216:::0;;;;;:::o;6266:209::-;1072:6:11;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;6353:17:13::1;::::0;:39;::::1;;:17;::::0;;::::1;:39;;::::0;6344:80:::1;;;::::0;-1:-1:-1;;;6344:80:13;;10690:2:15;6344:80:13::1;::::0;::::1;10672:21:15::0;10729:2;10709:18;;;10702:30;10768:27;10748:18;;;10741:55;10813:18;;6344:80:13::1;10488:349:15::0;6344:80:13::1;6431:17;:38:::0;;-1:-1:-1;;6431:38:13::1;::::0;::::1;;::::0;;;::::1;::::0;;6266:209::o;2784:248::-;2848:13;2878:16;2886:7;2878;:16::i;:::-;2870:64;;;;-1:-1:-1;;;2870:64:13;;20039:2:15;2870:64:13;;;20021:21:15;20078:2;20058:18;;;20051:30;20117:34;20097:18;;;20090:62;20188:5;20168:18;;;20161:33;20211:19;;2870:64:13;19837:399:15;2870:64:13;2972:15;2989:18;:7;:16;:18::i;:::-;3009:15;2955:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2941:85;;2784:248;;;:::o;1899:192:11:-;1072:6;;-1:-1:-1;;;;;1072:6:11;682:10:1;1219:23:11;1211:68;;;;-1:-1:-1;;;1211:68:11;;10329:2:15;1211:68:11;;;10311:21:15;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;1211:68:11;10127:356:15;1211:68:11;-1:-1:-1;;;;;1988:22:11;::::1;1980:73;;;::::0;-1:-1:-1;;;1980:73:11;;21644:2:15;1980:73:11::1;::::0;::::1;21626:21:15::0;21683:2;21663:18;;;21656:30;21722:34;21702:18;;;21695:62;-1:-1:-1;;;21773:18:15;;;21766:36;21819:19;;1980:73:11::1;21442:402:15::0;1980:73:11::1;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;7719:165:13:-;7782:4;7810:1;7802:7;:9;:36;;;;-1:-1:-1;7826:5:13;:12;7815:23;;;7802:36;:76;;;;-1:-1:-1;7876:1:13;7842:5;7848:9;7856:1;7848:7;:9;:::i;:::-;7842:16;;;;;;;;:::i;:::-;;;;;;;;;;:22;-1:-1:-1;;;;;7842:22:13;:36;;7795:83;7719:165;-1:-1:-1;;7719:165:13:o;2332:419:10:-;853:42;2523:45;:49;2519:225;;2594:67;;;;;2645:4;2594:67;;;22084:34:15;-1:-1:-1;;;;;22154:15:15;;22134:18;;;22127:43;853:42:10;;2594;;21996:18:15;;2594:67:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2589:144;;2689:28;;;;;-1:-1:-1;;;;;1743:55:15;;2689:28:10;;;1725:74:15;1698:18;;2689:28:10;1579:226:15;1843:401:4;1921:13;1937:16;1945:7;1937;:16::i;:::-;1921:32;;1978:5;-1:-1:-1;;;;;1972:11:4;:2;-1:-1:-1;;;;;1972:11:4;;1964:57;;;;-1:-1:-1;;;1964:57:4;;22633:2:15;1964:57:4;;;22615:21:15;22672:2;22652:18;;;22645:30;22711:34;22691:18;;;22684:62;22782:3;22762:18;;;22755:31;22803:19;;1964:57:4;22431:397:15;1964:57:4;682:10:1;-1:-1:-1;;;;;2056:21:4;;;;:62;;-1:-1:-1;2081:37:4;2098:5;682:10:1;2476:164:4;:::i;2081:37::-;2034:168;;;;-1:-1:-1;;;2034:168:4;;23035:2:15;2034:168:4;;;23017:21:15;23074:2;23054:18;;;23047:30;23113:34;23093:18;;;23086:62;23184:26;23164:18;;;23157:54;23228:19;;2034:168:4;22833:420:15;2034:168:4;2215:21;2224:2;2228:7;2215:8;:21::i;2949:334::-;3141:41;682:10:1;3174:7:4;3141:18;:41::i;:::-;3133:103;;;;-1:-1:-1;;;3133:103:4;;23460:2:15;3133:103:4;;;23442:21:15;23499:2;23479:18;;;23472:30;23538:34;23518:18;;;23511:62;23609:19;23589:18;;;23582:47;23646:19;;3133:103:4;23258:413:15;3133:103:4;3247:28;3257:4;3263:2;3267:7;3247:9;:28::i;3291:182::-;3426:39;3443:4;3449:2;3453:7;3426:39;;;;;;;;;;;;:16;:39::i;2099:173:11:-;2174:6;;;-1:-1:-1;;;;;2191:17:11;;;-1:-1:-1;;2191:17:11;;;;;;;2224:40;;2174:6;;;2191:17;2174:6;;2224:40;;2155:16;;2224:40;2144:128;2099:173;:::o;7949:177:13:-;8006:36;8035:1;8039:2;8006:20;:36::i;:::-;8060:14;;;;;;;;-1:-1:-1;;;;;8060:14:13;;;;;;-1:-1:-1;8060:14:13;;;;;;8049:5;:26;;8060:14;8049:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8049:26:13;;;;;;;;;;;;;;;;;;;;8087:33;;8112:7;;8060:14;-1:-1:-1;8087:33:13;;-1:-1:-1;;8087:33:13;7949:177;;:::o;2648:293:4:-;682:10:1;-1:-1:-1;;;;;2751:24:4;;;2743:62;;;;-1:-1:-1;;;2743:62:4;;23878:2:15;2743:62:4;;;23860:21:15;23917:2;23897:18;;;23890:30;23956:27;23936:18;;;23929:55;24001:18;;2743:62:4;23676:349:15;2743:62:4;682:10:1;2816:32:4;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;2816:42:4;;;;;;;;;;;;:53;;-1:-1:-1;;2816:53:4;;;;;;;;;;2885:48;;586:41:15;;;2816:42:4;;682:10:1;2885:48:4;;559:18:15;2885:48:4;;;;;;;2648:293;;:::o;3481:325::-;3653:41;682:10:1;3686:7:4;3653:18;:41::i;:::-;3645:103;;;;-1:-1:-1;;;3645:103:4;;23460:2:15;3645:103:4;;;23442:21:15;23499:2;23479:18;;;23472:30;23538:34;23518:18;;;23511:62;23609:19;23589:18;;;23582:47;23646:19;;3645:103:4;23258:413:15;3645:103:4;3759:39;3773:4;3779:2;3783:7;3792:5;3759:13;:39::i;342:723:14:-;398:13;619:5;628:1;619:10;615:53;;-1:-1:-1;;646:10:14;;;;;;;;;;;;;;;;;;342:723::o;615:53::-;693:5;678:12;734:78;741:9;;734:78;;767:8;;;;:::i;:::-;;-1:-1:-1;790:10:14;;-1:-1:-1;798:2:14;790:10;;:::i;:::-;;;734:78;;;822:19;854:6;844:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;844:17:14;;822:39;;872:154;879:10;;872:154;;906:11;916:1;906:11;;:::i;:::-;;-1:-1:-1;975:10:14;983:2;975:5;:10;:::i;:::-;962:24;;:2;:24;:::i;:::-;949:39;;932:6;939;932:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;1003:11:14;1012:2;1003:11;;:::i;:::-;;;872:154;;;1050:6;342:723;-1:-1:-1;;;;342:723:14:o;3832:164:4:-;3904:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;3904:29:4;-1:-1:-1;;;;;3904:29:4;;;;;;;;:24;;3958:16;3904:24;3958:7;:16::i;:::-;-1:-1:-1;;;;;3949:39:4;;;;;;;;;;;3832:164;;:::o;4884:338::-;4974:4;4999:16;5007:7;4999;:16::i;:::-;4991:73;;;;-1:-1:-1;;;4991:73:4;;24663:2:15;4991:73:4;;;24645:21:15;24702:2;24682:18;;;24675:30;24741:34;24721:18;;;24714:62;-1:-1:-1;;;24792:18:15;;;24785:42;24844:19;;4991:73:4;24461:408:15;4991:73:4;5075:13;5091:16;5099:7;5091;:16::i;:::-;5075:32;;5137:5;-1:-1:-1;;;;;5126:16:4;:7;-1:-1:-1;;;;;5126:16:4;;:51;;;;5170:7;-1:-1:-1;;;;;5146:31:4;:20;5158:7;5146:11;:20::i;:::-;-1:-1:-1;;;;;5146:31:4;;5126:51;:87;;;-1:-1:-1;;;;;;2597:25:4;;;2573:4;2597:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;5181:32;2476:164;8190:370:13;-1:-1:-1;;;;;8282:30:13;;:5;8288:9;8296:1;8288:7;:9;:::i;:::-;8282:16;;;;;;;;:::i;:::-;;;;;;;;;;:22;-1:-1:-1;;;;;8282:22:13;:30;8274:82;;;;-1:-1:-1;;;8274:82:13;;25076:2:15;8274:82:13;;;25058:21:15;25115:2;25095:18;;;25088:30;25154:34;25134:18;;;25127:62;25225:9;25205:18;;;25198:37;25252:19;;8274:82:13;24874:403:15;8274:82:13;8413:29;8430:1;8434:7;8413:8;:29::i;:::-;8449:30;8470:4;8476:2;8449:20;:30::i;:::-;8513:2;8488:5;8494:9;8502:1;8494:7;:9;:::i;:::-;8488:16;;;;;;;;:::i;:::-;;;;;;;;;:27;;-1:-1:-1;;8488:27:13;-1:-1:-1;;;;;8488:27:13;;;;;;8527;;8546:7;;8527:27;;;;;;;;;;8488:16;8527:27;8190:370;;;:::o;7472:185::-;-1:-1:-1;;;;;7548:18:13;;;7544:51;;-1:-1:-1;;;;;7578:17:13;;;;;;:9;:17;;;;;7576:19;;7578:17;;;7576:19;;;:::i;:::-;;;;-1:-1:-1;7544:51:13;-1:-1:-1;;;;;7608:16:13;;;7604:47;;-1:-1:-1;;;;;7636:15:13;;;;;;:9;:15;;;;;7634:17;;7636:15;;;7634:17;;;:::i;:::-;;;;-1:-1:-1;7472:185:13;;:::o;5230:312:4:-;5384:28;5394:4;5400:2;5404:7;5384:9;:28::i;:::-;5431:48;5454:4;5460:2;5464:7;5473:5;5431:22;:48::i;:::-;5423:111;;;;-1:-1:-1;;;5423:111:4;;25625:2:15;5423:111:4;;;25607:21:15;25664:2;25644:18;;;25637:30;25703:34;25683:18;;;25676:62;25774:20;25754:18;;;25747:48;25812:19;;5423:111:4;25423:414:15;4004:796:4;4156:4;-1:-1:-1;;;;;4177:13:4;;1066:20:0;1114:8;4173:620:4;;4213:72;;-1:-1:-1;;;4213:72:4;;-1:-1:-1;;;;;4213:36:4;;;;;:72;;682:10:1;;4264:4:4;;4270:7;;4279:5;;4213:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4213:72:4;;;;;;;;-1:-1:-1;;4213:72:4;;;;;;;;;;;;:::i;:::-;;;4209:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4455:6;:13;4472:1;4455:18;4451:272;;4498:60;;-1:-1:-1;;;4498:60:4;;25625:2:15;4498:60:4;;;25607:21:15;25664:2;25644:18;;;25637:30;25703:34;25683:18;;;25676:62;25774:20;25754:18;;;25747:48;25812:19;;4498:60:4;25423:414:15;4451:272:4;4673:6;4667:13;4658:6;4654:2;4650:15;4643:38;4209:529;-1:-1:-1;;;;;;4336:51:4;-1:-1:-1;;;4336:51:4;;-1:-1:-1;4329:58:4;;4173:620;-1:-1:-1;4777:4:4;4004:796;;;;;;:::o;14:177:15:-;-1:-1:-1;;;;;;92:5:15;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:250::-;723:1;733:113;747:6;744:1;741:13;733:113;;;823:11;;;817:18;804:11;;;797:39;769:2;762:10;733:113;;;-1:-1:-1;;880:1:15;862:16;;855:27;638:250::o;893:271::-;935:3;973:5;967:12;1000:6;995:3;988:19;1016:76;1085:6;1078:4;1073:3;1069:14;1062:4;1055:5;1051:16;1016:76;:::i;:::-;1146:2;1125:15;-1:-1:-1;;1121:29:15;1112:39;;;;1153:4;1108:50;;893:271;-1:-1:-1;;893:271:15:o;1169:220::-;1318:2;1307:9;1300:21;1281:4;1338:45;1379:2;1368:9;1364:18;1356:6;1338:45;:::i;1394:180::-;1453:6;1506:2;1494:9;1485:7;1481:23;1477:32;1474:52;;;1522:1;1519;1512:12;1474:52;-1:-1:-1;1545:23:15;;1394:180;-1:-1:-1;1394:180:15:o;1810:196::-;1878:20;;-1:-1:-1;;;;;1927:54:15;;1917:65;;1907:93;;1996:1;1993;1986:12;1907:93;1810:196;;;:::o;2011:254::-;2079:6;2087;2140:2;2128:9;2119:7;2115:23;2111:32;2108:52;;;2156:1;2153;2146:12;2108:52;2179:29;2198:9;2179:29;:::i;:::-;2169:39;2255:2;2240:18;;;;2227:32;;-1:-1:-1;;;2011:254:15:o;2452:186::-;2511:6;2564:2;2552:9;2543:7;2539:23;2535:32;2532:52;;;2580:1;2577;2570:12;2532:52;2603:29;2622:9;2603:29;:::i;2643:328::-;2720:6;2728;2736;2789:2;2777:9;2768:7;2764:23;2760:32;2757:52;;;2805:1;2802;2795:12;2757:52;2828:29;2847:9;2828:29;:::i;:::-;2818:39;;2876:38;2910:2;2899:9;2895:18;2876:38;:::i;:::-;2866:48;;2961:2;2950:9;2946:18;2933:32;2923:42;;2643:328;;;;;:::o;3239:632::-;3410:2;3462:21;;;3532:13;;3435:18;;;3554:22;;;3381:4;;3410:2;3633:15;;;;3607:2;3592:18;;;3381:4;3676:169;3690:6;3687:1;3684:13;3676:169;;;3751:13;;3739:26;;3820:15;;;;3785:12;;;;3712:1;3705:9;3676:169;;;-1:-1:-1;3862:3:15;;3239:632;-1:-1:-1;;;;;;3239:632:15:o;3876:367::-;3939:8;3949:6;4003:3;3996:4;3988:6;3984:17;3980:27;3970:55;;4021:1;4018;4011:12;3970:55;-1:-1:-1;4044:20:15;;4087:18;4076:30;;4073:50;;;4119:1;4116;4109:12;4073:50;4156:4;4148:6;4144:17;4132:29;;4216:3;4209:4;4199:6;4196:1;4192:14;4184:6;4180:27;4176:38;4173:47;4170:67;;;4233:1;4230;4223:12;4170:67;3876:367;;;;;:::o;4248:511::-;4343:6;4351;4359;4412:2;4400:9;4391:7;4387:23;4383:32;4380:52;;;4428:1;4425;4418:12;4380:52;4451:29;4470:9;4451:29;:::i;:::-;4441:39;;4531:2;4520:9;4516:18;4503:32;4558:18;4550:6;4547:30;4544:50;;;4590:1;4587;4580:12;4544:50;4629:70;4691:7;4682:6;4671:9;4667:22;4629:70;:::i;:::-;4248:511;;4718:8;;-1:-1:-1;4603:96:15;;-1:-1:-1;;;;4248:511:15:o;5076:184::-;-1:-1:-1;;;5125:1:15;5118:88;5225:4;5222:1;5215:15;5249:4;5246:1;5239:15;5265:632;5330:5;5360:18;5401:2;5393:6;5390:14;5387:40;;;5407:18;;:::i;:::-;5482:2;5476:9;5450:2;5536:15;;-1:-1:-1;;5532:24:15;;;5558:2;5528:33;5524:42;5512:55;;;5582:18;;;5602:22;;;5579:46;5576:72;;;5628:18;;:::i;:::-;5668:10;5664:2;5657:22;5697:6;5688:15;;5727:6;5719;5712:22;5767:3;5758:6;5753:3;5749:16;5746:25;5743:45;;;5784:1;5781;5774:12;5743:45;5834:6;5829:3;5822:4;5814:6;5810:17;5797:44;5889:1;5882:4;5873:6;5865;5861:19;5857:30;5850:41;;;;5265:632;;;;;:::o;5902:451::-;5971:6;6024:2;6012:9;6003:7;5999:23;5995:32;5992:52;;;6040:1;6037;6030:12;5992:52;6080:9;6067:23;6113:18;6105:6;6102:30;6099:50;;;6145:1;6142;6135:12;6099:50;6168:22;;6221:4;6213:13;;6209:27;-1:-1:-1;6199:55:15;;6250:1;6247;6240:12;6199:55;6273:74;6339:7;6334:2;6321:16;6316:2;6312;6308:11;6273:74;:::i;6358:773::-;6480:6;6488;6496;6504;6557:2;6545:9;6536:7;6532:23;6528:32;6525:52;;;6573:1;6570;6563:12;6525:52;6613:9;6600:23;6642:18;6683:2;6675:6;6672:14;6669:34;;;6699:1;6696;6689:12;6669:34;6738:70;6800:7;6791:6;6780:9;6776:22;6738:70;:::i;:::-;6827:8;;-1:-1:-1;6712:96:15;-1:-1:-1;6915:2:15;6900:18;;6887:32;;-1:-1:-1;6931:16:15;;;6928:36;;;6960:1;6957;6950:12;6928:36;;6999:72;7063:7;7052:8;7041:9;7037:24;6999:72;:::i;:::-;6358:773;;;;-1:-1:-1;7090:8:15;-1:-1:-1;;;;6358:773:15:o;7136:505::-;7231:6;7239;7247;7300:2;7288:9;7279:7;7275:23;7271:32;7268:52;;;7316:1;7313;7306:12;7268:52;7356:9;7343:23;7389:18;7381:6;7378:30;7375:50;;;7421:1;7418;7411:12;7375:50;7460:70;7522:7;7513:6;7502:9;7498:22;7460:70;:::i;:::-;7549:8;;7434:96;;-1:-1:-1;7631:2:15;7616:18;;;;7603:32;;7136:505;-1:-1:-1;;;;7136:505:15:o;7646:118::-;7732:5;7725:13;7718:21;7711:5;7708:32;7698:60;;7754:1;7751;7744:12;7769:315;7834:6;7842;7895:2;7883:9;7874:7;7870:23;7866:32;7863:52;;;7911:1;7908;7901:12;7863:52;7934:29;7953:9;7934:29;:::i;:::-;7924:39;;8013:2;8002:9;7998:18;7985:32;8026:28;8048:5;8026:28;:::i;:::-;8073:5;8063:15;;;7769:315;;;;;:::o;8089:667::-;8184:6;8192;8200;8208;8261:3;8249:9;8240:7;8236:23;8232:33;8229:53;;;8278:1;8275;8268:12;8229:53;8301:29;8320:9;8301:29;:::i;:::-;8291:39;;8349:38;8383:2;8372:9;8368:18;8349:38;:::i;:::-;8339:48;;8434:2;8423:9;8419:18;8406:32;8396:42;;8489:2;8478:9;8474:18;8461:32;8516:18;8508:6;8505:30;8502:50;;;8548:1;8545;8538:12;8502:50;8571:22;;8624:4;8616:13;;8612:27;-1:-1:-1;8602:55:15;;8653:1;8650;8643:12;8602:55;8676:74;8742:7;8737:2;8724:16;8719:2;8715;8711:11;8676:74;:::i;:::-;8666:84;;;8089:667;;;;;;;:::o;8761:241::-;8817:6;8870:2;8858:9;8849:7;8845:23;8841:32;8838:52;;;8886:1;8883;8876:12;8838:52;8925:9;8912:23;8944:28;8966:5;8944:28;:::i;9007:260::-;9075:6;9083;9136:2;9124:9;9115:7;9111:23;9107:32;9104:52;;;9152:1;9149;9142:12;9104:52;9175:29;9194:9;9175:29;:::i;:::-;9165:39;;9223:38;9257:2;9246:9;9242:18;9223:38;:::i;:::-;9213:48;;9007:260;;;;;:::o;9272:437::-;9351:1;9347:12;;;;9394;;;9415:61;;9469:4;9461:6;9457:17;9447:27;;9415:61;9522:2;9514:6;9511:14;9491:18;9488:38;9485:218;;-1:-1:-1;;;9556:1:15;9549:88;9660:4;9657:1;9650:15;9688:4;9685:1;9678:15;9485:218;;9272:437;;;:::o;11410:184::-;-1:-1:-1;;;11459:1:15;11452:88;11559:4;11556:1;11549:15;11583:4;11580:1;11573:15;11599:184;-1:-1:-1;;;11648:1:15;11641:88;11748:4;11745:1;11738:15;11772:4;11769:1;11762:15;11788:125;11853:9;;;11874:10;;;11871:36;;;11887:18;;:::i;11918:135::-;11957:3;11978:17;;;11975:43;;11998:18;;:::i;:::-;-1:-1:-1;12045:1:15;12034:13;;11918:135::o;12955:545::-;13057:2;13052:3;13049:11;13046:448;;;13093:1;13118:5;13114:2;13107:17;13163:4;13159:2;13149:19;13233:2;13221:10;13217:19;13214:1;13210:27;13204:4;13200:38;13269:4;13257:10;13254:20;13251:47;;;-1:-1:-1;13292:4:15;13251:47;13347:2;13342:3;13338:12;13335:1;13331:20;13325:4;13321:31;13311:41;;13402:82;13420:2;13413:5;13410:13;13402:82;;;13465:17;;;13446:1;13435:13;13402:82;;;13406:3;;;12955:545;;;:::o;13676:1352::-;13802:3;13796:10;13829:18;13821:6;13818:30;13815:56;;;13851:18;;:::i;:::-;13880:97;13970:6;13930:38;13962:4;13956:11;13930:38;:::i;:::-;13924:4;13880:97;:::i;:::-;14032:4;;14096:2;14085:14;;14113:1;14108:663;;;;14815:1;14832:6;14829:89;;;-1:-1:-1;14884:19:15;;;14878:26;14829:89;-1:-1:-1;;13633:1:15;13629:11;;;13625:24;13621:29;13611:40;13657:1;13653:11;;;13608:57;14931:81;;14078:944;;14108:663;12902:1;12895:14;;;12939:4;12926:18;;-1:-1:-1;;14144:20:15;;;14262:236;14276:7;14273:1;14270:14;14262:236;;;14365:19;;;14359:26;14344:42;;14457:27;;;;14425:1;14413:14;;;;14292:19;;14262:236;;;14266:3;14526:6;14517:7;14514:19;14511:201;;;14587:19;;;14581:26;-1:-1:-1;;14670:1:15;14666:14;;;14682:3;14662:24;14658:37;14654:42;14639:58;14624:74;;14511:201;-1:-1:-1;;;;;14758:1:15;14742:14;;;14738:22;14725:36;;-1:-1:-1;13676:1352:15:o;15033:128::-;15100:9;;;15121:11;;;15118:37;;;15135:18;;:::i;20241:722::-;20291:3;20332:5;20326:12;20361:36;20387:9;20361:36;:::i;:::-;20416:1;20433:18;;;20460:133;;;;20607:1;20602:355;;;;20426:531;;20460:133;-1:-1:-1;;20493:24:15;;20481:37;;20566:14;;20559:22;20547:35;;20538:45;;;-1:-1:-1;20460:133:15;;20602:355;20633:5;20630:1;20623:16;20662:4;20707:2;20704:1;20694:16;20732:1;20746:165;20760:6;20757:1;20754:13;20746:165;;;20838:14;;20825:11;;;20818:35;20881:16;;;;20775:10;;20746:165;;;20750:3;;;20940:6;20935:3;20931:16;20924:23;;20426:531;;;;;20241:722;;;;:::o;20968:469::-;21189:3;21217:38;21251:3;21243:6;21217:38;:::i;:::-;21284:6;21278:13;21300:65;21358:6;21354:2;21347:4;21339:6;21335:17;21300:65;:::i;:::-;21381:50;21423:6;21419:2;21415:15;21407:6;21381:50;:::i;:::-;21374:57;20968:469;-1:-1:-1;;;;;;;20968:469:15:o;22181:245::-;22248:6;22301:2;22289:9;22280:7;22276:23;22272:32;22269:52;;;22317:1;22314;22307:12;22269:52;22349:9;22343:16;22368:28;22390:5;22368:28;:::i;24030:184::-;-1:-1:-1;;;24079:1:15;24072:88;24179:4;24176:1;24169:15;24203:4;24200:1;24193:15;24219:120;24259:1;24285;24275:35;;24290:18;;:::i;:::-;-1:-1:-1;24324:9:15;;24219:120::o;24344:112::-;24376:1;24402;24392:35;;24407:18;;:::i;:::-;-1:-1:-1;24441:9:15;;24344:112::o;25282:136::-;25321:3;25349:5;25339:39;;25358:18;;:::i;:::-;-1:-1:-1;;;25394:18:15;;25282:136::o;25842:512::-;26036:4;-1:-1:-1;;;;;26146:2:15;26138:6;26134:15;26123:9;26116:34;26198:2;26190:6;26186:15;26181:2;26170:9;26166:18;26159:43;;26238:6;26233:2;26222:9;26218:18;26211:34;26281:3;26276:2;26265:9;26261:18;26254:31;26302:46;26343:3;26332:9;26328:19;26320:6;26302:46;:::i;:::-;26294:54;25842:512;-1:-1:-1;;;;;;25842:512:15:o;26359:249::-;26428:6;26481:2;26469:9;26460:7;26456:23;26452:32;26449:52;;;26497:1;26494;26487:12;26449:52;26529:9;26523:16;26548:30;26572:5;26548:30;:::i
Swarm Source
ipfs://086cdb6b440b24b62df671f82846d93ba931085194a08a6849b03e7c2c0722f2
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.