More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,653 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 21273648 | 25 hrs ago | IN | 0 ETH | 0.00554447 | ||||
Claim Rewards | 20900284 | 53 days ago | IN | 0 ETH | 0.00070451 | ||||
Claim Rewards | 20668456 | 85 days ago | IN | 0 ETH | 0.00018465 | ||||
Claim Rewards | 20410049 | 121 days ago | IN | 0 ETH | 0.00015441 | ||||
Withdraw | 20372222 | 126 days ago | IN | 0 ETH | 0.0009669 | ||||
Withdraw | 20372178 | 126 days ago | IN | 0 ETH | 0.00077443 | ||||
Withdraw | 20372146 | 126 days ago | IN | 0 ETH | 0.01200784 | ||||
Claim Rewards | 20371868 | 126 days ago | IN | 0 ETH | 0.00395632 | ||||
Withdraw | 20338895 | 131 days ago | IN | 0 ETH | 0.00091866 | ||||
Withdraw | 20264240 | 141 days ago | IN | 0 ETH | 0.00168373 | ||||
Claim Rewards | 20264236 | 141 days ago | IN | 0 ETH | 0.00054764 | ||||
Withdraw | 20156224 | 157 days ago | IN | 0 ETH | 0.00047115 | ||||
Claim Rewards | 20156160 | 157 days ago | IN | 0 ETH | 0.00030187 | ||||
Claim Rewards | 20156159 | 157 days ago | IN | 0 ETH | 0.00025214 | ||||
Withdraw | 20148694 | 158 days ago | IN | 0 ETH | 0.00187906 | ||||
Claim Rewards | 20148686 | 158 days ago | IN | 0 ETH | 0.00060794 | ||||
Claim Rewards | 20099493 | 164 days ago | IN | 0 ETH | 0.00007955 | ||||
Claim Rewards | 20099223 | 165 days ago | IN | 0 ETH | 0.00032983 | ||||
Withdraw | 20099222 | 165 days ago | IN | 0 ETH | 0.00100166 | ||||
Withdraw | 20016478 | 176 days ago | IN | 0 ETH | 0.00343211 | ||||
Claim Rewards | 19936427 | 187 days ago | IN | 0 ETH | 0.00013498 | ||||
Withdraw | 19936412 | 187 days ago | IN | 0 ETH | 0.00081413 | ||||
Claim Rewards | 19862653 | 198 days ago | IN | 0 ETH | 0.00320015 | ||||
Claim Rewards | 19748539 | 214 days ago | IN | 0 ETH | 0.00053904 | ||||
Claim Rewards | 19709828 | 219 days ago | IN | 0 ETH | 0.00066861 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CubStaking
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-24 */ // Sources flattened with hardhat v2.8.4 https://hardhat.org // File @openzeppelin/contracts/token/ERC721/[email protected] // SPDX-License-Identifier: MIT // 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/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @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/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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/structs/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/structs/EnumerableSet.sol) /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } } // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/math/Math.sol) /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } } // File @openzeppelin/contracts/utils/cryptography/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) /** * @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 = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/interfaces/IJungleCoin.sol interface IJungleCoin is IERC20 { function mint(address _account, uint _amount) external; function burn(uint _amount) external; } // File hardhat/[email protected] library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } } // File contracts/CubStaking.sol contract CubStaking is IERC721Receiver, Ownable { using EnumerableSet for EnumerableSet.UintSet; address public jungleCoin; address public royalCubs; uint256 public expiration; //expiry block number (avg 15s per block) mapping(address => EnumerableSet.UintSet) private _deposits; // user => tokenId => last interacted block mapping(address => mapping(uint256 => uint256)) public depositBlocks; // mapping (uint256 => uint256) public tokenRarity; mapping (uint256 => bytes32) public tokenRarityRoot; // tokens per day per rarity uint256[] public rewardRate; bool public started; constructor( address _jungleCoin, address _royalCubs, uint256 _expiration, uint256 _baseRewardRate ) { jungleCoin = _jungleCoin; royalCubs = _royalCubs; expiration = block.number + _expiration; // number of tokens Per day rewardRate.push(_baseRewardRate); started = false; } function setRate(uint256 _rarity, uint256 _rate) public onlyOwner() { require(_rarity <= rewardRate.length, "Cannot skip"); if (_rarity == rewardRate.length) { rewardRate.push(_rate); } else { rewardRate[_rarity] = _rate; } } function setRarityRoot(uint256 _rarity, bytes32 _root) public onlyOwner() { tokenRarityRoot[_rarity] = _root; } function setExpiration(uint256 _expiration) public onlyOwner() { expiration = _expiration; } function toggleStart() public onlyOwner() { started = !started; } function setTokenAddress(address _tokenAddress) public onlyOwner() { // Used to change rewards token if needed jungleCoin = _tokenAddress; } function onERC721Received( address, address, uint256, bytes calldata ) external pure override returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } function depositsOf(address account) external view returns (uint256[] memory) { EnumerableSet.UintSet storage depositSet = _deposits[account]; uint256[] memory tokenIds = new uint256[](depositSet.length()); for (uint256 i; i < depositSet.length(); i++) { tokenIds[i] = depositSet.at(i); } return tokenIds; } function findRate(uint256 rarity) public view returns (uint256 rate) { uint256 perDay = rewardRate[rarity]; // 6000 blocks per day // perDay / 6000 = reward per block rate = (perDay * 1e18) / 6000; return rate; } function calculateRewards( address account, uint256[] memory tokenIds, uint256[] memory rarities ) public view returns (uint256[] memory rewards) { rewards = new uint256[](tokenIds.length); for (uint256 i; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; uint256 rarity = rarities[i]; uint256 rate = findRate(rarity); rewards[i] = rate * (_deposits[account].contains(tokenId) ? 1 : 0) * (Math.min(block.number, expiration) - depositBlocks[account][tokenId]); } } function claimRewards( uint256[] calldata tokenIds, uint256[] calldata rarities, bytes32[][] calldata proofs ) public { uint256 reward; uint256 curblock = Math.min(block.number, expiration); _verifyRarities(tokenIds, rarities, proofs); uint256[] memory rewards = calculateRewards(msg.sender, tokenIds, rarities); for (uint256 i; i < tokenIds.length; i++) { reward += rewards[i]; depositBlocks[msg.sender][tokenIds[i]] = curblock; } if (reward > 0) { IJungleCoin(jungleCoin).mint(msg.sender, reward); } } function deposit(uint256[] calldata tokenIds) external { require(started, "not started yet"); uint256 curblock = Math.min(block.number, expiration); for (uint256 i; i < tokenIds.length; i++) { depositBlocks[msg.sender][tokenIds[i]] = curblock; } for (uint256 i; i < tokenIds.length; i++) { IERC721(royalCubs).safeTransferFrom( msg.sender, address(this), tokenIds[i], '' ); _deposits[msg.sender].add(tokenIds[i]); } } function adminDeposit(uint256[] calldata tokenIds) onlyOwner() external { uint256 curblock = Math.min(block.number, expiration); for (uint256 i; i < tokenIds.length; i++) { depositBlocks[msg.sender][tokenIds[i]] = curblock; } for (uint256 i; i < tokenIds.length; i++) { IERC721(royalCubs).safeTransferFrom( msg.sender, address(this), tokenIds[i], '' ); _deposits[msg.sender].add(tokenIds[i]); } } function withdraw( uint256[] calldata tokenIds, uint256[] calldata rarities, bytes32[][] calldata proofs ) external { claimRewards(tokenIds, rarities, proofs); for (uint256 i; i < tokenIds.length; i++) { require( _deposits[msg.sender].contains(tokenIds[i]), "Token not deposited" ); _deposits[msg.sender].remove(tokenIds[i]); IERC721(royalCubs).safeTransferFrom( address(this), msg.sender, tokenIds[i], '' ); } } function emergencyWithdraw(uint256[] calldata tokenIds) external { for (uint256 i; i < tokenIds.length; i++) { require( _deposits[msg.sender].contains(tokenIds[i]), "Token not deposited" ); _deposits[msg.sender].remove(tokenIds[i]); IERC721(royalCubs).safeTransferFrom( address(this), msg.sender, tokenIds[i], '' ); } } function _verifyRarities( uint[] memory _tokenIds, uint[] memory _rarities, bytes32[][] calldata _proofs ) internal view { for (uint i = 0; i < _tokenIds.length; i++) { if (_rarities[i] > 0) { require(_isRarity(_tokenIds[i], _rarities[i], _proofs[i])); } } } function _isRarity( uint _tokenId, uint _rarity, bytes32[] calldata _proof ) internal view returns (bool) { bytes32 root = tokenRarityRoot[_rarity]; return MerkleProof.verify(_proof, root, _leaf(_tokenId)); } function _leaf(uint _tokenId) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_tokenId)); } receive() external payable {} function salvage() external onlyOwner { payable(owner()).transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_jungleCoin","type":"address"},{"internalType":"address","name":"_royalCubs","type":"address"},{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"uint256","name":"_baseRewardRate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"adminDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"rarities","type":"uint256[]"}],"name":"calculateRewards","outputs":[{"internalType":"uint256[]","name":"rewards","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"rarities","type":"uint256[]"},{"internalType":"bytes32[][]","name":"proofs","type":"bytes32[][]"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"depositBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"depositsOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rarity","type":"uint256"}],"name":"findRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jungleCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royalCubs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"salvage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expiration","type":"uint256"}],"name":"setExpiration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rarity","type":"uint256"},{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRarityRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rarity","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenRarityRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"rarities","type":"uint256[]"},{"internalType":"bytes32[][]","name":"proofs","type":"bytes32[][]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620035b0380380620035b0833981810160405281019062000037919062000235565b620000576200004b6200013b60201b60201c565b6200014360201b60201c565b83600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508143620000e79190620002a1565b60038190555060078190806001815401808255809150506001900390600052602060002001600090919091909150556000600860006101000a81548160ff021916908315150217905550505050506200039f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008151905062000218816200036b565b92915050565b6000815190506200022f8162000385565b92915050565b600080600080608085870312156200024c57600080fd5b60006200025c8782880162000207565b94505060206200026f8782880162000207565b935050604062000282878288016200021e565b925050606062000295878288016200021e565b91505092959194509250565b6000620002ae8262000332565b9150620002bb8362000332565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620002f357620002f26200033c565b5b828201905092915050565b60006200030b8262000312565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6200037681620002fe565b81146200038257600080fd5b50565b620003908162000332565b81146200039c57600080fd5b50565b61320180620003af6000396000f3fe60806040526004361061016a5760003560e01c8063533c2d8d116100d1578063a1fb2fd01161008a578063d1941b0611610064578063d1941b061461051f578063e243545614610548578063e3a9db1a14610571578063f2fde38b146105ae57610171565b8063a1fb2fd01461048e578063cbe81c8c146104b9578063cea01962146104e257610171565b8063533c2d8d14610380578063598b8e71146103a9578063715018a6146103d25780637e1ad99c146103e95780638da5cb5b14610426578063940414ce1461045157610171565b806326a4e8d21161012357806326a4e8d2146102745780632f9777ee1461029d578063422b4900146102c65780634665096d1461030357806346df2ccb1461032e578063515a20ba1461035757610171565b806306dfe2d11461017657806311cbef3d146101b3578063150b7a02146101ca5780631e534906146102075780631eaf0e621461021e5780631f2698ab1461024957610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d60048036038101906101989190612782565b6105d7565b6040516101aa9190612cbd565b60405180910390f35b3480156101bf57600080fd5b506101c86105fc565b005b3480156101d657600080fd5b506101f160048036038101906101ec9190612683565b6106a4565b6040516101fe9190612c02565b60405180910390f35b34801561021357600080fd5b5061021c6106b9565b005b34801561022a57600080fd5b50610233610785565b6040516102409190612b1c565b60405180910390f35b34801561025557600080fd5b5061025e6107ab565b60405161026b9190612bcc565b60405180910390f35b34801561028057600080fd5b5061029b6004803603810190610296919061265a565b6107be565b005b3480156102a957600080fd5b506102c460048036038101906102bf91906128d0565b61087e565b005b3480156102d257600080fd5b506102ed60048036038101906102e891906128a7565b610916565b6040516102fa9190612be7565b60405180910390f35b34801561030f57600080fd5b5061031861092e565b6040516103259190612cbd565b60405180910390f35b34801561033a57600080fd5b506103556004803603810190610350919061290c565b610934565b005b34801561036357600080fd5b5061037e600480360381019061037991906128a7565b610a81565b005b34801561038c57600080fd5b506103a760048036038101906103a291906127be565b610b07565b005b3480156103b557600080fd5b506103d060048036038101906103cb91906127be565b610dd1565b005b3480156103de57600080fd5b506103e761106e565b005b3480156103f557600080fd5b50610410600480360381019061040b9190612703565b6110f6565b60405161041d9190612baa565b60405180910390f35b34801561043257600080fd5b5061043b61134e565b6040516104489190612b1c565b60405180910390f35b34801561045d57600080fd5b50610478600480360381019061047391906128a7565b611377565b6040516104859190612cbd565b60405180910390f35b34801561049a57600080fd5b506104a36113ea565b6040516104b09190612b1c565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190612803565b611410565b005b3480156104ee57600080fd5b50610509600480360381019061050491906128a7565b6116e8565b6040516105169190612cbd565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906127be565b61170c565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612803565b611962565b005b34801561057d57600080fd5b506105986004803603810190610593919061265a565b611bca565b6040516105a59190612baa565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d0919061265a565b611d13565b005b6005602052816000526040600020602052806000526040600020600091509150505481565b610604611e0b565b73ffffffffffffffffffffffffffffffffffffffff1661062261134e565b73ffffffffffffffffffffffffffffffffffffffff1614610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066f90612c7d565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b600063150b7a0260e01b905095945050505050565b6106c1611e0b565b73ffffffffffffffffffffffffffffffffffffffff166106df61134e565b73ffffffffffffffffffffffffffffffffffffffff1614610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072c90612c7d565b60405180910390fd5b61073d61134e565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610782573d6000803e3d6000fd5b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900460ff1681565b6107c6611e0b565b73ffffffffffffffffffffffffffffffffffffffff166107e461134e565b73ffffffffffffffffffffffffffffffffffffffff161461083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190612c7d565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610886611e0b565b73ffffffffffffffffffffffffffffffffffffffff166108a461134e565b73ffffffffffffffffffffffffffffffffffffffff16146108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190612c7d565b60405180910390fd5b8060066000848152602001908152602001600020819055505050565b60066020528060005260406000206000915090505481565b60035481565b61093c611e0b565b73ffffffffffffffffffffffffffffffffffffffff1661095a61134e565b73ffffffffffffffffffffffffffffffffffffffff16146109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a790612c7d565b60405180910390fd5b6007805490508211156109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90612c3d565b60405180910390fd5b600780549050821415610a33576007819080600181540180825580915050600190039060005260206000200160009091909190915055610a7d565b8060078381548110610a6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055505b5050565b610a89611e0b565b73ffffffffffffffffffffffffffffffffffffffff16610aa761134e565b73ffffffffffffffffffffffffffffffffffffffff1614610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490612c7d565b60405180910390fd5b8060038190555050565b610b0f611e0b565b73ffffffffffffffffffffffffffffffffffffffff16610b2d61134e565b73ffffffffffffffffffffffffffffffffffffffff1614610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a90612c7d565b60405180910390fd5b6000610b9143600354611e13565b905060005b83839050811015610c485781600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868685818110610c1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358152602001908152602001600020819055508080610c4090612f9f565b915050610b96565b5060005b83839050811015610dcb57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330878786818110610cd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b8152600401610cf593929190612b37565b600060405180830381600087803b158015610d0f57600080fd5b505af1158015610d23573d6000803e3d6000fd5b50505050610db7848483818110610d63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611e2c90919063ffffffff16565b508080610dc390612f9f565b915050610c4c565b50505050565b600860009054906101000a900460ff16610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790612c9d565b60405180910390fd5b6000610e2e43600354611e13565b905060005b83839050811015610ee55781600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868685818110610eb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358152602001908152602001600020819055508080610edd90612f9f565b915050610e33565b5060005b8383905081101561106857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330878786818110610f6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b8152600401610f9293929190612b37565b600060405180830381600087803b158015610fac57600080fd5b505af1158015610fc0573d6000803e3d6000fd5b50505050611054848483818110611000577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611e2c90919063ffffffff16565b50808061106090612f9f565b915050610ee9565b50505050565b611076611e0b565b73ffffffffffffffffffffffffffffffffffffffff1661109461134e565b73ffffffffffffffffffffffffffffffffffffffff16146110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190612c7d565b60405180910390fd5b6110f46000611e46565b565b6060825167ffffffffffffffff811115611139577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111675781602001602082028036833780820191505090505b50905060005b83518110156113465760008482815181106111b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008483815181106111f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600061120b82611377565b9050600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205461126a43600354611e13565b6112749190612ebc565b6112c584600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f0a90919063ffffffff16565b6112d05760006112d3565b60015b60ff16826112e19190612e62565b6112eb9190612e62565b858581518110611324577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050505050808061133e90612f9f565b91505061116d565b509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600783815481106113b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050611770670de0b6b3a7640000826113d89190612e62565b6113e29190612e31565b915050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061141f43600354611e13565b90506114af888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508686611f24565b600061153e338a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506110f6565b905060005b8989905081101561164357818181518110611587577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518461159a9190612ddb565b935082600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c8c85818110611617577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002081905550808061163b90612f9f565b915050611543565b5060008311156116dd57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933856040518363ffffffff1660e01b81526004016116aa929190612b81565b600060405180830381600087803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505b505050505050505050565b600781815481106116f857600080fd5b906000526020600020016000915090505481565b60005b8282905081101561195d576117aa838383818110611756577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f0a90919063ffffffff16565b6117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090612c5d565b60405180910390fd5b611879838383818110611825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061207290919063ffffffff16565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde30338686868181106118f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b815260040161191893929190612b37565b600060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b50505050808061195590612f9f565b91505061170f565b505050565b611970868686868686611410565b60005b86869050811015611bc157611a0e8787838181106119ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f0a90919063ffffffff16565b611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490612c5d565b60405180910390fd5b611add878783818110611a89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061207290919063ffffffff16565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde30338a8a86818110611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b8152600401611b7c93929190612b37565b600060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b505050508080611bb990612f9f565b915050611973565b50505050505050565b60606000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611c1a8261208c565b67ffffffffffffffff811115611c59577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c875781602001602082028036833780820191505090505b50905060005b611c968361208c565b811015611d0857611cb081846120a190919063ffffffff16565b828281518110611ce9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611d0090612f9f565b915050611c8d565b508092505050919050565b611d1b611e0b565b73ffffffffffffffffffffffffffffffffffffffff16611d3961134e565b73ffffffffffffffffffffffffffffffffffffffff1614611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690612c7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df690612c1d565b60405180910390fd5b611e0881611e46565b50565b600033905090565b6000818310611e225781611e24565b825b905092915050565b6000611e3e836000018360001b6120bb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611f1c836000018360001b61212b565b905092915050565b60005b845181101561206b576000848281518110611f6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015111156120585761204e858281518110611fb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611ff6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858585818110612037577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020028101906120499190612cd8565b61214e565b61205757600080fd5b5b808061206390612f9f565b915050611f27565b5050505050565b6000612084836000018360001b6121c6565b905092915050565b600061209a8260000161234c565b9050919050565b60006120b0836000018361235d565b60001c905092915050565b60006120c7838361212b565b612120578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612125565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080600660008681526020019081526020016000205490506121bb848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050826121b6896123ae565b6123de565b915050949350505050565b600080836001016000848152602001908152602001600020549050600081146123405760006001826121f89190612ebc565b90506000600186600001805490506122109190612ebc565b90508181146122cb576000866000018281548110612257577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106122a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612305577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612346565b60009150505b92915050565b600081600001805490509050919050565b600082600001828154811061239b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b6000816040516020016123c19190612b01565b604051602081830303815290604052805190602001209050919050565b6000826123eb85846123f5565b1490509392505050565b60008082905060005b8451811015612485576000858281518110612442577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116124645761245d8382612490565b9250612471565b61246e8184612490565b92505b50808061247d90612f9f565b9150506123fe565b508091505092915050565b600082600052816020526040600020905092915050565b60006124ba6124b584612d54565b612d2f565b905080838252602082019050828560208602820111156124d957600080fd5b60005b8581101561250957816124ef8882612645565b8452602084019350602083019250506001810190506124dc565b5050509392505050565b60008135905061252281613186565b92915050565b60008083601f84011261253a57600080fd5b8235905067ffffffffffffffff81111561255357600080fd5b60208301915083602082028301111561256b57600080fd5b9250929050565b60008083601f84011261258457600080fd5b8235905067ffffffffffffffff81111561259d57600080fd5b6020830191508360208202830111156125b557600080fd5b9250929050565b600082601f8301126125cd57600080fd5b81356125dd8482602086016124a7565b91505092915050565b6000813590506125f58161319d565b92915050565b60008083601f84011261260d57600080fd5b8235905067ffffffffffffffff81111561262657600080fd5b60208301915083600182028301111561263e57600080fd5b9250929050565b600081359050612654816131b4565b92915050565b60006020828403121561266c57600080fd5b600061267a84828501612513565b91505092915050565b60008060008060006080868803121561269b57600080fd5b60006126a988828901612513565b95505060206126ba88828901612513565b94505060406126cb88828901612645565b935050606086013567ffffffffffffffff8111156126e857600080fd5b6126f4888289016125fb565b92509250509295509295909350565b60008060006060848603121561271857600080fd5b600061272686828701612513565b935050602084013567ffffffffffffffff81111561274357600080fd5b61274f868287016125bc565b925050604084013567ffffffffffffffff81111561276c57600080fd5b612778868287016125bc565b9150509250925092565b6000806040838503121561279557600080fd5b60006127a385828601612513565b92505060206127b485828601612645565b9150509250929050565b600080602083850312156127d157600080fd5b600083013567ffffffffffffffff8111156127eb57600080fd5b6127f785828601612572565b92509250509250929050565b6000806000806000806060878903121561281c57600080fd5b600087013567ffffffffffffffff81111561283657600080fd5b61284289828a01612572565b9650965050602087013567ffffffffffffffff81111561286157600080fd5b61286d89828a01612572565b9450945050604087013567ffffffffffffffff81111561288c57600080fd5b61289889828a01612528565b92509250509295509295509295565b6000602082840312156128b957600080fd5b60006128c784828501612645565b91505092915050565b600080604083850312156128e357600080fd5b60006128f185828601612645565b9250506020612902858286016125e6565b9150509250929050565b6000806040838503121561291f57600080fd5b600061292d85828601612645565b925050602061293e85828601612645565b9150509250929050565b60006129548383612acc565b60208301905092915050565b61296981612ef0565b82525050565b600061297a82612d90565b6129848185612da8565b935061298f83612d80565b8060005b838110156129c05781516129a78882612948565b97506129b283612d9b565b925050600181019050612993565b5085935050505092915050565b6129d681612f02565b82525050565b6129e581612f0e565b82525050565b6129f481612f18565b82525050565b6000612a07602683612dca565b9150612a1282613090565b604082019050919050565b6000612a2a600b83612dca565b9150612a35826130df565b602082019050919050565b6000612a4d601383612dca565b9150612a5882613108565b602082019050919050565b6000612a70602083612dca565b9150612a7b82613131565b602082019050919050565b6000612a93600f83612dca565b9150612a9e8261315a565b602082019050919050565b6000612ab6600083612db9565b9150612ac182613183565b600082019050919050565b612ad581612f64565b82525050565b612ae481612f64565b82525050565b612afb612af682612f64565b612fe8565b82525050565b6000612b0d8284612aea565b60208201915081905092915050565b6000602082019050612b316000830184612960565b92915050565b6000608082019050612b4c6000830186612960565b612b596020830185612960565b612b666040830184612adb565b8181036060830152612b7781612aa9565b9050949350505050565b6000604082019050612b966000830185612960565b612ba36020830184612adb565b9392505050565b60006020820190508181036000830152612bc4818461296f565b905092915050565b6000602082019050612be160008301846129cd565b92915050565b6000602082019050612bfc60008301846129dc565b92915050565b6000602082019050612c1760008301846129eb565b92915050565b60006020820190508181036000830152612c36816129fa565b9050919050565b60006020820190508181036000830152612c5681612a1d565b9050919050565b60006020820190508181036000830152612c7681612a40565b9050919050565b60006020820190508181036000830152612c9681612a63565b9050919050565b60006020820190508181036000830152612cb681612a86565b9050919050565b6000602082019050612cd26000830184612adb565b92915050565b60008083356001602003843603038112612cf157600080fd5b80840192508235915067ffffffffffffffff821115612d0f57600080fd5b602083019250602082023603831315612d2757600080fd5b509250929050565b6000612d39612d4a565b9050612d458282612f6e565b919050565b6000604051905090565b600067ffffffffffffffff821115612d6f57612d6e613050565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612de682612f64565b9150612df183612f64565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e2657612e25612ff2565b5b828201905092915050565b6000612e3c82612f64565b9150612e4783612f64565b925082612e5757612e56613021565b5b828204905092915050565b6000612e6d82612f64565b9150612e7883612f64565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612eb157612eb0612ff2565b5b828202905092915050565b6000612ec782612f64565b9150612ed283612f64565b925082821015612ee557612ee4612ff2565b5b828203905092915050565b6000612efb82612f44565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b612f778261307f565b810181811067ffffffffffffffff82111715612f9657612f95613050565b5b80604052505050565b6000612faa82612f64565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fdd57612fdc612ff2565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736b6970000000000000000000000000000000000000000000600082015250565b7f546f6b656e206e6f74206465706f736974656400000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f742073746172746564207965740000000000000000000000000000000000600082015250565b50565b61318f81612ef0565b811461319a57600080fd5b50565b6131a681612f0e565b81146131b157600080fd5b50565b6131bd81612f64565b81146131c857600080fd5b5056fea2646970667358221220a9076865aa5d3eba23b337880c5b63a4d60391ecacf18e9cdf22950866f6652e64736f6c63430008040033000000000000000000000000c5a848233ff7a2a1a17e329cf7829047d3503e1e0000000000000000000000000974e6c435c18ddfbbc1f500ede24f99c3cf07f20000000000000000000000000000000000000000000000056bc75e2d630fffff0000000000000000000000000000000000000000000000000000000000000032
Deployed Bytecode
0x60806040526004361061016a5760003560e01c8063533c2d8d116100d1578063a1fb2fd01161008a578063d1941b0611610064578063d1941b061461051f578063e243545614610548578063e3a9db1a14610571578063f2fde38b146105ae57610171565b8063a1fb2fd01461048e578063cbe81c8c146104b9578063cea01962146104e257610171565b8063533c2d8d14610380578063598b8e71146103a9578063715018a6146103d25780637e1ad99c146103e95780638da5cb5b14610426578063940414ce1461045157610171565b806326a4e8d21161012357806326a4e8d2146102745780632f9777ee1461029d578063422b4900146102c65780634665096d1461030357806346df2ccb1461032e578063515a20ba1461035757610171565b806306dfe2d11461017657806311cbef3d146101b3578063150b7a02146101ca5780631e534906146102075780631eaf0e621461021e5780631f2698ab1461024957610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d60048036038101906101989190612782565b6105d7565b6040516101aa9190612cbd565b60405180910390f35b3480156101bf57600080fd5b506101c86105fc565b005b3480156101d657600080fd5b506101f160048036038101906101ec9190612683565b6106a4565b6040516101fe9190612c02565b60405180910390f35b34801561021357600080fd5b5061021c6106b9565b005b34801561022a57600080fd5b50610233610785565b6040516102409190612b1c565b60405180910390f35b34801561025557600080fd5b5061025e6107ab565b60405161026b9190612bcc565b60405180910390f35b34801561028057600080fd5b5061029b6004803603810190610296919061265a565b6107be565b005b3480156102a957600080fd5b506102c460048036038101906102bf91906128d0565b61087e565b005b3480156102d257600080fd5b506102ed60048036038101906102e891906128a7565b610916565b6040516102fa9190612be7565b60405180910390f35b34801561030f57600080fd5b5061031861092e565b6040516103259190612cbd565b60405180910390f35b34801561033a57600080fd5b506103556004803603810190610350919061290c565b610934565b005b34801561036357600080fd5b5061037e600480360381019061037991906128a7565b610a81565b005b34801561038c57600080fd5b506103a760048036038101906103a291906127be565b610b07565b005b3480156103b557600080fd5b506103d060048036038101906103cb91906127be565b610dd1565b005b3480156103de57600080fd5b506103e761106e565b005b3480156103f557600080fd5b50610410600480360381019061040b9190612703565b6110f6565b60405161041d9190612baa565b60405180910390f35b34801561043257600080fd5b5061043b61134e565b6040516104489190612b1c565b60405180910390f35b34801561045d57600080fd5b50610478600480360381019061047391906128a7565b611377565b6040516104859190612cbd565b60405180910390f35b34801561049a57600080fd5b506104a36113ea565b6040516104b09190612b1c565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190612803565b611410565b005b3480156104ee57600080fd5b50610509600480360381019061050491906128a7565b6116e8565b6040516105169190612cbd565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906127be565b61170c565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612803565b611962565b005b34801561057d57600080fd5b506105986004803603810190610593919061265a565b611bca565b6040516105a59190612baa565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d0919061265a565b611d13565b005b6005602052816000526040600020602052806000526040600020600091509150505481565b610604611e0b565b73ffffffffffffffffffffffffffffffffffffffff1661062261134e565b73ffffffffffffffffffffffffffffffffffffffff1614610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066f90612c7d565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b600063150b7a0260e01b905095945050505050565b6106c1611e0b565b73ffffffffffffffffffffffffffffffffffffffff166106df61134e565b73ffffffffffffffffffffffffffffffffffffffff1614610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072c90612c7d565b60405180910390fd5b61073d61134e565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610782573d6000803e3d6000fd5b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900460ff1681565b6107c6611e0b565b73ffffffffffffffffffffffffffffffffffffffff166107e461134e565b73ffffffffffffffffffffffffffffffffffffffff161461083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190612c7d565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610886611e0b565b73ffffffffffffffffffffffffffffffffffffffff166108a461134e565b73ffffffffffffffffffffffffffffffffffffffff16146108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190612c7d565b60405180910390fd5b8060066000848152602001908152602001600020819055505050565b60066020528060005260406000206000915090505481565b60035481565b61093c611e0b565b73ffffffffffffffffffffffffffffffffffffffff1661095a61134e565b73ffffffffffffffffffffffffffffffffffffffff16146109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a790612c7d565b60405180910390fd5b6007805490508211156109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90612c3d565b60405180910390fd5b600780549050821415610a33576007819080600181540180825580915050600190039060005260206000200160009091909190915055610a7d565b8060078381548110610a6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055505b5050565b610a89611e0b565b73ffffffffffffffffffffffffffffffffffffffff16610aa761134e565b73ffffffffffffffffffffffffffffffffffffffff1614610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490612c7d565b60405180910390fd5b8060038190555050565b610b0f611e0b565b73ffffffffffffffffffffffffffffffffffffffff16610b2d61134e565b73ffffffffffffffffffffffffffffffffffffffff1614610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a90612c7d565b60405180910390fd5b6000610b9143600354611e13565b905060005b83839050811015610c485781600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868685818110610c1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358152602001908152602001600020819055508080610c4090612f9f565b915050610b96565b5060005b83839050811015610dcb57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330878786818110610cd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b8152600401610cf593929190612b37565b600060405180830381600087803b158015610d0f57600080fd5b505af1158015610d23573d6000803e3d6000fd5b50505050610db7848483818110610d63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611e2c90919063ffffffff16565b508080610dc390612f9f565b915050610c4c565b50505050565b600860009054906101000a900460ff16610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790612c9d565b60405180910390fd5b6000610e2e43600354611e13565b905060005b83839050811015610ee55781600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868685818110610eb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358152602001908152602001600020819055508080610edd90612f9f565b915050610e33565b5060005b8383905081101561106857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330878786818110610f6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b8152600401610f9293929190612b37565b600060405180830381600087803b158015610fac57600080fd5b505af1158015610fc0573d6000803e3d6000fd5b50505050611054848483818110611000577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611e2c90919063ffffffff16565b50808061106090612f9f565b915050610ee9565b50505050565b611076611e0b565b73ffffffffffffffffffffffffffffffffffffffff1661109461134e565b73ffffffffffffffffffffffffffffffffffffffff16146110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190612c7d565b60405180910390fd5b6110f46000611e46565b565b6060825167ffffffffffffffff811115611139577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111675781602001602082028036833780820191505090505b50905060005b83518110156113465760008482815181106111b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008483815181106111f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600061120b82611377565b9050600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205461126a43600354611e13565b6112749190612ebc565b6112c584600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f0a90919063ffffffff16565b6112d05760006112d3565b60015b60ff16826112e19190612e62565b6112eb9190612e62565b858581518110611324577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050505050808061133e90612f9f565b91505061116d565b509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600783815481106113b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050611770670de0b6b3a7640000826113d89190612e62565b6113e29190612e31565b915050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061141f43600354611e13565b90506114af888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508686611f24565b600061153e338a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506110f6565b905060005b8989905081101561164357818181518110611587577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518461159a9190612ddb565b935082600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c8c85818110611617577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002081905550808061163b90612f9f565b915050611543565b5060008311156116dd57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933856040518363ffffffff1660e01b81526004016116aa929190612b81565b600060405180830381600087803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505b505050505050505050565b600781815481106116f857600080fd5b906000526020600020016000915090505481565b60005b8282905081101561195d576117aa838383818110611756577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f0a90919063ffffffff16565b6117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090612c5d565b60405180910390fd5b611879838383818110611825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061207290919063ffffffff16565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde30338686868181106118f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b815260040161191893929190612b37565b600060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b50505050808061195590612f9f565b91505061170f565b505050565b611970868686868686611410565b60005b86869050811015611bc157611a0e8787838181106119ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f0a90919063ffffffff16565b611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490612c5d565b60405180910390fd5b611add878783818110611a89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061207290919063ffffffff16565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde30338a8a86818110611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b8152600401611b7c93929190612b37565b600060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b505050508080611bb990612f9f565b915050611973565b50505050505050565b60606000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611c1a8261208c565b67ffffffffffffffff811115611c59577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c875781602001602082028036833780820191505090505b50905060005b611c968361208c565b811015611d0857611cb081846120a190919063ffffffff16565b828281518110611ce9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611d0090612f9f565b915050611c8d565b508092505050919050565b611d1b611e0b565b73ffffffffffffffffffffffffffffffffffffffff16611d3961134e565b73ffffffffffffffffffffffffffffffffffffffff1614611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690612c7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df690612c1d565b60405180910390fd5b611e0881611e46565b50565b600033905090565b6000818310611e225781611e24565b825b905092915050565b6000611e3e836000018360001b6120bb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611f1c836000018360001b61212b565b905092915050565b60005b845181101561206b576000848281518110611f6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015111156120585761204e858281518110611fb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611ff6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858585818110612037577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020028101906120499190612cd8565b61214e565b61205757600080fd5b5b808061206390612f9f565b915050611f27565b5050505050565b6000612084836000018360001b6121c6565b905092915050565b600061209a8260000161234c565b9050919050565b60006120b0836000018361235d565b60001c905092915050565b60006120c7838361212b565b612120578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612125565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080600660008681526020019081526020016000205490506121bb848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050826121b6896123ae565b6123de565b915050949350505050565b600080836001016000848152602001908152602001600020549050600081146123405760006001826121f89190612ebc565b90506000600186600001805490506122109190612ebc565b90508181146122cb576000866000018281548110612257577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106122a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612305577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612346565b60009150505b92915050565b600081600001805490509050919050565b600082600001828154811061239b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b6000816040516020016123c19190612b01565b604051602081830303815290604052805190602001209050919050565b6000826123eb85846123f5565b1490509392505050565b60008082905060005b8451811015612485576000858281518110612442577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116124645761245d8382612490565b9250612471565b61246e8184612490565b92505b50808061247d90612f9f565b9150506123fe565b508091505092915050565b600082600052816020526040600020905092915050565b60006124ba6124b584612d54565b612d2f565b905080838252602082019050828560208602820111156124d957600080fd5b60005b8581101561250957816124ef8882612645565b8452602084019350602083019250506001810190506124dc565b5050509392505050565b60008135905061252281613186565b92915050565b60008083601f84011261253a57600080fd5b8235905067ffffffffffffffff81111561255357600080fd5b60208301915083602082028301111561256b57600080fd5b9250929050565b60008083601f84011261258457600080fd5b8235905067ffffffffffffffff81111561259d57600080fd5b6020830191508360208202830111156125b557600080fd5b9250929050565b600082601f8301126125cd57600080fd5b81356125dd8482602086016124a7565b91505092915050565b6000813590506125f58161319d565b92915050565b60008083601f84011261260d57600080fd5b8235905067ffffffffffffffff81111561262657600080fd5b60208301915083600182028301111561263e57600080fd5b9250929050565b600081359050612654816131b4565b92915050565b60006020828403121561266c57600080fd5b600061267a84828501612513565b91505092915050565b60008060008060006080868803121561269b57600080fd5b60006126a988828901612513565b95505060206126ba88828901612513565b94505060406126cb88828901612645565b935050606086013567ffffffffffffffff8111156126e857600080fd5b6126f4888289016125fb565b92509250509295509295909350565b60008060006060848603121561271857600080fd5b600061272686828701612513565b935050602084013567ffffffffffffffff81111561274357600080fd5b61274f868287016125bc565b925050604084013567ffffffffffffffff81111561276c57600080fd5b612778868287016125bc565b9150509250925092565b6000806040838503121561279557600080fd5b60006127a385828601612513565b92505060206127b485828601612645565b9150509250929050565b600080602083850312156127d157600080fd5b600083013567ffffffffffffffff8111156127eb57600080fd5b6127f785828601612572565b92509250509250929050565b6000806000806000806060878903121561281c57600080fd5b600087013567ffffffffffffffff81111561283657600080fd5b61284289828a01612572565b9650965050602087013567ffffffffffffffff81111561286157600080fd5b61286d89828a01612572565b9450945050604087013567ffffffffffffffff81111561288c57600080fd5b61289889828a01612528565b92509250509295509295509295565b6000602082840312156128b957600080fd5b60006128c784828501612645565b91505092915050565b600080604083850312156128e357600080fd5b60006128f185828601612645565b9250506020612902858286016125e6565b9150509250929050565b6000806040838503121561291f57600080fd5b600061292d85828601612645565b925050602061293e85828601612645565b9150509250929050565b60006129548383612acc565b60208301905092915050565b61296981612ef0565b82525050565b600061297a82612d90565b6129848185612da8565b935061298f83612d80565b8060005b838110156129c05781516129a78882612948565b97506129b283612d9b565b925050600181019050612993565b5085935050505092915050565b6129d681612f02565b82525050565b6129e581612f0e565b82525050565b6129f481612f18565b82525050565b6000612a07602683612dca565b9150612a1282613090565b604082019050919050565b6000612a2a600b83612dca565b9150612a35826130df565b602082019050919050565b6000612a4d601383612dca565b9150612a5882613108565b602082019050919050565b6000612a70602083612dca565b9150612a7b82613131565b602082019050919050565b6000612a93600f83612dca565b9150612a9e8261315a565b602082019050919050565b6000612ab6600083612db9565b9150612ac182613183565b600082019050919050565b612ad581612f64565b82525050565b612ae481612f64565b82525050565b612afb612af682612f64565b612fe8565b82525050565b6000612b0d8284612aea565b60208201915081905092915050565b6000602082019050612b316000830184612960565b92915050565b6000608082019050612b4c6000830186612960565b612b596020830185612960565b612b666040830184612adb565b8181036060830152612b7781612aa9565b9050949350505050565b6000604082019050612b966000830185612960565b612ba36020830184612adb565b9392505050565b60006020820190508181036000830152612bc4818461296f565b905092915050565b6000602082019050612be160008301846129cd565b92915050565b6000602082019050612bfc60008301846129dc565b92915050565b6000602082019050612c1760008301846129eb565b92915050565b60006020820190508181036000830152612c36816129fa565b9050919050565b60006020820190508181036000830152612c5681612a1d565b9050919050565b60006020820190508181036000830152612c7681612a40565b9050919050565b60006020820190508181036000830152612c9681612a63565b9050919050565b60006020820190508181036000830152612cb681612a86565b9050919050565b6000602082019050612cd26000830184612adb565b92915050565b60008083356001602003843603038112612cf157600080fd5b80840192508235915067ffffffffffffffff821115612d0f57600080fd5b602083019250602082023603831315612d2757600080fd5b509250929050565b6000612d39612d4a565b9050612d458282612f6e565b919050565b6000604051905090565b600067ffffffffffffffff821115612d6f57612d6e613050565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612de682612f64565b9150612df183612f64565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e2657612e25612ff2565b5b828201905092915050565b6000612e3c82612f64565b9150612e4783612f64565b925082612e5757612e56613021565b5b828204905092915050565b6000612e6d82612f64565b9150612e7883612f64565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612eb157612eb0612ff2565b5b828202905092915050565b6000612ec782612f64565b9150612ed283612f64565b925082821015612ee557612ee4612ff2565b5b828203905092915050565b6000612efb82612f44565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b612f778261307f565b810181811067ffffffffffffffff82111715612f9657612f95613050565b5b80604052505050565b6000612faa82612f64565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fdd57612fdc612ff2565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736b6970000000000000000000000000000000000000000000600082015250565b7f546f6b656e206e6f74206465706f736974656400000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f742073746172746564207965740000000000000000000000000000000000600082015250565b50565b61318f81612ef0565b811461319a57600080fd5b50565b6131a681612f0e565b81146131b157600080fd5b50565b6131bd81612f64565b81146131c857600080fd5b5056fea2646970667358221220a9076865aa5d3eba23b337880c5b63a4d60391ecacf18e9cdf22950866f6652e64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c5a848233ff7a2a1a17e329cf7829047d3503e1e0000000000000000000000000974e6c435c18ddfbbc1f500ede24f99c3cf07f20000000000000000000000000000000000000000000000056bc75e2d630fffff0000000000000000000000000000000000000000000000000000000000000032
-----Decoded View---------------
Arg [0] : _jungleCoin (address): 0xC5A848233Ff7A2A1a17E329CF7829047D3503e1E
Arg [1] : _royalCubs (address): 0x0974e6c435C18DdfBbc1F500EDE24F99C3cf07F2
Arg [2] : _expiration (uint256): 99999999999999999999
Arg [3] : _baseRewardRate (uint256): 50
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000c5a848233ff7a2a1a17e329cf7829047d3503e1e
Arg [1] : 0000000000000000000000000974e6c435c18ddfbbc1f500ede24f99c3cf07f2
Arg [2] : 0000000000000000000000000000000000000000000000056bc75e2d630fffff
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032
Deployed Bytecode Sourcemap
93124:7458:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;93487:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;94709:79;;;;;;;;;;;;;:::i;:::-;;94967:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;100474:105;;;;;;;;;;;;;:::i;:::-;;93233:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;93748:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;94796:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;94458:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;93619:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;93296:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;94158:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;94591:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;97915:568;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;97300:607;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9437:103;;;;;;;;;;;;;:::i;:::-;;95933:694;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8786:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;95608:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;93265:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96635:657;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;93711:27;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;99148:513;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;98491:649;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;95194:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9695:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;93487:68;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;94709:79::-;9017:12;:10;:12::i;:::-;9006:23;;:7;:5;:7::i;:::-;:23;;;8998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;94773:7:::1;;;;;;;;;;;94772:8;94762:7;;:18;;;;;;;;;;;;;;;;;;94709:79::o:0;94967:219::-;95111:6;95137:41;;;95130:48;;94967:219;;;;;;;:::o;100474:105::-;9017:12;:10;:12::i;:::-;9006:23;;:7;:5;:7::i;:::-;:23;;;8998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;100531:7:::1;:5;:7::i;:::-;100523:25;;:48;100549:21;100523:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;100474:105::o:0;93233:25::-;;;;;;;;;;;;;:::o;93748:19::-;;;;;;;;;;;;;:::o;94796:163::-;9017:12;:10;:12::i;:::-;9006:23;;:7;:5;:7::i;:::-;:23;;;8998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;94938:13:::1;94925:10;;:26;;;;;;;;;;;;;;;;;;94796:163:::0;:::o;94458:125::-;9017:12;:10;:12::i;:::-;9006:23;;:7;:5;:7::i;:::-;:23;;;8998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;94570:5:::1;94543:15;:24;94559:7;94543:24;;;;;;;;;;;:32;;;;94458:125:::0;;:::o;93619:51::-;;;;;;;;;;;;;;;;;:::o;93296:25::-;;;;:::o;94158:292::-;9017:12;:10;:12::i;:::-;9006:23;;:7;:5;:7::i;:::-;:23;;;8998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;94256:10:::1;:17;;;;94245:7;:28;;94237:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;94315:10;:17;;;;94304:7;:28;94300:143;;;94349:10;94365:5;94349:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;94300:143;;;94426:5;94404:10;94415:7;94404:19;;;;;;;;;;;;;;;;;;;;;;;:27;;;;94300:143;94158:292:::0;;:::o;94591:106::-;9017:12;:10;:12::i;:::-;9006:23;;:7;:5;:7::i;:::-;:23;;;8998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;94678:11:::1;94665:10;:24;;;;94591:106:::0;:::o;97915:568::-;9017:12;:10;:12::i;:::-;9006:23;;:7;:5;:7::i;:::-;:23;;;8998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;97998:16:::1;98017:34;98026:12;98040:10;;98017:8;:34::i;:::-;97998:53;;98067:9;98062:118;98082:8;;:15;;98078:1;:19;98062:118;;;98160:8;98119:13;:25;98133:10;98119:25;;;;;;;;;;;;;;;:38;98145:8;;98154:1;98145:11;;;;;;;;;;;;;;;;;;;;;98119:38;;;;;;;;;;;:49;;;;98099:3;;;;;:::i;:::-;;;;98062:118;;;;98197:9;98192:284;98212:8;;:15;;98208:1;:19;98192:284;;;98257:9;;;;;;;;;;;98249:35;;;98303:10;98340:4;98364:8;;98373:1;98364:11;;;;;;;;;;;;;;;;;;;;;98249:162;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;98426:38;98452:8;;98461:1;98452:11;;;;;;;;;;;;;;;;;;;;;98426:9;:21;98436:10;98426:21;;;;;;;;;;;;;;;:25;;:38;;;;:::i;:::-;;98229:3;;;;;:::i;:::-;;;;98192:284;;;;9077:1;97915:568:::0;;:::o;97300:607::-;97374:7;;;;;;;;;;;97366:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;97414:16;97433:34;97442:12;97456:10;;97433:8;:34::i;:::-;97414:53;;97483:9;97478:118;97498:8;;:15;;97494:1;:19;97478:118;;;97576:8;97535:13;:25;97549:10;97535:25;;;;;;;;;;;;;;;:38;97561:8;;97570:1;97561:11;;;;;;;;;;;;;;;;;;;;;97535:38;;;;;;;;;;;:49;;;;97515:3;;;;;:::i;:::-;;;;97478:118;;;;97621:9;97616:284;97636:8;;:15;;97632:1;:19;97616:284;;;97681:9;;;;;;;;;;;97673:35;;;97727:10;97764:4;97788:8;;97797:1;97788:11;;;;;;;;;;;;;;;;;;;;;97673:162;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97850:38;97876:8;;97885:1;97876:11;;;;;;;;;;;;;;;;;;;;;97850:9;:21;97860:10;97850:21;;;;;;;;;;;;;;;:25;;:38;;;;:::i;:::-;;97653:3;;;;;:::i;:::-;;;;97616:284;;;;97300:607;;;:::o;9437:103::-;9017:12;:10;:12::i;:::-;9006:23;;:7;:5;:7::i;:::-;:23;;;8998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9502:30:::1;9529:1;9502:18;:30::i;:::-;9437:103::o:0;95933:694::-;96112:24;96178:8;:15;96164:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96154:40;;96212:9;96207:413;96227:8;:15;96223:1;:19;96207:413;;;96264:15;96282:8;96291:1;96282:11;;;;;;;;;;;;;;;;;;;;;;96264:29;;96308:14;96325:8;96334:1;96325:11;;;;;;;;;;;;;;;;;;;;;;96308:28;;96351:12;96366:16;96375:6;96366:8;:16::i;:::-;96351:31;;96576:13;:22;96590:7;96576:22;;;;;;;;;;;;;;;:31;96599:7;96576:31;;;;;;;;;;;;96518:34;96527:12;96541:10;;96518:8;:34::i;:::-;:89;;;;:::i;:::-;96452:36;96480:7;96452:9;:18;96462:7;96452:18;;;;;;;;;;;;;;;:27;;:36;;;;:::i;:::-;:44;;96495:1;96452:44;;;96491:1;96452:44;96427:70;;:4;:70;;;;:::i;:::-;:181;;;;:::i;:::-;96397:7;96405:1;96397:10;;;;;;;;;;;;;;;;;;;;;:211;;;;;96207:413;;;96244:3;;;;;:::i;:::-;;;;96207:413;;;;95933:694;;;;;:::o;8786:87::-;8832:7;8859:6;;;;;;;;;;;8852:13;;8786:87;:::o;95608:317::-;95690:12;95721:14;95738:10;95749:6;95738:18;;;;;;;;;;;;;;;;;;;;;;;;95721:35;;95881:4;95873;95864:6;:13;;;;:::i;:::-;95863:22;;;;:::i;:::-;95856:29;;95906:11;95608:317;;;:::o;93265:24::-;;;;;;;;;;;;;:::o;96635:657::-;96796:14;96821:16;96840:34;96849:12;96863:10;;96840:8;:34::i;:::-;96821:53;;96887:43;96903:8;;96887:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96913:8;;96887:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96923:6;;96887:15;:43::i;:::-;96941:24;96968:48;96985:10;96997:8;;96968:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97007:8;;96968:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:16;:48::i;:::-;96941:75;;97034:9;97029:153;97049:8;;:15;;97045:1;:19;97029:153;;;97096:7;97104:1;97096:10;;;;;;;;;;;;;;;;;;;;;;97086:20;;;;;:::i;:::-;;;97162:8;97121:13;:25;97135:10;97121:25;;;;;;;;;;;;;;;:38;97147:8;;97156:1;97147:11;;;;;;;;;;;;;;;;;;;;;97121:38;;;;;;;;;;;:49;;;;97066:3;;;;;:::i;:::-;;;;97029:153;;;;97207:1;97198:6;:10;97194:91;;;97237:10;;;;;;;;;;;97225:28;;;97254:10;97266:6;97225:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97194:91;96635:657;;;;;;;;;:::o;93711:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;99148:513::-;99229:9;99224:430;99244:8;;:15;;99240:1;:19;99224:430;;;99307:43;99338:8;;99347:1;99338:11;;;;;;;;;;;;;;;;;;;;;99307:9;:21;99317:10;99307:21;;;;;;;;;;;;;;;:30;;:43;;;;:::i;:::-;99281:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;99422:41;99451:8;;99460:1;99451:11;;;;;;;;;;;;;;;;;;;;;99422:9;:21;99432:10;99422:21;;;;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;;99488:9;;;;;;;;;;;99480:35;;;99542:4;99566:10;99595:8;;99604:1;99595:11;;;;;;;;;;;;;;;;;;;;;99480:162;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;99261:3;;;;;:::i;:::-;;;;99224:430;;;;99148:513;;:::o;98491:649::-;98650:40;98663:8;;98673;;98683:6;;98650:12;:40::i;:::-;98708:9;98703:430;98723:8;;:15;;98719:1;:19;98703:430;;;98786:43;98817:8;;98826:1;98817:11;;;;;;;;;;;;;;;;;;;;;98786:9;:21;98796:10;98786:21;;;;;;;;;;;;;;;:30;;:43;;;;:::i;:::-;98760:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;98901:41;98930:8;;98939:1;98930:11;;;;;;;;;;;;;;;;;;;;;98901:9;:21;98911:10;98901:21;;;;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;;98967:9;;;;;;;;;;;98959:35;;;99021:4;99045:10;99074:8;;99083:1;99074:11;;;;;;;;;;;;;;;;;;;;;98959:162;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98740:3;;;;;:::i;:::-;;;;98703:430;;;;98491:649;;;;;;:::o;95194:406::-;95281:16;95315:40;95358:9;:18;95368:7;95358:18;;;;;;;;;;;;;;;95315:61;;95387:25;95429:19;:10;:17;:19::i;:::-;95415:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;95387:62;;95467:9;95462:103;95482:19;:10;:17;:19::i;:::-;95478:1;:23;95462:103;;;95537:16;95551:1;95537:10;:13;;:16;;;;:::i;:::-;95523:8;95532:1;95523:11;;;;;;;;;;;;;;;;;;;;;:30;;;;;95503:3;;;;;:::i;:::-;;;;95462:103;;;;95584:8;95577:15;;;;95194:406;;;:::o;9695:201::-;9017:12;:10;:12::i;:::-;9006:23;;:7;:5;:7::i;:::-;:23;;;8998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9804:1:::1;9784:22;;:8;:22;;;;9776:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9860:28;9879:8;9860:18;:28::i;:::-;9695:201:::0;:::o;7531:98::-;7584:7;7611:10;7604:17;;7531:98;:::o;23298:106::-;23356:7;23387:1;23383;:5;:13;;23395:1;23383:13;;;23391:1;23383:13;23376:20;;23298:106;;;;:::o;20625:131::-;20692:4;20716:32;20721:3;:10;;20741:5;20733:14;;20716:4;:32::i;:::-;20709:39;;20625:131;;;;:::o;10056:191::-;10130:16;10149:6;;;;;;;;;;;10130:25;;10175:8;10166:6;;:17;;;;;;;;;;;;;;;;;;10230:8;10199:40;;10220:8;10199:40;;;;;;;;;;;;10056:191;;:::o;21155:146::-;21232:4;21256:37;21266:3;:10;;21286:5;21278:14;;21256:9;:37::i;:::-;21249:44;;21155:146;;;;:::o;99669:356::-;99838:6;99833:185;99854:9;:16;99850:1;:20;99833:185;;;99911:1;99896:9;99906:1;99896:12;;;;;;;;;;;;;;;;;;;;;;:16;99892:115;;;99941:49;99951:9;99961:1;99951:12;;;;;;;;;;;;;;;;;;;;;;99965:9;99975:1;99965:12;;;;;;;;;;;;;;;;;;;;;;99979:7;;99987:1;99979:10;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;99941:9;:49::i;:::-;99933:58;;;;;;99892:115;99872:3;;;;;:::i;:::-;;;;99833:185;;;;99669:356;;;;:::o;20932:137::-;21002:4;21026:35;21034:3;:10;;21054:5;21046:14;;21026:7;:35::i;:::-;21019:42;;20932:137;;;;:::o;21387:114::-;21447:7;21474:19;21482:3;:10;;21474:7;:19::i;:::-;21467:26;;21387:114;;;:::o;21855:137::-;21926:7;21961:22;21965:3;:10;;21977:5;21961:3;:22::i;:::-;21953:31;;21946:38;;21855:137;;;;:::o;12022:414::-;12085:4;12107:21;12117:3;12122:5;12107:9;:21::i;:::-;12102:327;;12145:3;:11;;12162:5;12145:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12328:3;:11;;:18;;;;12306:3;:12;;:19;12319:5;12306:19;;;;;;;;;;;:40;;;;12368:4;12361:11;;;;12102:327;12412:5;12405:12;;12022:414;;;;;:::o;14118:129::-;14191:4;14238:1;14215:3;:12;;:19;14228:5;14215:19;;;;;;;;;;;;:24;;14208:31;;14118:129;;;;:::o;100033:263::-;100165:4;100182:12;100197:15;:24;100213:7;100197:24;;;;;;;;;;;;100182:39;;100239:49;100258:6;;100239:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;100266:4;100272:15;100278:8;100272:5;:15::i;:::-;100239:18;:49::i;:::-;100232:56;;;100033:263;;;;;;:::o;12612:1420::-;12678:4;12796:18;12817:3;:12;;:19;12830:5;12817:19;;;;;;;;;;;;12796:40;;12867:1;12853:10;:15;12849:1176;;13228:21;13265:1;13252:10;:14;;;;:::i;:::-;13228:38;;13281:17;13322:1;13301:3;:11;;:18;;;;:22;;;;:::i;:::-;13281:42;;13357:13;13344:9;:26;13340:405;;13391:17;13411:3;:11;;13423:9;13411:22;;;;;;;;;;;;;;;;;;;;;;;;13391:42;;13565:9;13536:3;:11;;13548:13;13536:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;13676:10;13650:3;:12;;:23;13663:9;13650:23;;;;;;;;;;;:36;;;;13340:405;;13826:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13921:3;:12;;:19;13934:5;13921:19;;;;;;;;;;;13914:26;;;13964:4;13957:11;;;;;;;12849:1176;14008:5;14001:12;;;12612:1420;;;;;:::o;14333:109::-;14389:7;14416:3;:11;;:18;;;;14409:25;;14333:109;;;:::o;14796:120::-;14863:7;14890:3;:11;;14902:5;14890:18;;;;;;;;;;;;;;;;;;;;;;;;14883:25;;14796:120;;;;:::o;100304:125::-;100357:7;100411:8;100394:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;100384:37;;;;;;100377:44;;100304:125;;;:::o;24994:190::-;25119:4;25172;25143:25;25156:5;25163:4;25143:12;:25::i;:::-;:33;25136:40;;24994:190;;;;;:::o;25546:675::-;25629:7;25649:20;25672:4;25649:27;;25692:9;25687:497;25711:5;:12;25707:1;:16;25687:497;;;25745:20;25768:5;25774:1;25768:8;;;;;;;;;;;;;;;;;;;;;;25745:31;;25811:12;25795;:28;25791:382;;25938:42;25953:12;25967;25938:14;:42::i;:::-;25923:57;;25791:382;;;26115:42;26130:12;26144;26115:14;:42::i;:::-;26100:57;;25791:382;25687:497;25725:3;;;;;:::i;:::-;;;;25687:497;;;;26201:12;26194:19;;;25546:675;;;;:::o;26229:224::-;26297:13;26360:1;26354:4;26347:15;26389:1;26383:4;26376:15;26430:4;26424;26414:21;26405:30;;26332:114;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:139::-;731:5;769:6;756:20;747:29;;785:33;812:5;785:33;:::i;:::-;737:87;;;;:::o;849:394::-;949:8;959:6;1009:3;1002:4;994:6;990:17;986:27;976:2;;1027:1;1024;1017:12;976:2;1063:6;1050:20;1040:30;;1093:18;1085:6;1082:30;1079:2;;;1125:1;1122;1115:12;1079:2;1162:4;1154:6;1150:17;1138:29;;1216:3;1208:4;1200:6;1196:17;1186:8;1182:32;1179:41;1176:2;;;1233:1;1230;1223:12;1176:2;966:277;;;;;:::o;1266:367::-;1339:8;1349:6;1399:3;1392:4;1384:6;1380:17;1376:27;1366:2;;1417:1;1414;1407:12;1366:2;1453:6;1440:20;1430:30;;1483:18;1475:6;1472:30;1469:2;;;1515:1;1512;1505:12;1469:2;1552:4;1544:6;1540:17;1528:29;;1606:3;1598:4;1590:6;1586:17;1576:8;1572:32;1569:41;1566:2;;;1623:1;1620;1613:12;1566:2;1356:277;;;;;:::o;1656:303::-;1727:5;1776:3;1769:4;1761:6;1757:17;1753:27;1743:2;;1794:1;1791;1784:12;1743:2;1834:6;1821:20;1859:94;1949:3;1941:6;1934:4;1926:6;1922:17;1859:94;:::i;:::-;1850:103;;1733:226;;;;;:::o;1965:139::-;2011:5;2049:6;2036:20;2027:29;;2065:33;2092:5;2065:33;:::i;:::-;2017:87;;;;:::o;2123:351::-;2180:8;2190:6;2240:3;2233:4;2225:6;2221:17;2217:27;2207:2;;2258:1;2255;2248:12;2207:2;2294:6;2281:20;2271:30;;2324:18;2316:6;2313:30;2310:2;;;2356:1;2353;2346:12;2310:2;2393:4;2385:6;2381:17;2369:29;;2447:3;2439:4;2431:6;2427:17;2417:8;2413:32;2410:41;2407:2;;;2464:1;2461;2454:12;2407:2;2197:277;;;;;:::o;2480:139::-;2526:5;2564:6;2551:20;2542:29;;2580:33;2607:5;2580:33;:::i;:::-;2532:87;;;;:::o;2625:262::-;2684:6;2733:2;2721:9;2712:7;2708:23;2704:32;2701:2;;;2749:1;2746;2739:12;2701:2;2792:1;2817:53;2862:7;2853:6;2842:9;2838:22;2817:53;:::i;:::-;2807:63;;2763:117;2691:196;;;;:::o;2893:829::-;2990:6;2998;3006;3014;3022;3071:3;3059:9;3050:7;3046:23;3042:33;3039:2;;;3088:1;3085;3078:12;3039:2;3131:1;3156:53;3201:7;3192:6;3181:9;3177:22;3156:53;:::i;:::-;3146:63;;3102:117;3258:2;3284:53;3329:7;3320:6;3309:9;3305:22;3284:53;:::i;:::-;3274:63;;3229:118;3386:2;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3357:118;3542:2;3531:9;3527:18;3514:32;3573:18;3565:6;3562:30;3559:2;;;3605:1;3602;3595:12;3559:2;3641:64;3697:7;3688:6;3677:9;3673:22;3641:64;:::i;:::-;3623:82;;;;3485:230;3029:693;;;;;;;;:::o;3728:838::-;3855:6;3863;3871;3920:2;3908:9;3899:7;3895:23;3891:32;3888:2;;;3936:1;3933;3926:12;3888:2;3979:1;4004:53;4049:7;4040:6;4029:9;4025:22;4004:53;:::i;:::-;3994:63;;3950:117;4134:2;4123:9;4119:18;4106:32;4165:18;4157:6;4154:30;4151:2;;;4197:1;4194;4187:12;4151:2;4225:78;4295:7;4286:6;4275:9;4271:22;4225:78;:::i;:::-;4215:88;;4077:236;4380:2;4369:9;4365:18;4352:32;4411:18;4403:6;4400:30;4397:2;;;4443:1;4440;4433:12;4397:2;4471:78;4541:7;4532:6;4521:9;4517:22;4471:78;:::i;:::-;4461:88;;4323:236;3878:688;;;;;:::o;4572:407::-;4640:6;4648;4697:2;4685:9;4676:7;4672:23;4668:32;4665:2;;;4713:1;4710;4703:12;4665:2;4756:1;4781:53;4826:7;4817:6;4806:9;4802:22;4781:53;:::i;:::-;4771:63;;4727:117;4883:2;4909:53;4954:7;4945:6;4934:9;4930:22;4909:53;:::i;:::-;4899:63;;4854:118;4655:324;;;;;:::o;4985:425::-;5071:6;5079;5128:2;5116:9;5107:7;5103:23;5099:32;5096:2;;;5144:1;5141;5134:12;5096:2;5215:1;5204:9;5200:17;5187:31;5245:18;5237:6;5234:30;5231:2;;;5277:1;5274;5267:12;5231:2;5313:80;5385:7;5376:6;5365:9;5361:22;5313:80;:::i;:::-;5295:98;;;;5158:245;5086:324;;;;;:::o;5416:1095::-;5601:6;5609;5617;5625;5633;5641;5690:2;5678:9;5669:7;5665:23;5661:32;5658:2;;;5706:1;5703;5696:12;5658:2;5777:1;5766:9;5762:17;5749:31;5807:18;5799:6;5796:30;5793:2;;;5839:1;5836;5829:12;5793:2;5875:80;5947:7;5938:6;5927:9;5923:22;5875:80;:::i;:::-;5857:98;;;;5720:245;6032:2;6021:9;6017:18;6004:32;6063:18;6055:6;6052:30;6049:2;;;6095:1;6092;6085:12;6049:2;6131:80;6203:7;6194:6;6183:9;6179:22;6131:80;:::i;:::-;6113:98;;;;5975:246;6288:2;6277:9;6273:18;6260:32;6319:18;6311:6;6308:30;6305:2;;;6351:1;6348;6341:12;6305:2;6387:107;6486:7;6477:6;6466:9;6462:22;6387:107;:::i;:::-;6369:125;;;;6231:273;5648:863;;;;;;;;:::o;6517:262::-;6576:6;6625:2;6613:9;6604:7;6600:23;6596:32;6593:2;;;6641:1;6638;6631:12;6593:2;6684:1;6709:53;6754:7;6745:6;6734:9;6730:22;6709:53;:::i;:::-;6699:63;;6655:117;6583:196;;;;:::o;6785:407::-;6853:6;6861;6910:2;6898:9;6889:7;6885:23;6881:32;6878:2;;;6926:1;6923;6916:12;6878:2;6969:1;6994:53;7039:7;7030:6;7019:9;7015:22;6994:53;:::i;:::-;6984:63;;6940:117;7096:2;7122:53;7167:7;7158:6;7147:9;7143:22;7122:53;:::i;:::-;7112:63;;7067:118;6868:324;;;;;:::o;7198:407::-;7266:6;7274;7323:2;7311:9;7302:7;7298:23;7294:32;7291:2;;;7339:1;7336;7329:12;7291:2;7382:1;7407:53;7452:7;7443:6;7432:9;7428:22;7407:53;:::i;:::-;7397:63;;7353:117;7509:2;7535:53;7580:7;7571:6;7560:9;7556:22;7535:53;:::i;:::-;7525:63;;7480:118;7281:324;;;;;:::o;7611:179::-;7680:10;7701:46;7743:3;7735:6;7701:46;:::i;:::-;7779:4;7774:3;7770:14;7756:28;;7691:99;;;;:::o;7796:118::-;7883:24;7901:5;7883:24;:::i;:::-;7878:3;7871:37;7861:53;;:::o;7950:732::-;8069:3;8098:54;8146:5;8098:54;:::i;:::-;8168:86;8247:6;8242:3;8168:86;:::i;:::-;8161:93;;8278:56;8328:5;8278:56;:::i;:::-;8357:7;8388:1;8373:284;8398:6;8395:1;8392:13;8373:284;;;8474:6;8468:13;8501:63;8560:3;8545:13;8501:63;:::i;:::-;8494:70;;8587:60;8640:6;8587:60;:::i;:::-;8577:70;;8433:224;8420:1;8417;8413:9;8408:14;;8373:284;;;8377:14;8673:3;8666:10;;8074:608;;;;;;;:::o;8688:109::-;8769:21;8784:5;8769:21;:::i;:::-;8764:3;8757:34;8747:50;;:::o;8803:118::-;8890:24;8908:5;8890:24;:::i;:::-;8885:3;8878:37;8868:53;;:::o;8927:115::-;9012:23;9029:5;9012:23;:::i;:::-;9007:3;9000:36;8990:52;;:::o;9048:366::-;9190:3;9211:67;9275:2;9270:3;9211:67;:::i;:::-;9204:74;;9287:93;9376:3;9287:93;:::i;:::-;9405:2;9400:3;9396:12;9389:19;;9194:220;;;:::o;9420:366::-;9562:3;9583:67;9647:2;9642:3;9583:67;:::i;:::-;9576:74;;9659:93;9748:3;9659:93;:::i;:::-;9777:2;9772:3;9768:12;9761:19;;9566:220;;;:::o;9792:366::-;9934:3;9955:67;10019:2;10014:3;9955:67;:::i;:::-;9948:74;;10031:93;10120:3;10031:93;:::i;:::-;10149:2;10144:3;10140:12;10133:19;;9938:220;;;:::o;10164:366::-;10306:3;10327:67;10391:2;10386:3;10327:67;:::i;:::-;10320:74;;10403:93;10492:3;10403:93;:::i;:::-;10521:2;10516:3;10512:12;10505:19;;10310:220;;;:::o;10536:366::-;10678:3;10699:67;10763:2;10758:3;10699:67;:::i;:::-;10692:74;;10775:93;10864:3;10775:93;:::i;:::-;10893:2;10888:3;10884:12;10877:19;;10682:220;;;:::o;10908:362::-;11049:3;11070:65;11133:1;11128:3;11070:65;:::i;:::-;11063:72;;11144:93;11233:3;11144:93;:::i;:::-;11262:1;11257:3;11253:11;11246:18;;11053:217;;;:::o;11276:108::-;11353:24;11371:5;11353:24;:::i;:::-;11348:3;11341:37;11331:53;;:::o;11390:118::-;11477:24;11495:5;11477:24;:::i;:::-;11472:3;11465:37;11455:53;;:::o;11514:157::-;11619:45;11639:24;11657:5;11639:24;:::i;:::-;11619:45;:::i;:::-;11614:3;11607:58;11597:74;;:::o;11677:256::-;11789:3;11804:75;11875:3;11866:6;11804:75;:::i;:::-;11904:2;11899:3;11895:12;11888:19;;11924:3;11917:10;;11793:140;;;;:::o;11939:222::-;12032:4;12070:2;12059:9;12055:18;12047:26;;12083:71;12151:1;12140:9;12136:17;12127:6;12083:71;:::i;:::-;12037:124;;;;:::o;12167:748::-;12416:4;12454:3;12443:9;12439:19;12431:27;;12468:71;12536:1;12525:9;12521:17;12512:6;12468:71;:::i;:::-;12549:72;12617:2;12606:9;12602:18;12593:6;12549:72;:::i;:::-;12631;12699:2;12688:9;12684:18;12675:6;12631:72;:::i;:::-;12750:9;12744:4;12740:20;12735:2;12724:9;12720:18;12713:48;12778:130;12903:4;12778:130;:::i;:::-;12770:138;;12421:494;;;;;;:::o;12921:332::-;13042:4;13080:2;13069:9;13065:18;13057:26;;13093:71;13161:1;13150:9;13146:17;13137:6;13093:71;:::i;:::-;13174:72;13242:2;13231:9;13227:18;13218:6;13174:72;:::i;:::-;13047:206;;;;;:::o;13259:373::-;13402:4;13440:2;13429:9;13425:18;13417:26;;13489:9;13483:4;13479:20;13475:1;13464:9;13460:17;13453:47;13517:108;13620:4;13611:6;13517:108;:::i;:::-;13509:116;;13407:225;;;;:::o;13638:210::-;13725:4;13763:2;13752:9;13748:18;13740:26;;13776:65;13838:1;13827:9;13823:17;13814:6;13776:65;:::i;:::-;13730:118;;;;:::o;13854:222::-;13947:4;13985:2;13974:9;13970:18;13962:26;;13998:71;14066:1;14055:9;14051:17;14042:6;13998:71;:::i;:::-;13952:124;;;;:::o;14082:218::-;14173:4;14211:2;14200:9;14196:18;14188:26;;14224:69;14290:1;14279:9;14275:17;14266:6;14224:69;:::i;:::-;14178:122;;;;:::o;14306:419::-;14472:4;14510:2;14499:9;14495:18;14487:26;;14559:9;14553:4;14549:20;14545:1;14534:9;14530:17;14523:47;14587:131;14713:4;14587:131;:::i;:::-;14579:139;;14477:248;;;:::o;14731:419::-;14897:4;14935:2;14924:9;14920:18;14912:26;;14984:9;14978:4;14974:20;14970:1;14959:9;14955:17;14948:47;15012:131;15138:4;15012:131;:::i;:::-;15004:139;;14902:248;;;:::o;15156:419::-;15322:4;15360:2;15349:9;15345:18;15337:26;;15409:9;15403:4;15399:20;15395:1;15384:9;15380:17;15373:47;15437:131;15563:4;15437:131;:::i;:::-;15429:139;;15327:248;;;:::o;15581:419::-;15747:4;15785:2;15774:9;15770:18;15762:26;;15834:9;15828:4;15824:20;15820:1;15809:9;15805:17;15798:47;15862:131;15988:4;15862:131;:::i;:::-;15854:139;;15752:248;;;:::o;16006:419::-;16172:4;16210:2;16199:9;16195:18;16187:26;;16259:9;16253:4;16249:20;16245:1;16234:9;16230:17;16223:47;16287:131;16413:4;16287:131;:::i;:::-;16279:139;;16177:248;;;:::o;16431:222::-;16524:4;16562:2;16551:9;16547:18;16539:26;;16575:71;16643:1;16632:9;16628:17;16619:6;16575:71;:::i;:::-;16529:124;;;;:::o;16659:539::-;16752:4;16758:6;16814:11;16801:25;16914:1;16908:4;16904:12;16893:8;16877:14;16873:29;16869:48;16849:18;16845:73;16835:2;;16932:1;16929;16922:12;16835:2;16967:18;16957:8;16953:33;16945:41;;17019:4;17006:18;16996:28;;17047:18;17039:6;17036:30;17033:2;;;17079:1;17076;17069:12;17033:2;17110;17104:4;17100:13;17092:21;;17167:4;17159:6;17155:17;17139:14;17135:38;17129:4;17125:49;17122:2;;;17187:1;17184;17177:12;17122:2;16765:433;;;;;;:::o;17204:129::-;17238:6;17265:20;;:::i;:::-;17255:30;;17294:33;17322:4;17314:6;17294:33;:::i;:::-;17245:88;;;:::o;17339:75::-;17372:6;17405:2;17399:9;17389:19;;17379:35;:::o;17420:311::-;17497:4;17587:18;17579:6;17576:30;17573:2;;;17609:18;;:::i;:::-;17573:2;17659:4;17651:6;17647:17;17639:25;;17719:4;17713;17709:15;17701:23;;17502:229;;;:::o;17737:132::-;17804:4;17827:3;17819:11;;17857:4;17852:3;17848:14;17840:22;;17809:60;;;:::o;17875:114::-;17942:6;17976:5;17970:12;17960:22;;17949:40;;;:::o;17995:113::-;18065:4;18097;18092:3;18088:14;18080:22;;18070:38;;;:::o;18114:184::-;18213:11;18247:6;18242:3;18235:19;18287:4;18282:3;18278:14;18263:29;;18225:73;;;;:::o;18304:168::-;18387:11;18421:6;18416:3;18409:19;18461:4;18456:3;18452:14;18437:29;;18399:73;;;;:::o;18478:169::-;18562:11;18596:6;18591:3;18584:19;18636:4;18631:3;18627:14;18612:29;;18574:73;;;;:::o;18653:305::-;18693:3;18712:20;18730:1;18712:20;:::i;:::-;18707:25;;18746:20;18764:1;18746:20;:::i;:::-;18741:25;;18900:1;18832:66;18828:74;18825:1;18822:81;18819:2;;;18906:18;;:::i;:::-;18819:2;18950:1;18947;18943:9;18936:16;;18697:261;;;;:::o;18964:185::-;19004:1;19021:20;19039:1;19021:20;:::i;:::-;19016:25;;19055:20;19073:1;19055:20;:::i;:::-;19050:25;;19094:1;19084:2;;19099:18;;:::i;:::-;19084:2;19141:1;19138;19134:9;19129:14;;19006:143;;;;:::o;19155:348::-;19195:7;19218:20;19236:1;19218:20;:::i;:::-;19213:25;;19252:20;19270:1;19252:20;:::i;:::-;19247:25;;19440:1;19372:66;19368:74;19365:1;19362:81;19357:1;19350:9;19343:17;19339:105;19336:2;;;19447:18;;:::i;:::-;19336:2;19495:1;19492;19488:9;19477:20;;19203:300;;;;:::o;19509:191::-;19549:4;19569:20;19587:1;19569:20;:::i;:::-;19564:25;;19603:20;19621:1;19603:20;:::i;:::-;19598:25;;19642:1;19639;19636:8;19633:2;;;19647:18;;:::i;:::-;19633:2;19692:1;19689;19685:9;19677:17;;19554:146;;;;:::o;19706:96::-;19743:7;19772:24;19790:5;19772:24;:::i;:::-;19761:35;;19751:51;;;:::o;19808:90::-;19842:7;19885:5;19878:13;19871:21;19860:32;;19850:48;;;:::o;19904:77::-;19941:7;19970:5;19959:16;;19949:32;;;:::o;19987:149::-;20023:7;20063:66;20056:5;20052:78;20041:89;;20031:105;;;:::o;20142:126::-;20179:7;20219:42;20212:5;20208:54;20197:65;;20187:81;;;:::o;20274:77::-;20311:7;20340:5;20329:16;;20319:32;;;:::o;20357:281::-;20440:27;20462:4;20440:27;:::i;:::-;20432:6;20428:40;20570:6;20558:10;20555:22;20534:18;20522:10;20519:34;20516:62;20513:2;;;20581:18;;:::i;:::-;20513:2;20621:10;20617:2;20610:22;20400:238;;;:::o;20644:233::-;20683:3;20706:24;20724:5;20706:24;:::i;:::-;20697:33;;20752:66;20745:5;20742:77;20739:2;;;20822:18;;:::i;:::-;20739:2;20869:1;20862:5;20858:13;20851:20;;20687:190;;;:::o;20883:79::-;20922:7;20951:5;20940:16;;20930:32;;;:::o;20968:180::-;21016:77;21013:1;21006:88;21113:4;21110:1;21103:15;21137:4;21134:1;21127:15;21154:180;21202:77;21199:1;21192:88;21299:4;21296:1;21289:15;21323:4;21320:1;21313:15;21340:180;21388:77;21385:1;21378:88;21485:4;21482:1;21475:15;21509:4;21506:1;21499:15;21526:102;21567:6;21618:2;21614:7;21609:2;21602:5;21598:14;21594:28;21584:38;;21574:54;;;:::o;21634:225::-;21774:34;21770:1;21762:6;21758:14;21751:58;21843:8;21838:2;21830:6;21826:15;21819:33;21740:119;:::o;21865:161::-;22005:13;22001:1;21993:6;21989:14;21982:37;21971:55;:::o;22032:169::-;22172:21;22168:1;22160:6;22156:14;22149:45;22138:63;:::o;22207:182::-;22347:34;22343:1;22335:6;22331:14;22324:58;22313:76;:::o;22395:165::-;22535:17;22531:1;22523:6;22519:14;22512:41;22501:59;:::o;22566:114::-;22672:8;:::o;22686:122::-;22759:24;22777:5;22759:24;:::i;:::-;22752:5;22749:35;22739:2;;22798:1;22795;22788:12;22739:2;22729:79;:::o;22814:122::-;22887:24;22905:5;22887:24;:::i;:::-;22880:5;22877:35;22867:2;;22926:1;22923;22916:12;22867:2;22857:79;:::o;22942:122::-;23015:24;23033:5;23015:24;:::i;:::-;23008:5;23005:35;22995:2;;23054:1;23051;23044:12;22995:2;22985:79;:::o
Swarm Source
ipfs://a9076865aa5d3eba23b337880c5b63a4d60391ecacf18e9cdf22950866f6652e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.