More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 109 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transmute And Cl... | 20148584 | 204 days ago | IN | 0 ETH | 0.0003891 | ||||
Transmute | 20147506 | 204 days ago | IN | 0 ETH | 0.00022543 | ||||
Force Transmute | 20147498 | 204 days ago | IN | 0 ETH | 0.00047363 | ||||
Force Transmute | 20147496 | 204 days ago | IN | 0 ETH | 0.00051503 | ||||
Force Transmute | 20147491 | 204 days ago | IN | 0 ETH | 0.00058756 | ||||
Transmute | 20147454 | 204 days ago | IN | 0 ETH | 0.00026782 | ||||
Force Transmute | 20147437 | 204 days ago | IN | 0 ETH | 0.00054538 | ||||
Force Transmute | 20147429 | 204 days ago | IN | 0 ETH | 0.00067172 | ||||
Stake | 19956988 | 231 days ago | IN | 0 ETH | 0.00036794 | ||||
Transmute And Cl... | 19149578 | 344 days ago | IN | 0 ETH | 0.00256558 | ||||
Transmute And Cl... | 17179266 | 621 days ago | IN | 0 ETH | 0.00715452 | ||||
Transmute Claim ... | 16412947 | 728 days ago | IN | 0 ETH | 0.0022349 | ||||
Stake | 16345371 | 738 days ago | IN | 0 ETH | 0.00134996 | ||||
Transmute Claim ... | 16345332 | 738 days ago | IN | 0 ETH | 0.00239294 | ||||
Transmute Claim ... | 16067377 | 777 days ago | IN | 0 ETH | 0.0009413 | ||||
Stake | 16067153 | 777 days ago | IN | 0 ETH | 0.00091783 | ||||
Unstake | 16067101 | 777 days ago | IN | 0 ETH | 0.00062275 | ||||
Stake | 16047871 | 779 days ago | IN | 0 ETH | 0.00100742 | ||||
Stake | 15174283 | 908 days ago | IN | 0 ETH | 0.00480605 | ||||
Stake | 15152425 | 912 days ago | IN | 0 ETH | 0.00077992 | ||||
Unstake | 15152179 | 912 days ago | IN | 0 ETH | 0.0006464 | ||||
Transmute And Cl... | 15151513 | 912 days ago | IN | 0 ETH | 0.00101773 | ||||
Stake | 14834078 | 965 days ago | IN | 0 ETH | 0.00153512 | ||||
Stake | 14804085 | 970 days ago | IN | 0 ETH | 0.00202379 | ||||
Transmute Claim ... | 14804070 | 970 days ago | IN | 0 ETH | 0.00359613 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TransmuterD8
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-13 */ // Sources flattened with hardhat v2.1.1 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/GSN/[email protected] pragma solidity >=0.6.0 <0.8.0; // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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 @openzeppelin/contracts/math/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File contracts/interfaces/IERC20Burnable.sol pragma solidity ^0.6.8; interface IERC20Burnable is IERC20 { function burn(uint256 amount) external; function burnFrom(address account, uint256 amount) external; } // File hardhat/[email protected] pragma solidity >= 0.4.22 <0.9.0; 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/TransmuterD8.sol pragma solidity 0.6.12; /** * @dev Implementation of the {IERC20Burnable} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20Burnable-approve}. */ contract TransmuterD8 is Context { using SafeMath for uint256; using SafeERC20 for IERC20Burnable; using Address for address; address public constant ZERO_ADDRESS = address(0); uint256 public TRANSMUTATION_PERIOD; address public WaToken; address public Token; mapping(address => uint256) public depositedWaTokens; mapping(address => uint256) public tokensInBucket; mapping(address => uint256) public realisedTokens; mapping(address => uint256) public lastDividendPoints; mapping(address => bool) public userIsKnown; mapping(uint256 => address) public userList; uint256 public nextUser; uint256 public totalSupplyWaTokens; uint256 public buffer; uint256 public lastDepositBlock; ///@dev values needed to calculate the distribution of base asset in proportion for waTokens staked uint256 public pointMultiplier = 10e8; uint256 public totalDividendPoints; uint256 public unclaimedDividends; /// @dev alchemist addresses whitelisted mapping (address => bool) public whiteList; /// @dev The address of the account which currently has administrative capabilities over this contract. address public governance; /// @dev The address of the pending governance. address public pendingGovernance; event GovernanceUpdated( address governance ); event PendingGovernanceUpdated( address pendingGovernance ); event TransmuterPeriodUpdated( uint256 newTransmutationPeriod ); constructor(address _WaToken, address _Token, address _governance) public { require(_governance != ZERO_ADDRESS, "TransmuterD8: 0 gov"); governance = _governance; WaToken = _WaToken; Token = _Token; TRANSMUTATION_PERIOD = 50; } ///@return displays the user's share of the pooled waTokens. function dividendsOwing(address account) public view returns (uint256) { uint256 newDividendPoints = totalDividendPoints.sub(lastDividendPoints[account]); return depositedWaTokens[account].mul(newDividendPoints).div(pointMultiplier); } ///@dev modifier to fill the bucket and keep bookkeeping correct incase of increase/decrease in shares modifier updateAccount(address account) { uint256 owing = dividendsOwing(account); if (owing > 0) { unclaimedDividends = unclaimedDividends.sub(owing); tokensInBucket[account] = tokensInBucket[account].add(owing); } lastDividendPoints[account] = totalDividendPoints; _; } ///@dev modifier add users to userlist. Users are indexed in order to keep track of when a bond has been filled modifier checkIfNewUser() { if (!userIsKnown[msg.sender]) { userList[nextUser] = msg.sender; userIsKnown[msg.sender] = true; nextUser++; } _; } ///@dev run the phased distribution of the buffered funds modifier runPhasedDistribution() { uint256 _lastDepositBlock = lastDepositBlock; uint256 _currentBlock = block.number; uint256 _toDistribute = 0; uint256 _buffer = buffer; // check if there is something in bufffer if (_buffer > 0) { // NOTE: if last deposit was updated in the same block as the current call // then the below logic gates will fail //calculate diffrence in time uint256 deltaTime = _currentBlock.sub(_lastDepositBlock); // distribute all if bigger than timeframe if(deltaTime >= TRANSMUTATION_PERIOD) { _toDistribute = _buffer; } else { //needs to be bigger than 0 cuzz solidity no decimals if(_buffer.mul(deltaTime) > TRANSMUTATION_PERIOD) { _toDistribute = _buffer.mul(deltaTime).div(TRANSMUTATION_PERIOD); } } // factually allocate if any needs distribution if(_toDistribute > 0){ // remove from buffer buffer = _buffer.sub(_toDistribute); // increase the allocation increaseAllocations(_toDistribute); } } // current timeframe is now the last lastDepositBlock = _currentBlock; _; } /// @dev A modifier which checks if whitelisted for minting. modifier onlyWhitelisted() { require(whiteList[msg.sender], "TransmuterD8: !whitelisted"); _; } /// @dev Checks that the current message sender or caller is the governance address. /// /// modifier onlyGov() { require(msg.sender == governance, "TransmuterD8: !governance"); _; } ///@dev set the TRANSMUTATION_PERIOD variable /// /// sets the length (in blocks) of one full distribution phase function setTransmutationPeriod(uint256 newTransmutationPeriod) public onlyGov() { TRANSMUTATION_PERIOD = newTransmutationPeriod; emit TransmuterPeriodUpdated(TRANSMUTATION_PERIOD); } ///@dev claims the base token after it has been transmuted /// ///This function reverts if there is no realisedToken balance function claim() public { address sender = msg.sender; require(realisedTokens[sender] > 0); uint256 value = realisedTokens[sender]; realisedTokens[sender] = 0; IERC20Burnable(Token).safeTransfer(sender, value); } ///@dev Withdraws staked waTokens from the transmuter /// /// This function reverts if you try to draw more tokens than you deposited /// ///@param amount the amount of waTokens to unstake function unstake(uint256 amount) public updateAccount(msg.sender) { // by calling this function before transmuting you forfeit your gained allocation address sender = msg.sender; require(depositedWaTokens[sender] >= amount,"TransmuterD8: unstake amount exceeds deposited amount"); depositedWaTokens[sender] = depositedWaTokens[sender].sub(amount); totalSupplyWaTokens = totalSupplyWaTokens.sub(amount); IERC20Burnable(WaToken).safeTransfer(sender, amount); } ///@dev Deposits waTokens into the transmuter /// ///@param amount the amount of waTokens to stake function stake(uint256 amount) public runPhasedDistribution() updateAccount(msg.sender) checkIfNewUser() { // requires approval of waToken first address sender = msg.sender; //require tokens transferred in; IERC20Burnable(WaToken).safeTransferFrom(sender, address(this), amount); totalSupplyWaTokens = totalSupplyWaTokens.add(amount); depositedWaTokens[sender] = depositedWaTokens[sender].add(amount); } /// @dev Converts the staked waTokens to the base tokens in amount of the sum of pendingdivs and tokensInBucket /// /// once the waToken has been converted, it is burned, and the base token becomes realisedTokens which can be recieved using claim() /// /// reverts if there are no pendingdivs or tokensInBucket function transmute() public runPhasedDistribution() updateAccount(msg.sender) { address sender = msg.sender; uint256 pendingz = tokensInBucket[sender]; uint256 diff; require(pendingz > 0, "need to have pending in bucket"); tokensInBucket[sender] = 0; // check bucket overflow if (pendingz > depositedWaTokens[sender]) { diff = pendingz.sub(depositedWaTokens[sender]); // remove overflow pendingz = depositedWaTokens[sender]; } // decrease watokens depositedWaTokens[sender] = depositedWaTokens[sender].sub(pendingz); // BURN WATOKENS IERC20Burnable(WaToken).burn(pendingz); // adjust total totalSupplyWaTokens = totalSupplyWaTokens.sub(pendingz); // reallocate overflow increaseAllocations(diff); // add payout realisedTokens[sender] = realisedTokens[sender].add(pendingz); } /// @dev Executes transmute() on another account that has had more base tokens allocated to it than waTokens staked. /// /// The caller of this function will have the surlus base tokens credited to their tokensInBucket balance, rewarding them for performing this action /// /// This function reverts if the address to transmute is not over-filled. /// /// @param toTransmute address of the account you will force transmute. function forceTransmute(address toTransmute) public runPhasedDistribution() updateAccount(msg.sender) updateAccount(toTransmute) { //load into memory address sender = msg.sender; uint256 pendingz = tokensInBucket[toTransmute]; // check restrictions require( pendingz > depositedWaTokens[toTransmute], "TransmuterD8: !overflow" ); // empty bucket tokensInBucket[toTransmute] = 0; // calculaate diffrence uint256 diff = pendingz.sub(depositedWaTokens[toTransmute]); // remove overflow pendingz = depositedWaTokens[toTransmute]; // decrease waTokens depositedWaTokens[toTransmute] = 0; // BURN WATOKENS IERC20Burnable(WaToken).burn(pendingz); // adjust total totalSupplyWaTokens = totalSupplyWaTokens.sub(pendingz); // reallocate overflow tokensInBucket[sender] = tokensInBucket[sender].add(diff); // add payout realisedTokens[toTransmute] = realisedTokens[toTransmute].add(pendingz); // force payout of realised tokens of the toTransmute address if (realisedTokens[toTransmute] > 0) { uint256 value = realisedTokens[toTransmute]; realisedTokens[toTransmute] = 0; IERC20Burnable(Token).safeTransfer(toTransmute, value); } } /// @dev Transmutes and unstakes all waTokens /// /// This function combines the transmute and unstake functions for ease of use function exit() public { transmute(); uint256 toWithdraw = depositedWaTokens[msg.sender]; unstake(toWithdraw); } /// @dev Transmutes and claims all converted base tokens. /// /// This function combines the transmute and claim functions while leaving your remaining WaTokens staked. function transmuteAndClaim() public { transmute(); claim(); } /// @dev Transmutes, claims base tokens, and withdraws waTokens. /// /// This function helps users to exit the transmuter contract completely after converting their WaTokens to the base pair. function transmuteClaimAndWithdraw() public { transmute(); claim(); uint256 toWithdraw = depositedWaTokens[msg.sender]; unstake(toWithdraw); } /// @dev Distributes the base token proportionally to all waToken stakers. /// /// This function is meant to be called by the Alchemist contract for when it is sending yield to the transmuter. /// Anyone can call this and add funds, idk why they would do that though... /// /// @param origin the account that is sending the tokens to be distributed. /// @param amount the amount of base tokens to be distributed to the transmuter. function distribute(address origin, uint256 amount) public onlyWhitelisted() runPhasedDistribution() { IERC20Burnable(Token).safeTransferFrom(origin, address(this), amount); buffer = buffer.add(amount); } /// @dev Allocates the incoming yield proportionally to all waToken stakers. /// /// @param amount the amount of base tokens to be distributed in the transmuter. function increaseAllocations(uint256 amount) internal { if(totalSupplyWaTokens > 0 && amount > 0) { totalDividendPoints = totalDividendPoints.add( amount.mul(pointMultiplier).div(totalSupplyWaTokens) ); unclaimedDividends = unclaimedDividends.add(amount); } else { buffer = buffer.add(amount); } } /// @dev Gets the status of a user's staking position. /// /// The total amount allocated to a user is the sum of pendingdivs and inbucket. /// /// @param user the address of the user you wish to query. /// /// returns user status function userInfo(address user) public view returns ( uint256 depositedAl, uint256 pendingdivs, uint256 inbucket, uint256 realised ) { uint256 _depositedAl = depositedWaTokens[user]; uint256 _toDistribute = buffer.mul(block.number.sub(lastDepositBlock)).div(TRANSMUTATION_PERIOD); if(block.number.sub(lastDepositBlock) > TRANSMUTATION_PERIOD){ _toDistribute = buffer; } uint256 _pendingdivs = _toDistribute.mul(depositedWaTokens[user]).div(totalSupplyWaTokens); uint256 _inbucket = tokensInBucket[user].add(dividendsOwing(user)); uint256 _realised = realisedTokens[user]; return (_depositedAl, _pendingdivs, _inbucket, _realised); } /// @dev Gets the status of multiple users in one call /// /// This function is used to query the contract to check for /// accounts that have overfilled positions in order to check /// who can be force transmuted. /// /// @param from the first index of the userList /// @param to the last index of the userList /// /// returns the userList with their staking status in paginated form. function getMultipleUserInfo(uint256 from, uint256 to) public view returns (address[] memory theUserList, uint256[] memory theUserData) { uint256 i = from; uint256 delta = to - from; address[] memory _theUserList = new address[](delta); //user uint256[] memory _theUserData = new uint256[](delta * 2); //deposited-bucket uint256 y = 0; uint256 _toDistribute = buffer.mul(block.number.sub(lastDepositBlock)).div(TRANSMUTATION_PERIOD); if(block.number.sub(lastDepositBlock) > TRANSMUTATION_PERIOD){ _toDistribute = buffer; } for (uint256 x = 0; x < delta; x += 1) { _theUserList[x] = userList[i]; _theUserData[y] = depositedWaTokens[userList[i]]; _theUserData[y + 1] = dividendsOwing(userList[i]).add(tokensInBucket[userList[i]]).add(_toDistribute.mul(depositedWaTokens[userList[i]]).div(totalSupplyWaTokens)); y += 2; i += 1; } return (_theUserList, _theUserData); } /// @dev Gets info on the buffer /// /// This function is used to query the contract to get the /// latest state of the buffer /// /// @return _toDistribute the amount ready to be distributed /// @return _deltaBlocks the amount of time since the last phased distribution /// @return _buffer the amount in the buffer function bufferInfo() public view returns (uint256 _toDistribute, uint256 _deltaBlocks, uint256 _buffer){ _deltaBlocks = block.number.sub(lastDepositBlock); _buffer = buffer; _toDistribute = _buffer.mul(_deltaBlocks).div(TRANSMUTATION_PERIOD); } /// @dev Sets the pending governance. /// /// This function reverts if the new pending governance is the zero address or the caller is not the current /// governance. This is to prevent the contract governance being set to the zero address which would deadlock /// privileged contract functionality. /// /// @param _pendingGovernance the new pending governance. function setPendingGovernance(address _pendingGovernance) external onlyGov { require(_pendingGovernance != ZERO_ADDRESS, "TransmuterD8: 0 gov"); pendingGovernance = _pendingGovernance; emit PendingGovernanceUpdated(_pendingGovernance); } /// @dev Accepts the role as governance. /// /// This function reverts if the caller is not the new pending governance. function acceptGovernance() external { require(msg.sender == pendingGovernance,"!pendingGovernance"); address _pendingGovernance = pendingGovernance; governance = _pendingGovernance; emit GovernanceUpdated(_pendingGovernance); } /// This function reverts if the caller is not governance /// /// @param _toWhitelist the account to mint tokens to. /// @param _state the whitelist state. function setWhitelist(address _toWhitelist, bool _state) external onlyGov { whiteList[_toWhitelist] = _state; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_WaToken","type":"address"},{"internalType":"address","name":"_Token","type":"address"},{"internalType":"address","name":"_governance","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governance","type":"address"}],"name":"GovernanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingGovernance","type":"address"}],"name":"PendingGovernanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTransmutationPeriod","type":"uint256"}],"name":"TransmuterPeriodUpdated","type":"event"},{"inputs":[],"name":"TRANSMUTATION_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WaToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bufferInfo","outputs":[{"internalType":"uint256","name":"_toDistribute","type":"uint256"},{"internalType":"uint256","name":"_deltaBlocks","type":"uint256"},{"internalType":"uint256","name":"_buffer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedWaTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"origin","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendsOwing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toTransmute","type":"address"}],"name":"forceTransmute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getMultipleUserInfo","outputs":[{"internalType":"address[]","name":"theUserList","type":"address[]"},{"internalType":"uint256[]","name":"theUserData","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDepositBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastDividendPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"realisedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pendingGovernance","type":"address"}],"name":"setPendingGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransmutationPeriod","type":"uint256"}],"name":"setTransmutationPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_toWhitelist","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensInBucket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyWaTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transmute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transmuteAndClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transmuteClaimAndWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"depositedAl","type":"uint256"},{"internalType":"uint256","name":"pendingdivs","type":"uint256"},{"internalType":"uint256","name":"inbucket","type":"uint256"},{"internalType":"uint256","name":"realised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userIsKnown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"userList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052633b9aca00600d5534801561001857600080fd5b50604051611fb8380380611fb88339818101604052606081101561003b57600080fd5b50805160208201516040909201519091906001600160a01b0381166100a7576040805162461bcd60e51b815260206004820152601360248201527f5472616e736d7574657244383a203020676f7600000000000000000000000000604482015290519081900360640190fd5b601180546001600160a01b039283166001600160a01b03199182161790915560018054948316948216949094179093556002805492909116919092161790556032600055611ebe806100fa6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80635aa6e67511610130578063a694fc3a116100b8578063e9fad8ee1161007c578063e9fad8ee1461060e578063edaafe2014610616578063f1f792001461061e578063f39c38a014610626578063fb9321081461062e57610227565b8063a694fc3a14610595578063b870d598146105b2578063bff170b9146105d8578063c2412676146105fe578063e044205e1461060657610227565b8063806985f7116100ff578063806985f7146105075780638391e45c1461052d5780639f4216e814610553578063a02fbe2d14610570578063a196cf2e1461058d57610227565b80635aa6e675146104ab578063658b98a9146104b35780636e3735b4146104bb57806379070a12146104e157610227565b80632a3d7c81116101b35780633dce68ea116101825780633dce68ea1461043f5780634e71d92d14610447578063527100071461044f578063538ba4f91461047557806353d6fd591461047d57610227565b80632a3d7c81146103d85780632e17de78146103e0578063372c12b1146103fd5780633cb802b91461043757610227565b8063192bfc92116101fa578063192bfc92146103505780631959a002146103745780632113342d146103c0578063238efcbc146103c85780632a03cf68146103d057610227565b806301f50c861461022c578063030362901461024657806305d2301d146103025780630abb603514610328575b600080fd5b61023461065a565b60408051918252519081900360200190f35b6102696004803603604081101561025c57600080fd5b5080359060200135610660565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156102ad578181015183820152602001610295565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156102ec5781810151838201526020016102d4565b5050505090500194505050505060405180910390f35b61030a610887565b60408051938452602084019290925282820152519081900360600190f35b61034e6004803603602081101561033e57600080fd5b50356001600160a01b03166108c1565b005b6103586109c1565b604080516001600160a01b039092168252519081900360200190f35b61039a6004803603602081101561038a57600080fd5b50356001600160a01b03166109d0565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610234610ab5565b61034e610abb565b61034e610b66565b610234610b78565b61034e600480360360208110156103f657600080fd5b5035610b7e565b6104236004803603602081101561041357600080fd5b50356001600160a01b0316610cb5565b604080519115158252519081900360200190f35b610234610cca565b610234610cd0565b61034e610cd6565b6102346004803603602081101561046557600080fd5b50356001600160a01b0316610d22565b610358610d34565b61034e6004803603604081101561049357600080fd5b506001600160a01b0381351690602001351515610d39565b610358610dbf565b610234610dce565b610234600480360360208110156104d157600080fd5b50356001600160a01b0316610dd4565b610423600480360360208110156104f757600080fd5b50356001600160a01b0316610de6565b6102346004803603602081101561051d57600080fd5b50356001600160a01b0316610dfb565b6102346004803603602081101561054357600080fd5b50356001600160a01b0316610e0d565b6103586004803603602081101561056957600080fd5b5035610e69565b61034e6004803603602081101561058657600080fd5b5035610e84565b610234610f1a565b61034e600480360360208110156105ab57600080fd5b5035610f20565b610234600480360360208110156105c857600080fd5b50356001600160a01b03166110e2565b61034e600480360360208110156105ee57600080fd5b50356001600160a01b03166110f4565b610358611456565b61034e611465565b61034e611491565b610234611499565b61034e61149f565b610358611765565b61034e6004803603604081101561064457600080fd5b506001600160a01b038135169060200135611774565b60005481565b60608083808403828167ffffffffffffffff8111801561067f57600080fd5b506040519080825280602002602001820160405280156106a9578160200160208202803683370190505b50905060608260020267ffffffffffffffff811180156106c857600080fd5b506040519080825280602002602001820160405280156106f2578160200160208202803683370190505b50905060008061072560005461071f610716600c544361188290919063ffffffff16565b600b54906118e4565b9061193d565b905060005461073f600c544361188290919063ffffffff16565b111561074a5750600b545b60005b858110156108765760008781526008602052604090205485516001600160a01b039091169086908390811061077e57fe5b6001600160a01b0392831660209182029290920181019190915260008981526008825260408082205490931681526003909152205484518590859081106107c157fe5b602090810291909101810191909152600a546000898152600883526040808220546001600160a01b03168252600390935291909120546108499161080a9161071f9086906118e4565b6000898152600860208181526040808420546001600160a01b03168085526004835290842054938d905291905261084391908290610e0d565b906119a4565b84846001018151811061085857fe5b6020908102919091010152600196870196600293909301920161074d565b509299919850909650505050505050565b60008060006108a1600c544361188290919063ffffffff16565b600b5460005491935091506108ba9061071f83856118e4565b9250909192565b6011546001600160a01b0316331461091c576040805162461bcd60e51b81526020600482015260196024820152785472616e736d7574657244383a2021676f7665726e616e636560381b604482015290519081900360640190fd5b6001600160a01b03811661096d576040805162461bcd60e51b81526020600482015260136024820152722a3930b739b6baba32b9221c1d10181033b7bb60691b604482015290519081900360640190fd5b601280546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fc9e2377236eab4280090ce8f2317332649736d92f00dcf20a8dd6684ec5e78399181900360200190a150565b6001546001600160a01b031681565b6001600160a01b0381166000908152600360205260408120548154600c548392839283928391610a099161071f90610716904390611882565b9050600054610a23600c544361188290919063ffffffff16565b1115610a2e5750600b545b600a546001600160a01b0388166000908152600360205260408120549091610a5b9161071f9085906118e4565b90506000610a8a610a6b8a610e0d565b6001600160a01b038b16600090815260046020526040902054906119a4565b6001600160a01b03999099166000908152600560205260409020549399919897509295509350505050565b600e5481565b6012546001600160a01b03163314610b0f576040805162461bcd60e51b81526020600482015260126024820152712170656e64696e67476f7665726e616e636560701b604482015290519081900360640190fd5b601254601180546001600160a01b0319166001600160a01b0390921691821790556040805182815290517f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab9181900360200190a150565b610b6e61149f565b610b76610cd6565b565b600c5481565b336000610b8a82610e0d565b90508015610bdf57600f54610b9f9082611882565b600f556001600160a01b038216600090815260046020526040902054610bc590826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b03831660009081526006602090815260408083209390935533808352600390915291902054841115610c4c5760405162461bcd60e51b8152600401808060200182810382526035815260200180611de36035913960400191505060405180910390fd5b6001600160a01b038116600090815260036020526040902054610c6f9085611882565b6001600160a01b038216600090815260036020526040902055600a54610c959085611882565b600a55600154610caf906001600160a01b031682866119fe565b50505050565b60106020526000908152604090205460ff1681565b600f5481565b600a5481565b33600081815260056020526040902054610cef57600080fd5b6001600160a01b03808216600090815260056020526040812080549190556002549091610d1e911683836119fe565b5050565b60056020526000908152604090205481565b600081565b6011546001600160a01b03163314610d94576040805162461bcd60e51b81526020600482015260196024820152785472616e736d7574657244383a2021676f7665726e616e636560381b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6011546001600160a01b031681565b600d5481565b60036020526000908152604090205481565b60076020526000908152604090205460ff1681565b60066020526000908152604090205481565b6001600160a01b038116600090815260066020526040812054600e548291610e359190611882565b600d546001600160a01b038516600090815260036020526040902054919250610e629161071f90846118e4565b9392505050565b6008602052600090815260409020546001600160a01b031681565b6011546001600160a01b03163314610edf576040805162461bcd60e51b81526020600482015260196024820152785472616e736d7574657244383a2021676f7665726e616e636560381b604482015290519081900360640190fd5b60008190556040805182815290517fc2965d898897107f6f1d0e43c043ca07b7a51d487acfac1decec2ec8405364409181900360200190a150565b60095481565b600c54600b5443906000908015610f95576000610f3d8486611882565b90506000548110610f5057819250610f77565b600054610f5d83836118e4565b1115610f7757600054610f749061071f84846118e4565b92505b8215610f9357610f878284611882565b600b55610f9383611a55565b505b600c839055336000610fa682610e0d565b90508015610ffb57600f54610fbb9082611882565b600f556001600160a01b038216600090815260046020526040902054610fe190826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b03831660009081526006602090815260408083209390935533825260079052205460ff166110725760098054600090815260086020908152604080832080546001600160a01b03191633908117909155835260079091529020805460ff1916600190811790915581540190555b600154339061108c906001600160a01b031682308b611abe565b600a5461109990896119a4565b600a556001600160a01b0381166000908152600360205260409020546110bf90896119a4565b6001600160a01b0390911660009081526003602052604090205550505050505050565b60046020526000908152604090205481565b600c54600b54439060009080156111695760006111118486611882565b905060005481106111245781925061114b565b60005461113183836118e4565b111561114b576000546111489061071f84846118e4565b92505b82156111675761115b8284611882565b600b5561116783611a55565b505b600c83905533600061117a82610e0d565b905080156111cf57600f5461118f9082611882565b600f556001600160a01b0382166000908152600460205260409020546111b590826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b03831660009081526006602052604081209190915587906111f982610e0d565b9050801561124e57600f5461120e9082611882565b600f556001600160a01b03821660009081526004602052604090205461123490826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b03808416600090815260066020908152604080832094909455918c16815260048252828120546003909252919091205433919081116112de576040805162461bcd60e51b815260206004820152601760248201527f5472616e736d7574657244383a20216f766572666c6f77000000000000000000604482015290519081900360640190fd5b6001600160a01b038b166000908152600460209081526040808320839055600390915281205461130f908390611882565b6001600160a01b03808e166000908152600360205260408082208054908390556001548251630852cd8d60e31b815260048101839052925191975094955093909216926342966c6892602480820193929182900301818387803b15801561137557600080fd5b505af1158015611389573d6000803e3d6000fd5b5050600a5461139b9250905083611882565b600a556001600160a01b0383166000908152600460205260409020546113c190826119a4565b6001600160a01b03808516600090815260046020908152604080832094909455918f168152600590915220546113f790836119a4565b6001600160a01b038d16600090815260056020526040902081905515611448576001600160a01b03808d1660009081526005602052604081208054919055600254909161144691168e836119fe565b505b505050505050505050505050565b6002546001600160a01b031681565b61146d61149f565b611475610cd6565b3360009081526003602052604090205461148e81610b7e565b50565b61147561149f565b600b5481565b600c54600b54439060009080156115145760006114bc8486611882565b905060005481106114cf578192506114f6565b6000546114dc83836118e4565b11156114f6576000546114f39061071f84846118e4565b92505b8215611512576115068284611882565b600b5561151283611a55565b505b600c83905533600061152582610e0d565b9050801561157a57600f5461153a9082611882565b600f556001600160a01b03821660009081526004602052604090205461156090826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b0383166000908152600660209081526040808320939093553380835260049091529181205490816115fc576040805162461bcd60e51b815260206004820152601e60248201527f6e65656420746f20686176652070656e64696e6720696e206275636b65740000604482015290519081900360640190fd5b6001600160a01b0383166000908152600460209081526040808320839055600390915290205482111561166b576001600160a01b03831660009081526003602052604090205461164d908390611882565b6001600160a01b038416600090815260036020526040902054925090505b6001600160a01b03831660009081526003602052604090205461168e9083611882565b6001600160a01b03808516600090815260036020526040808220939093556001548351630852cd8d60e31b81526004810187905293519216926342966c68926024808301939282900301818387803b1580156116e957600080fd5b505af11580156116fd573d6000803e3d6000fd5b5050600a5461170f9250905083611882565b600a5561171b81611a55565b6001600160a01b03831660009081526005602052604090205461173e90836119a4565b6001600160a01b039093166000908152600560205260409020929092555050505050505050565b6012546001600160a01b031681565b3360009081526010602052604090205460ff166117d8576040805162461bcd60e51b815260206004820152601a60248201527f5472616e736d7574657244383a202177686974656c6973746564000000000000604482015290519081900360640190fd5b600c54600b544390600090801561184d5760006117f58486611882565b905060005481106118085781925061182f565b60005461181583836118e4565b111561182f5760005461182c9061071f84846118e4565b92505b821561184b5761183f8284611882565b600b5561184b83611a55565b505b600c83905560025461186a906001600160a01b0316873088611abe565b600b5461187790866119a4565b600b55505050505050565b6000828211156118d9576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000826118f3575060006118de565b8282028284828161190057fe5b0414610e625760405162461bcd60e51b8152600401808060200182810382526021815260200180611e3e6021913960400191505060405180910390fd5b6000808211611993576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161199c57fe5b049392505050565b600082820183811015610e62576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611a50908490611b14565b505050565b6000600a54118015611a675750600081115b15611aab57611a93611a8a600a5461071f600d54856118e490919063ffffffff16565b600e54906119a4565b600e55600f54611aa390826119a4565b600f5561148e565b600b54611ab890826119a4565b600b5550565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610caf9085905b6060611b69826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611bc59092919063ffffffff16565b805190915015611a5057808060200190516020811015611b8857600080fd5b5051611a505760405162461bcd60e51b815260040180806020018281038252602a815260200180611e5f602a913960400191505060405180910390fd5b6060611bd48484600085611bdc565b949350505050565b606082471015611c1d5760405162461bcd60e51b8152600401808060200182810382526026815260200180611e186026913960400191505060405180910390fd5b611c2685611d38565b611c77576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611cb65780518252601f199092019160209182019101611c97565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611d18576040519150601f19603f3d011682016040523d82523d6000602084013e611d1d565b606091505b5091509150611d2d828286611d3e565b979650505050505050565b3b151590565b60608315611d4d575081610e62565b825115611d5d5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611da7578181015183820152602001611d8f565b50505050905090810190601f168015611dd45780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e736d7574657244383a20756e7374616b6520616d6f756e742065786365656473206465706f736974656420616d6f756e74416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d948efd5c76c13a3c34e9756967c683be59edfa8d3fe40b899a7cce73022399e64736f6c634300060c0033000000000000000000000000fd8e70e83e399307db3978d3f34b060a06792c360000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000023ae8682437004044c0eddc7cee3bf632349062e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c80635aa6e67511610130578063a694fc3a116100b8578063e9fad8ee1161007c578063e9fad8ee1461060e578063edaafe2014610616578063f1f792001461061e578063f39c38a014610626578063fb9321081461062e57610227565b8063a694fc3a14610595578063b870d598146105b2578063bff170b9146105d8578063c2412676146105fe578063e044205e1461060657610227565b8063806985f7116100ff578063806985f7146105075780638391e45c1461052d5780639f4216e814610553578063a02fbe2d14610570578063a196cf2e1461058d57610227565b80635aa6e675146104ab578063658b98a9146104b35780636e3735b4146104bb57806379070a12146104e157610227565b80632a3d7c81116101b35780633dce68ea116101825780633dce68ea1461043f5780634e71d92d14610447578063527100071461044f578063538ba4f91461047557806353d6fd591461047d57610227565b80632a3d7c81146103d85780632e17de78146103e0578063372c12b1146103fd5780633cb802b91461043757610227565b8063192bfc92116101fa578063192bfc92146103505780631959a002146103745780632113342d146103c0578063238efcbc146103c85780632a03cf68146103d057610227565b806301f50c861461022c578063030362901461024657806305d2301d146103025780630abb603514610328575b600080fd5b61023461065a565b60408051918252519081900360200190f35b6102696004803603604081101561025c57600080fd5b5080359060200135610660565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156102ad578181015183820152602001610295565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156102ec5781810151838201526020016102d4565b5050505090500194505050505060405180910390f35b61030a610887565b60408051938452602084019290925282820152519081900360600190f35b61034e6004803603602081101561033e57600080fd5b50356001600160a01b03166108c1565b005b6103586109c1565b604080516001600160a01b039092168252519081900360200190f35b61039a6004803603602081101561038a57600080fd5b50356001600160a01b03166109d0565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610234610ab5565b61034e610abb565b61034e610b66565b610234610b78565b61034e600480360360208110156103f657600080fd5b5035610b7e565b6104236004803603602081101561041357600080fd5b50356001600160a01b0316610cb5565b604080519115158252519081900360200190f35b610234610cca565b610234610cd0565b61034e610cd6565b6102346004803603602081101561046557600080fd5b50356001600160a01b0316610d22565b610358610d34565b61034e6004803603604081101561049357600080fd5b506001600160a01b0381351690602001351515610d39565b610358610dbf565b610234610dce565b610234600480360360208110156104d157600080fd5b50356001600160a01b0316610dd4565b610423600480360360208110156104f757600080fd5b50356001600160a01b0316610de6565b6102346004803603602081101561051d57600080fd5b50356001600160a01b0316610dfb565b6102346004803603602081101561054357600080fd5b50356001600160a01b0316610e0d565b6103586004803603602081101561056957600080fd5b5035610e69565b61034e6004803603602081101561058657600080fd5b5035610e84565b610234610f1a565b61034e600480360360208110156105ab57600080fd5b5035610f20565b610234600480360360208110156105c857600080fd5b50356001600160a01b03166110e2565b61034e600480360360208110156105ee57600080fd5b50356001600160a01b03166110f4565b610358611456565b61034e611465565b61034e611491565b610234611499565b61034e61149f565b610358611765565b61034e6004803603604081101561064457600080fd5b506001600160a01b038135169060200135611774565b60005481565b60608083808403828167ffffffffffffffff8111801561067f57600080fd5b506040519080825280602002602001820160405280156106a9578160200160208202803683370190505b50905060608260020267ffffffffffffffff811180156106c857600080fd5b506040519080825280602002602001820160405280156106f2578160200160208202803683370190505b50905060008061072560005461071f610716600c544361188290919063ffffffff16565b600b54906118e4565b9061193d565b905060005461073f600c544361188290919063ffffffff16565b111561074a5750600b545b60005b858110156108765760008781526008602052604090205485516001600160a01b039091169086908390811061077e57fe5b6001600160a01b0392831660209182029290920181019190915260008981526008825260408082205490931681526003909152205484518590859081106107c157fe5b602090810291909101810191909152600a546000898152600883526040808220546001600160a01b03168252600390935291909120546108499161080a9161071f9086906118e4565b6000898152600860208181526040808420546001600160a01b03168085526004835290842054938d905291905261084391908290610e0d565b906119a4565b84846001018151811061085857fe5b6020908102919091010152600196870196600293909301920161074d565b509299919850909650505050505050565b60008060006108a1600c544361188290919063ffffffff16565b600b5460005491935091506108ba9061071f83856118e4565b9250909192565b6011546001600160a01b0316331461091c576040805162461bcd60e51b81526020600482015260196024820152785472616e736d7574657244383a2021676f7665726e616e636560381b604482015290519081900360640190fd5b6001600160a01b03811661096d576040805162461bcd60e51b81526020600482015260136024820152722a3930b739b6baba32b9221c1d10181033b7bb60691b604482015290519081900360640190fd5b601280546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fc9e2377236eab4280090ce8f2317332649736d92f00dcf20a8dd6684ec5e78399181900360200190a150565b6001546001600160a01b031681565b6001600160a01b0381166000908152600360205260408120548154600c548392839283928391610a099161071f90610716904390611882565b9050600054610a23600c544361188290919063ffffffff16565b1115610a2e5750600b545b600a546001600160a01b0388166000908152600360205260408120549091610a5b9161071f9085906118e4565b90506000610a8a610a6b8a610e0d565b6001600160a01b038b16600090815260046020526040902054906119a4565b6001600160a01b03999099166000908152600560205260409020549399919897509295509350505050565b600e5481565b6012546001600160a01b03163314610b0f576040805162461bcd60e51b81526020600482015260126024820152712170656e64696e67476f7665726e616e636560701b604482015290519081900360640190fd5b601254601180546001600160a01b0319166001600160a01b0390921691821790556040805182815290517f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab9181900360200190a150565b610b6e61149f565b610b76610cd6565b565b600c5481565b336000610b8a82610e0d565b90508015610bdf57600f54610b9f9082611882565b600f556001600160a01b038216600090815260046020526040902054610bc590826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b03831660009081526006602090815260408083209390935533808352600390915291902054841115610c4c5760405162461bcd60e51b8152600401808060200182810382526035815260200180611de36035913960400191505060405180910390fd5b6001600160a01b038116600090815260036020526040902054610c6f9085611882565b6001600160a01b038216600090815260036020526040902055600a54610c959085611882565b600a55600154610caf906001600160a01b031682866119fe565b50505050565b60106020526000908152604090205460ff1681565b600f5481565b600a5481565b33600081815260056020526040902054610cef57600080fd5b6001600160a01b03808216600090815260056020526040812080549190556002549091610d1e911683836119fe565b5050565b60056020526000908152604090205481565b600081565b6011546001600160a01b03163314610d94576040805162461bcd60e51b81526020600482015260196024820152785472616e736d7574657244383a2021676f7665726e616e636560381b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6011546001600160a01b031681565b600d5481565b60036020526000908152604090205481565b60076020526000908152604090205460ff1681565b60066020526000908152604090205481565b6001600160a01b038116600090815260066020526040812054600e548291610e359190611882565b600d546001600160a01b038516600090815260036020526040902054919250610e629161071f90846118e4565b9392505050565b6008602052600090815260409020546001600160a01b031681565b6011546001600160a01b03163314610edf576040805162461bcd60e51b81526020600482015260196024820152785472616e736d7574657244383a2021676f7665726e616e636560381b604482015290519081900360640190fd5b60008190556040805182815290517fc2965d898897107f6f1d0e43c043ca07b7a51d487acfac1decec2ec8405364409181900360200190a150565b60095481565b600c54600b5443906000908015610f95576000610f3d8486611882565b90506000548110610f5057819250610f77565b600054610f5d83836118e4565b1115610f7757600054610f749061071f84846118e4565b92505b8215610f9357610f878284611882565b600b55610f9383611a55565b505b600c839055336000610fa682610e0d565b90508015610ffb57600f54610fbb9082611882565b600f556001600160a01b038216600090815260046020526040902054610fe190826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b03831660009081526006602090815260408083209390935533825260079052205460ff166110725760098054600090815260086020908152604080832080546001600160a01b03191633908117909155835260079091529020805460ff1916600190811790915581540190555b600154339061108c906001600160a01b031682308b611abe565b600a5461109990896119a4565b600a556001600160a01b0381166000908152600360205260409020546110bf90896119a4565b6001600160a01b0390911660009081526003602052604090205550505050505050565b60046020526000908152604090205481565b600c54600b54439060009080156111695760006111118486611882565b905060005481106111245781925061114b565b60005461113183836118e4565b111561114b576000546111489061071f84846118e4565b92505b82156111675761115b8284611882565b600b5561116783611a55565b505b600c83905533600061117a82610e0d565b905080156111cf57600f5461118f9082611882565b600f556001600160a01b0382166000908152600460205260409020546111b590826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b03831660009081526006602052604081209190915587906111f982610e0d565b9050801561124e57600f5461120e9082611882565b600f556001600160a01b03821660009081526004602052604090205461123490826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b03808416600090815260066020908152604080832094909455918c16815260048252828120546003909252919091205433919081116112de576040805162461bcd60e51b815260206004820152601760248201527f5472616e736d7574657244383a20216f766572666c6f77000000000000000000604482015290519081900360640190fd5b6001600160a01b038b166000908152600460209081526040808320839055600390915281205461130f908390611882565b6001600160a01b03808e166000908152600360205260408082208054908390556001548251630852cd8d60e31b815260048101839052925191975094955093909216926342966c6892602480820193929182900301818387803b15801561137557600080fd5b505af1158015611389573d6000803e3d6000fd5b5050600a5461139b9250905083611882565b600a556001600160a01b0383166000908152600460205260409020546113c190826119a4565b6001600160a01b03808516600090815260046020908152604080832094909455918f168152600590915220546113f790836119a4565b6001600160a01b038d16600090815260056020526040902081905515611448576001600160a01b03808d1660009081526005602052604081208054919055600254909161144691168e836119fe565b505b505050505050505050505050565b6002546001600160a01b031681565b61146d61149f565b611475610cd6565b3360009081526003602052604090205461148e81610b7e565b50565b61147561149f565b600b5481565b600c54600b54439060009080156115145760006114bc8486611882565b905060005481106114cf578192506114f6565b6000546114dc83836118e4565b11156114f6576000546114f39061071f84846118e4565b92505b8215611512576115068284611882565b600b5561151283611a55565b505b600c83905533600061152582610e0d565b9050801561157a57600f5461153a9082611882565b600f556001600160a01b03821660009081526004602052604090205461156090826119a4565b6001600160a01b0383166000908152600460205260409020555b600e546001600160a01b0383166000908152600660209081526040808320939093553380835260049091529181205490816115fc576040805162461bcd60e51b815260206004820152601e60248201527f6e65656420746f20686176652070656e64696e6720696e206275636b65740000604482015290519081900360640190fd5b6001600160a01b0383166000908152600460209081526040808320839055600390915290205482111561166b576001600160a01b03831660009081526003602052604090205461164d908390611882565b6001600160a01b038416600090815260036020526040902054925090505b6001600160a01b03831660009081526003602052604090205461168e9083611882565b6001600160a01b03808516600090815260036020526040808220939093556001548351630852cd8d60e31b81526004810187905293519216926342966c68926024808301939282900301818387803b1580156116e957600080fd5b505af11580156116fd573d6000803e3d6000fd5b5050600a5461170f9250905083611882565b600a5561171b81611a55565b6001600160a01b03831660009081526005602052604090205461173e90836119a4565b6001600160a01b039093166000908152600560205260409020929092555050505050505050565b6012546001600160a01b031681565b3360009081526010602052604090205460ff166117d8576040805162461bcd60e51b815260206004820152601a60248201527f5472616e736d7574657244383a202177686974656c6973746564000000000000604482015290519081900360640190fd5b600c54600b544390600090801561184d5760006117f58486611882565b905060005481106118085781925061182f565b60005461181583836118e4565b111561182f5760005461182c9061071f84846118e4565b92505b821561184b5761183f8284611882565b600b5561184b83611a55565b505b600c83905560025461186a906001600160a01b0316873088611abe565b600b5461187790866119a4565b600b55505050505050565b6000828211156118d9576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000826118f3575060006118de565b8282028284828161190057fe5b0414610e625760405162461bcd60e51b8152600401808060200182810382526021815260200180611e3e6021913960400191505060405180910390fd5b6000808211611993576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161199c57fe5b049392505050565b600082820183811015610e62576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611a50908490611b14565b505050565b6000600a54118015611a675750600081115b15611aab57611a93611a8a600a5461071f600d54856118e490919063ffffffff16565b600e54906119a4565b600e55600f54611aa390826119a4565b600f5561148e565b600b54611ab890826119a4565b600b5550565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610caf9085905b6060611b69826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611bc59092919063ffffffff16565b805190915015611a5057808060200190516020811015611b8857600080fd5b5051611a505760405162461bcd60e51b815260040180806020018281038252602a815260200180611e5f602a913960400191505060405180910390fd5b6060611bd48484600085611bdc565b949350505050565b606082471015611c1d5760405162461bcd60e51b8152600401808060200182810382526026815260200180611e186026913960400191505060405180910390fd5b611c2685611d38565b611c77576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611cb65780518252601f199092019160209182019101611c97565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611d18576040519150601f19603f3d011682016040523d82523d6000602084013e611d1d565b606091505b5091509150611d2d828286611d3e565b979650505050505050565b3b151590565b60608315611d4d575081610e62565b825115611d5d5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611da7578181015183820152602001611d8f565b50505050905090810190601f168015611dd45780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e736d7574657244383a20756e7374616b6520616d6f756e742065786365656473206465706f736974656420616d6f756e74416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d948efd5c76c13a3c34e9756967c683be59edfa8d3fe40b899a7cce73022399e64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fd8e70e83e399307db3978d3f34b060a06792c360000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000023ae8682437004044c0eddc7cee3bf632349062e
-----Decoded View---------------
Arg [0] : _WaToken (address): 0xfd8e70e83E399307db3978D3F34B060a06792c36
Arg [1] : _Token (address): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
Arg [2] : _governance (address): 0x23Ae8682437004044C0eddC7cee3bF632349062e
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000fd8e70e83e399307db3978d3f34b060a06792c36
Arg [1] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [2] : 00000000000000000000000023ae8682437004044c0eddc7cee3bf632349062e
Deployed Bytecode Sourcemap
88344:17225:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;88548:35;;;:::i;:::-;;;;;;;;;;;;;;;;102442:1079;;;;;;;;;;;;;;;;-1:-1:-1;102442:1079:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;103885:277;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;104567:273;;;;;;;;;;;;;;;;-1:-1:-1;104567:273:0;-1:-1:-1;;;;;104567:273:0;;:::i;:::-;;88592:22;;;:::i;:::-;;;;-1:-1:-1;;;;;88592:22:0;;;;;;;;;;;;;;101183:815;;;;;;;;;;;;;;;;-1:-1:-1;101183:815:0;-1:-1:-1;;;;;101183:815:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89275:34;;;:::i;104983:272::-;;;:::i;99141:84::-;;;:::i;89084:31::-;;;:::i;94231:517::-;;;;;;;;;;;;;;;;-1:-1:-1;94231:517:0;;:::i;89404:42::-;;;;;;;;;;;;;;;;-1:-1:-1;89404:42:0;-1:-1:-1;;;;;89404:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;89316:33;;;:::i;89015:34::-;;;:::i;93747:262::-;;;:::i;88765:49::-;;;;;;;;;;;;;;;;-1:-1:-1;88765:49:0;-1:-1:-1;;;;;88765:49:0;;:::i;88492:::-;;;:::i;105441:125::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;105441:125:0;;;;;;;;;;:::i;89564:25::-;;;:::i;89229:37::-;;;:::i;88650:52::-;;;;;;;;;;;;;;;;-1:-1:-1;88650:52:0;-1:-1:-1;;;;;88650:52:0;;:::i;88883:43::-;;;;;;;;;;;;;;;;-1:-1:-1;88883:43:0;-1:-1:-1;;;;;88883:43:0;;:::i;88821:53::-;;;;;;;;;;;;;;;;-1:-1:-1;88821:53:0;-1:-1:-1;;;;;88821:53:0;;:::i;90279:258::-;;;;;;;;;;;;;;;;-1:-1:-1;90279:258:0;-1:-1:-1;;;;;90279:258:0;;:::i;88933:43::-;;;;;;;;;;;;;;;;-1:-1:-1;88933:43:0;;:::i;93393:206::-;;;;;;;;;;;;;;;;-1:-1:-1;93393:206:0;;:::i;88983:23::-;;;:::i;94868:503::-;;;;;;;;;;;;;;;;-1:-1:-1;94868:503:0;;:::i;88709:49::-;;;;;;;;;;;;;;;;-1:-1:-1;88709:49:0;-1:-1:-1;;;;;88709:49:0;;:::i;97179:1474::-;;;;;;;;;;;;;;;;-1:-1:-1;97179:1474:0;-1:-1:-1;;;;;97179:1474:0;;:::i;88621:20::-;;;:::i;99440:183::-;;;:::i;98805:144::-;;;:::i;89056:21::-;;;:::i;95713:999::-;;;:::i;89651:32::-;;;:::i;100097:227::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;100097:227:0;;;;;;;;:::i;88548:35::-;;;;:::o;102442:1079::-;102545:28;;102633:4;102664:9;;;102545:28;102664:9;102716:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;102716:20:0;;102684:52;;102754:29;102800:5;102808:1;102800:9;102786:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;102786:24:0;;102754:56;;102840:9;102864:21;102888:72;102939:20;;102888:46;102899:34;102916:16;;102899:12;:16;;:34;;;;:::i;:::-;102888:6;;;:10;:46::i;:::-;:50;;:72::i;:::-;102864:96;;103011:20;;102974:34;102991:16;;102974:12;:16;;:34;;;;:::i;:::-;:57;102971:110;;;-1:-1:-1;103063:6:0;;102971:110;103096:9;103091:377;103115:5;103111:1;:9;103091:377;;;103163:11;;;;:8;:11;;;;;;103145:15;;-1:-1:-1;;;;;103163:11:0;;;;103145:12;;103158:1;;103145:15;;;;;;-1:-1:-1;;;;;103145:29:0;;;:15;;;;;;;;;;:29;;;;103207:30;103225:11;;;:8;:11;;;;;;;;;;103207:30;;:17;:30;;;;;103189:15;;:12;;103202:1;;103189:15;;;;;;;;;;;;;;;;:48;;;;103393:19;;103357:30;103375:11;;;:8;:11;;;;;;;-1:-1:-1;;;;;103375:11:0;103357:30;;:17;:30;;;;;;;;103274:140;;103339:74;;:49;;:13;;:17;:49::i;:74::-;103306:27;103321:11;;;:8;:11;;;;;;;;;-1:-1:-1;;;;;103321:11:0;103306:27;;;:14;:27;;;;;;103289:11;;;;;;;103274:60;;103306:27;103274:60;;:14;:27::i;:::-;:31;;:60::i;:140::-;103252:12;103265:1;103269;103265:5;103252:19;;;;;;;;;;;;;;;;;:162;103455:1;103450:6;;;;103434:1;103429:6;;;;;103122;103091:377;;;-1:-1:-1;103486:12:0;;103500;;-1:-1:-1;102442:1079:0;;-1:-1:-1;;;;;;;102442:1079:0:o;103885:277::-;103928:21;103951:20;103973:15;104015:34;104032:16;;104015:12;:16;;:34;;;;:::i;:::-;104070:6;;104133:20;;104000:49;;-1:-1:-1;104070:6:0;-1:-1:-1;104103:51:0;;:25;104070:6;104000:49;104103:11;:25::i;:51::-;104087:67;;103885:277;;;:::o;104567:273::-;93197:10;;-1:-1:-1;;;;;93197:10:0;93183;:24;93175:62;;;;;-1:-1:-1;;;93175:62:0;;;;;;;;;;;;-1:-1:-1;;;93175:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;104661:34:0;::::1;104653:66;;;::::0;;-1:-1:-1;;;104653:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;104653:66:0;;;;;;;;;;;;;::::1;;104732:17;:38:::0;;-1:-1:-1;;;;;104732:38:0;::::1;-1:-1:-1::0;;;;;;104732:38:0;;::::1;::::0;::::1;::::0;;;104788:44:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;104567:273:::0;:::o;88592:22::-;;;-1:-1:-1;;;;;88592:22:0;;:::o;101183:815::-;-1:-1:-1;;;;;101443:23:0;;101277:19;101443:23;;;:17;:23;;;;;;101552:20;;101529:16;;101277:19;;;;;;;;101501:72;;:46;;101512:34;;:12;;:16;:34::i;101501:72::-;101477:96;;101624:20;;101587:34;101604:16;;101587:12;:16;;:34;;;;:::i;:::-;:57;101584:110;;;-1:-1:-1;101676:6:0;;101584:110;101774:19;;-1:-1:-1;;;;;101745:23:0;;101704:20;101745:23;;;:17;:23;;;;;;101704:20;;101727:67;;:42;;:13;;:17;:42::i;:67::-;101704:90;;101805:17;101825:46;101850:20;101865:4;101850:14;:20::i;:::-;-1:-1:-1;;;;;101825:20:0;;;;;;:14;:20;;;;;;;:24;:46::i;:::-;-1:-1:-1;;;;;101902:20:0;;;;101882:17;101902:20;;;:14;:20;;;;;;101941:12;;101955;;;-1:-1:-1;101902:20:0;;-1:-1:-1;101183:815:0;-1:-1:-1;;;;101183:815:0:o;89275:34::-;;;;:::o;104983:272::-;105054:17;;-1:-1:-1;;;;;105054:17:0;105040:10;:31;105032:61;;;;;-1:-1:-1;;;105032:61:0;;;;;;;;;;;;-1:-1:-1;;;105032:61:0;;;;;;;;;;;;;;;105133:17;;105161:10;:31;;-1:-1:-1;;;;;;105161:31:0;-1:-1:-1;;;;;105133:17:0;;;105161:31;;;;;105210:37;;;;;;;;;;;;;;;;;104983:272;:::o;99141:84::-;99188:11;:9;:11::i;:::-;99210:7;:5;:7::i;:::-;99141:84::o;89084:31::-;;;;:::o;94231:517::-;94285:10;90704:13;90720:23;90735:7;90720:14;:23::i;:::-;90704:39;-1:-1:-1;90758:9:0;;90754:167;;90805:18;;:29;;90828:5;90805:22;:29::i;:::-;90784:18;:50;-1:-1:-1;;;;;90875:23:0;;;;;;:14;:23;;;;;;:34;;90903:5;90875:27;:34::i;:::-;-1:-1:-1;;;;;90849:23:0;;;;;;:14;:23;;;;;:60;90754:167;90961:19;;-1:-1:-1;;;;;90931:27:0;;;;;;:18;:27;;;;;;;;:49;;;;94416:10:::1;94445:25:::0;;;:17:::1;:25:::0;;;;;;;:35;-1:-1:-1;94445:35:0::1;94437:100;;;;-1:-1:-1::0;;;94437:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;94576:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;:37:::1;::::0;94606:6;94576:29:::1;:37::i;:::-;-1:-1:-1::0;;;;;94548:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;:65;94646:19:::1;::::0;:31:::1;::::0;94670:6;94646:23:::1;:31::i;:::-;94624:19;:53:::0;94703:7:::1;::::0;94688:52:::1;::::0;-1:-1:-1;;;;;94703:7:0::1;94725:6:::0;94733;94688:36:::1;:52::i;:::-;90991:1;94231:517:::0;;;:::o;89404:42::-;;;;;;;;;;;;;;;:::o;89316:33::-;;;;:::o;89015:34::-;;;;:::o;93747:262::-;93799:10;93782:14;93828:22;;;:14;:22;;;;;;93820:35;;;;;;-1:-1:-1;;;;;93882:22:0;;;93866:13;93882:22;;;:14;:22;;;;;;;93915:26;;;93967:5;;93882:22;;93952:49;;93967:5;93897:6;93882:22;93952:34;:49::i;:::-;93747:262;;:::o;88765:49::-;;;;;;;;;;;;;:::o;88492:::-;88539:1;88492:49;:::o;105441:125::-;93197:10;;-1:-1:-1;;;;;93197:10:0;93183;:24;93175:62;;;;;-1:-1:-1;;;93175:62:0;;;;;;;;;;;;-1:-1:-1;;;93175:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;105526:23:0;;;::::1;;::::0;;;:9:::1;:23;::::0;;;;:32;;-1:-1:-1;;105526:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;105441:125::o;89564:25::-;;;-1:-1:-1;;;;;89564:25:0;;:::o;89229:37::-;;;;:::o;88650:52::-;;;;;;;;;;;;;:::o;88883:43::-;;;;;;;;;;;;;;;:::o;88821:53::-;;;;;;;;;;;;;:::o;90279:258::-;-1:-1:-1;;;;;90413:27:0;;90341:7;90413:27;;;:18;:27;;;;;;90389:19;;90341:7;;90389:52;;:19;:23;:52::i;:::-;90513:15;;-1:-1:-1;;;;;90459:26:0;;;;;;:17;:26;;;;;;90361:80;;-1:-1:-1;90459:70:0;;:49;;90361:80;90459:30;:49::i;:70::-;90452:77;90279:258;-1:-1:-1;;;90279:258:0:o;88933:43::-;;;;;;;;;;;;-1:-1:-1;;;;;88933:43:0;;:::o;93393:206::-;93197:10;;-1:-1:-1;;;;;93197:10:0;93183;:24;93175:62;;;;;-1:-1:-1;;;93175:62:0;;;;;;;;;;;;-1:-1:-1;;;93175:62:0;;;;;;;;;;;;;;;93485:20:::1;:45:::0;;;93546::::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;93393:206:::0;:::o;88983:23::-;;;;:::o;94868:503::-;91480:16;;91608:6;;91531:12;;91452:25;;91682:11;;91678:1049;;91896:17;91916:36;:13;91934:17;91916;:36::i;:::-;91896:56;;92041:20;;92028:9;:33;92025:383;;92098:7;92082:23;;92025:383;;;92247:20;;92222:22;:7;92234:9;92222:11;:22::i;:::-;:45;92219:174;;;92352:20;;92325:48;;:22;:7;92337:9;92325:11;:22::i;:48::-;92309:64;;92219:174;92488:17;;92485:231;;92575:26;:7;92587:13;92575:11;:26::i;:::-;92566:6;:35;92666:34;92686:13;92666:19;:34::i;:::-;91678:1049;;92785:16;:32;;;94971:10:::1;90704:13;90720:23;94971:10:::0;90720:14:::1;:23::i;:::-;90704:39:::0;-1:-1:-1;90758:9:0;;90754:167:::1;;90805:18;::::0;:29:::1;::::0;90828:5;90805:22:::1;:29::i;:::-;90784:18;:50:::0;-1:-1:-1;;;;;90875:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:34:::1;::::0;90903:5;90875:27:::1;:34::i;:::-;-1:-1:-1::0;;;;;90849:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:60;90754:167:::1;90961:19;::::0;-1:-1:-1;;;;;90931:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;:49;;;;91177:10:::2;91165:23:::0;;:11:::2;:23:::0;;;;::::2;;91160:158;;91214:8;::::0;;91205:18:::2;::::0;;;:8:::2;:18;::::0;;;;;;;:31;;-1:-1:-1;;;;;;91205:31:0::2;91226:10;91205:31:::0;;::::2;::::0;;;91251:23;;:11:::2;:23:::0;;;;;:30;;-1:-1:-1;;91251:30:0::2;91205:31:::0;91251:30;;::::2;::::0;;;91296:10;;::::2;::::0;;91160:158:::2;95167:7:::3;::::0;95089:10:::3;::::0;95152:71:::3;::::0;-1:-1:-1;;;;;95167:7:0::3;95089:10:::0;95209:4:::3;95216:6:::0;95152:40:::3;:71::i;:::-;95256:19;::::0;:31:::3;::::0;95280:6;95256:23:::3;:31::i;:::-;95234:19;:53:::0;-1:-1:-1;;;;;95326:25:0;::::3;;::::0;;;:17:::3;:25;::::0;;;;;:37:::3;::::0;95356:6;95326:29:::3;:37::i;:::-;-1:-1:-1::0;;;;;95298:25:0;;::::3;;::::0;;;:17:::3;:25;::::0;;;;:65;-1:-1:-1;;;;;;;94868:503:0:o;88709:49::-;;;;;;;;;;;;;:::o;97179:1474::-;91480:16;;91608:6;;91531:12;;91452:25;;91682:11;;91678:1049;;91896:17;91916:36;:13;91934:17;91916;:36::i;:::-;91896:56;;92041:20;;92028:9;:33;92025:383;;92098:7;92082:23;;92025:383;;;92247:20;;92222:22;:7;92234:9;92222:11;:22::i;:::-;:45;92219:174;;;92352:20;;92325:48;;:22;:7;92337:9;92325:11;:22::i;:48::-;92309:64;;92219:174;92488:17;;92485:231;;92575:26;:7;92587:13;92575:11;:26::i;:::-;92566:6;:35;92666:34;92686:13;92666:19;:34::i;:::-;91678:1049;;92785:16;:32;;;97296:10:::1;90704:13;90720:23;97296:10:::0;90720:14:::1;:23::i;:::-;90704:39:::0;-1:-1:-1;90758:9:0;;90754:167:::1;;90805:18;::::0;:29:::1;::::0;90828:5;90805:22:::1;:29::i;:::-;90784:18;:50:::0;-1:-1:-1;;;;;90875:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:34:::1;::::0;90903:5;90875:27:::1;:34::i;:::-;-1:-1:-1::0;;;;;90849:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:60;90754:167:::1;90961:19;::::0;-1:-1:-1;;;;;90931:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;:49;;;;97331:11;;90720:23:::2;97331:11:::0;90720:14:::2;:23::i;:::-;90704:39:::0;-1:-1:-1;90758:9:0;;90754:167:::2;;90805:18;::::0;:29:::2;::::0;90828:5;90805:22:::2;:29::i;:::-;90784:18;:50:::0;-1:-1:-1;;;;;90875:23:0;::::2;;::::0;;;:14:::2;:23;::::0;;;;;:34:::2;::::0;90903:5;90875:27:::2;:34::i;:::-;-1:-1:-1::0;;;;;90849:23:0;::::2;;::::0;;;:14:::2;:23;::::0;;;;:60;90754:167:::2;90961:19;::::0;-1:-1:-1;;;;;90931:27:0;;::::2;;::::0;;;:18:::2;:27;::::0;;;;;;;:49;;;;97445:27;;::::3;::::0;;:14:::3;:27:::0;;;;;;97547:17:::3;:30:::0;;;;;;;;97405:10:::3;::::0;97445:27;97536:41;::::3;97514:114;;;::::0;;-1:-1:-1;;;97514:114:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;-1:-1:-1::0;;;;;97666:27:0;::::3;97696:1;97666:27:::0;;;:14:::3;:27;::::0;;;;;;;:31;;;97771:17:::3;:30:::0;;;;;;97758:44:::3;::::0;:8;;:12:::3;:44::i;:::-;-1:-1:-1::0;;;;;97854:30:0;;::::3;;::::0;;;:17:::3;:30;::::0;;;;;;;97927:34;;;;-1:-1:-1;98015:7:0;98000:38;;-1:-1:-1;;;98000:38:0;;::::3;::::0;::::3;::::0;;;;;97854:30;;-1:-1:-1;97743:59:0;;-1:-1:-1;98015:7:0;;;::::3;::::0;98000:28:::3;::::0;:38;;;;;97854:30;98000:38;;;;;;97854:30;98015:7;98000:38;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;98098:19:0::3;::::0;:33:::3;::::0;-1:-1:-1;98098:19:0;-1:-1:-1;98122:8:0;98098:23:::3;:33::i;:::-;98076:19;:55:::0;-1:-1:-1;;;;;98201:22:0;::::3;;::::0;;;:14:::3;:22;::::0;;;;;:32:::3;::::0;98228:4;98201:26:::3;:32::i;:::-;-1:-1:-1::0;;;;;98176:22:0;;::::3;;::::0;;;:14:::3;:22;::::0;;;;;;;:57;;;;98299:27;;::::3;::::0;;:14:::3;:27:::0;;;;;:41:::3;::::0;98331:8;98299:31:::3;:41::i;:::-;-1:-1:-1::0;;;;;98269:27:0;::::3;;::::0;;;:14:::3;:27;::::0;;;;:71;;;98428:31;98424:222:::3;;-1:-1:-1::0;;;;;98492:27:0;;::::3;98476:13;98492:27:::0;;;:14:::3;:27;::::0;;;;;;98534:31;;;98595:5:::3;::::0;98492:27;;98580:54:::3;::::0;98595:5:::3;98507:11:::0;98492:27;98580:34:::3;:54::i;:::-;98424:222;;90991:1;;;::::2;;92828::::1;;97179:1474:::0;;;;;:::o;88621:20::-;;;-1:-1:-1;;;;;88621:20:0;;:::o;99440:183::-;99495:11;:9;:11::i;:::-;99517:7;:5;:7::i;:::-;99574:10;99535:18;99556:29;;;:17;:29;;;;;;99596:19;99556:29;99596:7;:19::i;:::-;99440:183;:::o;98805:144::-;98839:11;:9;:11::i;89056:21::-;;;;:::o;95713:999::-;91480:16;;91608:6;;91531:12;;91452:25;;91682:11;;91678:1049;;91896:17;91916:36;:13;91934:17;91916;:36::i;:::-;91896:56;;92041:20;;92028:9;:33;92025:383;;92098:7;92082:23;;92025:383;;;92247:20;;92222:22;:7;92234:9;92222:11;:22::i;:::-;:45;92219:174;;;92352:20;;92325:48;;:22;:7;92337:9;92325:11;:22::i;:48::-;92309:64;;92219:174;92488:17;;92485:231;;92575:26;:7;92587:13;92575:11;:26::i;:::-;92566:6;:35;92666:34;92686:13;92666:19;:34::i;:::-;91678:1049;;92785:16;:32;;;95779:10:::1;90704:13;90720:23;95779:10:::0;90720:14:::1;:23::i;:::-;90704:39:::0;-1:-1:-1;90758:9:0;;90754:167:::1;;90805:18;::::0;:29:::1;::::0;90828:5;90805:22:::1;:29::i;:::-;90784:18;:50:::0;-1:-1:-1;;;;;90875:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:34:::1;::::0;90903:5;90875:27:::1;:34::i;:::-;-1:-1:-1::0;;;;;90849:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:60;90754:167:::1;90961:19;::::0;-1:-1:-1;;;;;90931:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;:49;;;;95819:10:::2;95859:22:::0;;;:14:::2;:22:::0;;;;;;;;95925:12;95917:55:::2;;;::::0;;-1:-1:-1;;;95917:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;95985:22:0;::::2;96010:1;95985:22:::0;;;:14:::2;:22;::::0;;;;;;;:26;;;96073:17:::2;:25:::0;;;;;;96062:36;::::2;96058:200;;;-1:-1:-1::0;;;;;96135:25:0;::::2;;::::0;;;:17:::2;:25;::::0;;;;;96122:39:::2;::::0;:8;;:12:::2;:39::i;:::-;-1:-1:-1::0;;;;;96221:25:0;::::2;;::::0;;;:17:::2;:25;::::0;;;;;;-1:-1:-1;96115:46:0;-1:-1:-1;96058:200:0::2;-1:-1:-1::0;;;;;96328:25:0;::::2;;::::0;;;:17:::2;:25;::::0;;;;;:39:::2;::::0;96358:8;96328:29:::2;:39::i;:::-;-1:-1:-1::0;;;;;96300:25:0;;::::2;;::::0;;;:17:::2;:25;::::0;;;;;:67;;;;96421:7:::2;::::0;96406:38;;-1:-1:-1;;;96406:38:0;;::::2;::::0;::::2;::::0;;;;;96421:7;::::2;::::0;96406:28:::2;::::0;:38;;;;;96300:25;96406:38;;;;;96300:25;96421:7;96406:38;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;96504:19:0::2;::::0;:33:::2;::::0;-1:-1:-1;96504:19:0;-1:-1:-1;96528:8:0;96504:23:::2;:33::i;:::-;96482:19;:55:::0;96582:25:::2;96602:4:::0;96582:19:::2;:25::i;:::-;-1:-1:-1::0;;;;;96668:22:0;::::2;;::::0;;;:14:::2;:22;::::0;;;;;:36:::2;::::0;96695:8;96668:26:::2;:36::i;:::-;-1:-1:-1::0;;;;;96643:22:0;;::::2;;::::0;;;:14:::2;:22;::::0;;;;:61;;;;-1:-1:-1;;;;;;;;95713:999:0:o;89651:32::-;;;-1:-1:-1;;;;;89651:32:0;;:::o;100097:227::-;92967:10;92957:21;;;;:9;:21;;;;;;;;92949:60;;;;;-1:-1:-1;;;92949:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;91480:16:::1;::::0;91608:6:::1;::::0;91531:12:::1;::::0;91452:25:::1;::::0;91682:11;;91678:1049:::1;;91896:17;91916:36;:13:::0;91934:17;91916::::1;:36::i;:::-;91896:56;;92041:20;;92028:9;:33;92025:383;;92098:7;92082:23;;92025:383;;;92247:20;::::0;92222:22:::1;:7:::0;92234:9;92222:11:::1;:22::i;:::-;:45;92219:174;;;92352:20;::::0;92325:48:::1;::::0;:22:::1;:7:::0;92337:9;92325:11:::1;:22::i;:48::-;92309:64;;92219:174;92488:17:::0;;92485:231:::1;;92575:26;:7:::0;92587:13;92575:11:::1;:26::i;:::-;92566:6;:35:::0;92666:34:::1;92686:13:::0;92666:19:::1;:34::i;:::-;91678:1049;;92785:16;:32:::0;;;100224:5:::2;::::0;100209:69:::2;::::0;-1:-1:-1;;;;;100224:5:0::2;100248:6:::0;100264:4:::2;100271:6:::0;100209:38:::2;:69::i;:::-;100298:6;::::0;:18:::2;::::0;100309:6;100298:10:::2;:18::i;:::-;100289:6;:27:::0;-1:-1:-1;;;;;;100097:227:0:o;7264:158::-;7322:7;7355:1;7350;:6;;7342:49;;;;;-1:-1:-1;;;7342:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7409:5:0;;;7264:158;;;;;:::o;7681:220::-;7739:7;7763:6;7759:20;;-1:-1:-1;7778:1:0;7771:8;;7759:20;7802:5;;;7806:1;7802;:5;:1;7826:5;;;;;:10;7818:56;;;;-1:-1:-1;;;7818:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8379:153;8437:7;8469:1;8465;:5;8457:44;;;;;-1:-1:-1;;;8457:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8523:1;8519;:5;;;;;;;8379:153;-1:-1:-1;;;8379:153:0:o;6802:179::-;6860:7;6892:5;;;6916:6;;;;6908:46;;;;;-1:-1:-1;;;6908:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20174:177;20284:58;;;-1:-1:-1;;;;;20284:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20284:58:0;-1:-1:-1;;;20284:58:0;;;20257:86;;20277:5;;20257:19;:86::i;:::-;20174:177;;;:::o;100509:398::-;100599:1;100577:19;;:23;:37;;;;;100613:1;100604:6;:10;100577:37;100574:326;;;100653:109;100695:52;100727:19;;100695:27;100706:15;;100695:6;:10;;:27;;;;:::i;:52::-;100653:19;;;:23;:109::i;:::-;100631:19;:131;100798:18;;:30;;100821:6;100798:22;:30::i;:::-;100777:18;:51;100574:326;;;100870:6;;:18;;100881:6;100870:10;:18::i;:::-;100861:6;:27;100509:398;:::o;20359:205::-;20487:68;;;-1:-1:-1;;;;;20487:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20487:68:0;-1:-1:-1;;;20487:68:0;;;20460:96;;20480:5;;22479:761;22903:23;22929:69;22957:4;22929:69;;;;;;;;;;;;;;;;;22937:5;-1:-1:-1;;;;;22929:27:0;;;:69;;;;;:::i;:::-;23013:17;;22903:95;;-1:-1:-1;23013:21:0;23009:224;;23155:10;23144:30;;;;;;;;;;;;;;;-1:-1:-1;23144:30:0;23136:85;;;;-1:-1:-1;;;23136:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15165:195;15268:12;15300:52;15322:6;15330:4;15336:1;15339:12;15300:21;:52::i;:::-;15293:59;15165:195;-1:-1:-1;;;;15165:195:0:o;16217:530::-;16344:12;16402:5;16377:21;:30;;16369:81;;;;-1:-1:-1;;;16369:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16469:18;16480:6;16469:10;:18::i;:::-;16461:60;;;;;-1:-1:-1;;;16461:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16595:12;16609:23;16636:6;-1:-1:-1;;;;;16636:11:0;16656:5;16664:4;16636:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16636:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16594:75;;;;16687:52;16705:7;16714:10;16726:12;16687:17;:52::i;:::-;16680:59;16217:530;-1:-1:-1;;;;;;;16217:530:0:o;12247:422::-;12614:20;12653:8;;;12247:422::o;18757:742::-;18872:12;18901:7;18897:595;;;-1:-1:-1;18932:10:0;18925:17;;18897:595;19046:17;;:21;19042:439;;19309:10;19303:17;19370:15;19357:10;19353:2;19349:19;19342:44;19257:148;19452:12;19445:20;;-1:-1:-1;;;19445:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://d948efd5c76c13a3c34e9756967c683be59edfa8d3fe40b899a7cce73022399e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $90,708 | 0.7307 | $66,281.7 |
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.