ERC-721
Overview
Max Total Supply
6,666 PT
Holders
1,866
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 PTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PeacefulToadz
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-14 */ //*--- 8888888b. 8888888888 d8888 .d8888b. 8888888888 8888888888 888 888 888 88888888888 .d88888b. d8888 8888888b. 8888888888P ---*// //*--- 888 Y88b 888 d88888 d88P Y88b 888 888 888 888 888 888 d88P" "Y88b d88888 888 "Y88b d88P ---*// //*--- 888 888 888 d88P888 888 888 888 888 888 888 888 888 888 888 d88P888 888 888 d88P ---*// //*--- 888 d88P 8888888 d88P 888 888 8888888 8888888 888 888 888 888 888 888 d88P 888 888 888 d88P ---*// //*--- 8888888P" 888 d88P 888 888 888 888 888 888 888 888 888 888 d88P 888 888 888 d88P ---*// //*--- 888 888 d88P 888 888 888 888 888 888 888 888 888 888 888 d88P 888 888 888 d88P ---*// //*--- 888 888 d8888888888 Y88b d88P 888 888 Y88b. .d88P 888 888 Y88b. .d88P d8888888888 888 .d88P d88P ---*// //*--- 888 8888888888 d88P 888 "Y8888P" 8888888888 888 "Y88888P" 88888888 888 "Y88888P" d88P 888 8888888P" d8888888888 ---*// //*--- Website: https://www.peacefultoadz.com/ ---*// //*--- Twitter: https://twitter.com/peacefultoadz ---*// // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // 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 v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // 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/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: peaceful.sol pragma solidity 0.8.11; contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } abstract contract Toadz { function balanceOf(address ownew) view public virtual returns (uint); } abstract contract Groupies { function balanceOf(address ownew) view public virtual returns (uint); } contract PeacefulToadz is ERC721, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; //constants uint public holdersaleCost = 0.066 ether; uint public presaleCost = 0.066 ether; uint public publicsaleCost = 0.066 ether; uint public maxSupply = 8888; uint private holderMaxMintAmount = 3; uint private publicMaxMintAmount = 25; uint private reservedOwnerMint=100; //variable s bool public paused = false; bool public baseURILocked = false; bool public publicsale = false; bool public holdersale = false; bool public presale = false; address public proxyRegistryAddress; bytes32 private merkleRoot; string public contractURL; string public baseURI; string public baseExtension = ".json"; address public token1address; address public token2address; address public coldwallet; //Arrays mapping(address => uint) publicSaleMinted; mapping(address => uint) holderSaleRemaining; mapping(address => bool) holderSaleUsed; mapping(address => uint) whitelistRemaining; mapping(address => bool) whitelistUsed; //Actions event BaseTokenURIChanged(string baseURI); event ContractURIChanged(string contractURL); constructor(string memory _name, string memory _symbol,string memory _initBaseURI,string memory _initcontractURI,address _initProxyAddress,bytes32 _merkleRoot,address _token1address, address _token2address,address _coldwallet) ERC721(_name, _symbol) { setcontractURI(_initcontractURI); setBaseURI(_initBaseURI); setMerkleRoot(_merkleRoot); _tokenIdCounter.increment(); token1address=_token1address; token2address=_token2address; proxyRegistryAddress=_initProxyAddress; coldwallet=_coldwallet; mint_function(reservedOwnerMint); } // internal function mint_function(uint _mintAmount) internal { require(!paused,"Contract is paused"); uint current = _tokenIdCounter.current(); require(current + _mintAmount <= maxSupply,"You're exceeding maximum tokens"); for (uint i = 1; i <= _mintAmount; i++) { mintInternal(); } } function mintInternal() internal { uint tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _mint(msg.sender, tokenId); } // public function totalSupply() public view returns (uint) { return _tokenIdCounter.current() - 1; } function holderSaleMint(uint _mintAmount) external payable{ require(holdersale, "Holder minting is not active"); require(msg.value >= holdersaleCost * _mintAmount,"You have unsufficient fund!"); Groupies token1 = Groupies(token1address); Toadz token2 = Toadz(token2address); uint token1Balance = token1.balanceOf(msg.sender); uint token2Balance = token2.balanceOf(msg.sender); require(!(token1Balance==0 && token2Balance==0),"You Are Not Holder"); if (!holderSaleUsed[msg.sender]){ holderSaleUsed[msg.sender]=true; holderSaleRemaining[msg.sender]=holderMaxMintAmount; } require(holderSaleRemaining[msg.sender]-_mintAmount>=0,"You are exceed maximum mint amount"); holderSaleRemaining[msg.sender] -= _mintAmount; mint_function(_mintAmount); } function preSaleMint(uint _mintAmount, uint _MaxMintAmount,bool _earlyInvest, bytes32[] memory proof) external payable { require(presale, "Pre-sale minting is not active"); require(_earlyInvest || msg.value >= presaleCost * _mintAmount,"You have unsufficient fund!"); require( MerkleProof.verify(proof,merkleRoot, keccak256(abi.encodePacked(msg.sender,_MaxMintAmount,_earlyInvest))),"You're not in whitelist!"); if (!whitelistUsed[msg.sender]){ whitelistUsed[msg.sender]=true; whitelistRemaining[msg.sender]=_MaxMintAmount; } require(whitelistRemaining[msg.sender]-_mintAmount>=0,"You're exceeding registered amount"); whitelistRemaining[msg.sender]-=_mintAmount; mint_function(_mintAmount); } function publicSaleMint(uint _mintAmount) external payable { require(publicsale, "Public sale not started yet"); require(_mintAmount <= 5,"You can only 5 mint per TX"); require(publicMaxMintAmount >= publicSaleMinted[msg.sender]+_mintAmount,"You are exceed maximum mint amount"); require(msg.value >= publicsaleCost * _mintAmount,"You have unsufficient fund!"); publicSaleMinted[msg.sender] += _mintAmount; mint_function(_mintAmount); } function tokenURI(uint tokenId) public view virtual override returns (string memory) { require( _exists(tokenId),"ERC721Metadata: URI query for nonexistent token" ); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, Strings.toString(tokenId), baseExtension)) : ""; } function contractURI() public view returns (string memory) { return contractURL; } //ADMIN FUNCTIONS function lockContract() public onlyOwner(){ baseURILocked=true; } function ownershiptransfer(address _newOwner) public onlyOwner(){ transferOwnership(_newOwner); } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner() { merkleRoot = _merkleRoot; } function setBaseURI(string memory _newBaseURI) public onlyOwner() { require(!baseURILocked,"We Can't change baseURI"); baseURI = _newBaseURI; emit BaseTokenURIChanged(_newBaseURI); } function setBaseExtension(string memory _newBaseExtension) public onlyOwner() { baseExtension = _newBaseExtension; } function setcontractURI(string memory _newcontractURI) public onlyOwner() { contractURL = _newcontractURI; emit ContractURIChanged(_newcontractURI); } function toogleSection(uint section) public onlyOwner() { require (section<4,"Please select section"); if (section==0) paused=!paused; if (section==1) presale=!presale; if (section==2) publicsale=!publicsale; if (section==3) holdersale=!holdersale; } function changePrice(uint section, uint price) public onlyOwner() { require (section<4,"Please select section"); if (section==0){ publicsaleCost=price; presaleCost=price; holdersaleCost=price; } if (section==1) publicsaleCost=price; if (section==2) presaleCost=price; if (section==3) holdersaleCost=price; } function setAddress(uint section, address _address) public onlyOwner() { require (section<4,"Please select section"); if (section==0){ token1address=_address; } if (section==1){ token2address=_address; } if (section==2){ proxyRegistryAddress=_address; } if (section==3){ coldwallet=_address; } } function withdraw() public payable { require(coldwallet != address(0), "coldwallet is the zero address"); require(payable(coldwallet).send(address(this).balance)); } function tokensOfOwner(address _owner, uint startId, uint endId) external view returns(uint[] memory ) { uint tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint[](0); } else { uint[] memory result = new uint[](tokenCount); uint index = 0; for (uint tokenId = startId; tokenId < endId; tokenId++) { if (index == tokenCount) break; if (ownerOf(tokenId) == _owner) { result[index] = tokenId; index++; } } return result; } } // Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. function isApprovedForAll(address owner, address operator) override public view returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initcontractURI","type":"string"},{"internalType":"address","name":"_initProxyAddress","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"address","name":"_token1address","type":"address"},{"internalType":"address","name":"_token2address","type":"address"},{"internalType":"address","name":"_coldwallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseTokenURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"contractURL","type":"string"}],"name":"ContractURIChanged","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURILocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"section","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coldwallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURL","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":"uint256","name":"_mintAmount","type":"uint256"}],"name":"holderSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"holdersale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdersaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"ownershiptransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"uint256","name":"_MaxMintAmount","type":"uint256"},{"internalType":"bool","name":"_earlyInvest","type":"bool"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicsale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicsaleCost","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":"uint256","name":"section","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"setAddress","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newcontractURI","type":"string"}],"name":"setcontractURI","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":"token1address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token2address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"uint256","name":"endId","type":"uint256"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"section","type":"uint256"}],"name":"toogleSection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405266ea7aa67b2d000060085566ea7aa67b2d000060095566ea7aa67b2d0000600a556122b8600b556003600c556019600d556064600e556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff0219169083151502179055506000600f60036101000a81548160ff0219169083151502179055506000600f60046101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601390805190602001906200010e92919062000a73565b503480156200011c57600080fd5b5060405162006d2838038062006d28833981810160405281019062000142919062000d60565b888881600090805190602001906200015c92919062000a73565b5080600190805190602001906200017592919062000a73565b505050620001986200018c6200030860201b60201c565b6200031060201b60201c565b620001a986620003d660201b60201c565b620001ba87620004ba60201b60201c565b620001cb84620005f160201b60201c565b620001e260076200068a60201b62002b491760201c565b82601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600f60056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002f9600e54620006a060201b60201c565b50505050505050505062001331565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003e66200030860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200040c6200079d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000465576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200045c9062000f1c565b60405180910390fd5b80601190805190602001906200047d92919062000a73565b507fd5ee5eaf65263bab5d569890714d123ad48a9e54409d35e71d374f3dd300bba081604051620004af919062000f8a565b60405180910390a150565b620004ca6200030860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004f06200079d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000549576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005409062000f1c565b60405180910390fd5b600f60019054906101000a900460ff16156200059c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005939062000ffe565b60405180910390fd5b8060129080519060200190620005b492919062000a73565b507f228a3ac0675af69daeaaa5b8d369fe2faae665e7f340f0b78ccbb84e17b4f69481604051620005e6919062000f8a565b60405180910390a150565b620006016200030860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006276200079d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000680576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006779062000f1c565b60405180910390fd5b8060108190555050565b6001816000016000828254019250508190555050565b600f60009054906101000a900460ff1615620006f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ea9062001070565b60405180910390fd5b60006200070c6007620007c760201b62002b5f1760201c565b9050600b5482826200071f9190620010cb565b111562000763576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075a9062001178565b60405180910390fd5b6000600190505b828111620007985762000782620007d560201b60201c565b80806200078f906200119a565b9150506200076a565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081600001549050919050565b6000620007ee6007620007c760201b62002b5f1760201c565b90506200080760076200068a60201b62002b491760201c565b6200081933826200081c60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200088f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008869062001238565b60405180910390fd5b620008a08162000a0260201b60201c565b15620008e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008da90620012aa565b60405180910390fd5b620008f76000838362000a6e60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009499190620010cb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b82805462000a8190620012fb565b90600052602060002090601f01602090048101928262000aa5576000855562000af1565b82601f1062000ac057805160ff191683800117855562000af1565b8280016001018555821562000af1579182015b8281111562000af057825182559160200191906001019062000ad3565b5b50905062000b00919062000b04565b5090565b5b8082111562000b1f57600081600090555060010162000b05565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000b8c8262000b41565b810181811067ffffffffffffffff8211171562000bae5762000bad62000b52565b5b80604052505050565b600062000bc362000b23565b905062000bd1828262000b81565b919050565b600067ffffffffffffffff82111562000bf45762000bf362000b52565b5b62000bff8262000b41565b9050602081019050919050565b60005b8381101562000c2c57808201518184015260208101905062000c0f565b8381111562000c3c576000848401525b50505050565b600062000c5962000c538462000bd6565b62000bb7565b90508281526020810184848401111562000c785762000c7762000b3c565b5b62000c8584828562000c0c565b509392505050565b600082601f83011262000ca55762000ca462000b37565b5b815162000cb784826020860162000c42565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ced8262000cc0565b9050919050565b62000cff8162000ce0565b811462000d0b57600080fd5b50565b60008151905062000d1f8162000cf4565b92915050565b6000819050919050565b62000d3a8162000d25565b811462000d4657600080fd5b50565b60008151905062000d5a8162000d2f565b92915050565b60008060008060008060008060006101208a8c03121562000d865762000d8562000b2d565b5b60008a015167ffffffffffffffff81111562000da75762000da662000b32565b5b62000db58c828d0162000c8d565b99505060208a015167ffffffffffffffff81111562000dd95762000dd862000b32565b5b62000de78c828d0162000c8d565b98505060408a015167ffffffffffffffff81111562000e0b5762000e0a62000b32565b5b62000e198c828d0162000c8d565b97505060608a015167ffffffffffffffff81111562000e3d5762000e3c62000b32565b5b62000e4b8c828d0162000c8d565b965050608062000e5e8c828d0162000d0e565b95505060a062000e718c828d0162000d49565b94505060c062000e848c828d0162000d0e565b93505060e062000e978c828d0162000d0e565b92505061010062000eab8c828d0162000d0e565b9150509295985092959850929598565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f0460208362000ebb565b915062000f118262000ecc565b602082019050919050565b6000602082019050818103600083015262000f378162000ef5565b9050919050565b600081519050919050565b600062000f568262000f3e565b62000f62818562000ebb565b935062000f7481856020860162000c0c565b62000f7f8162000b41565b840191505092915050565b6000602082019050818103600083015262000fa6818462000f49565b905092915050565b7f57652043616e2774206368616e67652062617365555249000000000000000000600082015250565b600062000fe660178362000ebb565b915062000ff38262000fae565b602082019050919050565b60006020820190508181036000830152620010198162000fd7565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b60006200105860128362000ebb565b9150620010658262001020565b602082019050919050565b600060208201905081810360008301526200108b8162001049565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010d88262001092565b9150620010e58362001092565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200111d576200111c6200109c565b5b828201905092915050565b7f596f7527726520657863656564696e67206d6178696d756d20746f6b656e7300600082015250565b600062001160601f8362000ebb565b91506200116d8262001128565b602082019050919050565b60006020820190508181036000830152620011938162001151565b9050919050565b6000620011a78262001092565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620011dd57620011dc6200109c565b5b600182019050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200122060208362000ebb565b91506200122d82620011e8565b602082019050919050565b60006020820190508181036000830152620012538162001211565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062001292601c8362000ebb565b91506200129f826200125a565b602082019050919050565b60006020820190508181036000830152620012c58162001283565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200131457607f821691505b602082108114156200132b576200132a620012cc565b5b50919050565b6159e780620013416000396000f3fe6080604052600436106102935760003560e01c80637cb647591161015a578063c6682862116100c1578063e81331761161007a578063e813317614610984578063e8a3d485146109af578063e985e9c5146109da578063efa00ce714610a17578063f2fde38b14610a40578063fdea8e0b14610a6957610293565b8063c668286214610860578063c839fe941461088b578063c87b56dd146108c8578063cd7c032614610905578063d5abeb0114610930578063da3ef23f1461095b57610293565b8063aa2226f511610113578063aa2226f514610782578063ac4ce2c61461079e578063b3ab66b0146107c7578063b3de019c146107e3578063b88d4fde1461080c578063b94805a21461083557610293565b80637cb64759146106845780638da5cb5b146106ad57806392829d74146106d857806395d89b411461070357806396c1d05b1461072e578063a22cb4651461075957610293565b806342842e0e116101fe5780636352211e116101b75780636352211e1461058857806365aeb061146105c55780636c0360eb146105ee57806370a0823114610619578063715018a614610656578063753868e31461066d57610293565b806342842e0e1461048a5780634366df0a146104b3578063452c1b89146104de57806355f804b3146105095780635c975abb146105325780635d148e5c1461055d57610293565b806323b872dd1161025057806323b872dd146103ad5780632812d4a7146103d65780632a23d07d146104015780632a32c2081461042c578063309385dc146104575780633ccfd60b1461048057610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780630d6a72661461036657806318160ddd14610382575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613b0a565b610a94565b6040516102cc9190613b52565b60405180910390f35b3480156102e157600080fd5b506102ea610b76565b6040516102f79190613c06565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190613c5e565b610c08565b6040516103349190613ccc565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613d13565b610c8d565b005b610380600480360381019061037b9190613efd565b610da5565b005b34801561038e57600080fd5b506103976110a3565b6040516103a49190613f8f565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613faa565b6110c0565b005b3480156103e257600080fd5b506103eb611120565b6040516103f89190613ccc565b60405180910390f35b34801561040d57600080fd5b50610416611146565b6040516104239190613f8f565b60405180910390f35b34801561043857600080fd5b5061044161114c565b60405161044e9190613b52565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613ffd565b61115f565b005b6104886111e7565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613faa565b6112db565b005b3480156104bf57600080fd5b506104c86112fb565b6040516104d59190613ccc565b60405180910390f35b3480156104ea57600080fd5b506104f3611321565b6040516105009190613c06565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b91906140df565b6113af565b005b34801561053e57600080fd5b506105476114cc565b6040516105549190613b52565b60405180910390f35b34801561056957600080fd5b506105726114df565b60405161057f9190613b52565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190613c5e565b6114f2565b6040516105bc9190613ccc565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190613c5e565b6115a4565b005b3480156105fa57600080fd5b50610603611736565b6040516106109190613c06565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613ffd565b6117c4565b60405161064d9190613f8f565b60405180910390f35b34801561066257600080fd5b5061066b61187c565b005b34801561067957600080fd5b50610682611904565b005b34801561069057600080fd5b506106ab60048036038101906106a69190614128565b61199d565b005b3480156106b957600080fd5b506106c2611a23565b6040516106cf9190613ccc565b60405180910390f35b3480156106e457600080fd5b506106ed611a4d565b6040516106fa9190613f8f565b60405180910390f35b34801561070f57600080fd5b50610718611a53565b6040516107259190613c06565b60405180910390f35b34801561073a57600080fd5b50610743611ae5565b6040516107509190613ccc565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b9190614155565b611b0b565b005b61079c60048036038101906107979190613c5e565b611b21565b005b3480156107aa57600080fd5b506107c560048036038101906107c09190614195565b611f3e565b005b6107e160048036038101906107dc9190613c5e565b61212d565b005b3480156107ef57600080fd5b5061080a600480360381019061080591906141d5565b612301565b005b34801561081857600080fd5b50610833600480360381019061082e91906142b6565b612416565b005b34801561084157600080fd5b5061084a612478565b6040516108579190613b52565b60405180910390f35b34801561086c57600080fd5b5061087561248b565b6040516108829190613c06565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190614339565b612519565b6040516108bf919061444a565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea9190613c5e565b612679565b6040516108fc9190613c06565b60405180910390f35b34801561091157600080fd5b5061091a612724565b6040516109279190613ccc565b60405180910390f35b34801561093c57600080fd5b5061094561274a565b6040516109529190613f8f565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d91906140df565b612750565b005b34801561099057600080fd5b506109996127e6565b6040516109a69190613f8f565b60405180910390f35b3480156109bb57600080fd5b506109c46127ec565b6040516109d19190613c06565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc919061446c565b61287e565b604051610a0e9190613b52565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906140df565b612971565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613ffd565b612a3e565b005b348015610a7557600080fd5b50610a7e612b36565b604051610a8b9190613b52565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6f5750610b6e82612b6d565b5b9050919050565b606060008054610b85906144db565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb1906144db565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b5050505050905090565b6000610c1382612bd7565b610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c499061457f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c98826114f2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090614611565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d28612c43565b73ffffffffffffffffffffffffffffffffffffffff161480610d575750610d5681610d51612c43565b61287e565b5b610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d906146a3565b60405180910390fd5b610da08383612c4b565b505050565b600f60049054906101000a900460ff16610df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610deb9061470f565b60405180910390fd5b8180610e0d575083600954610e09919061475e565b3410155b610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390614804565b60405180910390fd5b610e8381601054338686604051602001610e68939291906148d5565b60405160208183030381529060405280519060200120612d04565b610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb99061495e565b60405180910390fd5b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fb0576001601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600084601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ffd919061497e565b101561103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103590614a24565b60405180910390fd5b83601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461108d919061497e565b9250508190555061109d84612d1b565b50505050565b600060016110b16007612b5f565b6110bb919061497e565b905090565b6110d16110cb612c43565b82612df7565b611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614ab6565b60405180910390fd5b61111b838383612ed5565b505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b600f60039054906101000a900460ff1681565b611167612c43565b73ffffffffffffffffffffffffffffffffffffffff16611185611a23565b73ffffffffffffffffffffffffffffffffffffffff16146111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290614b22565b60405180910390fd5b6111e481612a3e565b50565b600073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614b8e565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506112d957600080fd5b565b6112f683838360405180602001604052806000815250612416565b505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6011805461132e906144db565b80601f016020809104026020016040519081016040528092919081815260200182805461135a906144db565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b505050505081565b6113b7612c43565b73ffffffffffffffffffffffffffffffffffffffff166113d5611a23565b73ffffffffffffffffffffffffffffffffffffffff161461142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142290614b22565b60405180910390fd5b600f60019054906101000a900460ff161561147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290614bfa565b60405180910390fd5b80601290805190602001906114919291906139fb565b507f228a3ac0675af69daeaaa5b8d369fe2faae665e7f340f0b78ccbb84e17b4f694816040516114c19190613c06565b60405180910390a150565b600f60009054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290614c8c565b60405180910390fd5b80915050919050565b6115ac612c43565b73ffffffffffffffffffffffffffffffffffffffff166115ca611a23565b73ffffffffffffffffffffffffffffffffffffffff1614611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790614b22565b60405180910390fd5b60048110611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90614cf8565b60405180910390fd5b600081141561169757600f60009054906101000a900460ff1615600f60006101000a81548160ff0219169083151502179055505b60018114156116cb57600f60049054906101000a900460ff1615600f60046101000a81548160ff0219169083151502179055505b60028114156116ff57600f60029054906101000a900460ff1615600f60026101000a81548160ff0219169083151502179055505b600381141561173357600f60039054906101000a900460ff1615600f60036101000a81548160ff0219169083151502179055505b50565b60128054611743906144db565b80601f016020809104026020016040519081016040528092919081815260200182805461176f906144db565b80156117bc5780601f10611791576101008083540402835291602001916117bc565b820191906000526020600020905b81548152906001019060200180831161179f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90614d8a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611884612c43565b73ffffffffffffffffffffffffffffffffffffffff166118a2611a23565b73ffffffffffffffffffffffffffffffffffffffff16146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90614b22565b60405180910390fd5b6119026000613131565b565b61190c612c43565b73ffffffffffffffffffffffffffffffffffffffff1661192a611a23565b73ffffffffffffffffffffffffffffffffffffffff1614611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790614b22565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b6119a5612c43565b73ffffffffffffffffffffffffffffffffffffffff166119c3611a23565b73ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090614b22565b60405180910390fd5b8060108190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b606060018054611a62906144db565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e906144db565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b1d611b16612c43565b83836131f7565b5050565b600f60039054906101000a900460ff16611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790614df6565b60405180910390fd5b80600854611b7e919061475e565b341015611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614804565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c499190613ccc565b602060405180830381865afa158015611c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8a9190614e2b565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611cc79190613ccc565b602060405180830381865afa158015611ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d089190614e2b565b9050600082148015611d1a5750600081145b15611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190614ea4565b60405180910390fd5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e4a576001601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c54601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600085601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e97919061497e565b1015611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf90614f36565b60405180910390fd5b84601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f27919061497e565b92505081905550611f3785612d1b565b5050505050565b611f46612c43565b73ffffffffffffffffffffffffffffffffffffffff16611f64611a23565b73ffffffffffffffffffffffffffffffffffffffff1614611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614b22565b60405180910390fd5b60048210611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614cf8565b60405180910390fd5b60008214156120485780601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60018214156120935780601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60028214156120de5780600f60056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60038214156121295780601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b600f60029054906101000a900460ff1661217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614fa2565b60405180910390fd5b60058111156121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b79061500e565b60405180910390fd5b80601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461220b919061502e565b600d54101561224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690614f36565b60405180910390fd5b80600a5461225d919061475e565b34101561229f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229690614804565b60405180910390fd5b80601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122ee919061502e565b925050819055506122fe81612d1b565b50565b612309612c43565b73ffffffffffffffffffffffffffffffffffffffff16612327611a23565b73ffffffffffffffffffffffffffffffffffffffff161461237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614b22565b60405180910390fd5b600482106123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790614cf8565b60405180910390fd5b60008214156123df5780600a8190555080600981905550806008819055505b60018214156123f05780600a819055505b600282141561240157806009819055505b600382141561241257806008819055505b5050565b612427612421612c43565b83612df7565b612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614ab6565b60405180910390fd5b61247284848484613364565b50505050565b600f60029054906101000a900460ff1681565b60138054612498906144db565b80601f01602080910402602001604051908101604052809291908181526020018280546124c4906144db565b80156125115780601f106124e657610100808354040283529160200191612511565b820191906000526020600020905b8154815290600101906020018083116124f457829003601f168201915b505050505081565b60606000612526856117c4565b9050600081141561258357600067ffffffffffffffff81111561254c5761254b613d84565b5b60405190808252806020026020018201604052801561257a5781602001602082028036833780820191505090505b50915050612672565b60008167ffffffffffffffff81111561259f5761259e613d84565b5b6040519080825280602002602001820160405280156125cd5781602001602082028036833780820191505090505b5090506000808690505b8581101561266a57838214156125ec5761266a565b8773ffffffffffffffffffffffffffffffffffffffff1661260c826114f2565b73ffffffffffffffffffffffffffffffffffffffff161415612657578083838151811061263c5761263b615084565b5b6020026020010181815250508180612653906150b3565b9250505b8080612662906150b3565b9150506125d7565b508193505050505b9392505050565b606061268482612bd7565b6126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba9061516e565b60405180910390fd5b6000601280546126d2906144db565b9050116126ee576040518060200160405280600081525061271d565b60126126f9836133c0565b601360405160200161270d9392919061525e565b6040516020818303038152906040525b9050919050565b600f60059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b612758612c43565b73ffffffffffffffffffffffffffffffffffffffff16612776611a23565b73ffffffffffffffffffffffffffffffffffffffff16146127cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c390614b22565b60405180910390fd5b80601390805190602001906127e29291906139fb565b5050565b60085481565b6060601180546127fb906144db565b80601f0160208091040260200160405190810160405280929190818152602001828054612827906144db565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b5050505050905090565b600080600f60059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016128f69190613ccc565b602060405180830381865afa158015612913573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293791906152cd565b73ffffffffffffffffffffffffffffffffffffffff16141561295d57600191505061296b565b6129678484613521565b9150505b92915050565b612979612c43565b73ffffffffffffffffffffffffffffffffffffffff16612997611a23565b73ffffffffffffffffffffffffffffffffffffffff16146129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e490614b22565b60405180910390fd5b8060119080519060200190612a039291906139fb565b507fd5ee5eaf65263bab5d569890714d123ad48a9e54409d35e71d374f3dd300bba081604051612a339190613c06565b60405180910390a150565b612a46612c43565b73ffffffffffffffffffffffffffffffffffffffff16612a64611a23565b73ffffffffffffffffffffffffffffffffffffffff1614612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614b22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b219061536c565b60405180910390fd5b612b3381613131565b50565b600f60049054906101000a900460ff1681565b6001816000016000828254019250508190555050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cbe836114f2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600082612d1185846135b5565b1490509392505050565b600f60009054906101000a900460ff1615612d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d62906153d8565b60405180910390fd5b6000612d776007612b5f565b9050600b548282612d88919061502e565b1115612dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc090615444565b60405180910390fd5b6000600190505b828111612df257612ddf613668565b8080612dea906150b3565b915050612dd0565b505050565b6000612e0282612bd7565b612e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e38906154d6565b60405180910390fd5b6000612e4c836114f2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ebb57508373ffffffffffffffffffffffffffffffffffffffff16612ea384610c08565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ecc5750612ecb818561287e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ef5826114f2565b73ffffffffffffffffffffffffffffffffffffffff1614612f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4290615568565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb2906155fa565b60405180910390fd5b612fc683838361368d565b612fd1600082612c4b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613021919061497e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613078919061502e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325d90615666565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133579190613b52565b60405180910390a3505050565b61336f848484612ed5565b61337b84848484613692565b6133ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b1906156f8565b60405180910390fd5b50505050565b60606000821415613408576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061351c565b600082905060005b6000821461343a578080613423906150b3565b915050600a826134339190615747565b9150613410565b60008167ffffffffffffffff81111561345657613455613d84565b5b6040519080825280601f01601f1916602001820160405280156134885781602001600182028036833780820191505090505b5090505b60008514613515576001826134a1919061497e565b9150600a856134b09190615778565b60306134bc919061502e565b60f81b8183815181106134d2576134d1615084565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561350e9190615747565b945061348c565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008082905060005b845181101561365d5760008582815181106135dc576135db615084565b5b6020026020010151905080831161361d5782816040516020016136009291906157ca565b604051602081830303815290604052805190602001209250613649565b80836040516020016136309291906157ca565b6040516020818303038152906040528051906020012092505b508080613655906150b3565b9150506135be565b508091505092915050565b60006136746007612b5f565b90506136806007612b49565b61368a338261381a565b50565b505050565b60006136b38473ffffffffffffffffffffffffffffffffffffffff166139e8565b1561380d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136dc612c43565b8786866040518563ffffffff1660e01b81526004016136fe949392919061584b565b6020604051808303816000875af192505050801561373a57506040513d601f19601f8201168201806040525081019061373791906158ac565b60015b6137bd573d806000811461376a576040519150601f19603f3d011682016040523d82523d6000602084013e61376f565b606091505b506000815114156137b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ac906156f8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613812565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561388a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388190615925565b60405180910390fd5b61389381612bd7565b156138d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ca90615991565b60405180910390fd5b6138df6000838361368d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461392f919061502e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613a07906144db565b90600052602060002090601f016020900481019282613a295760008555613a70565b82601f10613a4257805160ff1916838001178555613a70565b82800160010185558215613a70579182015b82811115613a6f578251825591602001919060010190613a54565b5b509050613a7d9190613a81565b5090565b5b80821115613a9a576000816000905550600101613a82565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613ae781613ab2565b8114613af257600080fd5b50565b600081359050613b0481613ade565b92915050565b600060208284031215613b2057613b1f613aa8565b5b6000613b2e84828501613af5565b91505092915050565b60008115159050919050565b613b4c81613b37565b82525050565b6000602082019050613b676000830184613b43565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ba7578082015181840152602081019050613b8c565b83811115613bb6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bd882613b6d565b613be28185613b78565b9350613bf2818560208601613b89565b613bfb81613bbc565b840191505092915050565b60006020820190508181036000830152613c208184613bcd565b905092915050565b6000819050919050565b613c3b81613c28565b8114613c4657600080fd5b50565b600081359050613c5881613c32565b92915050565b600060208284031215613c7457613c73613aa8565b5b6000613c8284828501613c49565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cb682613c8b565b9050919050565b613cc681613cab565b82525050565b6000602082019050613ce16000830184613cbd565b92915050565b613cf081613cab565b8114613cfb57600080fd5b50565b600081359050613d0d81613ce7565b92915050565b60008060408385031215613d2a57613d29613aa8565b5b6000613d3885828601613cfe565b9250506020613d4985828601613c49565b9150509250929050565b613d5c81613b37565b8114613d6757600080fd5b50565b600081359050613d7981613d53565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613dbc82613bbc565b810181811067ffffffffffffffff82111715613ddb57613dda613d84565b5b80604052505050565b6000613dee613a9e565b9050613dfa8282613db3565b919050565b600067ffffffffffffffff821115613e1a57613e19613d84565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b613e4381613e30565b8114613e4e57600080fd5b50565b600081359050613e6081613e3a565b92915050565b6000613e79613e7484613dff565b613de4565b90508083825260208201905060208402830185811115613e9c57613e9b613e2b565b5b835b81811015613ec55780613eb18882613e51565b845260208401935050602081019050613e9e565b5050509392505050565b600082601f830112613ee457613ee3613d7f565b5b8135613ef4848260208601613e66565b91505092915050565b60008060008060808587031215613f1757613f16613aa8565b5b6000613f2587828801613c49565b9450506020613f3687828801613c49565b9350506040613f4787828801613d6a565b925050606085013567ffffffffffffffff811115613f6857613f67613aad565b5b613f7487828801613ecf565b91505092959194509250565b613f8981613c28565b82525050565b6000602082019050613fa46000830184613f80565b92915050565b600080600060608486031215613fc357613fc2613aa8565b5b6000613fd186828701613cfe565b9350506020613fe286828701613cfe565b9250506040613ff386828701613c49565b9150509250925092565b60006020828403121561401357614012613aa8565b5b600061402184828501613cfe565b91505092915050565b600080fd5b600067ffffffffffffffff82111561404a57614049613d84565b5b61405382613bbc565b9050602081019050919050565b82818337600083830152505050565b600061408261407d8461402f565b613de4565b90508281526020810184848401111561409e5761409d61402a565b5b6140a9848285614060565b509392505050565b600082601f8301126140c6576140c5613d7f565b5b81356140d684826020860161406f565b91505092915050565b6000602082840312156140f5576140f4613aa8565b5b600082013567ffffffffffffffff81111561411357614112613aad565b5b61411f848285016140b1565b91505092915050565b60006020828403121561413e5761413d613aa8565b5b600061414c84828501613e51565b91505092915050565b6000806040838503121561416c5761416b613aa8565b5b600061417a85828601613cfe565b925050602061418b85828601613d6a565b9150509250929050565b600080604083850312156141ac576141ab613aa8565b5b60006141ba85828601613c49565b92505060206141cb85828601613cfe565b9150509250929050565b600080604083850312156141ec576141eb613aa8565b5b60006141fa85828601613c49565b925050602061420b85828601613c49565b9150509250929050565b600067ffffffffffffffff8211156142305761422f613d84565b5b61423982613bbc565b9050602081019050919050565b600061425961425484614215565b613de4565b9050828152602081018484840111156142755761427461402a565b5b614280848285614060565b509392505050565b600082601f83011261429d5761429c613d7f565b5b81356142ad848260208601614246565b91505092915050565b600080600080608085870312156142d0576142cf613aa8565b5b60006142de87828801613cfe565b94505060206142ef87828801613cfe565b935050604061430087828801613c49565b925050606085013567ffffffffffffffff81111561432157614320613aad565b5b61432d87828801614288565b91505092959194509250565b60008060006060848603121561435257614351613aa8565b5b600061436086828701613cfe565b935050602061437186828701613c49565b925050604061438286828701613c49565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143c181613c28565b82525050565b60006143d383836143b8565b60208301905092915050565b6000602082019050919050565b60006143f78261438c565b6144018185614397565b935061440c836143a8565b8060005b8381101561443d57815161442488826143c7565b975061442f836143df565b925050600181019050614410565b5085935050505092915050565b6000602082019050818103600083015261446481846143ec565b905092915050565b6000806040838503121561448357614482613aa8565b5b600061449185828601613cfe565b92505060206144a285828601613cfe565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144f357607f821691505b60208210811415614507576145066144ac565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614569602c83613b78565b91506145748261450d565b604082019050919050565b600060208201905081810360008301526145988161455c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006145fb602183613b78565b91506146068261459f565b604082019050919050565b6000602082019050818103600083015261462a816145ee565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061468d603883613b78565b915061469882614631565b604082019050919050565b600060208201905081810360008301526146bc81614680565b9050919050565b7f5072652d73616c65206d696e74696e67206973206e6f74206163746976650000600082015250565b60006146f9601e83613b78565b9150614704826146c3565b602082019050919050565b60006020820190508181036000830152614728816146ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061476982613c28565b915061477483613c28565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147ad576147ac61472f565b5b828202905092915050565b7f596f75206861766520756e73756666696369656e742066756e64210000000000600082015250565b60006147ee601b83613b78565b91506147f9826147b8565b602082019050919050565b6000602082019050818103600083015261481d816147e1565b9050919050565b60008160601b9050919050565b600061483c82614824565b9050919050565b600061484e82614831565b9050919050565b61486661486182613cab565b614843565b82525050565b6000819050919050565b61488761488282613c28565b61486c565b82525050565b60008160f81b9050919050565b60006148a58261488d565b9050919050565b60006148b78261489a565b9050919050565b6148cf6148ca82613b37565b6148ac565b82525050565b60006148e18286614855565b6014820191506148f18285614876565b60208201915061490182846148be565b600182019150819050949350505050565b7f596f75277265206e6f7420696e2077686974656c697374210000000000000000600082015250565b6000614948601883613b78565b915061495382614912565b602082019050919050565b600060208201905081810360008301526149778161493b565b9050919050565b600061498982613c28565b915061499483613c28565b9250828210156149a7576149a661472f565b5b828203905092915050565b7f596f7527726520657863656564696e67207265676973746572656420616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a0e602283613b78565b9150614a19826149b2565b604082019050919050565b60006020820190508181036000830152614a3d81614a01565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614aa0603183613b78565b9150614aab82614a44565b604082019050919050565b60006020820190508181036000830152614acf81614a93565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b0c602083613b78565b9150614b1782614ad6565b602082019050919050565b60006020820190508181036000830152614b3b81614aff565b9050919050565b7f636f6c6477616c6c657420697320746865207a65726f20616464726573730000600082015250565b6000614b78601e83613b78565b9150614b8382614b42565b602082019050919050565b60006020820190508181036000830152614ba781614b6b565b9050919050565b7f57652043616e2774206368616e67652062617365555249000000000000000000600082015250565b6000614be4601783613b78565b9150614bef82614bae565b602082019050919050565b60006020820190508181036000830152614c1381614bd7565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614c76602983613b78565b9150614c8182614c1a565b604082019050919050565b60006020820190508181036000830152614ca581614c69565b9050919050565b7f506c656173652073656c6563742073656374696f6e0000000000000000000000600082015250565b6000614ce2601583613b78565b9150614ced82614cac565b602082019050919050565b60006020820190508181036000830152614d1181614cd5565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614d74602a83613b78565b9150614d7f82614d18565b604082019050919050565b60006020820190508181036000830152614da381614d67565b9050919050565b7f486f6c646572206d696e74696e67206973206e6f742061637469766500000000600082015250565b6000614de0601c83613b78565b9150614deb82614daa565b602082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b600081519050614e2581613c32565b92915050565b600060208284031215614e4157614e40613aa8565b5b6000614e4f84828501614e16565b91505092915050565b7f596f7520417265204e6f7420486f6c6465720000000000000000000000000000600082015250565b6000614e8e601283613b78565b9150614e9982614e58565b602082019050919050565b60006020820190508181036000830152614ebd81614e81565b9050919050565b7f596f752061726520657863656564206d6178696d756d206d696e7420616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f20602283613b78565b9150614f2b82614ec4565b604082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f5075626c69632073616c65206e6f742073746172746564207965740000000000600082015250565b6000614f8c601b83613b78565b9150614f9782614f56565b602082019050919050565b60006020820190508181036000830152614fbb81614f7f565b9050919050565b7f596f752063616e206f6e6c792035206d696e7420706572205458000000000000600082015250565b6000614ff8601a83613b78565b915061500382614fc2565b602082019050919050565b6000602082019050818103600083015261502781614feb565b9050919050565b600061503982613c28565b915061504483613c28565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150795761507861472f565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150be82613c28565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150f1576150f061472f565b5b600182019050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615158602f83613b78565b9150615163826150fc565b604082019050919050565b600060208201905081810360008301526151878161514b565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546151bb816144db565b6151c5818661518e565b945060018216600081146151e057600181146151f157615224565b60ff19831686528186019350615224565b6151fa85615199565b60005b8381101561521c578154818901526001820191506020810190506151fd565b838801955050505b50505092915050565b600061523882613b6d565b615242818561518e565b9350615252818560208601613b89565b80840191505092915050565b600061526a82866151ae565b9150615276828561522d565b915061528282846151ae565b9150819050949350505050565b600061529a82613cab565b9050919050565b6152aa8161528f565b81146152b557600080fd5b50565b6000815190506152c7816152a1565b92915050565b6000602082840312156152e3576152e2613aa8565b5b60006152f1848285016152b8565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615356602683613b78565b9150615361826152fa565b604082019050919050565b6000602082019050818103600083015261538581615349565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b60006153c2601283613b78565b91506153cd8261538c565b602082019050919050565b600060208201905081810360008301526153f1816153b5565b9050919050565b7f596f7527726520657863656564696e67206d6178696d756d20746f6b656e7300600082015250565b600061542e601f83613b78565b9150615439826153f8565b602082019050919050565b6000602082019050818103600083015261545d81615421565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006154c0602c83613b78565b91506154cb82615464565b604082019050919050565b600060208201905081810360008301526154ef816154b3565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615552602983613b78565b915061555d826154f6565b604082019050919050565b6000602082019050818103600083015261558181615545565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155e4602483613b78565b91506155ef82615588565b604082019050919050565b60006020820190508181036000830152615613816155d7565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615650601983613b78565b915061565b8261561a565b602082019050919050565b6000602082019050818103600083015261567f81615643565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006156e2603283613b78565b91506156ed82615686565b604082019050919050565b60006020820190508181036000830152615711816156d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061575282613c28565b915061575d83613c28565b92508261576d5761576c615718565b5b828204905092915050565b600061578382613c28565b915061578e83613c28565b92508261579e5761579d615718565b5b828206905092915050565b6000819050919050565b6157c46157bf82613e30565b6157a9565b82525050565b60006157d682856157b3565b6020820191506157e682846157b3565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b600061581d826157f6565b6158278185615801565b9350615837818560208601613b89565b61584081613bbc565b840191505092915050565b60006080820190506158606000830187613cbd565b61586d6020830186613cbd565b61587a6040830185613f80565b818103606083015261588c8184615812565b905095945050505050565b6000815190506158a681613ade565b92915050565b6000602082840312156158c2576158c1613aa8565b5b60006158d084828501615897565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061590f602083613b78565b915061591a826158d9565b602082019050919050565b6000602082019050818103600083015261593e81615902565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061597b601c83613b78565b915061598682615945565b602082019050919050565b600060208201905081810360008301526159aa8161596e565b905091905056fea264697066735822122000703cd3b7dda3ab246be8df088b3bb40876d9efaa1747962ed0a7b87508ba9e64736f6c634300080b00330000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c14c7da975a1293ed1155235fcb63a67f0751b4e08cb8f75077e316ed9b96fcee60000000000000000000000004f89cd0cae1e54d98db6a80150a824a533502eea0000000000000000000000001cb1a5e65610aeff2551a50f76a87a7d3fb649c6000000000000000000000000a51bb06ed626f3df5d8081213d9548ef0636f74e000000000000000000000000000000000000000000000000000000000000000d506561636566756c546f61647a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000250540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d563244525377626f455550736656616f50537945416571696953764d32576e673935364366357652506f514a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f706561636566756c746f61647a2e636f6d2f636f6e74726163742e6a736f6e00000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102935760003560e01c80637cb647591161015a578063c6682862116100c1578063e81331761161007a578063e813317614610984578063e8a3d485146109af578063e985e9c5146109da578063efa00ce714610a17578063f2fde38b14610a40578063fdea8e0b14610a6957610293565b8063c668286214610860578063c839fe941461088b578063c87b56dd146108c8578063cd7c032614610905578063d5abeb0114610930578063da3ef23f1461095b57610293565b8063aa2226f511610113578063aa2226f514610782578063ac4ce2c61461079e578063b3ab66b0146107c7578063b3de019c146107e3578063b88d4fde1461080c578063b94805a21461083557610293565b80637cb64759146106845780638da5cb5b146106ad57806392829d74146106d857806395d89b411461070357806396c1d05b1461072e578063a22cb4651461075957610293565b806342842e0e116101fe5780636352211e116101b75780636352211e1461058857806365aeb061146105c55780636c0360eb146105ee57806370a0823114610619578063715018a614610656578063753868e31461066d57610293565b806342842e0e1461048a5780634366df0a146104b3578063452c1b89146104de57806355f804b3146105095780635c975abb146105325780635d148e5c1461055d57610293565b806323b872dd1161025057806323b872dd146103ad5780632812d4a7146103d65780632a23d07d146104015780632a32c2081461042c578063309385dc146104575780633ccfd60b1461048057610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780630d6a72661461036657806318160ddd14610382575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613b0a565b610a94565b6040516102cc9190613b52565b60405180910390f35b3480156102e157600080fd5b506102ea610b76565b6040516102f79190613c06565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190613c5e565b610c08565b6040516103349190613ccc565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613d13565b610c8d565b005b610380600480360381019061037b9190613efd565b610da5565b005b34801561038e57600080fd5b506103976110a3565b6040516103a49190613f8f565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613faa565b6110c0565b005b3480156103e257600080fd5b506103eb611120565b6040516103f89190613ccc565b60405180910390f35b34801561040d57600080fd5b50610416611146565b6040516104239190613f8f565b60405180910390f35b34801561043857600080fd5b5061044161114c565b60405161044e9190613b52565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613ffd565b61115f565b005b6104886111e7565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613faa565b6112db565b005b3480156104bf57600080fd5b506104c86112fb565b6040516104d59190613ccc565b60405180910390f35b3480156104ea57600080fd5b506104f3611321565b6040516105009190613c06565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b91906140df565b6113af565b005b34801561053e57600080fd5b506105476114cc565b6040516105549190613b52565b60405180910390f35b34801561056957600080fd5b506105726114df565b60405161057f9190613b52565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190613c5e565b6114f2565b6040516105bc9190613ccc565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190613c5e565b6115a4565b005b3480156105fa57600080fd5b50610603611736565b6040516106109190613c06565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613ffd565b6117c4565b60405161064d9190613f8f565b60405180910390f35b34801561066257600080fd5b5061066b61187c565b005b34801561067957600080fd5b50610682611904565b005b34801561069057600080fd5b506106ab60048036038101906106a69190614128565b61199d565b005b3480156106b957600080fd5b506106c2611a23565b6040516106cf9190613ccc565b60405180910390f35b3480156106e457600080fd5b506106ed611a4d565b6040516106fa9190613f8f565b60405180910390f35b34801561070f57600080fd5b50610718611a53565b6040516107259190613c06565b60405180910390f35b34801561073a57600080fd5b50610743611ae5565b6040516107509190613ccc565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b9190614155565b611b0b565b005b61079c60048036038101906107979190613c5e565b611b21565b005b3480156107aa57600080fd5b506107c560048036038101906107c09190614195565b611f3e565b005b6107e160048036038101906107dc9190613c5e565b61212d565b005b3480156107ef57600080fd5b5061080a600480360381019061080591906141d5565b612301565b005b34801561081857600080fd5b50610833600480360381019061082e91906142b6565b612416565b005b34801561084157600080fd5b5061084a612478565b6040516108579190613b52565b60405180910390f35b34801561086c57600080fd5b5061087561248b565b6040516108829190613c06565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190614339565b612519565b6040516108bf919061444a565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea9190613c5e565b612679565b6040516108fc9190613c06565b60405180910390f35b34801561091157600080fd5b5061091a612724565b6040516109279190613ccc565b60405180910390f35b34801561093c57600080fd5b5061094561274a565b6040516109529190613f8f565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d91906140df565b612750565b005b34801561099057600080fd5b506109996127e6565b6040516109a69190613f8f565b60405180910390f35b3480156109bb57600080fd5b506109c46127ec565b6040516109d19190613c06565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc919061446c565b61287e565b604051610a0e9190613b52565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906140df565b612971565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613ffd565b612a3e565b005b348015610a7557600080fd5b50610a7e612b36565b604051610a8b9190613b52565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6f5750610b6e82612b6d565b5b9050919050565b606060008054610b85906144db565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb1906144db565b8015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b5050505050905090565b6000610c1382612bd7565b610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c499061457f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c98826114f2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090614611565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d28612c43565b73ffffffffffffffffffffffffffffffffffffffff161480610d575750610d5681610d51612c43565b61287e565b5b610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d906146a3565b60405180910390fd5b610da08383612c4b565b505050565b600f60049054906101000a900460ff16610df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610deb9061470f565b60405180910390fd5b8180610e0d575083600954610e09919061475e565b3410155b610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390614804565b60405180910390fd5b610e8381601054338686604051602001610e68939291906148d5565b60405160208183030381529060405280519060200120612d04565b610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb99061495e565b60405180910390fd5b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fb0576001601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600084601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ffd919061497e565b101561103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103590614a24565b60405180910390fd5b83601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461108d919061497e565b9250508190555061109d84612d1b565b50505050565b600060016110b16007612b5f565b6110bb919061497e565b905090565b6110d16110cb612c43565b82612df7565b611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614ab6565b60405180910390fd5b61111b838383612ed5565b505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b600f60039054906101000a900460ff1681565b611167612c43565b73ffffffffffffffffffffffffffffffffffffffff16611185611a23565b73ffffffffffffffffffffffffffffffffffffffff16146111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290614b22565b60405180910390fd5b6111e481612a3e565b50565b600073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614b8e565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506112d957600080fd5b565b6112f683838360405180602001604052806000815250612416565b505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6011805461132e906144db565b80601f016020809104026020016040519081016040528092919081815260200182805461135a906144db565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b505050505081565b6113b7612c43565b73ffffffffffffffffffffffffffffffffffffffff166113d5611a23565b73ffffffffffffffffffffffffffffffffffffffff161461142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142290614b22565b60405180910390fd5b600f60019054906101000a900460ff161561147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290614bfa565b60405180910390fd5b80601290805190602001906114919291906139fb565b507f228a3ac0675af69daeaaa5b8d369fe2faae665e7f340f0b78ccbb84e17b4f694816040516114c19190613c06565b60405180910390a150565b600f60009054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290614c8c565b60405180910390fd5b80915050919050565b6115ac612c43565b73ffffffffffffffffffffffffffffffffffffffff166115ca611a23565b73ffffffffffffffffffffffffffffffffffffffff1614611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790614b22565b60405180910390fd5b60048110611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90614cf8565b60405180910390fd5b600081141561169757600f60009054906101000a900460ff1615600f60006101000a81548160ff0219169083151502179055505b60018114156116cb57600f60049054906101000a900460ff1615600f60046101000a81548160ff0219169083151502179055505b60028114156116ff57600f60029054906101000a900460ff1615600f60026101000a81548160ff0219169083151502179055505b600381141561173357600f60039054906101000a900460ff1615600f60036101000a81548160ff0219169083151502179055505b50565b60128054611743906144db565b80601f016020809104026020016040519081016040528092919081815260200182805461176f906144db565b80156117bc5780601f10611791576101008083540402835291602001916117bc565b820191906000526020600020905b81548152906001019060200180831161179f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90614d8a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611884612c43565b73ffffffffffffffffffffffffffffffffffffffff166118a2611a23565b73ffffffffffffffffffffffffffffffffffffffff16146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90614b22565b60405180910390fd5b6119026000613131565b565b61190c612c43565b73ffffffffffffffffffffffffffffffffffffffff1661192a611a23565b73ffffffffffffffffffffffffffffffffffffffff1614611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790614b22565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b6119a5612c43565b73ffffffffffffffffffffffffffffffffffffffff166119c3611a23565b73ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090614b22565b60405180910390fd5b8060108190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b606060018054611a62906144db565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e906144db565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b1d611b16612c43565b83836131f7565b5050565b600f60039054906101000a900460ff16611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790614df6565b60405180910390fd5b80600854611b7e919061475e565b341015611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614804565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c499190613ccc565b602060405180830381865afa158015611c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8a9190614e2b565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611cc79190613ccc565b602060405180830381865afa158015611ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d089190614e2b565b9050600082148015611d1a5750600081145b15611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190614ea4565b60405180910390fd5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e4a576001601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c54601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600085601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e97919061497e565b1015611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf90614f36565b60405180910390fd5b84601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f27919061497e565b92505081905550611f3785612d1b565b5050505050565b611f46612c43565b73ffffffffffffffffffffffffffffffffffffffff16611f64611a23565b73ffffffffffffffffffffffffffffffffffffffff1614611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614b22565b60405180910390fd5b60048210611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614cf8565b60405180910390fd5b60008214156120485780601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60018214156120935780601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60028214156120de5780600f60056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60038214156121295780601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b600f60029054906101000a900460ff1661217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614fa2565b60405180910390fd5b60058111156121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b79061500e565b60405180910390fd5b80601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461220b919061502e565b600d54101561224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690614f36565b60405180910390fd5b80600a5461225d919061475e565b34101561229f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229690614804565b60405180910390fd5b80601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122ee919061502e565b925050819055506122fe81612d1b565b50565b612309612c43565b73ffffffffffffffffffffffffffffffffffffffff16612327611a23565b73ffffffffffffffffffffffffffffffffffffffff161461237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614b22565b60405180910390fd5b600482106123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790614cf8565b60405180910390fd5b60008214156123df5780600a8190555080600981905550806008819055505b60018214156123f05780600a819055505b600282141561240157806009819055505b600382141561241257806008819055505b5050565b612427612421612c43565b83612df7565b612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614ab6565b60405180910390fd5b61247284848484613364565b50505050565b600f60029054906101000a900460ff1681565b60138054612498906144db565b80601f01602080910402602001604051908101604052809291908181526020018280546124c4906144db565b80156125115780601f106124e657610100808354040283529160200191612511565b820191906000526020600020905b8154815290600101906020018083116124f457829003601f168201915b505050505081565b60606000612526856117c4565b9050600081141561258357600067ffffffffffffffff81111561254c5761254b613d84565b5b60405190808252806020026020018201604052801561257a5781602001602082028036833780820191505090505b50915050612672565b60008167ffffffffffffffff81111561259f5761259e613d84565b5b6040519080825280602002602001820160405280156125cd5781602001602082028036833780820191505090505b5090506000808690505b8581101561266a57838214156125ec5761266a565b8773ffffffffffffffffffffffffffffffffffffffff1661260c826114f2565b73ffffffffffffffffffffffffffffffffffffffff161415612657578083838151811061263c5761263b615084565b5b6020026020010181815250508180612653906150b3565b9250505b8080612662906150b3565b9150506125d7565b508193505050505b9392505050565b606061268482612bd7565b6126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba9061516e565b60405180910390fd5b6000601280546126d2906144db565b9050116126ee576040518060200160405280600081525061271d565b60126126f9836133c0565b601360405160200161270d9392919061525e565b6040516020818303038152906040525b9050919050565b600f60059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b612758612c43565b73ffffffffffffffffffffffffffffffffffffffff16612776611a23565b73ffffffffffffffffffffffffffffffffffffffff16146127cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c390614b22565b60405180910390fd5b80601390805190602001906127e29291906139fb565b5050565b60085481565b6060601180546127fb906144db565b80601f0160208091040260200160405190810160405280929190818152602001828054612827906144db565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b5050505050905090565b600080600f60059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016128f69190613ccc565b602060405180830381865afa158015612913573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293791906152cd565b73ffffffffffffffffffffffffffffffffffffffff16141561295d57600191505061296b565b6129678484613521565b9150505b92915050565b612979612c43565b73ffffffffffffffffffffffffffffffffffffffff16612997611a23565b73ffffffffffffffffffffffffffffffffffffffff16146129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e490614b22565b60405180910390fd5b8060119080519060200190612a039291906139fb565b507fd5ee5eaf65263bab5d569890714d123ad48a9e54409d35e71d374f3dd300bba081604051612a339190613c06565b60405180910390a150565b612a46612c43565b73ffffffffffffffffffffffffffffffffffffffff16612a64611a23565b73ffffffffffffffffffffffffffffffffffffffff1614612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614b22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b219061536c565b60405180910390fd5b612b3381613131565b50565b600f60049054906101000a900460ff1681565b6001816000016000828254019250508190555050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cbe836114f2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600082612d1185846135b5565b1490509392505050565b600f60009054906101000a900460ff1615612d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d62906153d8565b60405180910390fd5b6000612d776007612b5f565b9050600b548282612d88919061502e565b1115612dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc090615444565b60405180910390fd5b6000600190505b828111612df257612ddf613668565b8080612dea906150b3565b915050612dd0565b505050565b6000612e0282612bd7565b612e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e38906154d6565b60405180910390fd5b6000612e4c836114f2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ebb57508373ffffffffffffffffffffffffffffffffffffffff16612ea384610c08565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ecc5750612ecb818561287e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ef5826114f2565b73ffffffffffffffffffffffffffffffffffffffff1614612f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4290615568565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb2906155fa565b60405180910390fd5b612fc683838361368d565b612fd1600082612c4b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613021919061497e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613078919061502e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325d90615666565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133579190613b52565b60405180910390a3505050565b61336f848484612ed5565b61337b84848484613692565b6133ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b1906156f8565b60405180910390fd5b50505050565b60606000821415613408576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061351c565b600082905060005b6000821461343a578080613423906150b3565b915050600a826134339190615747565b9150613410565b60008167ffffffffffffffff81111561345657613455613d84565b5b6040519080825280601f01601f1916602001820160405280156134885781602001600182028036833780820191505090505b5090505b60008514613515576001826134a1919061497e565b9150600a856134b09190615778565b60306134bc919061502e565b60f81b8183815181106134d2576134d1615084565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561350e9190615747565b945061348c565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008082905060005b845181101561365d5760008582815181106135dc576135db615084565b5b6020026020010151905080831161361d5782816040516020016136009291906157ca565b604051602081830303815290604052805190602001209250613649565b80836040516020016136309291906157ca565b6040516020818303038152906040528051906020012092505b508080613655906150b3565b9150506135be565b508091505092915050565b60006136746007612b5f565b90506136806007612b49565b61368a338261381a565b50565b505050565b60006136b38473ffffffffffffffffffffffffffffffffffffffff166139e8565b1561380d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136dc612c43565b8786866040518563ffffffff1660e01b81526004016136fe949392919061584b565b6020604051808303816000875af192505050801561373a57506040513d601f19601f8201168201806040525081019061373791906158ac565b60015b6137bd573d806000811461376a576040519150601f19603f3d011682016040523d82523d6000602084013e61376f565b606091505b506000815114156137b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ac906156f8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613812565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561388a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388190615925565b60405180910390fd5b61389381612bd7565b156138d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ca90615991565b60405180910390fd5b6138df6000838361368d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461392f919061502e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613a07906144db565b90600052602060002090601f016020900481019282613a295760008555613a70565b82601f10613a4257805160ff1916838001178555613a70565b82800160010185558215613a70579182015b82811115613a6f578251825591602001919060010190613a54565b5b509050613a7d9190613a81565b5090565b5b80821115613a9a576000816000905550600101613a82565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613ae781613ab2565b8114613af257600080fd5b50565b600081359050613b0481613ade565b92915050565b600060208284031215613b2057613b1f613aa8565b5b6000613b2e84828501613af5565b91505092915050565b60008115159050919050565b613b4c81613b37565b82525050565b6000602082019050613b676000830184613b43565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ba7578082015181840152602081019050613b8c565b83811115613bb6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bd882613b6d565b613be28185613b78565b9350613bf2818560208601613b89565b613bfb81613bbc565b840191505092915050565b60006020820190508181036000830152613c208184613bcd565b905092915050565b6000819050919050565b613c3b81613c28565b8114613c4657600080fd5b50565b600081359050613c5881613c32565b92915050565b600060208284031215613c7457613c73613aa8565b5b6000613c8284828501613c49565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cb682613c8b565b9050919050565b613cc681613cab565b82525050565b6000602082019050613ce16000830184613cbd565b92915050565b613cf081613cab565b8114613cfb57600080fd5b50565b600081359050613d0d81613ce7565b92915050565b60008060408385031215613d2a57613d29613aa8565b5b6000613d3885828601613cfe565b9250506020613d4985828601613c49565b9150509250929050565b613d5c81613b37565b8114613d6757600080fd5b50565b600081359050613d7981613d53565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613dbc82613bbc565b810181811067ffffffffffffffff82111715613ddb57613dda613d84565b5b80604052505050565b6000613dee613a9e565b9050613dfa8282613db3565b919050565b600067ffffffffffffffff821115613e1a57613e19613d84565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b613e4381613e30565b8114613e4e57600080fd5b50565b600081359050613e6081613e3a565b92915050565b6000613e79613e7484613dff565b613de4565b90508083825260208201905060208402830185811115613e9c57613e9b613e2b565b5b835b81811015613ec55780613eb18882613e51565b845260208401935050602081019050613e9e565b5050509392505050565b600082601f830112613ee457613ee3613d7f565b5b8135613ef4848260208601613e66565b91505092915050565b60008060008060808587031215613f1757613f16613aa8565b5b6000613f2587828801613c49565b9450506020613f3687828801613c49565b9350506040613f4787828801613d6a565b925050606085013567ffffffffffffffff811115613f6857613f67613aad565b5b613f7487828801613ecf565b91505092959194509250565b613f8981613c28565b82525050565b6000602082019050613fa46000830184613f80565b92915050565b600080600060608486031215613fc357613fc2613aa8565b5b6000613fd186828701613cfe565b9350506020613fe286828701613cfe565b9250506040613ff386828701613c49565b9150509250925092565b60006020828403121561401357614012613aa8565b5b600061402184828501613cfe565b91505092915050565b600080fd5b600067ffffffffffffffff82111561404a57614049613d84565b5b61405382613bbc565b9050602081019050919050565b82818337600083830152505050565b600061408261407d8461402f565b613de4565b90508281526020810184848401111561409e5761409d61402a565b5b6140a9848285614060565b509392505050565b600082601f8301126140c6576140c5613d7f565b5b81356140d684826020860161406f565b91505092915050565b6000602082840312156140f5576140f4613aa8565b5b600082013567ffffffffffffffff81111561411357614112613aad565b5b61411f848285016140b1565b91505092915050565b60006020828403121561413e5761413d613aa8565b5b600061414c84828501613e51565b91505092915050565b6000806040838503121561416c5761416b613aa8565b5b600061417a85828601613cfe565b925050602061418b85828601613d6a565b9150509250929050565b600080604083850312156141ac576141ab613aa8565b5b60006141ba85828601613c49565b92505060206141cb85828601613cfe565b9150509250929050565b600080604083850312156141ec576141eb613aa8565b5b60006141fa85828601613c49565b925050602061420b85828601613c49565b9150509250929050565b600067ffffffffffffffff8211156142305761422f613d84565b5b61423982613bbc565b9050602081019050919050565b600061425961425484614215565b613de4565b9050828152602081018484840111156142755761427461402a565b5b614280848285614060565b509392505050565b600082601f83011261429d5761429c613d7f565b5b81356142ad848260208601614246565b91505092915050565b600080600080608085870312156142d0576142cf613aa8565b5b60006142de87828801613cfe565b94505060206142ef87828801613cfe565b935050604061430087828801613c49565b925050606085013567ffffffffffffffff81111561432157614320613aad565b5b61432d87828801614288565b91505092959194509250565b60008060006060848603121561435257614351613aa8565b5b600061436086828701613cfe565b935050602061437186828701613c49565b925050604061438286828701613c49565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143c181613c28565b82525050565b60006143d383836143b8565b60208301905092915050565b6000602082019050919050565b60006143f78261438c565b6144018185614397565b935061440c836143a8565b8060005b8381101561443d57815161442488826143c7565b975061442f836143df565b925050600181019050614410565b5085935050505092915050565b6000602082019050818103600083015261446481846143ec565b905092915050565b6000806040838503121561448357614482613aa8565b5b600061449185828601613cfe565b92505060206144a285828601613cfe565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144f357607f821691505b60208210811415614507576145066144ac565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614569602c83613b78565b91506145748261450d565b604082019050919050565b600060208201905081810360008301526145988161455c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006145fb602183613b78565b91506146068261459f565b604082019050919050565b6000602082019050818103600083015261462a816145ee565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061468d603883613b78565b915061469882614631565b604082019050919050565b600060208201905081810360008301526146bc81614680565b9050919050565b7f5072652d73616c65206d696e74696e67206973206e6f74206163746976650000600082015250565b60006146f9601e83613b78565b9150614704826146c3565b602082019050919050565b60006020820190508181036000830152614728816146ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061476982613c28565b915061477483613c28565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147ad576147ac61472f565b5b828202905092915050565b7f596f75206861766520756e73756666696369656e742066756e64210000000000600082015250565b60006147ee601b83613b78565b91506147f9826147b8565b602082019050919050565b6000602082019050818103600083015261481d816147e1565b9050919050565b60008160601b9050919050565b600061483c82614824565b9050919050565b600061484e82614831565b9050919050565b61486661486182613cab565b614843565b82525050565b6000819050919050565b61488761488282613c28565b61486c565b82525050565b60008160f81b9050919050565b60006148a58261488d565b9050919050565b60006148b78261489a565b9050919050565b6148cf6148ca82613b37565b6148ac565b82525050565b60006148e18286614855565b6014820191506148f18285614876565b60208201915061490182846148be565b600182019150819050949350505050565b7f596f75277265206e6f7420696e2077686974656c697374210000000000000000600082015250565b6000614948601883613b78565b915061495382614912565b602082019050919050565b600060208201905081810360008301526149778161493b565b9050919050565b600061498982613c28565b915061499483613c28565b9250828210156149a7576149a661472f565b5b828203905092915050565b7f596f7527726520657863656564696e67207265676973746572656420616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a0e602283613b78565b9150614a19826149b2565b604082019050919050565b60006020820190508181036000830152614a3d81614a01565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614aa0603183613b78565b9150614aab82614a44565b604082019050919050565b60006020820190508181036000830152614acf81614a93565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b0c602083613b78565b9150614b1782614ad6565b602082019050919050565b60006020820190508181036000830152614b3b81614aff565b9050919050565b7f636f6c6477616c6c657420697320746865207a65726f20616464726573730000600082015250565b6000614b78601e83613b78565b9150614b8382614b42565b602082019050919050565b60006020820190508181036000830152614ba781614b6b565b9050919050565b7f57652043616e2774206368616e67652062617365555249000000000000000000600082015250565b6000614be4601783613b78565b9150614bef82614bae565b602082019050919050565b60006020820190508181036000830152614c1381614bd7565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614c76602983613b78565b9150614c8182614c1a565b604082019050919050565b60006020820190508181036000830152614ca581614c69565b9050919050565b7f506c656173652073656c6563742073656374696f6e0000000000000000000000600082015250565b6000614ce2601583613b78565b9150614ced82614cac565b602082019050919050565b60006020820190508181036000830152614d1181614cd5565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614d74602a83613b78565b9150614d7f82614d18565b604082019050919050565b60006020820190508181036000830152614da381614d67565b9050919050565b7f486f6c646572206d696e74696e67206973206e6f742061637469766500000000600082015250565b6000614de0601c83613b78565b9150614deb82614daa565b602082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b600081519050614e2581613c32565b92915050565b600060208284031215614e4157614e40613aa8565b5b6000614e4f84828501614e16565b91505092915050565b7f596f7520417265204e6f7420486f6c6465720000000000000000000000000000600082015250565b6000614e8e601283613b78565b9150614e9982614e58565b602082019050919050565b60006020820190508181036000830152614ebd81614e81565b9050919050565b7f596f752061726520657863656564206d6178696d756d206d696e7420616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f20602283613b78565b9150614f2b82614ec4565b604082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f5075626c69632073616c65206e6f742073746172746564207965740000000000600082015250565b6000614f8c601b83613b78565b9150614f9782614f56565b602082019050919050565b60006020820190508181036000830152614fbb81614f7f565b9050919050565b7f596f752063616e206f6e6c792035206d696e7420706572205458000000000000600082015250565b6000614ff8601a83613b78565b915061500382614fc2565b602082019050919050565b6000602082019050818103600083015261502781614feb565b9050919050565b600061503982613c28565b915061504483613c28565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150795761507861472f565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150be82613c28565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150f1576150f061472f565b5b600182019050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615158602f83613b78565b9150615163826150fc565b604082019050919050565b600060208201905081810360008301526151878161514b565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546151bb816144db565b6151c5818661518e565b945060018216600081146151e057600181146151f157615224565b60ff19831686528186019350615224565b6151fa85615199565b60005b8381101561521c578154818901526001820191506020810190506151fd565b838801955050505b50505092915050565b600061523882613b6d565b615242818561518e565b9350615252818560208601613b89565b80840191505092915050565b600061526a82866151ae565b9150615276828561522d565b915061528282846151ae565b9150819050949350505050565b600061529a82613cab565b9050919050565b6152aa8161528f565b81146152b557600080fd5b50565b6000815190506152c7816152a1565b92915050565b6000602082840312156152e3576152e2613aa8565b5b60006152f1848285016152b8565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615356602683613b78565b9150615361826152fa565b604082019050919050565b6000602082019050818103600083015261538581615349565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b60006153c2601283613b78565b91506153cd8261538c565b602082019050919050565b600060208201905081810360008301526153f1816153b5565b9050919050565b7f596f7527726520657863656564696e67206d6178696d756d20746f6b656e7300600082015250565b600061542e601f83613b78565b9150615439826153f8565b602082019050919050565b6000602082019050818103600083015261545d81615421565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006154c0602c83613b78565b91506154cb82615464565b604082019050919050565b600060208201905081810360008301526154ef816154b3565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615552602983613b78565b915061555d826154f6565b604082019050919050565b6000602082019050818103600083015261558181615545565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155e4602483613b78565b91506155ef82615588565b604082019050919050565b60006020820190508181036000830152615613816155d7565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615650601983613b78565b915061565b8261561a565b602082019050919050565b6000602082019050818103600083015261567f81615643565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006156e2603283613b78565b91506156ed82615686565b604082019050919050565b60006020820190508181036000830152615711816156d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061575282613c28565b915061575d83613c28565b92508261576d5761576c615718565b5b828204905092915050565b600061578382613c28565b915061578e83613c28565b92508261579e5761579d615718565b5b828206905092915050565b6000819050919050565b6157c46157bf82613e30565b6157a9565b82525050565b60006157d682856157b3565b6020820191506157e682846157b3565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b600061581d826157f6565b6158278185615801565b9350615837818560208601613b89565b61584081613bbc565b840191505092915050565b60006080820190506158606000830187613cbd565b61586d6020830186613cbd565b61587a6040830185613f80565b818103606083015261588c8184615812565b905095945050505050565b6000815190506158a681613ade565b92915050565b6000602082840312156158c2576158c1613aa8565b5b60006158d084828501615897565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061590f602083613b78565b915061591a826158d9565b602082019050919050565b6000602082019050818103600083015261593e81615902565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061597b601c83613b78565b915061598682615945565b602082019050919050565b600060208201905081810360008301526159aa8161596e565b905091905056fea264697066735822122000703cd3b7dda3ab246be8df088b3bb40876d9efaa1747962ed0a7b87508ba9e64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c14c7da975a1293ed1155235fcb63a67f0751b4e08cb8f75077e316ed9b96fcee60000000000000000000000004f89cd0cae1e54d98db6a80150a824a533502eea0000000000000000000000001cb1a5e65610aeff2551a50f76a87a7d3fb649c6000000000000000000000000a51bb06ed626f3df5d8081213d9548ef0636f74e000000000000000000000000000000000000000000000000000000000000000d506561636566756c546f61647a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000250540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d563244525377626f455550736656616f50537945416571696953764d32576e673935364366357652506f514a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f706561636566756c746f61647a2e636f6d2f636f6e74726163742e6a736f6e00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): PeacefulToadz
Arg [1] : _symbol (string): PT
Arg [2] : _initBaseURI (string): ipfs://QmV2DRSwboEUPsfVaoPSyEAeqiiSvM2Wng956Cf5vRPoQJ/
Arg [3] : _initcontractURI (string): https://peacefultoadz.com/contract.json
Arg [4] : _initProxyAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [5] : _merkleRoot (bytes32): 0x4c7da975a1293ed1155235fcb63a67f0751b4e08cb8f75077e316ed9b96fcee6
Arg [6] : _token1address (address): 0x4f89Cd0CAE1e54D98db6a80150a824a533502EEa
Arg [7] : _token2address (address): 0x1CB1A5e65610AEFF2551A50f76a87a7d3fB649C6
Arg [8] : _coldwallet (address): 0xA51bb06Ed626f3Df5D8081213d9548EF0636F74E
-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [4] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [5] : 4c7da975a1293ed1155235fcb63a67f0751b4e08cb8f75077e316ed9b96fcee6
Arg [6] : 0000000000000000000000004f89cd0cae1e54d98db6a80150a824a533502eea
Arg [7] : 0000000000000000000000001cb1a5e65610aeff2551a50f76a87a7d3fb649c6
Arg [8] : 000000000000000000000000a51bb06ed626f3df5d8081213d9548ef0636f74e
Arg [9] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [10] : 506561636566756c546f61647a00000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [12] : 5054000000000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [14] : 697066733a2f2f516d563244525377626f455550736656616f50537945416571
Arg [15] : 696953764d32576e673935364366357652506f514a2f00000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [17] : 68747470733a2f2f706561636566756c746f61647a2e636f6d2f636f6e747261
Arg [18] : 63742e6a736f6e00000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
41655:8745:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28806:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29751:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31310:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30833:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45168:806;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44154:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32060:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42567:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41859:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42245:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47046:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49026:188;;;:::i;:::-;;32470:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42532:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42391:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47287:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42135:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42168:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29445:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47842:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42423:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29175:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9794:103;;;;;;;;;;;;;:::i;:::-;;46957:77;;;;;;;;;;;;;:::i;:::-;;47169:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9143:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41903:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29920:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42497:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31603:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44267:893;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48573:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45986:505;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48152:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32726:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42208:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42451:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49222:656;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46503:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42316:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41950:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47513:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41812:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46828:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49990:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47655:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10052:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42282:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28806:305;28908:4;28960:25;28945:40;;;:11;:40;;;;:105;;;;29017:33;29002:48;;;:11;:48;;;;28945:105;:158;;;;29067:36;29091:11;29067:23;:36::i;:::-;28945:158;28925:178;;28806:305;;;:::o;29751:100::-;29805:13;29838:5;29831:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29751:100;:::o;31310:221::-;31386:7;31414:16;31422:7;31414;:16::i;:::-;31406:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31499:15;:24;31515:7;31499:24;;;;;;;;;;;;;;;;;;;;;31492:31;;31310:221;;;:::o;30833:411::-;30914:13;30930:23;30945:7;30930:14;:23::i;:::-;30914:39;;30978:5;30972:11;;:2;:11;;;;30964:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31072:5;31056:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31081:37;31098:5;31105:12;:10;:12::i;:::-;31081:16;:37::i;:::-;31056:62;31034:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31215:21;31224:2;31228:7;31215:8;:21::i;:::-;30903:341;30833:411;;:::o;45168:806::-;45306:7;;;;;;;;;;;45298:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;45367:12;:54;;;;45410:11;45396;;:25;;;;:::i;:::-;45383:9;:38;;45367:54;45359:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;45472:105;45491:5;45497:10;;45536;45547:14;45562:12;45519:56;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45509:67;;;;;;45472:18;:105::i;:::-;45463:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;45631:13;:25;45645:10;45631:25;;;;;;;;;;;;;;;;;;;;;;;;;45626:148;;45698:4;45672:13;:25;45686:10;45672:25;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;45748:14;45717:18;:30;45736:10;45717:30;;;;;;;;;;;;;;;:45;;;;45626:148;45836:1;45823:11;45792:18;:30;45811:10;45792:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:45;;45784:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;45918:11;45886:18;:30;45905:10;45886:30;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;45940:26;45954:11;45940:13;:26::i;:::-;45168:806;;;;:::o;44154:105::-;44198:4;44250:1;44222:25;:15;:23;:25::i;:::-;:29;;;;:::i;:::-;44215:36;;44154:105;:::o;32060:339::-;32255:41;32274:12;:10;:12::i;:::-;32288:7;32255:18;:41::i;:::-;32247:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32363:28;32373:4;32379:2;32383:7;32363:9;:28::i;:::-;32060:339;;;:::o;42567:25::-;;;;;;;;;;;;;:::o;41859:37::-;;;;:::o;42245:30::-;;;;;;;;;;;;;:::o;47046:111::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47121:28:::1;47139:9;47121:17;:28::i;:::-;47046:111:::0;:::o;49026:188::-;49102:1;49080:24;;:10;;;;;;;;;;;:24;;;;49072:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49166:10;;;;;;;;;;;49158:24;;:47;49183:21;49158:47;;;;;;;;;;;;;;;;;;;;;;;49150:56;;;;;;49026:188::o;32470:185::-;32608:39;32625:4;32631:2;32635:7;32608:39;;;;;;;;;;;;:16;:39::i;:::-;32470:185;;;:::o;42532:28::-;;;;;;;;;;;;;:::o;42391:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47287:214::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47373:13:::1;;;;;;;;;;;47372:14;47364:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;47434:11;47424:7;:21;;;;;;;;;;;;:::i;:::-;;47461:32;47481:11;47461:32;;;;;;:::i;:::-;;;;;;;;47287:214:::0;:::o;42135:26::-;;;;;;;;;;;;;:::o;42168:33::-;;;;;;;;;;;;;:::o;29445:239::-;29517:7;29537:13;29553:7;:16;29561:7;29553:16;;;;;;;;;;;;;;;;;;;;;29537:32;;29605:1;29588:19;;:5;:19;;;;29580:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29671:5;29664:12;;;29445:239;;;:::o;47842:300::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47926:1:::1;47918:7;:9;47909:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;47976:1;47967:7;:10;47963:30;;;47987:6;;;;;;;;;;;47986:7;47979:6;;:14;;;;;;;;;;;;;;;;;;47963:30;48017:1;48008:7;:10;48004:32;;;48029:7;;;;;;;;;;;48028:8;48020:7;;:16;;;;;;;;;;;;;;;;;;48004:32;48060:1;48051:7;:10;48047:38;;;48075:10;;;;;;;;;;;48074:11;48063:10;;:22;;;;;;;;;;;;;;;;;;48047:38;48109:1;48100:7;:10;48096:38;;;48124:10;;;;;;;;;;;48123:11;48112:10;;:22;;;;;;;;;;;;;;;;;;48096:38;47842:300:::0;:::o;42423:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29175:208::-;29247:7;29292:1;29275:19;;:5;:19;;;;29267:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29359:9;:16;29369:5;29359:16;;;;;;;;;;;;;;;;29352:23;;29175:208;;;:::o;9794:103::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9859:30:::1;9886:1;9859:18;:30::i;:::-;9794:103::o:0;46957:77::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47022:4:::1;47008:13;;:18;;;;;;;;;;;;;;;;;;46957:77::o:0;47169:106::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47256:11:::1;47243:10;:24;;;;47169:106:::0;:::o;9143:87::-;9189:7;9216:6;;;;;;;;;;;9209:13;;9143:87;:::o;41903:40::-;;;;:::o;29920:104::-;29976:13;30009:7;30002:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29920:104;:::o;42497:28::-;;;;;;;;;;;;;:::o;31603:155::-;31698:52;31717:12;:10;:12::i;:::-;31731:8;31741;31698:18;:52::i;:::-;31603:155;;:::o;44267:893::-;44344:10;;;;;;;;;;;44336:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44436:11;44419:14;;:28;;;;:::i;:::-;44406:9;:41;;44398:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44499:15;44526:13;;;;;;;;;;;44499:41;;44551:12;44572:13;;;;;;;;;;;44551:35;;44597:18;44618:6;:16;;;44635:10;44618:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44597:49;;44657:18;44678:6;:16;;;44695:10;44678:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44657:49;;44742:1;44727:13;:16;:36;;;;;44762:1;44747:13;:16;44727:36;44725:39;44717:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44804:14;:26;44819:10;44804:26;;;;;;;;;;;;;;;;;;;;;;;;;44799:156;;44873:4;44846:14;:26;44861:10;44846:26;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;44924:19;;44892;:31;44912:10;44892:31;;;;;;;;;;;;;;;:51;;;;44799:156;45018:1;45005:11;44973:19;:31;44993:10;44973:31;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:46;;44965:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;45103:11;45068:19;:31;45088:10;45068:31;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;45125:26;45139:11;45125:13;:26::i;:::-;44325:835;;;;44267:893;:::o;48573:439::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48672:1:::1;48664:7;:9;48655:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;48722:1;48713:7;:10;48709:64;;;48753:8;48739:13;;:22;;;;;;;;;;;;;;;;;;48709:64;48796:1;48787:7;:10;48783:64;;;48827:8;48813:13;;:22;;;;;;;;;;;;;;;;;;48783:64;48870:1;48861:7;:10;48857:71;;;48908:8;48887:20;;:29;;;;;;;;;;;;;;;;;;48857:71;48951:1;48942:7;:10;48938:61;;;48979:8;48968:10;;:19;;;;;;;;;;;;;;;;;;48938:61;48573:439:::0;;:::o;45986:505::-;46064:10;;;;;;;;;;;46056:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;46140:1;46125:11;:16;;46117:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;46242:11;46213:16;:28;46230:10;46213:28;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;46190:19;;:63;;46182:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;46340:11;46323:14;;:28;;;;:::i;:::-;46310:9;:41;;46302:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;46435:11;46403:16;:28;46420:10;46403:28;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;46457:26;46471:11;46457:13;:26::i;:::-;45986:505;:::o;48152:415::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48246:1:::1;48238:7;:9;48229:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;48296:1;48287:7;:10;48283:129;;;48328:5;48313:14;:20;;;;48360:5;48348:11;:17;;;;48395:5;48380:14;:20;;;;48283:129;48435:1;48426:7;:10;48422:36;;;48453:5;48438:14;:20;;;;48422:36;48482:1;48473:7;:10;48469:33;;;48497:5;48485:11;:17;;;;48469:33;48526:1;48517:7;:10;48513:36;;;48544:5;48529:14;:20;;;;48513:36;48152:415:::0;;:::o;32726:328::-;32901:41;32920:12;:10;:12::i;:::-;32934:7;32901:18;:41::i;:::-;32893:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33007:39;33021:4;33027:2;33031:7;33040:5;33007:13;:39::i;:::-;32726:328;;;;:::o;42208:30::-;;;;;;;;;;;;;:::o;42451:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49222:656::-;49309:13;49336:15;49354:17;49364:6;49354:9;:17::i;:::-;49336:35;;49400:1;49386:10;:15;49382:489;;;49436:1;49425:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49418:20;;;;;49382:489;49471:20;49505:10;49494:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49471:45;;49531:10;49567:12;49582:7;49567:22;;49562:270;49601:5;49591:7;:15;49562:270;;;49651:10;49642:5;:19;49638:30;;;49663:5;;49638:30;49713:6;49693:26;;:16;49701:7;49693;:16::i;:::-;:26;;;49689:128;;;49760:7;49744:6;49751:5;49744:13;;;;;;;;:::i;:::-;;;;;;;:23;;;;;49790:7;;;;;:::i;:::-;;;;49689:128;49608:9;;;;;:::i;:::-;;;;49562:270;;;;49853:6;49846:13;;;;;49222:656;;;;;;:::o;46503:313::-;46573:13;46614:16;46622:7;46614;:16::i;:::-;46604:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;46724:1;46706:7;46700:21;;;;;:::i;:::-;;;:25;:108;;;;;;;;;;;;;;;;;46752:7;46761:25;46778:7;46761:16;:25::i;:::-;46788:13;46735:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46700:108;46693:115;;46503:313;;;:::o;42316:35::-;;;;;;;;;;;;;:::o;41950:28::-;;;;:::o;47513:130::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47618:17:::1;47602:13;:33;;;;;;;;;;;;:::i;:::-;;47513:130:::0;:::o;41812:40::-;;;;:::o;46828:94::-;46872:13;46903:11;46896:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46828:94;:::o;49990:407::-;50079:4;50164:27;50208:20;;;;;;;;;;;50164:65;;50285:8;50244:49;;50252:13;:21;;;50274:5;50252:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50244:49;;;50240:93;;;50317:4;50310:11;;;;;50240:93;50350:39;50373:5;50380:8;50350:22;:39::i;:::-;50343:46;;;49990:407;;;;;:::o;47655:173::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47754:15:::1;47740:11;:29;;;;;;;;;;;;:::i;:::-;;47785:35;47804:15;47785:35;;;;;;:::i;:::-;;;;;;;;47655:173:::0;:::o;10052:201::-;9374:12;:10;:12::i;:::-;9363:23;;:7;:5;:7::i;:::-;:23;;;9355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10161:1:::1;10141:22;;:8;:22;;;;10133:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10217:28;10236:8;10217:18;:28::i;:::-;10052:201:::0;:::o;42282:27::-;;;;;;;;;;;;;:::o;2425:127::-;2532:1;2514:7;:14;;;:19;;;;;;;;;;;2425:127;:::o;2303:114::-;2368:7;2395;:14;;;2388:21;;2303:114;;;:::o;21575:157::-;21660:4;21699:25;21684:40;;;:11;:40;;;;21677:47;;21575:157;;;:::o;34564:127::-;34629:4;34681:1;34653:30;;:7;:16;34661:7;34653:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34646:37;;34564:127;;;:::o;7867:98::-;7920:7;7947:10;7940:17;;7867:98;:::o;38546:174::-;38648:2;38621:15;:24;38637:7;38621:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38704:7;38700:2;38666:46;;38675:23;38690:7;38675:14;:23::i;:::-;38666:46;;;;;;;;;;;;38546:174;;:::o;3804:190::-;3929:4;3982;3953:25;3966:5;3973:4;3953:12;:25::i;:::-;:33;3946:40;;3804:190;;;;;:::o;43618:336::-;43688:6;;;;;;;;;;;43687:7;43679:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;43727:12;43742:25;:15;:23;:25::i;:::-;43727:40;;43811:9;;43796:11;43786:7;:21;;;;:::i;:::-;:34;;43778:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43873:6;43882:1;43873:10;;43868:79;43890:11;43885:1;:16;43868:79;;43921:14;:12;:14::i;:::-;43903:3;;;;;:::i;:::-;;;;43868:79;;;;43668:286;43618:336;:::o;34858:348::-;34951:4;34976:16;34984:7;34976;:16::i;:::-;34968:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35052:13;35068:23;35083:7;35068:14;:23::i;:::-;35052:39;;35121:5;35110:16;;:7;:16;;;:51;;;;35154:7;35130:31;;:20;35142:7;35130:11;:20::i;:::-;:31;;;35110:51;:87;;;;35165:32;35182:5;35189:7;35165:16;:32::i;:::-;35110:87;35102:96;;;34858:348;;;;:::o;37850:578::-;38009:4;37982:31;;:23;37997:7;37982:14;:23::i;:::-;:31;;;37974:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38092:1;38078:16;;:2;:16;;;;38070:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38148:39;38169:4;38175:2;38179:7;38148:20;:39::i;:::-;38252:29;38269:1;38273:7;38252:8;:29::i;:::-;38313:1;38294:9;:15;38304:4;38294:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38342:1;38325:9;:13;38335:2;38325:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38373:2;38354:7;:16;38362:7;38354:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38412:7;38408:2;38393:27;;38402:4;38393:27;;;;;;;;;;;;37850:578;;;:::o;10413:191::-;10487:16;10506:6;;;;;;;;;;;10487:25;;10532:8;10523:6;;:17;;;;;;;;;;;;;;;;;;10587:8;10556:40;;10577:8;10556:40;;;;;;;;;;;;10476:128;10413:191;:::o;38862:315::-;39017:8;39008:17;;:5;:17;;;;39000:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39104:8;39066:18;:25;39085:5;39066:25;;;;;;;;;;;;;;;:35;39092:8;39066:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39150:8;39128:41;;39143:5;39128:41;;;39160:8;39128:41;;;;;;:::i;:::-;;;;;;;;38862:315;;;:::o;33936:::-;34093:28;34103:4;34109:2;34113:7;34093:9;:28::i;:::-;34140:48;34163:4;34169:2;34173:7;34182:5;34140:22;:48::i;:::-;34132:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33936:315;;;;:::o;5429:723::-;5485:13;5715:1;5706:5;:10;5702:53;;;5733:10;;;;;;;;;;;;;;;;;;;;;5702:53;5765:12;5780:5;5765:20;;5796:14;5821:78;5836:1;5828:4;:9;5821:78;;5854:8;;;;;:::i;:::-;;;;5885:2;5877:10;;;;;:::i;:::-;;;5821:78;;;5909:19;5941:6;5931:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5909:39;;5959:154;5975:1;5966:5;:10;5959:154;;6003:1;5993:11;;;;;:::i;:::-;;;6070:2;6062:5;:10;;;;:::i;:::-;6049:2;:24;;;;:::i;:::-;6036:39;;6019:6;6026;6019:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6099:2;6090:11;;;;;:::i;:::-;;;5959:154;;;6137:6;6123:21;;;;;5429:723;;;;:::o;31829:164::-;31926:4;31950:18;:25;31969:5;31950:25;;;;;;;;;;;;;;;:35;31976:8;31950:35;;;;;;;;;;;;;;;;;;;;;;;;;31943:42;;31829:164;;;;:::o;4356:701::-;4439:7;4459:20;4482:4;4459:27;;4502:9;4497:523;4521:5;:12;4517:1;:16;4497:523;;;4555:20;4578:5;4584:1;4578:8;;;;;;;;:::i;:::-;;;;;;;;4555:31;;4621:12;4605;:28;4601:408;;4775:12;4789;4758:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4748:55;;;;;;4733:70;;4601:408;;;4965:12;4979;4948:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4938:55;;;;;;4923:70;;4601:408;4540:480;4535:3;;;;;:::i;:::-;;;;4497:523;;;;5037:12;5030:19;;;4356:701;;;;:::o;43962:167::-;44006:12;44021:25;:15;:23;:25::i;:::-;44006:40;;44057:27;:15;:25;:27::i;:::-;44095:26;44101:10;44113:7;44095:5;:26::i;:::-;43995:134;43962:167::o;41113:126::-;;;;:::o;39742:799::-;39897:4;39918:15;:2;:13;;;:15::i;:::-;39914:620;;;39970:2;39954:36;;;39991:12;:10;:12::i;:::-;40005:4;40011:7;40020:5;39954:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39950:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40213:1;40196:6;:13;:18;40192:272;;;40239:60;;;;;;;;;;:::i;:::-;;;;;;;;40192:272;40414:6;40408:13;40399:6;40395:2;40391:15;40384:38;39950:529;40087:41;;;40077:51;;;:6;:51;;;;40070:58;;;;;39914:620;40518:4;40511:11;;39742:799;;;;;;;:::o;36542:382::-;36636:1;36622:16;;:2;:16;;;;36614:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36695:16;36703:7;36695;:16::i;:::-;36694:17;36686:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36757:45;36786:1;36790:2;36794:7;36757:20;:45::i;:::-;36832:1;36815:9;:13;36825:2;36815:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36863:2;36844:7;:16;36852:7;36844:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36908:7;36904:2;36883:33;;36900:1;36883:33;;;;;;;;;;;;36542:382;;:::o;11431:387::-;11491:4;11699:12;11766:7;11754:20;11746:28;;11809:1;11802:4;:8;11795:15;;;11431:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:116::-;5008:21;5023:5;5008:21;:::i;:::-;5001:5;4998:32;4988:60;;5044:1;5041;5034:12;4988:60;4938:116;:::o;5060:133::-;5103:5;5141:6;5128:20;5119:29;;5157:30;5181:5;5157:30;:::i;:::-;5060:133;;;;:::o;5199:117::-;5308:1;5305;5298:12;5322:180;5370:77;5367:1;5360:88;5467:4;5464:1;5457:15;5491:4;5488:1;5481:15;5508:281;5591:27;5613:4;5591:27;:::i;:::-;5583:6;5579:40;5721:6;5709:10;5706:22;5685:18;5673:10;5670:34;5667:62;5664:88;;;5732:18;;:::i;:::-;5664:88;5772:10;5768:2;5761:22;5551:238;5508:281;;:::o;5795:129::-;5829:6;5856:20;;:::i;:::-;5846:30;;5885:33;5913:4;5905:6;5885:33;:::i;:::-;5795:129;;;:::o;5930:311::-;6007:4;6097:18;6089:6;6086:30;6083:56;;;6119:18;;:::i;:::-;6083:56;6169:4;6161:6;6157:17;6149:25;;6229:4;6223;6219:15;6211:23;;5930:311;;;:::o;6247:117::-;6356:1;6353;6346:12;6370:77;6407:7;6436:5;6425:16;;6370:77;;;:::o;6453:122::-;6526:24;6544:5;6526:24;:::i;:::-;6519:5;6516:35;6506:63;;6565:1;6562;6555:12;6506:63;6453:122;:::o;6581:139::-;6627:5;6665:6;6652:20;6643:29;;6681:33;6708:5;6681:33;:::i;:::-;6581:139;;;;:::o;6743:710::-;6839:5;6864:81;6880:64;6937:6;6880:64;:::i;:::-;6864:81;:::i;:::-;6855:90;;6965:5;6994:6;6987:5;6980:21;7028:4;7021:5;7017:16;7010:23;;7081:4;7073:6;7069:17;7061:6;7057:30;7110:3;7102:6;7099:15;7096:122;;;7129:79;;:::i;:::-;7096:122;7244:6;7227:220;7261:6;7256:3;7253:15;7227:220;;;7336:3;7365:37;7398:3;7386:10;7365:37;:::i;:::-;7360:3;7353:50;7432:4;7427:3;7423:14;7416:21;;7303:144;7287:4;7282:3;7278:14;7271:21;;7227:220;;;7231:21;6845:608;;6743:710;;;;;:::o;7476:370::-;7547:5;7596:3;7589:4;7581:6;7577:17;7573:27;7563:122;;7604:79;;:::i;:::-;7563:122;7721:6;7708:20;7746:94;7836:3;7828:6;7821:4;7813:6;7809:17;7746:94;:::i;:::-;7737:103;;7553:293;7476:370;;;;:::o;7852:969::-;7960:6;7968;7976;7984;8033:3;8021:9;8012:7;8008:23;8004:33;8001:120;;;8040:79;;:::i;:::-;8001:120;8160:1;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8131:117;8287:2;8313:53;8358:7;8349:6;8338:9;8334:22;8313:53;:::i;:::-;8303:63;;8258:118;8415:2;8441:50;8483:7;8474:6;8463:9;8459:22;8441:50;:::i;:::-;8431:60;;8386:115;8568:2;8557:9;8553:18;8540:32;8599:18;8591:6;8588:30;8585:117;;;8621:79;;:::i;:::-;8585:117;8726:78;8796:7;8787:6;8776:9;8772:22;8726:78;:::i;:::-;8716:88;;8511:303;7852:969;;;;;;;:::o;8827:118::-;8914:24;8932:5;8914:24;:::i;:::-;8909:3;8902:37;8827:118;;:::o;8951:222::-;9044:4;9082:2;9071:9;9067:18;9059:26;;9095:71;9163:1;9152:9;9148:17;9139:6;9095:71;:::i;:::-;8951:222;;;;:::o;9179:619::-;9256:6;9264;9272;9321:2;9309:9;9300:7;9296:23;9292:32;9289:119;;;9327:79;;:::i;:::-;9289:119;9447:1;9472:53;9517:7;9508:6;9497:9;9493:22;9472:53;:::i;:::-;9462:63;;9418:117;9574:2;9600:53;9645:7;9636:6;9625:9;9621:22;9600:53;:::i;:::-;9590:63;;9545:118;9702:2;9728:53;9773:7;9764:6;9753:9;9749:22;9728:53;:::i;:::-;9718:63;;9673:118;9179:619;;;;;:::o;9804:329::-;9863:6;9912:2;9900:9;9891:7;9887:23;9883:32;9880:119;;;9918:79;;:::i;:::-;9880:119;10038:1;10063:53;10108:7;10099:6;10088:9;10084:22;10063:53;:::i;:::-;10053:63;;10009:117;9804:329;;;;:::o;10139:117::-;10248:1;10245;10238:12;10262:308;10324:4;10414:18;10406:6;10403:30;10400:56;;;10436:18;;:::i;:::-;10400:56;10474:29;10496:6;10474:29;:::i;:::-;10466:37;;10558:4;10552;10548:15;10540:23;;10262:308;;;:::o;10576:154::-;10660:6;10655:3;10650;10637:30;10722:1;10713:6;10708:3;10704:16;10697:27;10576:154;;;:::o;10736:412::-;10814:5;10839:66;10855:49;10897:6;10855:49;:::i;:::-;10839:66;:::i;:::-;10830:75;;10928:6;10921:5;10914:21;10966:4;10959:5;10955:16;11004:3;10995:6;10990:3;10986:16;10983:25;10980:112;;;11011:79;;:::i;:::-;10980:112;11101:41;11135:6;11130:3;11125;11101:41;:::i;:::-;10820:328;10736:412;;;;;:::o;11168:340::-;11224:5;11273:3;11266:4;11258:6;11254:17;11250:27;11240:122;;11281:79;;:::i;:::-;11240:122;11398:6;11385:20;11423:79;11498:3;11490:6;11483:4;11475:6;11471:17;11423:79;:::i;:::-;11414:88;;11230:278;11168:340;;;;:::o;11514:509::-;11583:6;11632:2;11620:9;11611:7;11607:23;11603:32;11600:119;;;11638:79;;:::i;:::-;11600:119;11786:1;11775:9;11771:17;11758:31;11816:18;11808:6;11805:30;11802:117;;;11838:79;;:::i;:::-;11802:117;11943:63;11998:7;11989:6;11978:9;11974:22;11943:63;:::i;:::-;11933:73;;11729:287;11514:509;;;;:::o;12029:329::-;12088:6;12137:2;12125:9;12116:7;12112:23;12108:32;12105:119;;;12143:79;;:::i;:::-;12105:119;12263:1;12288:53;12333:7;12324:6;12313:9;12309:22;12288:53;:::i;:::-;12278:63;;12234:117;12029:329;;;;:::o;12364:468::-;12429:6;12437;12486:2;12474:9;12465:7;12461:23;12457:32;12454:119;;;12492:79;;:::i;:::-;12454:119;12612:1;12637:53;12682:7;12673:6;12662:9;12658:22;12637:53;:::i;:::-;12627:63;;12583:117;12739:2;12765:50;12807:7;12798:6;12787:9;12783:22;12765:50;:::i;:::-;12755:60;;12710:115;12364:468;;;;;:::o;12838:474::-;12906:6;12914;12963:2;12951:9;12942:7;12938:23;12934:32;12931:119;;;12969:79;;:::i;:::-;12931:119;13089:1;13114:53;13159:7;13150:6;13139:9;13135:22;13114:53;:::i;:::-;13104:63;;13060:117;13216:2;13242:53;13287:7;13278:6;13267:9;13263:22;13242:53;:::i;:::-;13232:63;;13187:118;12838:474;;;;;:::o;13318:::-;13386:6;13394;13443:2;13431:9;13422:7;13418:23;13414:32;13411:119;;;13449:79;;:::i;:::-;13411:119;13569:1;13594:53;13639:7;13630:6;13619:9;13615:22;13594:53;:::i;:::-;13584:63;;13540:117;13696:2;13722:53;13767:7;13758:6;13747:9;13743:22;13722:53;:::i;:::-;13712:63;;13667:118;13318:474;;;;;:::o;13798:307::-;13859:4;13949:18;13941:6;13938:30;13935:56;;;13971:18;;:::i;:::-;13935:56;14009:29;14031:6;14009:29;:::i;:::-;14001:37;;14093:4;14087;14083:15;14075:23;;13798:307;;;:::o;14111:410::-;14188:5;14213:65;14229:48;14270:6;14229:48;:::i;:::-;14213:65;:::i;:::-;14204:74;;14301:6;14294:5;14287:21;14339:4;14332:5;14328:16;14377:3;14368:6;14363:3;14359:16;14356:25;14353:112;;;14384:79;;:::i;:::-;14353:112;14474:41;14508:6;14503:3;14498;14474:41;:::i;:::-;14194:327;14111:410;;;;;:::o;14540:338::-;14595:5;14644:3;14637:4;14629:6;14625:17;14621:27;14611:122;;14652:79;;:::i;:::-;14611:122;14769:6;14756:20;14794:78;14868:3;14860:6;14853:4;14845:6;14841:17;14794:78;:::i;:::-;14785:87;;14601:277;14540:338;;;;:::o;14884:943::-;14979:6;14987;14995;15003;15052:3;15040:9;15031:7;15027:23;15023:33;15020:120;;;15059:79;;:::i;:::-;15020:120;15179:1;15204:53;15249:7;15240:6;15229:9;15225:22;15204:53;:::i;:::-;15194:63;;15150:117;15306:2;15332:53;15377:7;15368:6;15357:9;15353:22;15332:53;:::i;:::-;15322:63;;15277:118;15434:2;15460:53;15505:7;15496:6;15485:9;15481:22;15460:53;:::i;:::-;15450:63;;15405:118;15590:2;15579:9;15575:18;15562:32;15621:18;15613:6;15610:30;15607:117;;;15643:79;;:::i;:::-;15607:117;15748:62;15802:7;15793:6;15782:9;15778:22;15748:62;:::i;:::-;15738:72;;15533:287;14884:943;;;;;;;:::o;15833:619::-;15910:6;15918;15926;15975:2;15963:9;15954:7;15950:23;15946:32;15943:119;;;15981:79;;:::i;:::-;15943:119;16101:1;16126:53;16171:7;16162:6;16151:9;16147:22;16126:53;:::i;:::-;16116:63;;16072:117;16228:2;16254:53;16299:7;16290:6;16279:9;16275:22;16254:53;:::i;:::-;16244:63;;16199:118;16356:2;16382:53;16427:7;16418:6;16407:9;16403:22;16382:53;:::i;:::-;16372:63;;16327:118;15833:619;;;;;:::o;16458:114::-;16525:6;16559:5;16553:12;16543:22;;16458:114;;;:::o;16578:184::-;16677:11;16711:6;16706:3;16699:19;16751:4;16746:3;16742:14;16727:29;;16578:184;;;;:::o;16768:132::-;16835:4;16858:3;16850:11;;16888:4;16883:3;16879:14;16871:22;;16768:132;;;:::o;16906:108::-;16983:24;17001:5;16983:24;:::i;:::-;16978:3;16971:37;16906:108;;:::o;17020:179::-;17089:10;17110:46;17152:3;17144:6;17110:46;:::i;:::-;17188:4;17183:3;17179:14;17165:28;;17020:179;;;;:::o;17205:113::-;17275:4;17307;17302:3;17298:14;17290:22;;17205:113;;;:::o;17354:732::-;17473:3;17502:54;17550:5;17502:54;:::i;:::-;17572:86;17651:6;17646:3;17572:86;:::i;:::-;17565:93;;17682:56;17732:5;17682:56;:::i;:::-;17761:7;17792:1;17777:284;17802:6;17799:1;17796:13;17777:284;;;17878:6;17872:13;17905:63;17964:3;17949:13;17905:63;:::i;:::-;17898:70;;17991:60;18044:6;17991:60;:::i;:::-;17981:70;;17837:224;17824:1;17821;17817:9;17812:14;;17777:284;;;17781:14;18077:3;18070:10;;17478:608;;;17354:732;;;;:::o;18092:373::-;18235:4;18273:2;18262:9;18258:18;18250:26;;18322:9;18316:4;18312:20;18308:1;18297:9;18293:17;18286:47;18350:108;18453:4;18444:6;18350:108;:::i;:::-;18342:116;;18092:373;;;;:::o;18471:474::-;18539:6;18547;18596:2;18584:9;18575:7;18571:23;18567:32;18564:119;;;18602:79;;:::i;:::-;18564:119;18722:1;18747:53;18792:7;18783:6;18772:9;18768:22;18747:53;:::i;:::-;18737:63;;18693:117;18849:2;18875:53;18920:7;18911:6;18900:9;18896:22;18875:53;:::i;:::-;18865:63;;18820:118;18471:474;;;;;:::o;18951:180::-;18999:77;18996:1;18989:88;19096:4;19093:1;19086:15;19120:4;19117:1;19110:15;19137:320;19181:6;19218:1;19212:4;19208:12;19198:22;;19265:1;19259:4;19255:12;19286:18;19276:81;;19342:4;19334:6;19330:17;19320:27;;19276:81;19404:2;19396:6;19393:14;19373:18;19370:38;19367:84;;;19423:18;;:::i;:::-;19367:84;19188:269;19137:320;;;:::o;19463:231::-;19603:34;19599:1;19591:6;19587:14;19580:58;19672:14;19667:2;19659:6;19655:15;19648:39;19463:231;:::o;19700:366::-;19842:3;19863:67;19927:2;19922:3;19863:67;:::i;:::-;19856:74;;19939:93;20028:3;19939:93;:::i;:::-;20057:2;20052:3;20048:12;20041:19;;19700:366;;;:::o;20072:419::-;20238:4;20276:2;20265:9;20261:18;20253:26;;20325:9;20319:4;20315:20;20311:1;20300:9;20296:17;20289:47;20353:131;20479:4;20353:131;:::i;:::-;20345:139;;20072:419;;;:::o;20497:220::-;20637:34;20633:1;20625:6;20621:14;20614:58;20706:3;20701:2;20693:6;20689:15;20682:28;20497:220;:::o;20723:366::-;20865:3;20886:67;20950:2;20945:3;20886:67;:::i;:::-;20879:74;;20962:93;21051:3;20962:93;:::i;:::-;21080:2;21075:3;21071:12;21064:19;;20723:366;;;:::o;21095:419::-;21261:4;21299:2;21288:9;21284:18;21276:26;;21348:9;21342:4;21338:20;21334:1;21323:9;21319:17;21312:47;21376:131;21502:4;21376:131;:::i;:::-;21368:139;;21095:419;;;:::o;21520:243::-;21660:34;21656:1;21648:6;21644:14;21637:58;21729:26;21724:2;21716:6;21712:15;21705:51;21520:243;:::o;21769:366::-;21911:3;21932:67;21996:2;21991:3;21932:67;:::i;:::-;21925:74;;22008:93;22097:3;22008:93;:::i;:::-;22126:2;22121:3;22117:12;22110:19;;21769:366;;;:::o;22141:419::-;22307:4;22345:2;22334:9;22330:18;22322:26;;22394:9;22388:4;22384:20;22380:1;22369:9;22365:17;22358:47;22422:131;22548:4;22422:131;:::i;:::-;22414:139;;22141:419;;;:::o;22566:180::-;22706:32;22702:1;22694:6;22690:14;22683:56;22566:180;:::o;22752:366::-;22894:3;22915:67;22979:2;22974:3;22915:67;:::i;:::-;22908:74;;22991:93;23080:3;22991:93;:::i;:::-;23109:2;23104:3;23100:12;23093:19;;22752:366;;;:::o;23124:419::-;23290:4;23328:2;23317:9;23313:18;23305:26;;23377:9;23371:4;23367:20;23363:1;23352:9;23348:17;23341:47;23405:131;23531:4;23405:131;:::i;:::-;23397:139;;23124:419;;;:::o;23549:180::-;23597:77;23594:1;23587:88;23694:4;23691:1;23684:15;23718:4;23715:1;23708:15;23735:348;23775:7;23798:20;23816:1;23798:20;:::i;:::-;23793:25;;23832:20;23850:1;23832:20;:::i;:::-;23827:25;;24020:1;23952:66;23948:74;23945:1;23942:81;23937:1;23930:9;23923:17;23919:105;23916:131;;;24027:18;;:::i;:::-;23916:131;24075:1;24072;24068:9;24057:20;;23735:348;;;;:::o;24089:177::-;24229:29;24225:1;24217:6;24213:14;24206:53;24089:177;:::o;24272:366::-;24414:3;24435:67;24499:2;24494:3;24435:67;:::i;:::-;24428:74;;24511:93;24600:3;24511:93;:::i;:::-;24629:2;24624:3;24620:12;24613:19;;24272:366;;;:::o;24644:419::-;24810:4;24848:2;24837:9;24833:18;24825:26;;24897:9;24891:4;24887:20;24883:1;24872:9;24868:17;24861:47;24925:131;25051:4;24925:131;:::i;:::-;24917:139;;24644:419;;;:::o;25069:94::-;25102:8;25150:5;25146:2;25142:14;25121:35;;25069:94;;;:::o;25169:::-;25208:7;25237:20;25251:5;25237:20;:::i;:::-;25226:31;;25169:94;;;:::o;25269:100::-;25308:7;25337:26;25357:5;25337:26;:::i;:::-;25326:37;;25269:100;;;:::o;25375:157::-;25480:45;25500:24;25518:5;25500:24;:::i;:::-;25480:45;:::i;:::-;25475:3;25468:58;25375:157;;:::o;25538:79::-;25577:7;25606:5;25595:16;;25538:79;;;:::o;25623:157::-;25728:45;25748:24;25766:5;25748:24;:::i;:::-;25728:45;:::i;:::-;25723:3;25716:58;25623:157;;:::o;25786:96::-;25820:8;25869:5;25864:3;25860:15;25839:36;;25786:96;;;:::o;25888:93::-;25925:7;25954:21;25969:5;25954:21;:::i;:::-;25943:32;;25888:93;;;:::o;25987:95::-;26023:7;26052:24;26070:5;26052:24;:::i;:::-;26041:35;;25987:95;;;:::o;26088:145::-;26187:39;26204:21;26219:5;26204:21;:::i;:::-;26187:39;:::i;:::-;26182:3;26175:52;26088:145;;:::o;26239:525::-;26401:3;26416:75;26487:3;26478:6;26416:75;:::i;:::-;26516:2;26511:3;26507:12;26500:19;;26529:75;26600:3;26591:6;26529:75;:::i;:::-;26629:2;26624:3;26620:12;26613:19;;26642:69;26707:3;26698:6;26642:69;:::i;:::-;26736:1;26731:3;26727:11;26720:18;;26755:3;26748:10;;26239:525;;;;;;:::o;26770:174::-;26910:26;26906:1;26898:6;26894:14;26887:50;26770:174;:::o;26950:366::-;27092:3;27113:67;27177:2;27172:3;27113:67;:::i;:::-;27106:74;;27189:93;27278:3;27189:93;:::i;:::-;27307:2;27302:3;27298:12;27291:19;;26950:366;;;:::o;27322:419::-;27488:4;27526:2;27515:9;27511:18;27503:26;;27575:9;27569:4;27565:20;27561:1;27550:9;27546:17;27539:47;27603:131;27729:4;27603:131;:::i;:::-;27595:139;;27322:419;;;:::o;27747:191::-;27787:4;27807:20;27825:1;27807:20;:::i;:::-;27802:25;;27841:20;27859:1;27841:20;:::i;:::-;27836:25;;27880:1;27877;27874:8;27871:34;;;27885:18;;:::i;:::-;27871:34;27930:1;27927;27923:9;27915:17;;27747:191;;;;:::o;27944:221::-;28084:34;28080:1;28072:6;28068:14;28061:58;28153:4;28148:2;28140:6;28136:15;28129:29;27944:221;:::o;28171:366::-;28313:3;28334:67;28398:2;28393:3;28334:67;:::i;:::-;28327:74;;28410:93;28499:3;28410:93;:::i;:::-;28528:2;28523:3;28519:12;28512:19;;28171:366;;;:::o;28543:419::-;28709:4;28747:2;28736:9;28732:18;28724:26;;28796:9;28790:4;28786:20;28782:1;28771:9;28767:17;28760:47;28824:131;28950:4;28824:131;:::i;:::-;28816:139;;28543:419;;;:::o;28968:236::-;29108:34;29104:1;29096:6;29092:14;29085:58;29177:19;29172:2;29164:6;29160:15;29153:44;28968:236;:::o;29210:366::-;29352:3;29373:67;29437:2;29432:3;29373:67;:::i;:::-;29366:74;;29449:93;29538:3;29449:93;:::i;:::-;29567:2;29562:3;29558:12;29551:19;;29210:366;;;:::o;29582:419::-;29748:4;29786:2;29775:9;29771:18;29763:26;;29835:9;29829:4;29825:20;29821:1;29810:9;29806:17;29799:47;29863:131;29989:4;29863:131;:::i;:::-;29855:139;;29582:419;;;:::o;30007:182::-;30147:34;30143:1;30135:6;30131:14;30124:58;30007:182;:::o;30195:366::-;30337:3;30358:67;30422:2;30417:3;30358:67;:::i;:::-;30351:74;;30434:93;30523:3;30434:93;:::i;:::-;30552:2;30547:3;30543:12;30536:19;;30195:366;;;:::o;30567:419::-;30733:4;30771:2;30760:9;30756:18;30748:26;;30820:9;30814:4;30810:20;30806:1;30795:9;30791:17;30784:47;30848:131;30974:4;30848:131;:::i;:::-;30840:139;;30567:419;;;:::o;30992:180::-;31132:32;31128:1;31120:6;31116:14;31109:56;30992:180;:::o;31178:366::-;31320:3;31341:67;31405:2;31400:3;31341:67;:::i;:::-;31334:74;;31417:93;31506:3;31417:93;:::i;:::-;31535:2;31530:3;31526:12;31519:19;;31178:366;;;:::o;31550:419::-;31716:4;31754:2;31743:9;31739:18;31731:26;;31803:9;31797:4;31793:20;31789:1;31778:9;31774:17;31767:47;31831:131;31957:4;31831:131;:::i;:::-;31823:139;;31550:419;;;:::o;31975:173::-;32115:25;32111:1;32103:6;32099:14;32092:49;31975:173;:::o;32154:366::-;32296:3;32317:67;32381:2;32376:3;32317:67;:::i;:::-;32310:74;;32393:93;32482:3;32393:93;:::i;:::-;32511:2;32506:3;32502:12;32495:19;;32154:366;;;:::o;32526:419::-;32692:4;32730:2;32719:9;32715:18;32707:26;;32779:9;32773:4;32769:20;32765:1;32754:9;32750:17;32743:47;32807:131;32933:4;32807:131;:::i;:::-;32799:139;;32526:419;;;:::o;32951:228::-;33091:34;33087:1;33079:6;33075:14;33068:58;33160:11;33155:2;33147:6;33143:15;33136:36;32951:228;:::o;33185:366::-;33327:3;33348:67;33412:2;33407:3;33348:67;:::i;:::-;33341:74;;33424:93;33513:3;33424:93;:::i;:::-;33542:2;33537:3;33533:12;33526:19;;33185:366;;;:::o;33557:419::-;33723:4;33761:2;33750:9;33746:18;33738:26;;33810:9;33804:4;33800:20;33796:1;33785:9;33781:17;33774:47;33838:131;33964:4;33838:131;:::i;:::-;33830:139;;33557:419;;;:::o;33982:171::-;34122:23;34118:1;34110:6;34106:14;34099:47;33982:171;:::o;34159:366::-;34301:3;34322:67;34386:2;34381:3;34322:67;:::i;:::-;34315:74;;34398:93;34487:3;34398:93;:::i;:::-;34516:2;34511:3;34507:12;34500:19;;34159:366;;;:::o;34531:419::-;34697:4;34735:2;34724:9;34720:18;34712:26;;34784:9;34778:4;34774:20;34770:1;34759:9;34755:17;34748:47;34812:131;34938:4;34812:131;:::i;:::-;34804:139;;34531:419;;;:::o;34956:229::-;35096:34;35092:1;35084:6;35080:14;35073:58;35165:12;35160:2;35152:6;35148:15;35141:37;34956:229;:::o;35191:366::-;35333:3;35354:67;35418:2;35413:3;35354:67;:::i;:::-;35347:74;;35430:93;35519:3;35430:93;:::i;:::-;35548:2;35543:3;35539:12;35532:19;;35191:366;;;:::o;35563:419::-;35729:4;35767:2;35756:9;35752:18;35744:26;;35816:9;35810:4;35806:20;35802:1;35791:9;35787:17;35780:47;35844:131;35970:4;35844:131;:::i;:::-;35836:139;;35563:419;;;:::o;35988:178::-;36128:30;36124:1;36116:6;36112:14;36105:54;35988:178;:::o;36172:366::-;36314:3;36335:67;36399:2;36394:3;36335:67;:::i;:::-;36328:74;;36411:93;36500:3;36411:93;:::i;:::-;36529:2;36524:3;36520:12;36513:19;;36172:366;;;:::o;36544:419::-;36710:4;36748:2;36737:9;36733:18;36725:26;;36797:9;36791:4;36787:20;36783:1;36772:9;36768:17;36761:47;36825:131;36951:4;36825:131;:::i;:::-;36817:139;;36544:419;;;:::o;36969:143::-;37026:5;37057:6;37051:13;37042:22;;37073:33;37100:5;37073:33;:::i;:::-;36969:143;;;;:::o;37118:351::-;37188:6;37237:2;37225:9;37216:7;37212:23;37208:32;37205:119;;;37243:79;;:::i;:::-;37205:119;37363:1;37388:64;37444:7;37435:6;37424:9;37420:22;37388:64;:::i;:::-;37378:74;;37334:128;37118:351;;;;:::o;37475:168::-;37615:20;37611:1;37603:6;37599:14;37592:44;37475:168;:::o;37649:366::-;37791:3;37812:67;37876:2;37871:3;37812:67;:::i;:::-;37805:74;;37888:93;37977:3;37888:93;:::i;:::-;38006:2;38001:3;37997:12;37990:19;;37649:366;;;:::o;38021:419::-;38187:4;38225:2;38214:9;38210:18;38202:26;;38274:9;38268:4;38264:20;38260:1;38249:9;38245:17;38238:47;38302:131;38428:4;38302:131;:::i;:::-;38294:139;;38021:419;;;:::o;38446:221::-;38586:34;38582:1;38574:6;38570:14;38563:58;38655:4;38650:2;38642:6;38638:15;38631:29;38446:221;:::o;38673:366::-;38815:3;38836:67;38900:2;38895:3;38836:67;:::i;:::-;38829:74;;38912:93;39001:3;38912:93;:::i;:::-;39030:2;39025:3;39021:12;39014:19;;38673:366;;;:::o;39045:419::-;39211:4;39249:2;39238:9;39234:18;39226:26;;39298:9;39292:4;39288:20;39284:1;39273:9;39269:17;39262:47;39326:131;39452:4;39326:131;:::i;:::-;39318:139;;39045:419;;;:::o;39470:177::-;39610:29;39606:1;39598:6;39594:14;39587:53;39470:177;:::o;39653:366::-;39795:3;39816:67;39880:2;39875:3;39816:67;:::i;:::-;39809:74;;39892:93;39981:3;39892:93;:::i;:::-;40010:2;40005:3;40001:12;39994:19;;39653:366;;;:::o;40025:419::-;40191:4;40229:2;40218:9;40214:18;40206:26;;40278:9;40272:4;40268:20;40264:1;40253:9;40249:17;40242:47;40306:131;40432:4;40306:131;:::i;:::-;40298:139;;40025:419;;;:::o;40450:176::-;40590:28;40586:1;40578:6;40574:14;40567:52;40450:176;:::o;40632:366::-;40774:3;40795:67;40859:2;40854:3;40795:67;:::i;:::-;40788:74;;40871:93;40960:3;40871:93;:::i;:::-;40989:2;40984:3;40980:12;40973:19;;40632:366;;;:::o;41004:419::-;41170:4;41208:2;41197:9;41193:18;41185:26;;41257:9;41251:4;41247:20;41243:1;41232:9;41228:17;41221:47;41285:131;41411:4;41285:131;:::i;:::-;41277:139;;41004:419;;;:::o;41429:305::-;41469:3;41488:20;41506:1;41488:20;:::i;:::-;41483:25;;41522:20;41540:1;41522:20;:::i;:::-;41517:25;;41676:1;41608:66;41604:74;41601:1;41598:81;41595:107;;;41682:18;;:::i;:::-;41595:107;41726:1;41723;41719:9;41712:16;;41429:305;;;;:::o;41740:180::-;41788:77;41785:1;41778:88;41885:4;41882:1;41875:15;41909:4;41906:1;41899:15;41926:233;41965:3;41988:24;42006:5;41988:24;:::i;:::-;41979:33;;42034:66;42027:5;42024:77;42021:103;;;42104:18;;:::i;:::-;42021:103;42151:1;42144:5;42140:13;42133:20;;41926:233;;;:::o;42165:234::-;42305:34;42301:1;42293:6;42289:14;42282:58;42374:17;42369:2;42361:6;42357:15;42350:42;42165:234;:::o;42405:366::-;42547:3;42568:67;42632:2;42627:3;42568:67;:::i;:::-;42561:74;;42644:93;42733:3;42644:93;:::i;:::-;42762:2;42757:3;42753:12;42746:19;;42405:366;;;:::o;42777:419::-;42943:4;42981:2;42970:9;42966:18;42958:26;;43030:9;43024:4;43020:20;43016:1;43005:9;43001:17;42994:47;43058:131;43184:4;43058:131;:::i;:::-;43050:139;;42777:419;;;:::o;43202:148::-;43304:11;43341:3;43326:18;;43202:148;;;;:::o;43356:141::-;43405:4;43428:3;43420:11;;43451:3;43448:1;43441:14;43485:4;43482:1;43472:18;43464:26;;43356:141;;;:::o;43527:845::-;43630:3;43667:5;43661:12;43696:36;43722:9;43696:36;:::i;:::-;43748:89;43830:6;43825:3;43748:89;:::i;:::-;43741:96;;43868:1;43857:9;43853:17;43884:1;43879:137;;;;44030:1;44025:341;;;;43846:520;;43879:137;43963:4;43959:9;43948;43944:25;43939:3;43932:38;43999:6;43994:3;43990:16;43983:23;;43879:137;;44025:341;44092:38;44124:5;44092:38;:::i;:::-;44152:1;44166:154;44180:6;44177:1;44174:13;44166:154;;;44254:7;44248:14;44244:1;44239:3;44235:11;44228:35;44304:1;44295:7;44291:15;44280:26;;44202:4;44199:1;44195:12;44190:17;;44166:154;;;44349:6;44344:3;44340:16;44333:23;;44032:334;;43846:520;;43634:738;;43527:845;;;;:::o;44378:377::-;44484:3;44512:39;44545:5;44512:39;:::i;:::-;44567:89;44649:6;44644:3;44567:89;:::i;:::-;44560:96;;44665:52;44710:6;44705:3;44698:4;44691:5;44687:16;44665:52;:::i;:::-;44742:6;44737:3;44733:16;44726:23;;44488:267;44378:377;;;;:::o;44761:583::-;44983:3;45005:92;45093:3;45084:6;45005:92;:::i;:::-;44998:99;;45114:95;45205:3;45196:6;45114:95;:::i;:::-;45107:102;;45226:92;45314:3;45305:6;45226:92;:::i;:::-;45219:99;;45335:3;45328:10;;44761:583;;;;;;:::o;45350:125::-;45416:7;45445:24;45463:5;45445:24;:::i;:::-;45434:35;;45350:125;;;:::o;45481:180::-;45583:53;45630:5;45583:53;:::i;:::-;45576:5;45573:64;45563:92;;45651:1;45648;45641:12;45563:92;45481:180;:::o;45667:201::-;45753:5;45784:6;45778:13;45769:22;;45800:62;45856:5;45800:62;:::i;:::-;45667:201;;;;:::o;45874:409::-;45973:6;46022:2;46010:9;46001:7;45997:23;45993:32;45990:119;;;46028:79;;:::i;:::-;45990:119;46148:1;46173:93;46258:7;46249:6;46238:9;46234:22;46173:93;:::i;:::-;46163:103;;46119:157;45874:409;;;;:::o;46289:225::-;46429:34;46425:1;46417:6;46413:14;46406:58;46498:8;46493:2;46485:6;46481:15;46474:33;46289:225;:::o;46520:366::-;46662:3;46683:67;46747:2;46742:3;46683:67;:::i;:::-;46676:74;;46759:93;46848:3;46759:93;:::i;:::-;46877:2;46872:3;46868:12;46861:19;;46520:366;;;:::o;46892:419::-;47058:4;47096:2;47085:9;47081:18;47073:26;;47145:9;47139:4;47135:20;47131:1;47120:9;47116:17;47109:47;47173:131;47299:4;47173:131;:::i;:::-;47165:139;;46892:419;;;:::o;47317:168::-;47457:20;47453:1;47445:6;47441:14;47434:44;47317:168;:::o;47491:366::-;47633:3;47654:67;47718:2;47713:3;47654:67;:::i;:::-;47647:74;;47730:93;47819:3;47730:93;:::i;:::-;47848:2;47843:3;47839:12;47832:19;;47491:366;;;:::o;47863:419::-;48029:4;48067:2;48056:9;48052:18;48044:26;;48116:9;48110:4;48106:20;48102:1;48091:9;48087:17;48080:47;48144:131;48270:4;48144:131;:::i;:::-;48136:139;;47863:419;;;:::o;48288:181::-;48428:33;48424:1;48416:6;48412:14;48405:57;48288:181;:::o;48475:366::-;48617:3;48638:67;48702:2;48697:3;48638:67;:::i;:::-;48631:74;;48714:93;48803:3;48714:93;:::i;:::-;48832:2;48827:3;48823:12;48816:19;;48475:366;;;:::o;48847:419::-;49013:4;49051:2;49040:9;49036:18;49028:26;;49100:9;49094:4;49090:20;49086:1;49075:9;49071:17;49064:47;49128:131;49254:4;49128:131;:::i;:::-;49120:139;;48847:419;;;:::o;49272:231::-;49412:34;49408:1;49400:6;49396:14;49389:58;49481:14;49476:2;49468:6;49464:15;49457:39;49272:231;:::o;49509:366::-;49651:3;49672:67;49736:2;49731:3;49672:67;:::i;:::-;49665:74;;49748:93;49837:3;49748:93;:::i;:::-;49866:2;49861:3;49857:12;49850:19;;49509:366;;;:::o;49881:419::-;50047:4;50085:2;50074:9;50070:18;50062:26;;50134:9;50128:4;50124:20;50120:1;50109:9;50105:17;50098:47;50162:131;50288:4;50162:131;:::i;:::-;50154:139;;49881:419;;;:::o;50306:228::-;50446:34;50442:1;50434:6;50430:14;50423:58;50515:11;50510:2;50502:6;50498:15;50491:36;50306:228;:::o;50540:366::-;50682:3;50703:67;50767:2;50762:3;50703:67;:::i;:::-;50696:74;;50779:93;50868:3;50779:93;:::i;:::-;50897:2;50892:3;50888:12;50881:19;;50540:366;;;:::o;50912:419::-;51078:4;51116:2;51105:9;51101:18;51093:26;;51165:9;51159:4;51155:20;51151:1;51140:9;51136:17;51129:47;51193:131;51319:4;51193:131;:::i;:::-;51185:139;;50912:419;;;:::o;51337:223::-;51477:34;51473:1;51465:6;51461:14;51454:58;51546:6;51541:2;51533:6;51529:15;51522:31;51337:223;:::o;51566:366::-;51708:3;51729:67;51793:2;51788:3;51729:67;:::i;:::-;51722:74;;51805:93;51894:3;51805:93;:::i;:::-;51923:2;51918:3;51914:12;51907:19;;51566:366;;;:::o;51938:419::-;52104:4;52142:2;52131:9;52127:18;52119:26;;52191:9;52185:4;52181:20;52177:1;52166:9;52162:17;52155:47;52219:131;52345:4;52219:131;:::i;:::-;52211:139;;51938:419;;;:::o;52363:175::-;52503:27;52499:1;52491:6;52487:14;52480:51;52363:175;:::o;52544:366::-;52686:3;52707:67;52771:2;52766:3;52707:67;:::i;:::-;52700:74;;52783:93;52872:3;52783:93;:::i;:::-;52901:2;52896:3;52892:12;52885:19;;52544:366;;;:::o;52916:419::-;53082:4;53120:2;53109:9;53105:18;53097:26;;53169:9;53163:4;53159:20;53155:1;53144:9;53140:17;53133:47;53197:131;53323:4;53197:131;:::i;:::-;53189:139;;52916:419;;;:::o;53341:237::-;53481:34;53477:1;53469:6;53465:14;53458:58;53550:20;53545:2;53537:6;53533:15;53526:45;53341:237;:::o;53584:366::-;53726:3;53747:67;53811:2;53806:3;53747:67;:::i;:::-;53740:74;;53823:93;53912:3;53823:93;:::i;:::-;53941:2;53936:3;53932:12;53925:19;;53584:366;;;:::o;53956:419::-;54122:4;54160:2;54149:9;54145:18;54137:26;;54209:9;54203:4;54199:20;54195:1;54184:9;54180:17;54173:47;54237:131;54363:4;54237:131;:::i;:::-;54229:139;;53956:419;;;:::o;54381:180::-;54429:77;54426:1;54419:88;54526:4;54523:1;54516:15;54550:4;54547:1;54540:15;54567:185;54607:1;54624:20;54642:1;54624:20;:::i;:::-;54619:25;;54658:20;54676:1;54658:20;:::i;:::-;54653:25;;54697:1;54687:35;;54702:18;;:::i;:::-;54687:35;54744:1;54741;54737:9;54732:14;;54567:185;;;;:::o;54758:176::-;54790:1;54807:20;54825:1;54807:20;:::i;:::-;54802:25;;54841:20;54859:1;54841:20;:::i;:::-;54836:25;;54880:1;54870:35;;54885:18;;:::i;:::-;54870:35;54926:1;54923;54919:9;54914:14;;54758:176;;;;:::o;54940:79::-;54979:7;55008:5;54997:16;;54940:79;;;:::o;55025:157::-;55130:45;55150:24;55168:5;55150:24;:::i;:::-;55130:45;:::i;:::-;55125:3;55118:58;55025:157;;:::o;55188:397::-;55328:3;55343:75;55414:3;55405:6;55343:75;:::i;:::-;55443:2;55438:3;55434:12;55427:19;;55456:75;55527:3;55518:6;55456:75;:::i;:::-;55556:2;55551:3;55547:12;55540:19;;55576:3;55569:10;;55188:397;;;;;:::o;55591:98::-;55642:6;55676:5;55670:12;55660:22;;55591:98;;;:::o;55695:168::-;55778:11;55812:6;55807:3;55800:19;55852:4;55847:3;55843:14;55828:29;;55695:168;;;;:::o;55869:360::-;55955:3;55983:38;56015:5;55983:38;:::i;:::-;56037:70;56100:6;56095:3;56037:70;:::i;:::-;56030:77;;56116:52;56161:6;56156:3;56149:4;56142:5;56138:16;56116:52;:::i;:::-;56193:29;56215:6;56193:29;:::i;:::-;56188:3;56184:39;56177:46;;55959:270;55869:360;;;;:::o;56235:640::-;56430:4;56468:3;56457:9;56453:19;56445:27;;56482:71;56550:1;56539:9;56535:17;56526:6;56482:71;:::i;:::-;56563:72;56631:2;56620:9;56616:18;56607:6;56563:72;:::i;:::-;56645;56713:2;56702:9;56698:18;56689:6;56645:72;:::i;:::-;56764:9;56758:4;56754:20;56749:2;56738:9;56734:18;56727:48;56792:76;56863:4;56854:6;56792:76;:::i;:::-;56784:84;;56235:640;;;;;;;:::o;56881:141::-;56937:5;56968:6;56962:13;56953:22;;56984:32;57010:5;56984:32;:::i;:::-;56881:141;;;;:::o;57028:349::-;57097:6;57146:2;57134:9;57125:7;57121:23;57117:32;57114:119;;;57152:79;;:::i;:::-;57114:119;57272:1;57297:63;57352:7;57343:6;57332:9;57328:22;57297:63;:::i;:::-;57287:73;;57243:127;57028:349;;;;:::o;57383:182::-;57523:34;57519:1;57511:6;57507:14;57500:58;57383:182;:::o;57571:366::-;57713:3;57734:67;57798:2;57793:3;57734:67;:::i;:::-;57727:74;;57810:93;57899:3;57810:93;:::i;:::-;57928:2;57923:3;57919:12;57912:19;;57571:366;;;:::o;57943:419::-;58109:4;58147:2;58136:9;58132:18;58124:26;;58196:9;58190:4;58186:20;58182:1;58171:9;58167:17;58160:47;58224:131;58350:4;58224:131;:::i;:::-;58216:139;;57943:419;;;:::o;58368:178::-;58508:30;58504:1;58496:6;58492:14;58485:54;58368:178;:::o;58552:366::-;58694:3;58715:67;58779:2;58774:3;58715:67;:::i;:::-;58708:74;;58791:93;58880:3;58791:93;:::i;:::-;58909:2;58904:3;58900:12;58893:19;;58552:366;;;:::o;58924:419::-;59090:4;59128:2;59117:9;59113:18;59105:26;;59177:9;59171:4;59167:20;59163:1;59152:9;59148:17;59141:47;59205:131;59331:4;59205:131;:::i;:::-;59197:139;;58924:419;;;:::o
Swarm Source
ipfs://00703cd3b7dda3ab246be8df088b3bb40876d9efaa1747962ed0a7b87508ba9e
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.