ERC-721
Overview
Max Total Supply
186 GRP
Holders
71
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 GRPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GrassRootPass
Compiler Version
v0.8.8+commit.dddeac2f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-07 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), "ERC721A: number minted query for the zero address"); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); require(quantity != 0, "ERC721A: quantity must be greater than 0"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved"); require(prevOwnership.addr == from, "ERC721A: transfer from incorrect owner"); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract GrassRootPass is ERC721A, Ownable { string public baseURI; uint public price = 0.01 ether; uint public maxSupply = 1000; uint public maxMintPerAddr = 2; bool public mintEnabled; constructor() ERC721A("GrassRootPass", "GRP"){ } function mint(uint256 amount) external payable { require(mintEnabled, "Minting is not enabled"); require(totalSupply() + amount < maxSupply + 1, "No more Pass available"); require(msg.value == amount * price, "Please send the exact amount"); require(_numberMinted(msg.sender) + amount <= maxMintPerAddr, "max mint 2 per wallet"); _safeMint(msg.sender, amount); } function ownerBatchMint(uint256 amount, address target) external onlyOwner { require(totalSupply() + amount < maxSupply + 1, "Mint amount exceeds supply"); _safeMint(target, amount); } function toggleMinting() external onlyOwner { mintEnabled = !mintEnabled; } function setBaseURI(string calldata baseURI_) external onlyOwner { baseURI = baseURI_; } function setPrice(uint256 price_) external onlyOwner { price = price_; } function withdraw() external onlyOwner { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerAddr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"}],"name":"ownerBatchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052662386f26fc100006009556103e8600a556002600b553480156200002757600080fd5b506040518060400160405280600d81526020017f4772617373526f6f7450617373000000000000000000000000000000000000008152506040518060400160405280600381526020017f47525000000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000ac929190620001bc565b508060029080519060200190620000c5929190620001bc565b505050620000e8620000dc620000ee60201b60201c565b620000f660201b60201c565b620002d1565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ca906200029b565b90600052602060002090601f016020900481019282620001ee57600085556200023a565b82601f106200020957805160ff19168380011785556200023a565b828001600101855582156200023a579182015b82811115620002395782518255916020019190600101906200021c565b5b5090506200024991906200024d565b5090565b5b80821115620002685760008160009055506001016200024e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002b457607f821691505b60208210811415620002cb57620002ca6200026c565b5b50919050565b61443280620002e16000396000f3fe6080604052600436106101d85760003560e01c80637d55094d11610102578063c1dffe3211610095578063dc33e68111610064578063dc33e6811461068b578063e61e9025146106c8578063e985e9c5146106f1578063f2fde38b1461072e576101d8565b8063c1dffe32146105cd578063c87b56dd146105f8578063d123973014610635578063d5abeb0114610660576101d8565b8063a035b1fe116100d1578063a035b1fe14610534578063a0712d681461055f578063a22cb4651461057b578063b88d4fde146105a4576101d8565b80637d55094d1461049e5780638da5cb5b146104b557806391b7f5ed146104e057806395d89b4114610509576101d8565b80633ccfd60b1161017a5780636352211e116101495780636352211e146103e25780636c0360eb1461041f57806370a082311461044a578063715018a614610487576101d8565b80633ccfd60b1461033c57806342842e0e146103535780634f6ccce71461037c57806355f804b3146103b9576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806318160ddd146102ab57806323b872dd146102d65780632f745c59146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612c0e565b610757565b6040516102119190612c56565b60405180910390f35b34801561022657600080fd5b5061022f6108a1565b60405161023c9190612d0a565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612d62565b610933565b6040516102799190612dd0565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612e17565b6109b8565b005b3480156102b757600080fd5b506102c0610ad1565b6040516102cd9190612e66565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612e81565b610ada565b005b34801561030b57600080fd5b5061032660048036038101906103219190612e17565b610aea565b6040516103339190612e66565b60405180910390f35b34801561034857600080fd5b50610351610cdc565b005b34801561035f57600080fd5b5061037a60048036038101906103759190612e81565b610e07565b005b34801561038857600080fd5b506103a3600480360381019061039e9190612d62565b610e27565b6040516103b09190612e66565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190612f39565b610e7a565b005b3480156103ee57600080fd5b5061040960048036038101906104049190612d62565b610f0c565b6040516104169190612dd0565b60405180910390f35b34801561042b57600080fd5b50610434610f22565b6040516104419190612d0a565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190612f86565b610fb0565b60405161047e9190612e66565b60405180910390f35b34801561049357600080fd5b5061049c611099565b005b3480156104aa57600080fd5b506104b3611121565b005b3480156104c157600080fd5b506104ca6111c9565b6040516104d79190612dd0565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190612d62565b6111f3565b005b34801561051557600080fd5b5061051e611279565b60405161052b9190612d0a565b60405180910390f35b34801561054057600080fd5b5061054961130b565b6040516105569190612e66565b60405180910390f35b61057960048036038101906105749190612d62565b611311565b005b34801561058757600080fd5b506105a2600480360381019061059d9190612fdf565b611476565b005b3480156105b057600080fd5b506105cb60048036038101906105c6919061314f565b6115f7565b005b3480156105d957600080fd5b506105e2611653565b6040516105ef9190612e66565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a9190612d62565b611659565b60405161062c9190612d0a565b60405180910390f35b34801561064157600080fd5b5061064a611701565b6040516106579190612c56565b60405180910390f35b34801561066c57600080fd5b50610675611714565b6040516106829190612e66565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190612f86565b61171a565b6040516106bf9190612e66565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea91906131d2565b61172c565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613212565b611818565b6040516107259190612c56565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190612f86565b6118ac565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061088a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061089a5750610899826119a4565b5b9050919050565b6060600180546108b090613281565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90613281565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b5050505050905090565b600061093e82611a0e565b61097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097490613325565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c382610f0c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b906133b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a53611a1b565b73ffffffffffffffffffffffffffffffffffffffff161480610a825750610a8181610a7c611a1b565b611818565b5b610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890613449565b60405180910390fd5b610acc838383611a23565b505050565b60008054905090565b610ae5838383611ad5565b505050565b6000610af583610fb0565b8210610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d906134db565b60405180910390fd5b6000610b40610ad1565b905060008060005b83811015610c9a576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c3a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8c5786841415610c83578195505050505050610cd6565b83806001019450505b508080600101915050610b48565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd9061356d565b60405180910390fd5b92915050565b610ce4611a1b565b73ffffffffffffffffffffffffffffffffffffffff16610d026111c9565b73ffffffffffffffffffffffffffffffffffffffff1614610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f906135d9565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610d7e9061362a565b60006040518083038185875af1925050503d8060008114610dbb576040519150601f19603f3d011682016040523d82523d6000602084013e610dc0565b606091505b5050905080610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb9061368b565b60405180910390fd5b50565b610e22838383604051806020016040528060008152506115f7565b505050565b6000610e31610ad1565b8210610e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e699061371d565b60405180910390fd5b819050919050565b610e82611a1b565b73ffffffffffffffffffffffffffffffffffffffff16610ea06111c9565b73ffffffffffffffffffffffffffffffffffffffff1614610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed906135d9565b60405180910390fd5b818160089190610f07929190612ac5565b505050565b6000610f1782612015565b600001519050919050565b60088054610f2f90613281565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5b90613281565b8015610fa85780601f10610f7d57610100808354040283529160200191610fa8565b820191906000526020600020905b815481529060010190602001808311610f8b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611021576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611018906137af565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6110a1611a1b565b73ffffffffffffffffffffffffffffffffffffffff166110bf6111c9565b73ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c906135d9565b60405180910390fd5b61111f60006121af565b565b611129611a1b565b73ffffffffffffffffffffffffffffffffffffffff166111476111c9565b73ffffffffffffffffffffffffffffffffffffffff161461119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906135d9565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111fb611a1b565b73ffffffffffffffffffffffffffffffffffffffff166112196111c9565b73ffffffffffffffffffffffffffffffffffffffff161461126f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611266906135d9565b60405180910390fd5b8060098190555050565b60606002805461128890613281565b80601f01602080910402602001604051908101604052809291908181526020018280546112b490613281565b80156113015780601f106112d657610100808354040283529160200191611301565b820191906000526020600020905b8154815290600101906020018083116112e457829003601f168201915b5050505050905090565b60095481565b600c60009054906101000a900460ff16611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113579061381b565b60405180910390fd5b6001600a5461136f919061386a565b81611378610ad1565b611382919061386a565b106113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b99061390c565b60405180910390fd5b600954816113d0919061392c565b3414611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906139d2565b60405180910390fd5b600b548161141e33612275565b611428919061386a565b1115611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613a3e565b60405180910390fd5b611473338261235e565b50565b61147e611a1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613aaa565b60405180910390fd5b80600660006114f9611a1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a6611a1b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115eb9190612c56565b60405180910390a35050565b611602848484611ad5565b61160e8484848461237c565b61164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490613b3c565b60405180910390fd5b50505050565b600b5481565b606061166482611a0e565b6116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613bce565b60405180910390fd5b60006116ad612513565b90506000815114156116ce57604051806020016040528060008152506116f9565b806116d8846125a5565b6040516020016116e9929190613c2a565b6040516020818303038152906040525b915050919050565b600c60009054906101000a900460ff1681565b600a5481565b600061172582612275565b9050919050565b611734611a1b565b73ffffffffffffffffffffffffffffffffffffffff166117526111c9565b73ffffffffffffffffffffffffffffffffffffffff16146117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f906135d9565b60405180910390fd5b6001600a546117b7919061386a565b826117c0610ad1565b6117ca919061386a565b1061180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613c9a565b60405180910390fd5b611814818361235e565b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118b4611a1b565b73ffffffffffffffffffffffffffffffffffffffff166118d26111c9565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906135d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90613d2c565b60405180910390fd5b6119a1816121af565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ae082612015565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b07611a1b565b73ffffffffffffffffffffffffffffffffffffffff161480611b635750611b2c611a1b565b73ffffffffffffffffffffffffffffffffffffffff16611b4b84610933565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b7f5750611b7e8260000151611b79611a1b565b611818565b5b905080611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890613dbe565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90613e50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a90613ee2565b60405180910390fd5b611cb08585856001612706565b611cc06000848460000151611a23565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fa557611f0481611a0e565b15611fa45782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461200e858585600161270c565b5050505050565b61201d612b4b565b61202682611a0e565b612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c90613f74565b60405180910390fd5b60008290505b6000811061216e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461215f5780925050506121aa565b5080806001900391505061206b565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190614006565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614098565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b612378828260405180602001604052806000815250612712565b5050565b600061239d8473ffffffffffffffffffffffffffffffffffffffff16612724565b15612506578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c6611a1b565b8786866040518563ffffffff1660e01b81526004016123e8949392919061410d565b602060405180830381600087803b15801561240257600080fd5b505af192505050801561243357506040513d601f19601f82011682018060405250810190612430919061416e565b60015b6124b6573d8060008114612463576040519150601f19603f3d011682016040523d82523d6000602084013e612468565b606091505b506000815114156124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a590613b3c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061250b565b600190505b949350505050565b60606008805461252290613281565b80601f016020809104026020016040519081016040528092919081815260200182805461254e90613281565b801561259b5780601f106125705761010080835404028352916020019161259b565b820191906000526020600020905b81548152906001019060200180831161257e57829003601f168201915b5050505050905090565b606060008214156125ed576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612701565b600082905060005b6000821461261f5780806126089061419b565b915050600a826126189190614213565b91506125f5565b60008167ffffffffffffffff81111561263b5761263a613024565b5b6040519080825280601f01601f19166020018201604052801561266d5781602001600182028036833780820191505090505b5090505b600085146126fa576001826126869190614244565b9150600a856126959190614278565b60306126a1919061386a565b60f81b8183815181106126b7576126b66142a9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126f39190614213565b9450612671565b8093505050505b919050565b50505050565b50505050565b61271f8383836001612747565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b49061434a565b60405180910390fd5b6000841415612801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f8906143dc565b60405180910390fd5b61280e6000868387612706565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612aa857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612a9357612a53600088848861237c565b612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990613b3c565b60405180910390fd5b5b818060010192505080806001019150506129dc565b508060008190555050612abe600086838761270c565b5050505050565b828054612ad190613281565b90600052602060002090601f016020900481019282612af35760008555612b3a565b82601f10612b0c57803560ff1916838001178555612b3a565b82800160010185558215612b3a579182015b82811115612b39578235825591602001919060010190612b1e565b5b509050612b479190612b85565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612b9e576000816000905550600101612b86565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612beb81612bb6565b8114612bf657600080fd5b50565b600081359050612c0881612be2565b92915050565b600060208284031215612c2457612c23612bac565b5b6000612c3284828501612bf9565b91505092915050565b60008115159050919050565b612c5081612c3b565b82525050565b6000602082019050612c6b6000830184612c47565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cab578082015181840152602081019050612c90565b83811115612cba576000848401525b50505050565b6000601f19601f8301169050919050565b6000612cdc82612c71565b612ce68185612c7c565b9350612cf6818560208601612c8d565b612cff81612cc0565b840191505092915050565b60006020820190508181036000830152612d248184612cd1565b905092915050565b6000819050919050565b612d3f81612d2c565b8114612d4a57600080fd5b50565b600081359050612d5c81612d36565b92915050565b600060208284031215612d7857612d77612bac565b5b6000612d8684828501612d4d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dba82612d8f565b9050919050565b612dca81612daf565b82525050565b6000602082019050612de56000830184612dc1565b92915050565b612df481612daf565b8114612dff57600080fd5b50565b600081359050612e1181612deb565b92915050565b60008060408385031215612e2e57612e2d612bac565b5b6000612e3c85828601612e02565b9250506020612e4d85828601612d4d565b9150509250929050565b612e6081612d2c565b82525050565b6000602082019050612e7b6000830184612e57565b92915050565b600080600060608486031215612e9a57612e99612bac565b5b6000612ea886828701612e02565b9350506020612eb986828701612e02565b9250506040612eca86828701612d4d565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112612ef957612ef8612ed4565b5b8235905067ffffffffffffffff811115612f1657612f15612ed9565b5b602083019150836001820283011115612f3257612f31612ede565b5b9250929050565b60008060208385031215612f5057612f4f612bac565b5b600083013567ffffffffffffffff811115612f6e57612f6d612bb1565b5b612f7a85828601612ee3565b92509250509250929050565b600060208284031215612f9c57612f9b612bac565b5b6000612faa84828501612e02565b91505092915050565b612fbc81612c3b565b8114612fc757600080fd5b50565b600081359050612fd981612fb3565b92915050565b60008060408385031215612ff657612ff5612bac565b5b600061300485828601612e02565b925050602061301585828601612fca565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61305c82612cc0565b810181811067ffffffffffffffff8211171561307b5761307a613024565b5b80604052505050565b600061308e612ba2565b905061309a8282613053565b919050565b600067ffffffffffffffff8211156130ba576130b9613024565b5b6130c382612cc0565b9050602081019050919050565b82818337600083830152505050565b60006130f26130ed8461309f565b613084565b90508281526020810184848401111561310e5761310d61301f565b5b6131198482856130d0565b509392505050565b600082601f83011261313657613135612ed4565b5b81356131468482602086016130df565b91505092915050565b6000806000806080858703121561316957613168612bac565b5b600061317787828801612e02565b945050602061318887828801612e02565b935050604061319987828801612d4d565b925050606085013567ffffffffffffffff8111156131ba576131b9612bb1565b5b6131c687828801613121565b91505092959194509250565b600080604083850312156131e9576131e8612bac565b5b60006131f785828601612d4d565b925050602061320885828601612e02565b9150509250929050565b6000806040838503121561322957613228612bac565b5b600061323785828601612e02565b925050602061324885828601612e02565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061329957607f821691505b602082108114156132ad576132ac613252565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b600061330f602d83612c7c565b915061331a826132b3565b604082019050919050565b6000602082019050818103600083015261333e81613302565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006133a1602283612c7c565b91506133ac82613345565b604082019050919050565b600060208201905081810360008301526133d081613394565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613433603983612c7c565b915061343e826133d7565b604082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006134c5602283612c7c565b91506134d082613469565b604082019050919050565b600060208201905081810360008301526134f4816134b8565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613557602e83612c7c565b9150613562826134fb565b604082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135c3602083612c7c565b91506135ce8261358d565b602082019050919050565b600060208201905081810360008301526135f2816135b6565b9050919050565b600081905092915050565b50565b60006136146000836135f9565b915061361f82613604565b600082019050919050565b600061363582613607565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613675601083612c7c565b91506136808261363f565b602082019050919050565b600060208201905081810360008301526136a481613668565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613707602383612c7c565b9150613712826136ab565b604082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613799602b83612c7c565b91506137a48261373d565b604082019050919050565b600060208201905081810360008301526137c88161378c565b9050919050565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b6000613805601683612c7c565b9150613810826137cf565b602082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387582612d2c565b915061388083612d2c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138b5576138b461383b565b5b828201905092915050565b7f4e6f206d6f7265205061737320617661696c61626c6500000000000000000000600082015250565b60006138f6601683612c7c565b9150613901826138c0565b602082019050919050565b60006020820190508181036000830152613925816138e9565b9050919050565b600061393782612d2c565b915061394283612d2c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561397b5761397a61383b565b5b828202905092915050565b7f506c656173652073656e642074686520657861637420616d6f756e7400000000600082015250565b60006139bc601c83612c7c565b91506139c782613986565b602082019050919050565b600060208201905081810360008301526139eb816139af565b9050919050565b7f6d6178206d696e742032207065722077616c6c65740000000000000000000000600082015250565b6000613a28601583612c7c565b9150613a33826139f2565b602082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613a94601a83612c7c565b9150613a9f82613a5e565b602082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613b26603383612c7c565b9150613b3182613aca565b604082019050919050565b60006020820190508181036000830152613b5581613b19565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613bb8602f83612c7c565b9150613bc382613b5c565b604082019050919050565b60006020820190508181036000830152613be781613bab565b9050919050565b600081905092915050565b6000613c0482612c71565b613c0e8185613bee565b9350613c1e818560208601612c8d565b80840191505092915050565b6000613c368285613bf9565b9150613c428284613bf9565b91508190509392505050565b7f4d696e7420616d6f756e74206578636565647320737570706c79000000000000600082015250565b6000613c84601a83612c7c565b9150613c8f82613c4e565b602082019050919050565b60006020820190508181036000830152613cb381613c77565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d16602683612c7c565b9150613d2182613cba565b604082019050919050565b60006020820190508181036000830152613d4581613d09565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613da8603283612c7c565b9150613db382613d4c565b604082019050919050565b60006020820190508181036000830152613dd781613d9b565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000613e3a602683612c7c565b9150613e4582613dde565b604082019050919050565b60006020820190508181036000830152613e6981613e2d565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ecc602583612c7c565b9150613ed782613e70565b604082019050919050565b60006020820190508181036000830152613efb81613ebf565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000613f5e602a83612c7c565b9150613f6982613f02565b604082019050919050565b60006020820190508181036000830152613f8d81613f51565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000613ff0602f83612c7c565b9150613ffb82613f94565b604082019050919050565b6000602082019050818103600083015261401f81613fe3565b9050919050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614082603183612c7c565b915061408d82614026565b604082019050919050565b600060208201905081810360008301526140b181614075565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006140df826140b8565b6140e981856140c3565b93506140f9818560208601612c8d565b61410281612cc0565b840191505092915050565b60006080820190506141226000830187612dc1565b61412f6020830186612dc1565b61413c6040830185612e57565b818103606083015261414e81846140d4565b905095945050505050565b60008151905061416881612be2565b92915050565b60006020828403121561418457614183612bac565b5b600061419284828501614159565b91505092915050565b60006141a682612d2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141d9576141d861383b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061421e82612d2c565b915061422983612d2c565b925082614239576142386141e4565b5b828204905092915050565b600061424f82612d2c565b915061425a83612d2c565b92508282101561426d5761426c61383b565b5b828203905092915050565b600061428382612d2c565b915061428e83612d2c565b92508261429e5761429d6141e4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614334602183612c7c565b915061433f826142d8565b604082019050919050565b6000602082019050818103600083015261436381614327565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b60006143c6602883612c7c565b91506143d18261436a565b604082019050919050565b600060208201905081810360008301526143f5816143b9565b905091905056fea26469706673582212209bb884f6e287faab5be77bac33aa70b736bdc6cfd036b5a83a6dbcd55febe92b64736f6c63430008080033
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80637d55094d11610102578063c1dffe3211610095578063dc33e68111610064578063dc33e6811461068b578063e61e9025146106c8578063e985e9c5146106f1578063f2fde38b1461072e576101d8565b8063c1dffe32146105cd578063c87b56dd146105f8578063d123973014610635578063d5abeb0114610660576101d8565b8063a035b1fe116100d1578063a035b1fe14610534578063a0712d681461055f578063a22cb4651461057b578063b88d4fde146105a4576101d8565b80637d55094d1461049e5780638da5cb5b146104b557806391b7f5ed146104e057806395d89b4114610509576101d8565b80633ccfd60b1161017a5780636352211e116101495780636352211e146103e25780636c0360eb1461041f57806370a082311461044a578063715018a614610487576101d8565b80633ccfd60b1461033c57806342842e0e146103535780634f6ccce71461037c57806355f804b3146103b9576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806318160ddd146102ab57806323b872dd146102d65780632f745c59146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612c0e565b610757565b6040516102119190612c56565b60405180910390f35b34801561022657600080fd5b5061022f6108a1565b60405161023c9190612d0a565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612d62565b610933565b6040516102799190612dd0565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612e17565b6109b8565b005b3480156102b757600080fd5b506102c0610ad1565b6040516102cd9190612e66565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612e81565b610ada565b005b34801561030b57600080fd5b5061032660048036038101906103219190612e17565b610aea565b6040516103339190612e66565b60405180910390f35b34801561034857600080fd5b50610351610cdc565b005b34801561035f57600080fd5b5061037a60048036038101906103759190612e81565b610e07565b005b34801561038857600080fd5b506103a3600480360381019061039e9190612d62565b610e27565b6040516103b09190612e66565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190612f39565b610e7a565b005b3480156103ee57600080fd5b5061040960048036038101906104049190612d62565b610f0c565b6040516104169190612dd0565b60405180910390f35b34801561042b57600080fd5b50610434610f22565b6040516104419190612d0a565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190612f86565b610fb0565b60405161047e9190612e66565b60405180910390f35b34801561049357600080fd5b5061049c611099565b005b3480156104aa57600080fd5b506104b3611121565b005b3480156104c157600080fd5b506104ca6111c9565b6040516104d79190612dd0565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190612d62565b6111f3565b005b34801561051557600080fd5b5061051e611279565b60405161052b9190612d0a565b60405180910390f35b34801561054057600080fd5b5061054961130b565b6040516105569190612e66565b60405180910390f35b61057960048036038101906105749190612d62565b611311565b005b34801561058757600080fd5b506105a2600480360381019061059d9190612fdf565b611476565b005b3480156105b057600080fd5b506105cb60048036038101906105c6919061314f565b6115f7565b005b3480156105d957600080fd5b506105e2611653565b6040516105ef9190612e66565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a9190612d62565b611659565b60405161062c9190612d0a565b60405180910390f35b34801561064157600080fd5b5061064a611701565b6040516106579190612c56565b60405180910390f35b34801561066c57600080fd5b50610675611714565b6040516106829190612e66565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190612f86565b61171a565b6040516106bf9190612e66565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea91906131d2565b61172c565b005b3480156106fd57600080fd5b5061071860048036038101906107139190613212565b611818565b6040516107259190612c56565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190612f86565b6118ac565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061088a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061089a5750610899826119a4565b5b9050919050565b6060600180546108b090613281565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90613281565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b5050505050905090565b600061093e82611a0e565b61097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097490613325565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c382610f0c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b906133b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a53611a1b565b73ffffffffffffffffffffffffffffffffffffffff161480610a825750610a8181610a7c611a1b565b611818565b5b610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890613449565b60405180910390fd5b610acc838383611a23565b505050565b60008054905090565b610ae5838383611ad5565b505050565b6000610af583610fb0565b8210610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d906134db565b60405180910390fd5b6000610b40610ad1565b905060008060005b83811015610c9a576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c3a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8c5786841415610c83578195505050505050610cd6565b83806001019450505b508080600101915050610b48565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd9061356d565b60405180910390fd5b92915050565b610ce4611a1b565b73ffffffffffffffffffffffffffffffffffffffff16610d026111c9565b73ffffffffffffffffffffffffffffffffffffffff1614610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f906135d9565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610d7e9061362a565b60006040518083038185875af1925050503d8060008114610dbb576040519150601f19603f3d011682016040523d82523d6000602084013e610dc0565b606091505b5050905080610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb9061368b565b60405180910390fd5b50565b610e22838383604051806020016040528060008152506115f7565b505050565b6000610e31610ad1565b8210610e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e699061371d565b60405180910390fd5b819050919050565b610e82611a1b565b73ffffffffffffffffffffffffffffffffffffffff16610ea06111c9565b73ffffffffffffffffffffffffffffffffffffffff1614610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed906135d9565b60405180910390fd5b818160089190610f07929190612ac5565b505050565b6000610f1782612015565b600001519050919050565b60088054610f2f90613281565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5b90613281565b8015610fa85780601f10610f7d57610100808354040283529160200191610fa8565b820191906000526020600020905b815481529060010190602001808311610f8b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611021576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611018906137af565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6110a1611a1b565b73ffffffffffffffffffffffffffffffffffffffff166110bf6111c9565b73ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c906135d9565b60405180910390fd5b61111f60006121af565b565b611129611a1b565b73ffffffffffffffffffffffffffffffffffffffff166111476111c9565b73ffffffffffffffffffffffffffffffffffffffff161461119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906135d9565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111fb611a1b565b73ffffffffffffffffffffffffffffffffffffffff166112196111c9565b73ffffffffffffffffffffffffffffffffffffffff161461126f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611266906135d9565b60405180910390fd5b8060098190555050565b60606002805461128890613281565b80601f01602080910402602001604051908101604052809291908181526020018280546112b490613281565b80156113015780601f106112d657610100808354040283529160200191611301565b820191906000526020600020905b8154815290600101906020018083116112e457829003601f168201915b5050505050905090565b60095481565b600c60009054906101000a900460ff16611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113579061381b565b60405180910390fd5b6001600a5461136f919061386a565b81611378610ad1565b611382919061386a565b106113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b99061390c565b60405180910390fd5b600954816113d0919061392c565b3414611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906139d2565b60405180910390fd5b600b548161141e33612275565b611428919061386a565b1115611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613a3e565b60405180910390fd5b611473338261235e565b50565b61147e611a1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613aaa565b60405180910390fd5b80600660006114f9611a1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a6611a1b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115eb9190612c56565b60405180910390a35050565b611602848484611ad5565b61160e8484848461237c565b61164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490613b3c565b60405180910390fd5b50505050565b600b5481565b606061166482611a0e565b6116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613bce565b60405180910390fd5b60006116ad612513565b90506000815114156116ce57604051806020016040528060008152506116f9565b806116d8846125a5565b6040516020016116e9929190613c2a565b6040516020818303038152906040525b915050919050565b600c60009054906101000a900460ff1681565b600a5481565b600061172582612275565b9050919050565b611734611a1b565b73ffffffffffffffffffffffffffffffffffffffff166117526111c9565b73ffffffffffffffffffffffffffffffffffffffff16146117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f906135d9565b60405180910390fd5b6001600a546117b7919061386a565b826117c0610ad1565b6117ca919061386a565b1061180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613c9a565b60405180910390fd5b611814818361235e565b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118b4611a1b565b73ffffffffffffffffffffffffffffffffffffffff166118d26111c9565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906135d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90613d2c565b60405180910390fd5b6119a1816121af565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ae082612015565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b07611a1b565b73ffffffffffffffffffffffffffffffffffffffff161480611b635750611b2c611a1b565b73ffffffffffffffffffffffffffffffffffffffff16611b4b84610933565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b7f5750611b7e8260000151611b79611a1b565b611818565b5b905080611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890613dbe565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90613e50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a90613ee2565b60405180910390fd5b611cb08585856001612706565b611cc06000848460000151611a23565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fa557611f0481611a0e565b15611fa45782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461200e858585600161270c565b5050505050565b61201d612b4b565b61202682611a0e565b612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c90613f74565b60405180910390fd5b60008290505b6000811061216e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461215f5780925050506121aa565b5080806001900391505061206b565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190614006565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614098565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b612378828260405180602001604052806000815250612712565b5050565b600061239d8473ffffffffffffffffffffffffffffffffffffffff16612724565b15612506578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c6611a1b565b8786866040518563ffffffff1660e01b81526004016123e8949392919061410d565b602060405180830381600087803b15801561240257600080fd5b505af192505050801561243357506040513d601f19601f82011682018060405250810190612430919061416e565b60015b6124b6573d8060008114612463576040519150601f19603f3d011682016040523d82523d6000602084013e612468565b606091505b506000815114156124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a590613b3c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061250b565b600190505b949350505050565b60606008805461252290613281565b80601f016020809104026020016040519081016040528092919081815260200182805461254e90613281565b801561259b5780601f106125705761010080835404028352916020019161259b565b820191906000526020600020905b81548152906001019060200180831161257e57829003601f168201915b5050505050905090565b606060008214156125ed576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612701565b600082905060005b6000821461261f5780806126089061419b565b915050600a826126189190614213565b91506125f5565b60008167ffffffffffffffff81111561263b5761263a613024565b5b6040519080825280601f01601f19166020018201604052801561266d5781602001600182028036833780820191505090505b5090505b600085146126fa576001826126869190614244565b9150600a856126959190614278565b60306126a1919061386a565b60f81b8183815181106126b7576126b66142a9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126f39190614213565b9450612671565b8093505050505b919050565b50505050565b50505050565b61271f8383836001612747565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b49061434a565b60405180910390fd5b6000841415612801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f8906143dc565b60405180910390fd5b61280e6000868387612706565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612aa857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612a9357612a53600088848861237c565b612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990613b3c565b60405180910390fd5b5b818060010192505080806001019150506129dc565b508060008190555050612abe600086838761270c565b5050505050565b828054612ad190613281565b90600052602060002090601f016020900481019282612af35760008555612b3a565b82601f10612b0c57803560ff1916838001178555612b3a565b82800160010185558215612b3a579182015b82811115612b39578235825591602001919060010190612b1e565b5b509050612b479190612b85565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612b9e576000816000905550600101612b86565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612beb81612bb6565b8114612bf657600080fd5b50565b600081359050612c0881612be2565b92915050565b600060208284031215612c2457612c23612bac565b5b6000612c3284828501612bf9565b91505092915050565b60008115159050919050565b612c5081612c3b565b82525050565b6000602082019050612c6b6000830184612c47565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cab578082015181840152602081019050612c90565b83811115612cba576000848401525b50505050565b6000601f19601f8301169050919050565b6000612cdc82612c71565b612ce68185612c7c565b9350612cf6818560208601612c8d565b612cff81612cc0565b840191505092915050565b60006020820190508181036000830152612d248184612cd1565b905092915050565b6000819050919050565b612d3f81612d2c565b8114612d4a57600080fd5b50565b600081359050612d5c81612d36565b92915050565b600060208284031215612d7857612d77612bac565b5b6000612d8684828501612d4d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dba82612d8f565b9050919050565b612dca81612daf565b82525050565b6000602082019050612de56000830184612dc1565b92915050565b612df481612daf565b8114612dff57600080fd5b50565b600081359050612e1181612deb565b92915050565b60008060408385031215612e2e57612e2d612bac565b5b6000612e3c85828601612e02565b9250506020612e4d85828601612d4d565b9150509250929050565b612e6081612d2c565b82525050565b6000602082019050612e7b6000830184612e57565b92915050565b600080600060608486031215612e9a57612e99612bac565b5b6000612ea886828701612e02565b9350506020612eb986828701612e02565b9250506040612eca86828701612d4d565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112612ef957612ef8612ed4565b5b8235905067ffffffffffffffff811115612f1657612f15612ed9565b5b602083019150836001820283011115612f3257612f31612ede565b5b9250929050565b60008060208385031215612f5057612f4f612bac565b5b600083013567ffffffffffffffff811115612f6e57612f6d612bb1565b5b612f7a85828601612ee3565b92509250509250929050565b600060208284031215612f9c57612f9b612bac565b5b6000612faa84828501612e02565b91505092915050565b612fbc81612c3b565b8114612fc757600080fd5b50565b600081359050612fd981612fb3565b92915050565b60008060408385031215612ff657612ff5612bac565b5b600061300485828601612e02565b925050602061301585828601612fca565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61305c82612cc0565b810181811067ffffffffffffffff8211171561307b5761307a613024565b5b80604052505050565b600061308e612ba2565b905061309a8282613053565b919050565b600067ffffffffffffffff8211156130ba576130b9613024565b5b6130c382612cc0565b9050602081019050919050565b82818337600083830152505050565b60006130f26130ed8461309f565b613084565b90508281526020810184848401111561310e5761310d61301f565b5b6131198482856130d0565b509392505050565b600082601f83011261313657613135612ed4565b5b81356131468482602086016130df565b91505092915050565b6000806000806080858703121561316957613168612bac565b5b600061317787828801612e02565b945050602061318887828801612e02565b935050604061319987828801612d4d565b925050606085013567ffffffffffffffff8111156131ba576131b9612bb1565b5b6131c687828801613121565b91505092959194509250565b600080604083850312156131e9576131e8612bac565b5b60006131f785828601612d4d565b925050602061320885828601612e02565b9150509250929050565b6000806040838503121561322957613228612bac565b5b600061323785828601612e02565b925050602061324885828601612e02565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061329957607f821691505b602082108114156132ad576132ac613252565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b600061330f602d83612c7c565b915061331a826132b3565b604082019050919050565b6000602082019050818103600083015261333e81613302565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006133a1602283612c7c565b91506133ac82613345565b604082019050919050565b600060208201905081810360008301526133d081613394565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613433603983612c7c565b915061343e826133d7565b604082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006134c5602283612c7c565b91506134d082613469565b604082019050919050565b600060208201905081810360008301526134f4816134b8565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613557602e83612c7c565b9150613562826134fb565b604082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135c3602083612c7c565b91506135ce8261358d565b602082019050919050565b600060208201905081810360008301526135f2816135b6565b9050919050565b600081905092915050565b50565b60006136146000836135f9565b915061361f82613604565b600082019050919050565b600061363582613607565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613675601083612c7c565b91506136808261363f565b602082019050919050565b600060208201905081810360008301526136a481613668565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613707602383612c7c565b9150613712826136ab565b604082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613799602b83612c7c565b91506137a48261373d565b604082019050919050565b600060208201905081810360008301526137c88161378c565b9050919050565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b6000613805601683612c7c565b9150613810826137cf565b602082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387582612d2c565b915061388083612d2c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138b5576138b461383b565b5b828201905092915050565b7f4e6f206d6f7265205061737320617661696c61626c6500000000000000000000600082015250565b60006138f6601683612c7c565b9150613901826138c0565b602082019050919050565b60006020820190508181036000830152613925816138e9565b9050919050565b600061393782612d2c565b915061394283612d2c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561397b5761397a61383b565b5b828202905092915050565b7f506c656173652073656e642074686520657861637420616d6f756e7400000000600082015250565b60006139bc601c83612c7c565b91506139c782613986565b602082019050919050565b600060208201905081810360008301526139eb816139af565b9050919050565b7f6d6178206d696e742032207065722077616c6c65740000000000000000000000600082015250565b6000613a28601583612c7c565b9150613a33826139f2565b602082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613a94601a83612c7c565b9150613a9f82613a5e565b602082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613b26603383612c7c565b9150613b3182613aca565b604082019050919050565b60006020820190508181036000830152613b5581613b19565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613bb8602f83612c7c565b9150613bc382613b5c565b604082019050919050565b60006020820190508181036000830152613be781613bab565b9050919050565b600081905092915050565b6000613c0482612c71565b613c0e8185613bee565b9350613c1e818560208601612c8d565b80840191505092915050565b6000613c368285613bf9565b9150613c428284613bf9565b91508190509392505050565b7f4d696e7420616d6f756e74206578636565647320737570706c79000000000000600082015250565b6000613c84601a83612c7c565b9150613c8f82613c4e565b602082019050919050565b60006020820190508181036000830152613cb381613c77565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d16602683612c7c565b9150613d2182613cba565b604082019050919050565b60006020820190508181036000830152613d4581613d09565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613da8603283612c7c565b9150613db382613d4c565b604082019050919050565b60006020820190508181036000830152613dd781613d9b565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000613e3a602683612c7c565b9150613e4582613dde565b604082019050919050565b60006020820190508181036000830152613e6981613e2d565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ecc602583612c7c565b9150613ed782613e70565b604082019050919050565b60006020820190508181036000830152613efb81613ebf565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000613f5e602a83612c7c565b9150613f6982613f02565b604082019050919050565b60006020820190508181036000830152613f8d81613f51565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000613ff0602f83612c7c565b9150613ffb82613f94565b604082019050919050565b6000602082019050818103600083015261401f81613fe3565b9050919050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614082603183612c7c565b915061408d82614026565b604082019050919050565b600060208201905081810360008301526140b181614075565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006140df826140b8565b6140e981856140c3565b93506140f9818560208601612c8d565b61410281612cc0565b840191505092915050565b60006080820190506141226000830187612dc1565b61412f6020830186612dc1565b61413c6040830185612e57565b818103606083015261414e81846140d4565b905095945050505050565b60008151905061416881612be2565b92915050565b60006020828403121561418457614183612bac565b5b600061419284828501614159565b91505092915050565b60006141a682612d2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141d9576141d861383b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061421e82612d2c565b915061422983612d2c565b925082614239576142386141e4565b5b828204905092915050565b600061424f82612d2c565b915061425a83612d2c565b92508282101561426d5761426c61383b565b5b828203905092915050565b600061428382612d2c565b915061428e83612d2c565b92508261429e5761429d6141e4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614334602183612c7c565b915061433f826142d8565b604082019050919050565b6000602082019050818103600083015261436381614327565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b60006143c6602883612c7c565b91506143d18261436a565b604082019050919050565b600060208201905081810360008301526143f5816143b9565b905091905056fea26469706673582212209bb884f6e287faab5be77bac33aa70b736bdc6cfd036b5a83a6dbcd55febe92b64736f6c63430008080033
Deployed Bytecode Sourcemap
40399:1557:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27259:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29145:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30707:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30228:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25516:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31583:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26180:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41567:163;;;;;;;;;;;;;:::i;:::-;;31824:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25693:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41377:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28954:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40449:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27695:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4753:103;;;;;;;;;;;;;:::i;:::-;;41286:85;;;;;;;;;;;;;:::i;:::-;;4102:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41479:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29314:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40475:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40672:400;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30993:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32080:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40549:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29489:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40585:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40515:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41736:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41078:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31352:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5011:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27259:372;27361:4;27413:25;27398:40;;;:11;:40;;;;:105;;;;27470:33;27455:48;;;:11;:48;;;;27398:105;:172;;;;27535:35;27520:50;;;:11;:50;;;;27398:172;:225;;;;27587:36;27611:11;27587:23;:36::i;:::-;27398:225;27378:245;;27259:372;;;:::o;29145:100::-;29199:13;29232:5;29225:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29145:100;:::o;30707:214::-;30775:7;30803:16;30811:7;30803;:16::i;:::-;30795:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30889:15;:24;30905:7;30889:24;;;;;;;;;;;;;;;;;;;;;30882:31;;30707:214;;;:::o;30228:413::-;30301:13;30317:24;30333:7;30317:15;:24::i;:::-;30301:40;;30366:5;30360:11;;:2;:11;;;;30352:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30461:5;30445:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30470:37;30487:5;30494:12;:10;:12::i;:::-;30470:16;:37::i;:::-;30445:62;30423:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;30605:28;30614:2;30618:7;30627:5;30605:8;:28::i;:::-;30290:351;30228:413;;:::o;25516:100::-;25569:7;25596:12;;25589:19;;25516:100;:::o;31583:170::-;31717:28;31727:4;31733:2;31737:7;31717:9;:28::i;:::-;31583:170;;;:::o;26180:1007::-;26269:7;26305:16;26315:5;26305:9;:16::i;:::-;26297:5;:24;26289:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26371:22;26396:13;:11;:13::i;:::-;26371:38;;26420:19;26450:25;26639:9;26634:466;26654:14;26650:1;:18;26634:466;;;26694:31;26728:11;:14;26740:1;26728:14;;;;;;;;;;;26694:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26791:1;26765:28;;:9;:14;;;:28;;;26761:111;;26838:9;:14;;;26818:34;;26761:111;26915:5;26894:26;;:17;:26;;;26890:195;;;26964:5;26949:11;:20;26945:85;;;27005:1;26998:8;;;;;;;;;26945:85;27052:13;;;;;;;26890:195;26675:425;26670:3;;;;;;;26634:466;;;;27123:56;;;;;;;;;;:::i;:::-;;;;;;;;26180:1007;;;;;:::o;41567:163::-;4333:12;:10;:12::i;:::-;4322:23;;:7;:5;:7::i;:::-;:23;;;4314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41614:12:::1;41632:10;:15;;41655:21;41632:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41613:68;;;41696:7;41688:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;41606:124;41567:163::o:0;31824:185::-;31962:39;31979:4;31985:2;31989:7;31962:39;;;;;;;;;;;;:16;:39::i;:::-;31824:185;;;:::o;25693:187::-;25760:7;25796:13;:11;:13::i;:::-;25788:5;:21;25780:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;25867:5;25860:12;;25693:187;;;:::o;41377:96::-;4333:12;:10;:12::i;:::-;4322:23;;:7;:5;:7::i;:::-;:23;;;4314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41459:8:::1;;41449:7;:18;;;;;;;:::i;:::-;;41377:96:::0;;:::o;28954:124::-;29018:7;29045:20;29057:7;29045:11;:20::i;:::-;:25;;;29038:32;;28954:124;;;:::o;40449:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27695:221::-;27759:7;27804:1;27787:19;;:5;:19;;;;27779:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27880:12;:19;27893:5;27880:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27872:36;;27865:43;;27695:221;;;:::o;4753:103::-;4333:12;:10;:12::i;:::-;4322:23;;:7;:5;:7::i;:::-;:23;;;4314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4818:30:::1;4845:1;4818:18;:30::i;:::-;4753:103::o:0;41286:85::-;4333:12;:10;:12::i;:::-;4322:23;;:7;:5;:7::i;:::-;:23;;;4314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41354:11:::1;;;;;;;;;;;41353:12;41339:11;;:26;;;;;;;;;;;;;;;;;;41286:85::o:0;4102:87::-;4148:7;4175:6;;;;;;;;;;;4168:13;;4102:87;:::o;41479:82::-;4333:12;:10;:12::i;:::-;4322:23;;:7;:5;:7::i;:::-;:23;;;4314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41549:6:::1;41541:5;:14;;;;41479:82:::0;:::o;29314:104::-;29370:13;29403:7;29396:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29314:104;:::o;40475:35::-;;;;:::o;40672:400::-;40738:11;;;;;;;;;;;40730:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;40828:1;40816:9;;:13;;;;:::i;:::-;40807:6;40791:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:38;40783:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40893:5;;40884:6;:14;;;;:::i;:::-;40871:9;:27;40863:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40984:14;;40974:6;40946:25;40960:10;40946:13;:25::i;:::-;:34;;;;:::i;:::-;:52;;40938:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;41037:29;41047:10;41059:6;41037:9;:29::i;:::-;40672:400;:::o;30993:288::-;31100:12;:10;:12::i;:::-;31088:24;;:8;:24;;;;31080:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31201:8;31156:18;:32;31175:12;:10;:12::i;:::-;31156:32;;;;;;;;;;;;;;;:42;31189:8;31156:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31254:8;31225:48;;31240:12;:10;:12::i;:::-;31225:48;;;31264:8;31225:48;;;;;;:::i;:::-;;;;;;;;30993:288;;:::o;32080:355::-;32239:28;32249:4;32255:2;32259:7;32239:9;:28::i;:::-;32300:48;32323:4;32329:2;32333:7;32342:5;32300:22;:48::i;:::-;32278:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;32080:355;;;;:::o;40549:31::-;;;;:::o;29489:335::-;29562:13;29596:16;29604:7;29596;:16::i;:::-;29588:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29677:21;29701:10;:8;:10::i;:::-;29677:34;;29754:1;29735:7;29729:21;:26;;:87;;;;;;;;;;;;;;;;;29782:7;29791:18;:7;:16;:18::i;:::-;29765:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29729:87;29722:94;;;29489:335;;;:::o;40585:23::-;;;;;;;;;;;;;:::o;40515:29::-;;;;:::o;41736:107::-;41794:7;41817:20;41831:5;41817:13;:20::i;:::-;41810:27;;41736:107;;;:::o;41078:202::-;4333:12;:10;:12::i;:::-;4322:23;;:7;:5;:7::i;:::-;:23;;;4314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41208:1:::1;41196:9;;:13;;;;:::i;:::-;41187:6;41171:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:38;41163:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41249:25;41259:6;41267;41249:9;:25::i;:::-;41078:202:::0;;:::o;31352:164::-;31449:4;31473:18;:25;31492:5;31473:25;;;;;;;;;;;;;;;:35;31499:8;31473:35;;;;;;;;;;;;;;;;;;;;;;;;;31466:42;;31352:164;;;;:::o;5011:201::-;4333:12;:10;:12::i;:::-;4322:23;;:7;:5;:7::i;:::-;:23;;;4314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5120:1:::1;5100:22;;:8;:22;;;;5092:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5176:28;5195:8;5176:18;:28::i;:::-;5011:201:::0;:::o;16872:157::-;16957:4;16996:25;16981:40;;;:11;:40;;;;16974:47;;16872:157;;;:::o;32690:111::-;32747:4;32781:12;;32771:7;:22;32764:29;;32690:111;;;:::o;2830:98::-;2883:7;2910:10;2903:17;;2830:98;:::o;37610:196::-;37752:2;37725:15;:24;37741:7;37725:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37790:7;37786:2;37770:28;;37779:5;37770:28;;;;;;;;;;;;37610:196;;;:::o;35490:2002::-;35605:35;35643:20;35655:7;35643:11;:20::i;:::-;35605:58;;35676:22;35718:13;:18;;;35702:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;35777:12;:10;:12::i;:::-;35753:36;;:20;35765:7;35753:11;:20::i;:::-;:36;;;35702:87;:154;;;;35806:50;35823:13;:18;;;35843:12;:10;:12::i;:::-;35806:16;:50::i;:::-;35702:154;35676:181;;35878:17;35870:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;35993:4;35971:26;;:13;:18;;;:26;;;35963:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;36073:1;36059:16;;:2;:16;;;;36051:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36130:43;36152:4;36158:2;36162:7;36171:1;36130:21;:43::i;:::-;36238:49;36255:1;36259:7;36268:13;:18;;;36238:8;:49::i;:::-;36613:1;36583:12;:18;36596:4;36583:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36657:1;36629:12;:16;36642:2;36629:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36703:2;36675:11;:20;36687:7;36675:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;36765:15;36720:11;:20;36732:7;36720:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;37033:19;37065:1;37055:7;:11;37033:33;;37126:1;37085:43;;:11;:24;37097:11;37085:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;37081:295;;;37153:20;37161:11;37153:7;:20::i;:::-;37149:212;;;37230:13;:18;;;37198:11;:24;37210:11;37198:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;37313:13;:28;;;37271:11;:24;37283:11;37271:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;37149:212;37081:295;36558:829;37423:7;37419:2;37404:27;;37413:4;37404:27;;;;;;;;;;;;37442:42;37463:4;37469:2;37473:7;37482:1;37442:20;:42::i;:::-;35594:1898;;35490:2002;;;:::o;28355:537::-;28416:21;;:::i;:::-;28458:16;28466:7;28458;:16::i;:::-;28450:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28564:12;28579:7;28564:22;;28559:245;28596:1;28588:4;:9;28559:245;;28626:31;28660:11;:17;28672:4;28660:17;;;;;;;;;;;28626:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28726:1;28700:28;;:9;:14;;;:28;;;28696:93;;28760:9;28753:16;;;;;;28696:93;28607:197;28599:6;;;;;;;;28559:245;;;;28827:57;;;;;;;;;;:::i;:::-;;;;;;;;28355:537;;;;:::o;5372:191::-;5446:16;5465:6;;;;;;;;;;;5446:25;;5491:8;5482:6;;:17;;;;;;;;;;;;;;;;;;5546:8;5515:40;;5536:8;5515:40;;;;;;;;;;;;5435:128;5372:191;:::o;27924:229::-;27985:7;28030:1;28013:19;;:5;:19;;;;28005:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28112:12;:19;28125:5;28112:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28104:41;;28097:48;;27924:229;;;:::o;32809:104::-;32878:27;32888:2;32892:8;32878:27;;;;;;;;;;;;:9;:27::i;:::-;32809:104;;:::o;38371:804::-;38526:4;38547:15;:2;:13;;;:15::i;:::-;38543:625;;;38599:2;38583:36;;;38620:12;:10;:12::i;:::-;38634:4;38640:7;38649:5;38583:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38579:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38846:1;38829:6;:13;:18;38825:273;;;38872:61;;;;;;;;;;:::i;:::-;;;;;;;;38825:273;39048:6;39042:13;39033:6;39029:2;39025:15;39018:38;38579:534;38716:45;;;38706:55;;;:6;:55;;;;38699:62;;;;;38543:625;39152:4;39145:11;;38371:804;;;;;;;:::o;41849:102::-;41909:13;41938:7;41931:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41849:102;:::o;396:723::-;452:13;682:1;673:5;:10;669:53;;;700:10;;;;;;;;;;;;;;;;;;;;;669:53;732:12;747:5;732:20;;763:14;788:78;803:1;795:4;:9;788:78;;821:8;;;;;:::i;:::-;;;;852:2;844:10;;;;;:::i;:::-;;;788:78;;;876:19;908:6;898:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;876:39;;926:154;942:1;933:5;:10;926:154;;970:1;960:11;;;;;:::i;:::-;;;1037:2;1029:5;:10;;;;:::i;:::-;1016:2;:24;;;;:::i;:::-;1003:39;;986:6;993;986:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1066:2;1057:11;;;;;:::i;:::-;;;926:154;;;1104:6;1090:21;;;;;396:723;;;;:::o;39663:159::-;;;;;:::o;40234:158::-;;;;;:::o;33276:163::-;33399:32;33405:2;33409:8;33419:5;33426:4;33399:5;:32::i;:::-;33276:163;;;:::o;6799:326::-;6859:4;7116:1;7094:7;:19;;;:23;7087:30;;6799:326;;;:::o;33698:1538::-;33837:20;33860:12;;33837:35;;33905:1;33891:16;;:2;:16;;;;33883:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33976:1;33964:8;:13;;33956:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34035:61;34065:1;34069:2;34073:12;34087:8;34035:21;:61::i;:::-;34410:8;34374:12;:16;34387:2;34374:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34475:8;34434:12;:16;34447:2;34434:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34534:2;34501:11;:25;34513:12;34501:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;34601:15;34551:11;:25;34563:12;34551:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;34634:20;34657:12;34634:35;;34691:9;34686:415;34706:8;34702:1;:12;34686:415;;;34770:12;34766:2;34745:38;;34762:1;34745:38;;;;;;;;;;;;34806:4;34802:249;;;34869:59;34900:1;34904:2;34908:12;34922:5;34869:22;:59::i;:::-;34835:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;34802:249;35071:14;;;;;;;34716:3;;;;;;;34686:415;;;;35132:12;35117;:27;;;;34349:807;35168:60;35197:1;35201:2;35205:12;35219:8;35168:20;:60::i;:::-;33826:1410;33698:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:117;6270:1;6267;6260:12;6298:553;6356:8;6366:6;6416:3;6409:4;6401:6;6397:17;6393:27;6383:122;;6424:79;;:::i;:::-;6383:122;6537:6;6524:20;6514:30;;6567:18;6559:6;6556:30;6553:117;;;6589:79;;:::i;:::-;6553:117;6703:4;6695:6;6691:17;6679:29;;6757:3;6749:4;6741:6;6737:17;6727:8;6723:32;6720:41;6717:128;;;6764:79;;:::i;:::-;6717:128;6298:553;;;;;:::o;6857:529::-;6928:6;6936;6985:2;6973:9;6964:7;6960:23;6956:32;6953:119;;;6991:79;;:::i;:::-;6953:119;7139:1;7128:9;7124:17;7111:31;7169:18;7161:6;7158:30;7155:117;;;7191:79;;:::i;:::-;7155:117;7304:65;7361:7;7352:6;7341:9;7337:22;7304:65;:::i;:::-;7286:83;;;;7082:297;6857:529;;;;;:::o;7392:329::-;7451:6;7500:2;7488:9;7479:7;7475:23;7471:32;7468:119;;;7506:79;;:::i;:::-;7468:119;7626:1;7651:53;7696:7;7687:6;7676:9;7672:22;7651:53;:::i;:::-;7641:63;;7597:117;7392:329;;;;:::o;7727:116::-;7797:21;7812:5;7797:21;:::i;:::-;7790:5;7787:32;7777:60;;7833:1;7830;7823:12;7777:60;7727:116;:::o;7849:133::-;7892:5;7930:6;7917:20;7908:29;;7946:30;7970:5;7946:30;:::i;:::-;7849:133;;;;:::o;7988:468::-;8053:6;8061;8110:2;8098:9;8089:7;8085:23;8081:32;8078:119;;;8116:79;;:::i;:::-;8078:119;8236:1;8261:53;8306:7;8297:6;8286:9;8282:22;8261:53;:::i;:::-;8251:63;;8207:117;8363:2;8389:50;8431:7;8422:6;8411:9;8407:22;8389:50;:::i;:::-;8379:60;;8334:115;7988:468;;;;;:::o;8462:117::-;8571:1;8568;8561:12;8585:180;8633:77;8630:1;8623:88;8730:4;8727:1;8720:15;8754:4;8751:1;8744:15;8771:281;8854:27;8876:4;8854:27;:::i;:::-;8846:6;8842:40;8984:6;8972:10;8969:22;8948:18;8936:10;8933:34;8930:62;8927:88;;;8995:18;;:::i;:::-;8927:88;9035:10;9031:2;9024:22;8814:238;8771:281;;:::o;9058:129::-;9092:6;9119:20;;:::i;:::-;9109:30;;9148:33;9176:4;9168:6;9148:33;:::i;:::-;9058:129;;;:::o;9193:307::-;9254:4;9344:18;9336:6;9333:30;9330:56;;;9366:18;;:::i;:::-;9330:56;9404:29;9426:6;9404:29;:::i;:::-;9396:37;;9488:4;9482;9478:15;9470:23;;9193:307;;;:::o;9506:154::-;9590:6;9585:3;9580;9567:30;9652:1;9643:6;9638:3;9634:16;9627:27;9506:154;;;:::o;9666:410::-;9743:5;9768:65;9784:48;9825:6;9784:48;:::i;:::-;9768:65;:::i;:::-;9759:74;;9856:6;9849:5;9842:21;9894:4;9887:5;9883:16;9932:3;9923:6;9918:3;9914:16;9911:25;9908:112;;;9939:79;;:::i;:::-;9908:112;10029:41;10063:6;10058:3;10053;10029:41;:::i;:::-;9749:327;9666:410;;;;;:::o;10095:338::-;10150:5;10199:3;10192:4;10184:6;10180:17;10176:27;10166:122;;10207:79;;:::i;:::-;10166:122;10324:6;10311:20;10349:78;10423:3;10415:6;10408:4;10400:6;10396:17;10349:78;:::i;:::-;10340:87;;10156:277;10095:338;;;;:::o;10439:943::-;10534:6;10542;10550;10558;10607:3;10595:9;10586:7;10582:23;10578:33;10575:120;;;10614:79;;:::i;:::-;10575:120;10734:1;10759:53;10804:7;10795:6;10784:9;10780:22;10759:53;:::i;:::-;10749:63;;10705:117;10861:2;10887:53;10932:7;10923:6;10912:9;10908:22;10887:53;:::i;:::-;10877:63;;10832:118;10989:2;11015:53;11060:7;11051:6;11040:9;11036:22;11015:53;:::i;:::-;11005:63;;10960:118;11145:2;11134:9;11130:18;11117:32;11176:18;11168:6;11165:30;11162:117;;;11198:79;;:::i;:::-;11162:117;11303:62;11357:7;11348:6;11337:9;11333:22;11303:62;:::i;:::-;11293:72;;11088:287;10439:943;;;;;;;:::o;11388:474::-;11456:6;11464;11513:2;11501:9;11492:7;11488:23;11484:32;11481:119;;;11519:79;;:::i;:::-;11481:119;11639:1;11664:53;11709:7;11700:6;11689:9;11685:22;11664:53;:::i;:::-;11654:63;;11610:117;11766:2;11792:53;11837:7;11828:6;11817:9;11813:22;11792:53;:::i;:::-;11782:63;;11737:118;11388:474;;;;;:::o;11868:::-;11936:6;11944;11993:2;11981:9;11972:7;11968:23;11964:32;11961:119;;;11999:79;;:::i;:::-;11961:119;12119:1;12144:53;12189:7;12180:6;12169:9;12165:22;12144:53;:::i;:::-;12134:63;;12090:117;12246:2;12272:53;12317:7;12308:6;12297:9;12293:22;12272:53;:::i;:::-;12262:63;;12217:118;11868:474;;;;;:::o;12348:180::-;12396:77;12393:1;12386:88;12493:4;12490:1;12483:15;12517:4;12514:1;12507:15;12534:320;12578:6;12615:1;12609:4;12605:12;12595:22;;12662:1;12656:4;12652:12;12683:18;12673:81;;12739:4;12731:6;12727:17;12717:27;;12673:81;12801:2;12793:6;12790:14;12770:18;12767:38;12764:84;;;12820:18;;:::i;:::-;12764:84;12585:269;12534:320;;;:::o;12860:232::-;13000:34;12996:1;12988:6;12984:14;12977:58;13069:15;13064:2;13056:6;13052:15;13045:40;12860:232;:::o;13098:366::-;13240:3;13261:67;13325:2;13320:3;13261:67;:::i;:::-;13254:74;;13337:93;13426:3;13337:93;:::i;:::-;13455:2;13450:3;13446:12;13439:19;;13098:366;;;:::o;13470:419::-;13636:4;13674:2;13663:9;13659:18;13651:26;;13723:9;13717:4;13713:20;13709:1;13698:9;13694:17;13687:47;13751:131;13877:4;13751:131;:::i;:::-;13743:139;;13470:419;;;:::o;13895:221::-;14035:34;14031:1;14023:6;14019:14;14012:58;14104:4;14099:2;14091:6;14087:15;14080:29;13895:221;:::o;14122:366::-;14264:3;14285:67;14349:2;14344:3;14285:67;:::i;:::-;14278:74;;14361:93;14450:3;14361:93;:::i;:::-;14479:2;14474:3;14470:12;14463:19;;14122:366;;;:::o;14494:419::-;14660:4;14698:2;14687:9;14683:18;14675:26;;14747:9;14741:4;14737:20;14733:1;14722:9;14718:17;14711:47;14775:131;14901:4;14775:131;:::i;:::-;14767:139;;14494:419;;;:::o;14919:244::-;15059:34;15055:1;15047:6;15043:14;15036:58;15128:27;15123:2;15115:6;15111:15;15104:52;14919:244;:::o;15169:366::-;15311:3;15332:67;15396:2;15391:3;15332:67;:::i;:::-;15325:74;;15408:93;15497:3;15408:93;:::i;:::-;15526:2;15521:3;15517:12;15510:19;;15169:366;;;:::o;15541:419::-;15707:4;15745:2;15734:9;15730:18;15722:26;;15794:9;15788:4;15784:20;15780:1;15769:9;15765:17;15758:47;15822:131;15948:4;15822:131;:::i;:::-;15814:139;;15541:419;;;:::o;15966:221::-;16106:34;16102:1;16094:6;16090:14;16083:58;16175:4;16170:2;16162:6;16158:15;16151:29;15966:221;:::o;16193:366::-;16335:3;16356:67;16420:2;16415:3;16356:67;:::i;:::-;16349:74;;16432:93;16521:3;16432:93;:::i;:::-;16550:2;16545:3;16541:12;16534:19;;16193:366;;;:::o;16565:419::-;16731:4;16769:2;16758:9;16754:18;16746:26;;16818:9;16812:4;16808:20;16804:1;16793:9;16789:17;16782:47;16846:131;16972:4;16846:131;:::i;:::-;16838:139;;16565:419;;;:::o;16990:233::-;17130:34;17126:1;17118:6;17114:14;17107:58;17199:16;17194:2;17186:6;17182:15;17175:41;16990:233;:::o;17229:366::-;17371:3;17392:67;17456:2;17451:3;17392:67;:::i;:::-;17385:74;;17468:93;17557:3;17468:93;:::i;:::-;17586:2;17581:3;17577:12;17570:19;;17229:366;;;:::o;17601:419::-;17767:4;17805:2;17794:9;17790:18;17782:26;;17854:9;17848:4;17844:20;17840:1;17829:9;17825:17;17818:47;17882:131;18008:4;17882:131;:::i;:::-;17874:139;;17601:419;;;:::o;18026:182::-;18166:34;18162:1;18154:6;18150:14;18143:58;18026:182;:::o;18214:366::-;18356:3;18377:67;18441:2;18436:3;18377:67;:::i;:::-;18370:74;;18453:93;18542:3;18453:93;:::i;:::-;18571:2;18566:3;18562:12;18555:19;;18214:366;;;:::o;18586:419::-;18752:4;18790:2;18779:9;18775:18;18767:26;;18839:9;18833:4;18829:20;18825:1;18814:9;18810:17;18803:47;18867:131;18993:4;18867:131;:::i;:::-;18859:139;;18586:419;;;:::o;19011:147::-;19112:11;19149:3;19134:18;;19011:147;;;;:::o;19164:114::-;;:::o;19284:398::-;19443:3;19464:83;19545:1;19540:3;19464:83;:::i;:::-;19457:90;;19556:93;19645:3;19556:93;:::i;:::-;19674:1;19669:3;19665:11;19658:18;;19284:398;;;:::o;19688:379::-;19872:3;19894:147;20037:3;19894:147;:::i;:::-;19887:154;;20058:3;20051:10;;19688:379;;;:::o;20073:166::-;20213:18;20209:1;20201:6;20197:14;20190:42;20073:166;:::o;20245:366::-;20387:3;20408:67;20472:2;20467:3;20408:67;:::i;:::-;20401:74;;20484:93;20573:3;20484:93;:::i;:::-;20602:2;20597:3;20593:12;20586:19;;20245:366;;;:::o;20617:419::-;20783:4;20821:2;20810:9;20806:18;20798:26;;20870:9;20864:4;20860:20;20856:1;20845:9;20841:17;20834:47;20898:131;21024:4;20898:131;:::i;:::-;20890:139;;20617:419;;;:::o;21042:222::-;21182:34;21178:1;21170:6;21166:14;21159:58;21251:5;21246:2;21238:6;21234:15;21227:30;21042:222;:::o;21270:366::-;21412:3;21433:67;21497:2;21492:3;21433:67;:::i;:::-;21426:74;;21509:93;21598:3;21509:93;:::i;:::-;21627:2;21622:3;21618:12;21611:19;;21270:366;;;:::o;21642:419::-;21808:4;21846:2;21835:9;21831:18;21823:26;;21895:9;21889:4;21885:20;21881:1;21870:9;21866:17;21859:47;21923:131;22049:4;21923:131;:::i;:::-;21915:139;;21642:419;;;:::o;22067:230::-;22207:34;22203:1;22195:6;22191:14;22184:58;22276:13;22271:2;22263:6;22259:15;22252:38;22067:230;:::o;22303:366::-;22445:3;22466:67;22530:2;22525:3;22466:67;:::i;:::-;22459:74;;22542:93;22631:3;22542:93;:::i;:::-;22660:2;22655:3;22651:12;22644:19;;22303:366;;;:::o;22675:419::-;22841:4;22879:2;22868:9;22864:18;22856:26;;22928:9;22922:4;22918:20;22914:1;22903:9;22899:17;22892:47;22956:131;23082:4;22956:131;:::i;:::-;22948:139;;22675:419;;;:::o;23100:172::-;23240:24;23236:1;23228:6;23224:14;23217:48;23100:172;:::o;23278:366::-;23420:3;23441:67;23505:2;23500:3;23441:67;:::i;:::-;23434:74;;23517:93;23606:3;23517:93;:::i;:::-;23635:2;23630:3;23626:12;23619:19;;23278:366;;;:::o;23650:419::-;23816:4;23854:2;23843:9;23839:18;23831:26;;23903:9;23897:4;23893:20;23889:1;23878:9;23874:17;23867:47;23931:131;24057:4;23931:131;:::i;:::-;23923:139;;23650:419;;;:::o;24075:180::-;24123:77;24120:1;24113:88;24220:4;24217:1;24210:15;24244:4;24241:1;24234:15;24261:305;24301:3;24320:20;24338:1;24320:20;:::i;:::-;24315:25;;24354:20;24372:1;24354:20;:::i;:::-;24349:25;;24508:1;24440:66;24436:74;24433:1;24430:81;24427:107;;;24514:18;;:::i;:::-;24427:107;24558:1;24555;24551:9;24544:16;;24261:305;;;;:::o;24572:172::-;24712:24;24708:1;24700:6;24696:14;24689:48;24572:172;:::o;24750:366::-;24892:3;24913:67;24977:2;24972:3;24913:67;:::i;:::-;24906:74;;24989:93;25078:3;24989:93;:::i;:::-;25107:2;25102:3;25098:12;25091:19;;24750:366;;;:::o;25122:419::-;25288:4;25326:2;25315:9;25311:18;25303:26;;25375:9;25369:4;25365:20;25361:1;25350:9;25346:17;25339:47;25403:131;25529:4;25403:131;:::i;:::-;25395:139;;25122:419;;;:::o;25547:348::-;25587:7;25610:20;25628:1;25610:20;:::i;:::-;25605:25;;25644:20;25662:1;25644:20;:::i;:::-;25639:25;;25832:1;25764:66;25760:74;25757:1;25754:81;25749:1;25742:9;25735:17;25731:105;25728:131;;;25839:18;;:::i;:::-;25728:131;25887:1;25884;25880:9;25869:20;;25547:348;;;;:::o;25901:178::-;26041:30;26037:1;26029:6;26025:14;26018:54;25901:178;:::o;26085:366::-;26227:3;26248:67;26312:2;26307:3;26248:67;:::i;:::-;26241:74;;26324:93;26413:3;26324:93;:::i;:::-;26442:2;26437:3;26433:12;26426:19;;26085:366;;;:::o;26457:419::-;26623:4;26661:2;26650:9;26646:18;26638:26;;26710:9;26704:4;26700:20;26696:1;26685:9;26681:17;26674:47;26738:131;26864:4;26738:131;:::i;:::-;26730:139;;26457:419;;;:::o;26882:171::-;27022:23;27018:1;27010:6;27006:14;26999:47;26882:171;:::o;27059:366::-;27201:3;27222:67;27286:2;27281:3;27222:67;:::i;:::-;27215:74;;27298:93;27387:3;27298:93;:::i;:::-;27416:2;27411:3;27407:12;27400:19;;27059:366;;;:::o;27431:419::-;27597:4;27635:2;27624:9;27620:18;27612:26;;27684:9;27678:4;27674:20;27670:1;27659:9;27655:17;27648:47;27712:131;27838:4;27712:131;:::i;:::-;27704:139;;27431:419;;;:::o;27856:176::-;27996:28;27992:1;27984:6;27980:14;27973:52;27856:176;:::o;28038:366::-;28180:3;28201:67;28265:2;28260:3;28201:67;:::i;:::-;28194:74;;28277:93;28366:3;28277:93;:::i;:::-;28395:2;28390:3;28386:12;28379:19;;28038:366;;;:::o;28410:419::-;28576:4;28614:2;28603:9;28599:18;28591:26;;28663:9;28657:4;28653:20;28649:1;28638:9;28634:17;28627:47;28691:131;28817:4;28691:131;:::i;:::-;28683:139;;28410:419;;;:::o;28835:238::-;28975:34;28971:1;28963:6;28959:14;28952:58;29044:21;29039:2;29031:6;29027:15;29020:46;28835:238;:::o;29079:366::-;29221:3;29242:67;29306:2;29301:3;29242:67;:::i;:::-;29235:74;;29318:93;29407:3;29318:93;:::i;:::-;29436:2;29431:3;29427:12;29420:19;;29079:366;;;:::o;29451:419::-;29617:4;29655:2;29644:9;29640:18;29632:26;;29704:9;29698:4;29694:20;29690:1;29679:9;29675:17;29668:47;29732:131;29858:4;29732:131;:::i;:::-;29724:139;;29451:419;;;:::o;29876:234::-;30016:34;30012:1;30004:6;30000:14;29993:58;30085:17;30080:2;30072:6;30068:15;30061:42;29876:234;:::o;30116:366::-;30258:3;30279:67;30343:2;30338:3;30279:67;:::i;:::-;30272:74;;30355:93;30444:3;30355:93;:::i;:::-;30473:2;30468:3;30464:12;30457:19;;30116:366;;;:::o;30488:419::-;30654:4;30692:2;30681:9;30677:18;30669:26;;30741:9;30735:4;30731:20;30727:1;30716:9;30712:17;30705:47;30769:131;30895:4;30769:131;:::i;:::-;30761:139;;30488:419;;;:::o;30913:148::-;31015:11;31052:3;31037:18;;30913:148;;;;:::o;31067:377::-;31173:3;31201:39;31234:5;31201:39;:::i;:::-;31256:89;31338:6;31333:3;31256:89;:::i;:::-;31249:96;;31354:52;31399:6;31394:3;31387:4;31380:5;31376:16;31354:52;:::i;:::-;31431:6;31426:3;31422:16;31415:23;;31177:267;31067:377;;;;:::o;31450:435::-;31630:3;31652:95;31743:3;31734:6;31652:95;:::i;:::-;31645:102;;31764:95;31855:3;31846:6;31764:95;:::i;:::-;31757:102;;31876:3;31869:10;;31450:435;;;;;:::o;31891:176::-;32031:28;32027:1;32019:6;32015:14;32008:52;31891:176;:::o;32073:366::-;32215:3;32236:67;32300:2;32295:3;32236:67;:::i;:::-;32229:74;;32312:93;32401:3;32312:93;:::i;:::-;32430:2;32425:3;32421:12;32414:19;;32073:366;;;:::o;32445:419::-;32611:4;32649:2;32638:9;32634:18;32626:26;;32698:9;32692:4;32688:20;32684:1;32673:9;32669:17;32662:47;32726:131;32852:4;32726:131;:::i;:::-;32718:139;;32445:419;;;:::o;32870:225::-;33010:34;33006:1;32998:6;32994:14;32987:58;33079:8;33074:2;33066:6;33062:15;33055:33;32870:225;:::o;33101:366::-;33243:3;33264:67;33328:2;33323:3;33264:67;:::i;:::-;33257:74;;33340:93;33429:3;33340:93;:::i;:::-;33458:2;33453:3;33449:12;33442:19;;33101:366;;;:::o;33473:419::-;33639:4;33677:2;33666:9;33662:18;33654:26;;33726:9;33720:4;33716:20;33712:1;33701:9;33697:17;33690:47;33754:131;33880:4;33754:131;:::i;:::-;33746:139;;33473:419;;;:::o;33898:237::-;34038:34;34034:1;34026:6;34022:14;34015:58;34107:20;34102:2;34094:6;34090:15;34083:45;33898:237;:::o;34141:366::-;34283:3;34304:67;34368:2;34363:3;34304:67;:::i;:::-;34297:74;;34380:93;34469:3;34380:93;:::i;:::-;34498:2;34493:3;34489:12;34482:19;;34141:366;;;:::o;34513:419::-;34679:4;34717:2;34706:9;34702:18;34694:26;;34766:9;34760:4;34756:20;34752:1;34741:9;34737:17;34730:47;34794:131;34920:4;34794:131;:::i;:::-;34786:139;;34513:419;;;:::o;34938:225::-;35078:34;35074:1;35066:6;35062:14;35055:58;35147:8;35142:2;35134:6;35130:15;35123:33;34938:225;:::o;35169:366::-;35311:3;35332:67;35396:2;35391:3;35332:67;:::i;:::-;35325:74;;35408:93;35497:3;35408:93;:::i;:::-;35526:2;35521:3;35517:12;35510:19;;35169:366;;;:::o;35541:419::-;35707:4;35745:2;35734:9;35730:18;35722:26;;35794:9;35788:4;35784:20;35780:1;35769:9;35765:17;35758:47;35822:131;35948:4;35822:131;:::i;:::-;35814:139;;35541:419;;;:::o;35966:224::-;36106:34;36102:1;36094:6;36090:14;36083:58;36175:7;36170:2;36162:6;36158:15;36151:32;35966:224;:::o;36196:366::-;36338:3;36359:67;36423:2;36418:3;36359:67;:::i;:::-;36352:74;;36435:93;36524:3;36435:93;:::i;:::-;36553:2;36548:3;36544:12;36537:19;;36196:366;;;:::o;36568:419::-;36734:4;36772:2;36761:9;36757:18;36749:26;;36821:9;36815:4;36811:20;36807:1;36796:9;36792:17;36785:47;36849:131;36975:4;36849:131;:::i;:::-;36841:139;;36568:419;;;:::o;36993:229::-;37133:34;37129:1;37121:6;37117:14;37110:58;37202:12;37197:2;37189:6;37185:15;37178:37;36993:229;:::o;37228:366::-;37370:3;37391:67;37455:2;37450:3;37391:67;:::i;:::-;37384:74;;37467:93;37556:3;37467:93;:::i;:::-;37585:2;37580:3;37576:12;37569:19;;37228:366;;;:::o;37600:419::-;37766:4;37804:2;37793:9;37789:18;37781:26;;37853:9;37847:4;37843:20;37839:1;37828:9;37824:17;37817:47;37881:131;38007:4;37881:131;:::i;:::-;37873:139;;37600:419;;;:::o;38025:234::-;38165:34;38161:1;38153:6;38149:14;38142:58;38234:17;38229:2;38221:6;38217:15;38210:42;38025:234;:::o;38265:366::-;38407:3;38428:67;38492:2;38487:3;38428:67;:::i;:::-;38421:74;;38504:93;38593:3;38504:93;:::i;:::-;38622:2;38617:3;38613:12;38606:19;;38265:366;;;:::o;38637:419::-;38803:4;38841:2;38830:9;38826:18;38818:26;;38890:9;38884:4;38880:20;38876:1;38865:9;38861:17;38854:47;38918:131;39044:4;38918:131;:::i;:::-;38910:139;;38637:419;;;:::o;39062:236::-;39202:34;39198:1;39190:6;39186:14;39179:58;39271:19;39266:2;39258:6;39254:15;39247:44;39062:236;:::o;39304:366::-;39446:3;39467:67;39531:2;39526:3;39467:67;:::i;:::-;39460:74;;39543:93;39632:3;39543:93;:::i;:::-;39661:2;39656:3;39652:12;39645:19;;39304:366;;;:::o;39676:419::-;39842:4;39880:2;39869:9;39865:18;39857:26;;39929:9;39923:4;39919:20;39915:1;39904:9;39900:17;39893:47;39957:131;40083:4;39957:131;:::i;:::-;39949:139;;39676:419;;;:::o;40101:98::-;40152:6;40186:5;40180:12;40170:22;;40101:98;;;:::o;40205:168::-;40288:11;40322:6;40317:3;40310:19;40362:4;40357:3;40353:14;40338:29;;40205:168;;;;:::o;40379:360::-;40465:3;40493:38;40525:5;40493:38;:::i;:::-;40547:70;40610:6;40605:3;40547:70;:::i;:::-;40540:77;;40626:52;40671:6;40666:3;40659:4;40652:5;40648:16;40626:52;:::i;:::-;40703:29;40725:6;40703:29;:::i;:::-;40698:3;40694:39;40687:46;;40469:270;40379:360;;;;:::o;40745:640::-;40940:4;40978:3;40967:9;40963:19;40955:27;;40992:71;41060:1;41049:9;41045:17;41036:6;40992:71;:::i;:::-;41073:72;41141:2;41130:9;41126:18;41117:6;41073:72;:::i;:::-;41155;41223:2;41212:9;41208:18;41199:6;41155:72;:::i;:::-;41274:9;41268:4;41264:20;41259:2;41248:9;41244:18;41237:48;41302:76;41373:4;41364:6;41302:76;:::i;:::-;41294:84;;40745:640;;;;;;;:::o;41391:141::-;41447:5;41478:6;41472:13;41463:22;;41494:32;41520:5;41494:32;:::i;:::-;41391:141;;;;:::o;41538:349::-;41607:6;41656:2;41644:9;41635:7;41631:23;41627:32;41624:119;;;41662:79;;:::i;:::-;41624:119;41782:1;41807:63;41862:7;41853:6;41842:9;41838:22;41807:63;:::i;:::-;41797:73;;41753:127;41538:349;;;;:::o;41893:233::-;41932:3;41955:24;41973:5;41955:24;:::i;:::-;41946:33;;42001:66;41994:5;41991:77;41988:103;;;42071:18;;:::i;:::-;41988:103;42118:1;42111:5;42107:13;42100:20;;41893:233;;;:::o;42132:180::-;42180:77;42177:1;42170:88;42277:4;42274:1;42267:15;42301:4;42298:1;42291:15;42318:185;42358:1;42375:20;42393:1;42375:20;:::i;:::-;42370:25;;42409:20;42427:1;42409:20;:::i;:::-;42404:25;;42448:1;42438:35;;42453:18;;:::i;:::-;42438:35;42495:1;42492;42488:9;42483:14;;42318:185;;;;:::o;42509:191::-;42549:4;42569:20;42587:1;42569:20;:::i;:::-;42564:25;;42603:20;42621:1;42603:20;:::i;:::-;42598:25;;42642:1;42639;42636:8;42633:34;;;42647:18;;:::i;:::-;42633:34;42692:1;42689;42685:9;42677:17;;42509:191;;;;:::o;42706:176::-;42738:1;42755:20;42773:1;42755:20;:::i;:::-;42750:25;;42789:20;42807:1;42789:20;:::i;:::-;42784:25;;42828:1;42818:35;;42833:18;;:::i;:::-;42818:35;42874:1;42871;42867:9;42862:14;;42706:176;;;;:::o;42888:180::-;42936:77;42933:1;42926:88;43033:4;43030:1;43023:15;43057:4;43054:1;43047:15;43074:220;43214:34;43210:1;43202:6;43198:14;43191:58;43283:3;43278:2;43270:6;43266:15;43259:28;43074:220;:::o;43300:366::-;43442:3;43463:67;43527:2;43522:3;43463:67;:::i;:::-;43456:74;;43539:93;43628:3;43539:93;:::i;:::-;43657:2;43652:3;43648:12;43641:19;;43300:366;;;:::o;43672:419::-;43838:4;43876:2;43865:9;43861:18;43853:26;;43925:9;43919:4;43915:20;43911:1;43900:9;43896:17;43889:47;43953:131;44079:4;43953:131;:::i;:::-;43945:139;;43672:419;;;:::o;44097:227::-;44237:34;44233:1;44225:6;44221:14;44214:58;44306:10;44301:2;44293:6;44289:15;44282:35;44097:227;:::o;44330:366::-;44472:3;44493:67;44557:2;44552:3;44493:67;:::i;:::-;44486:74;;44569:93;44658:3;44569:93;:::i;:::-;44687:2;44682:3;44678:12;44671:19;;44330:366;;;:::o;44702:419::-;44868:4;44906:2;44895:9;44891:18;44883:26;;44955:9;44949:4;44945:20;44941:1;44930:9;44926:17;44919:47;44983:131;45109:4;44983:131;:::i;:::-;44975:139;;44702:419;;;:::o
Swarm Source
ipfs://9bb884f6e287faab5be77bac33aa70b736bdc6cfd036b5a83a6dbcd55febe92b
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.