Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,811 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Execute Order | 18909165 | 344 days ago | IN | 0.00001 ETH | 0.00165625 | ||||
Execute Order | 18886468 | 347 days ago | IN | 0.001 ETH | 0.00335263 | ||||
Execute Order | 18689471 | 375 days ago | IN | 0.02 ETH | 0.00754104 | ||||
Execute Order | 18618979 | 384 days ago | IN | 0.01 ETH | 0.00480294 | ||||
Execute Order | 18606520 | 386 days ago | IN | 0.001 ETH | 0.00407435 | ||||
Execute Order | 18604903 | 386 days ago | IN | 0.011 ETH | 0.00258875 | ||||
Execute Order | 18602775 | 387 days ago | IN | 0.052 ETH | 0.00285903 | ||||
Execute Order | 18601911 | 387 days ago | IN | 0.0001 ETH | 0.00254608 | ||||
Execute Order | 18599983 | 387 days ago | IN | 0.001 ETH | 0.00516091 | ||||
Execute Order | 18599478 | 387 days ago | IN | 0.001 ETH | 0.00350823 | ||||
Execute Order | 18597295 | 387 days ago | IN | 0.0001 ETH | 0.00297107 | ||||
Execute Order | 18596495 | 388 days ago | IN | 0.001 ETH | 0.00304113 | ||||
Execute Order | 18592187 | 388 days ago | IN | 0.009 ETH | 0.00592644 | ||||
Execute Order | 18591901 | 388 days ago | IN | 0.0162843 ETH | 0.00372913 | ||||
Execute Order | 18589156 | 389 days ago | IN | 0.001 ETH | 0.00528721 | ||||
Execute Order | 18584585 | 389 days ago | IN | 0.003 ETH | 0.00507326 | ||||
Execute Order | 18584573 | 389 days ago | IN | 0.001 ETH | 0.00523413 | ||||
Execute Order | 18584567 | 389 days ago | IN | 0.001 ETH | 0.00555037 | ||||
Execute Order | 18582762 | 390 days ago | IN | 0.003 ETH | 0.00568437 | ||||
Execute Order | 18576674 | 390 days ago | IN | 0.027 ETH | 0.00431022 | ||||
Execute Order | 18575906 | 390 days ago | IN | 0.001 ETH | 0.00432277 | ||||
Execute Order | 18575419 | 391 days ago | IN | 0.01 ETH | 0.00421958 | ||||
Execute Order | 18575018 | 391 days ago | IN | 0.005 ETH | 0.00416402 | ||||
Execute Order | 18574351 | 391 days ago | IN | 0.005 ETH | 0.00572217 | ||||
Execute Order | 18574120 | 391 days ago | IN | 0.055 ETH | 0.00631779 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18909165 | 344 days ago | 0.00000995 ETH | ||||
18909165 | 344 days ago | 0.00000005 ETH | ||||
18886468 | 347 days ago | 0.000995 ETH | ||||
18886468 | 347 days ago | 0.000005 ETH | ||||
18689471 | 375 days ago | 1 wei | ||||
18689471 | 375 days ago | 0.02 ETH | ||||
18618979 | 384 days ago | 0.00995 ETH | ||||
18618979 | 384 days ago | 0.00005 ETH | ||||
18606520 | 386 days ago | 1 wei | ||||
18606520 | 386 days ago | 0.0009985 ETH | ||||
18606520 | 386 days ago | 0.0000015 ETH | ||||
18604903 | 386 days ago | 0.010945 ETH | ||||
18604903 | 386 days ago | 0.000055 ETH | ||||
18602775 | 387 days ago | 0.05174 ETH | ||||
18602775 | 387 days ago | 0.00026 ETH | ||||
18601911 | 387 days ago | 0.0000995 ETH | ||||
18601911 | 387 days ago | 0.0000005 ETH | ||||
18599983 | 387 days ago | 0.000995 ETH | ||||
18599983 | 387 days ago | 0.000005 ETH | ||||
18599478 | 387 days ago | 0.000995 ETH | ||||
18599478 | 387 days ago | 0.000005 ETH | ||||
18597295 | 387 days ago | 0.0000995 ETH | ||||
18597295 | 387 days ago | 0.0000005 ETH | ||||
18596495 | 388 days ago | 0.000995 ETH | ||||
18596495 | 388 days ago | 0.000005 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
WidoStarknetRouter
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT. pragma solidity 0.8.7; import "./interfaces/IStarknetMessaging.sol"; import "./interfaces/IStarknetEthBridge.sol"; import "./interfaces/IStarknetERC20Bridge.sol"; import "./interfaces/IWidoRouter.sol"; import "./interfaces/IWidoConfig.sol"; import "solmate/src/utils/SafeTransferLib.sol"; import "./lib/WidoL2Payload.sol"; import "hardhat/console.sol"; contract WidoStarknetRouter { using SafeTransferLib for ERC20; using SafeTransferLib for address; IWidoConfig public immutable widoConfig; IStarknetMessaging public immutable starknetCore; uint256 constant DESTINATION_PAYLOAD_INPUTS_LEN_INDEX = 0; uint256 constant DESTINATION_PAYLOAD_INPUT0_TOKEN_ADDRESS_INDEX = 1; uint256 constant UINT256_PART_SIZE_BITS = 128; uint256 constant UINT256_PART_SIZE = 2**UINT256_PART_SIZE_BITS; // The selector of the "execute" l1_handler in WidoL1Router.cairo uint256 constant EXECUTE_SELECTOR = 1017745666394979726211766185068760164586829337678283062942418931026954492996; IWidoRouter public immutable widoRouter; uint256 public l2WidoRecipient; /// @notice Event emitted when the order is fulfilled /// @param order The order that was fulfilled /// @param sender The msg.sender /// @param recipient Recipient of the final tokens of the order /// @param feeBps Fee in basis points (bps) /// @param partner Partner address event OrderInitiated( IWidoRouter.Order order, address indexed sender, uint256 recipient, uint256 feeBps, address indexed partner ); constructor(IWidoConfig _widoConfig, IStarknetMessaging _starknetCore, IWidoRouter _widoRouter, uint256 _l2WidoRecipient) { widoConfig = _widoConfig; starknetCore = _starknetCore; require(address(_widoRouter) != address(0), "WidoStarknetRouter: widoRouter cannot be address(0)"); widoRouter = _widoRouter; l2WidoRecipient = _l2WidoRecipient; } function _bridgeTokens(address tokenAddress, uint256 amount, uint256 starknetRecipient, uint256 bridgeFee) internal { address bridge = widoConfig.getBridgeAddress(tokenAddress); if (tokenAddress == address(0)) { IStarknetEthBridge(bridge).deposit{value: amount + bridgeFee}(amount, starknetRecipient); } else { if (ERC20(tokenAddress).allowance(address(this), bridge) < amount) { ERC20(tokenAddress).safeApprove(bridge, type(uint256).max); } IStarknetERC20Bridge(bridge).deposit{value: bridgeFee}(amount, starknetRecipient); } } function _sendMessageToL2(uint256[] memory payload, uint256 destinationTxFee) internal { starknetCore.sendMessageToL2{value: destinationTxFee}( l2WidoRecipient, EXECUTE_SELECTOR, payload ); } function _pullAndApproveTokens(IWidoRouter.OrderInput[] calldata inputs) internal { address widoTokenManager = address(widoRouter.widoTokenManager()); for (uint256 i = 0; i < inputs.length;) { IWidoRouter.OrderInput calldata input = inputs[i]; unchecked { i++; } if (input.tokenAddress == address(0)) { continue; } ERC20(input.tokenAddress).safeTransferFrom(msg.sender, address(this), input.amount); if (ERC20(input.tokenAddress).allowance(address(this), widoTokenManager) < input.amount) { ERC20(input.tokenAddress).safeApprove(widoTokenManager, type(uint256).max); } } } function executeOrder( IWidoRouter.Order calldata order, IWidoRouter.Step[] calldata steps, uint256 feeBps, address partner, uint256 l2RecipientUser, uint256[] calldata destinationPayload, uint256 bridgeFee, uint256 destinationTxFee ) external payable { // Do validations require(order.user == address(this), "Order user should equal WidoStarknetRouer"); require(order.outputs.length == 1, "Only single token output expected"); require(msg.value >= bridgeFee + destinationTxFee, "Insufficient fee"); require(feeBps <= 100, "Fee out of range"); address bridgeTokenAddress = order.outputs[0].tokenAddress; if (destinationPayload.length > 0) { require(WidoL2Payload.isCoherent(destinationPayload), "Incoherent destination payload"); // Since the user can only bridge one token, allow only single token to be specified. require(destinationPayload[DESTINATION_PAYLOAD_INPUTS_LEN_INDEX] == 1, "Only single token input allowed in destination"); // Bridge token on L1 should correspond to Bridged Token address on starknet uint256 bridgedTokenAddress = widoConfig.getBridgedTokenAddress(bridgeTokenAddress); require(destinationPayload[DESTINATION_PAYLOAD_INPUT0_TOKEN_ADDRESS_INDEX] == bridgedTokenAddress, "Bridge Token Mismatch"); // Ensure that the recipient is same as mentioned in the order. require(WidoL2Payload.getRecipient(destinationPayload) == l2RecipientUser, "L2 Recipient Mismatch"); } // Fetch tokens from msg.sender. _pullAndApproveTokens(order.inputs); // Run Execute Order in L1 if (steps.length > 0) { widoRouter.executeOrder{value: msg.value - bridgeFee - destinationTxFee}(order, steps, 0, partner); } // This amount will be the amount that is to be bridged to starknet. // It is the token expected as final output of the Order. // The minimum tokens to be bridged can be verified as part of the order, if there are steps. Otherwise, // It would be same as the input token. uint256 amount; { uint256 fee; address bank = IWidoConfig(widoConfig).getBank(); if (bridgeTokenAddress == address(0)) { amount = address(this).balance - bridgeFee - destinationTxFee; fee = (amount * feeBps) / 10000; bank.safeTransferETH(fee); } else { amount = ERC20(bridgeTokenAddress).balanceOf(address(this)); fee = (amount * feeBps) / 10000; ERC20(bridgeTokenAddress).safeTransfer(bank, fee); } amount = amount - fee; } if (destinationPayload.length > 0) { uint256 amountLow = amount & (UINT256_PART_SIZE - 1); uint256 amountHigh = amount >> UINT256_PART_SIZE_BITS; // Update the destination payload input token amount to equal // the amount being brided. uint256[] memory updatedDestionationPayload = destinationPayload; updatedDestionationPayload[2] = amountLow; updatedDestionationPayload[3] = amountHigh; _bridgeTokens(bridgeTokenAddress, amount, l2WidoRecipient, bridgeFee); // Messaging to Wido Starknet contract _sendMessageToL2(updatedDestionationPayload, destinationTxFee); } else { // Send tokens directly to the user _bridgeTokens(bridgeTokenAddress, amount, l2RecipientUser, bridgeFee); } emit OrderInitiated(order, msg.sender, l2RecipientUser, feeBps, partner); } /// @notice Allow receiving of native tokens receive() external payable {} }
pragma solidity 0.8.7; interface IStarknetMessaging { /** Sends a message to an L2 contract. Returns the hash of the message. */ function sendMessageToL2( uint256 to_address, uint256 selector, uint256[] calldata payload ) external payable returns (bytes32, uint256); /** Consumes a message that was sent from an L2 contract. Returns the hash of the message. */ function consumeMessageFromL2(uint256 fromAddress, uint256[] calldata payload) external returns (bytes32); }
// SPDX-License-Identifier: MIT. pragma solidity 0.8.7; interface IStarknetEthBridge { function deposit(uint256 amount, uint256 l2Recipient) external payable; function withdraw(uint256 amount, address recipient) external; }
pragma solidity 0.8.7; interface IStarknetERC20Bridge { function deposit(uint256 amount, uint256 l2Recipient) external payable; function withdraw(uint256 amount, address recipient) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.7; import "../WidoTokenManager.sol"; interface IWidoRouter { /// @notice OrderInput object describing the desired token inputs /// @param tokenAddress Address of the input token /// @param fromTokenAmount Amount of the input token to spend on the user's behalf /// @dev amount must == msg.value when token == address(0) struct OrderInput { address tokenAddress; uint256 amount; } /// @notice OrderOutput object describing the desired token outputs /// @param tokenAddress Address of the output token /// @param minOutputAmount Minimum amount of the output token the user is willing to accept for this order struct OrderOutput { address tokenAddress; uint256 minOutputAmount; } /// @notice Order object describing the requirements of the zap /// @param inputs Array of input objects, see OrderInput /// @param outputs Array of output objects, see OrderOutput /// @param user Address of user placing the order /// @param nonce Number used once to ensure an order requested by a signature only executes once /// @param expiration Timestamp until which the order is valid to execute struct Order { OrderInput[] inputs; OrderOutput[] outputs; address user; uint32 nonce; uint32 expiration; } /// @notice Step object describing a single token transformation /// @param fromToken Address of the from token /// @param targetAddress Address of the contract performing the transformation /// @param data Data which the swap contract will be called with /// @param amountIndex Index for the from token amount that can be found in data and needs to be updated with the most recent value. struct Step { address fromToken; address targetAddress; bytes data; int32 amountIndex; } function widoTokenManager() external view returns (WidoTokenManager); function verifyOrder(Order calldata order, uint8 v, bytes32 r, bytes32 s) external view returns (bool); function executeOrder( Order calldata order, Step[] calldata route, uint256 feeBps, address partner ) external payable; function executeOrder( Order calldata order, Step[] calldata route, address recipient, uint256 feeBps, address partner ) external payable; function executeOrderWithSignature( Order calldata order, Step[] calldata route, uint8 v, bytes32 r, bytes32 s, uint256 feeBps, address partner ) external; }
pragma solidity 0.8.7; interface IWidoConfig { function getBridgeAddress(address tokenAddress) external returns (address bridgeAddress); function getBridgedTokenAddress(address tokenAddress) external returns (uint256 bridgedTokenAddress); function getBank() external returns (address bank); function setBridgeAddress(address tokenAddress, address bridgeAddress, uint256 bridgedTokenAddress) external; function setBridgeAddresses(address[] calldata tokenAddresses, address[] calldata bridgeAddresses, uint256[] calldata bridgedTokenAddresses) external; function setBank(address bank) external; }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; import {ERC20} from "../tokens/ERC20.sol"; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. library SafeTransferLib { /*////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool success; /// @solidity memory-safe-assembly assembly { // Transfer the ETH and store if it succeeded or not. success := call(gas(), to, amount, 0, 0, 0, 0) } require(success, "ETH_TRANSFER_FAILED"); } /*////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), from) // Append the "from" argument. mstore(add(freeMemoryPointer, 36), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 100, 0, 32) ) } require(success, "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "APPROVE_FAILED"); } }
pragma solidity 0.8.7; library WidoL2Payload { function isCoherent(uint256[] calldata payload) public pure returns (bool) { uint256 len = payload.length; uint256 cur; require(cur < len); // Inputs require(payload[cur] > 0); cur += 1 + payload[cur] * 3; require(cur < len); // Outputs require(payload[cur] > 0); cur += 1 + payload[cur] * 3; require(cur < len); // Steps Call Array uint256 expectedCalldataLen; uint256 stepCallArrayLen = payload[cur]; cur += 1; for (uint256 i = 0; i < stepCallArrayLen; ) { expectedCalldataLen += payload[cur + 3]; unchecked { cur += 5; i++; } } require(cur < len); // Calldata uint256 actualCalldataLen = payload[cur]; require(expectedCalldataLen == actualCalldataLen, "Expected calldata len in steps to match calldata len in order"); cur += 1 + payload[cur]; require(cur < len); // Recipient require(cur + 1 == len); return true; } function getRecipient(uint256[] calldata payload) public pure returns (uint256) { // Assumes that the payload is coherent. uint256 cur; cur = 1 + payload[cur] * 3; cur += 1 + payload[cur] * 3; cur += 1 + payload[cur] * 5; cur += 1 + payload[cur]; return payload[cur]; } }
// SPDX-License-Identifier: MIT 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)); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.7; import "solmate/src/utils/SafeTransferLib.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "./interfaces/IWidoTokenManager.sol"; contract WidoTokenManager is IWidoTokenManager, Ownable { using SafeTransferLib for ERC20; /// @notice Transfers tokens or native tokens from the user /// @param user The address of the order user /// @param inputs Array of input objects, see OrderInput and Order function pullTokens(address user, IWidoRouter.OrderInput[] calldata inputs) external override onlyOwner { for (uint256 i = 0; i < inputs.length; i++) { IWidoRouter.OrderInput calldata input = inputs[i]; if (input.tokenAddress == address(0)) { continue; } ERC20(input.tokenAddress).safeTransferFrom(user, owner(), input.amount); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.7; import "./IWidoRouter.sol"; interface IWidoTokenManager { function pullTokens(address user, IWidoRouter.OrderInput[] calldata inputs) external; }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": { "contracts/lib/WidoL2Payload.sol": { "WidoL2Payload": "0x32c2757fe876013d2d6cb3460071676f8d70a49e" } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IWidoConfig","name":"_widoConfig","type":"address"},{"internalType":"contract IStarknetMessaging","name":"_starknetCore","type":"address"},{"internalType":"contract IWidoRouter","name":"_widoRouter","type":"address"},{"internalType":"uint256","name":"_l2WidoRecipient","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct IWidoRouter.OrderInput[]","name":"inputs","type":"tuple[]"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minOutputAmount","type":"uint256"}],"internalType":"struct IWidoRouter.OrderOutput[]","name":"outputs","type":"tuple[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint32","name":"nonce","type":"uint32"},{"internalType":"uint32","name":"expiration","type":"uint32"}],"indexed":false,"internalType":"struct IWidoRouter.Order","name":"order","type":"tuple"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeBps","type":"uint256"},{"indexed":true,"internalType":"address","name":"partner","type":"address"}],"name":"OrderInitiated","type":"event"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct IWidoRouter.OrderInput[]","name":"inputs","type":"tuple[]"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minOutputAmount","type":"uint256"}],"internalType":"struct IWidoRouter.OrderOutput[]","name":"outputs","type":"tuple[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint32","name":"nonce","type":"uint32"},{"internalType":"uint32","name":"expiration","type":"uint32"}],"internalType":"struct IWidoRouter.Order","name":"order","type":"tuple"},{"components":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"targetAddress","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"int32","name":"amountIndex","type":"int32"}],"internalType":"struct IWidoRouter.Step[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"feeBps","type":"uint256"},{"internalType":"address","name":"partner","type":"address"},{"internalType":"uint256","name":"l2RecipientUser","type":"uint256"},{"internalType":"uint256[]","name":"destinationPayload","type":"uint256[]"},{"internalType":"uint256","name":"bridgeFee","type":"uint256"},{"internalType":"uint256","name":"destinationTxFee","type":"uint256"}],"name":"executeOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"l2WidoRecipient","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"starknetCore","outputs":[{"internalType":"contract IStarknetMessaging","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"widoConfig","outputs":[{"internalType":"contract IWidoConfig","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"widoRouter","outputs":[{"internalType":"contract IWidoRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040523480156200001157600080fd5b5060405162002f4938038062002f498339818101604052810190620000379190620001bc565b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000118576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010f9062000255565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508060008190555050505050620003be565b600081519050620001718162000356565b92915050565b600081519050620001888162000370565b92915050565b6000815190506200019f816200038a565b92915050565b600081519050620001b681620003a4565b92915050565b60008060008060808587031215620001d957620001d862000302565b5b6000620001e98782880162000177565b9450506020620001fc8782880162000160565b93505060406200020f878288016200018e565b92505060606200022287828801620001a5565b91505092959194509250565b60006200023d60338362000277565b91506200024a8262000307565b604082019050919050565b6000602082019050818103600083015262000270816200022e565b9050919050565b600082825260208201905092915050565b60006200029582620002d8565b9050919050565b6000620002a98262000288565b9050919050565b6000620002bd8262000288565b9050919050565b6000620002d18262000288565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b7f5769646f537461726b6e6574526f757465723a207769646f526f75746572206360008201527f616e6e6f74206265206164647265737328302900000000000000000000000000602082015250565b62000361816200029c565b81146200036d57600080fd5b50565b6200037b81620002b0565b81146200038757600080fd5b50565b6200039581620002c4565b8114620003a157600080fd5b50565b620003af81620002f8565b8114620003bb57600080fd5b50565b60805160601c60a05160601c60c05160601c612b2862000421600039600081816105f401528181610a4b0152610a95015260008181610a2701526110ab0152600081816103fb015281816106a501528181610a6f0152610df70152612b286000f3fe60806040526004361061004e5760003560e01c80631e2fef041461005a57806330fe9dab1461007657806339e730ab146100a15780638355c01b146100cc578063bb980811146100f757610055565b3661005557005b600080fd5b610074600480360381019061006f9190611533565b610122565b005b34801561008257600080fd5b5061008b610a1f565b6040516100989190611f96565b60405180910390f35b3480156100ad57600080fd5b506100b6610a25565b6040516100c39190611d32565b60405180910390f35b3480156100d857600080fd5b506100e1610a49565b6040516100ee9190611d68565b60405180910390f35b34801561010357600080fd5b5061010c610a6d565b6040516101199190611d4d565b60405180910390f35b3073ffffffffffffffffffffffffffffffffffffffff168a604001602081019061014c919061143f565b73ffffffffffffffffffffffffffffffffffffffff16146101a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019990611d83565b60405180910390fd5b60018a80602001906101b4919061207b565b9050146101f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed90611e43565b60405180910390fd5b80826102029190612385565b341015610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90611dc3565b60405180910390fd5b6064871115610288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027f90611e83565b60405180910390fd5b60008a806020019061029a919061207b565b60008181106102ac576102ab612765565b5b90506040020160000160208101906102c4919061143f565b905060008585905011156105ce577332c2757fe876013d2d6cb3460071676f8d70a49e630cc9be1486866040518363ffffffff1660e01b815260040161030b929190611d0e565b60206040518083038186803b15801561032357600080fd5b505af4158015610337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035b9190611499565b61039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190611e23565b60405180910390fd5b6001858560008181106103b0576103af612765565b5b90506020020135146103f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ee90611e03565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663944a663f836040518263ffffffff1660e01b81526004016104529190611cca565b602060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a49190611646565b905080868660018181106104bb576104ba612765565b5b9050602002013514610502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f990611ee3565b60405180910390fd5b867332c2757fe876013d2d6cb3460071676f8d70a49e63fe8b3a1f88886040518363ffffffff1660e01b815260040161053c929190611d0e565b60206040518083038186803b15801561055457600080fd5b505af4158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c9190611646565b146105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c390611e63565b60405180910390fd5b505b6105e68b80600001906105e19190612018565b610a91565b60008a8a9050111561069e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663916a3bd983853461063b91906125d7565b61064591906125d7565b8d8d8d60008d6040518763ffffffff1660e01b815260040161066b959493929190611f03565b6000604051808303818588803b15801561068457600080fd5b505af1158015610698573d6000803e3d6000fd5b50505050505b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166360d704db6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561070b57600080fd5b505af115801561071f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610743919061146c565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156107dc5784864761078791906125d7565b61079191906125d7565b92506127108b846107a2919061257d565b6107ac91906123db565b91506107d7828273ffffffffffffffffffffffffffffffffffffffff16610d0890919063ffffffff16565b6108ae565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108159190611cca565b60206040518083038186803b15801561082d57600080fd5b505afa158015610841573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108659190611646565b92506127108b84610876919061257d565b61088091906123db565b91506108ad81838673ffffffffffffffffffffffffffffffffffffffff16610d5b9092919063ffffffff16565b5b81836108ba91906125d7565b92505050600086869050111561099b5760006001608060026108dc919061245f565b6108e691906125d7565b821690506000608083901c90506000888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509050828160028151811061094e5761094d612765565b5b602002602001018181525050818160038151811061096f5761096e612765565b5b60200260200101818152505061098985856000548a610df3565b61099381876110a9565b5050506109a8565b6109a782828987610df3565b5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdcbe317d6f3924abbc85e084cb4b96823dfa69fb3e6270933740dc977853dc098e8a8d604051610a0993929190611f58565b60405180910390a3505050505050505050505050565b60005481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631802553e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610af957600080fd5b505afa158015610b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b319190611506565b905060005b83839050811015610d025736848483818110610b5557610b54612765565b5b90506040020190508180600101925050600073ffffffffffffffffffffffffffffffffffffffff16816000016020810190610b90919061143f565b73ffffffffffffffffffffffffffffffffffffffff161415610bb25750610cfd565b610bf533308360200135846000016020810190610bcf919061143f565b73ffffffffffffffffffffffffffffffffffffffff16611180909392919063ffffffff16565b8060200135816000016020810190610c0d919061143f565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30866040518363ffffffff1660e01b8152600401610c47929190611ce5565b60206040518083038186803b158015610c5f57600080fd5b505afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190611646565b1015610cfb57610cfa837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836000016020810190610cd5919061143f565b73ffffffffffffffffffffffffffffffffffffffff1661121f9092919063ffffffff16565b5b505b610b36565b50505050565b600080600080600085875af1905080610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90611ec3565b60405180910390fd5b505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490611de3565b60405180910390fd5b50505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c61b1f5b866040518263ffffffff1660e01b8152600401610e4e9190611cca565b602060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea0919061146c565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f55578073ffffffffffffffffffffffffffffffffffffffff1663e2bbb1588386610eff9190612385565b86866040518463ffffffff1660e01b8152600401610f1e929190611fb1565b6000604051808303818588803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b50505050506110a2565b838573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30846040518363ffffffff1660e01b8152600401610f91929190611ce5565b60206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190611646565b101561103357611032817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8773ffffffffffffffffffffffffffffffffffffffff1661121f9092919063ffffffff16565b5b8073ffffffffffffffffffffffffffffffffffffffff1663e2bbb1588386866040518463ffffffff1660e01b815260040161106f929190611fb1565b6000604051808303818588803b15801561108857600080fd5b505af115801561109c573d6000803e3d6000fd5b50505050505b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633e3aa6c5826000547f0240060cdb34fcc260f41eac7474ee1d7c80b7e3607daff9ac67c7ea2ebb1c44866040518563ffffffff1660e01b815260040161112993929190611fda565b60408051808303818588803b15801561114157600080fd5b505af1158015611155573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061117a91906114c6565b50505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90611da3565b60405180910390fd5b5050505050565b60006040517f095ea7b3000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a890611ea3565b60405180910390fd5b50505050565b6000813590506112c681612a51565b92915050565b6000815190506112db81612a51565b92915050565b60008083601f8401126112f7576112f661279e565b5b8235905067ffffffffffffffff81111561131457611313612799565b5b6020830191508360208202830111156113305761132f6127b7565b5b9250929050565b60008083601f84011261134d5761134c61279e565b5b8235905067ffffffffffffffff81111561136a57611369612799565b5b602083019150836020820283011115611386576113856127b7565b5b9250929050565b60008151905061139c81612a68565b92915050565b6000815190506113b181612a7f565b92915050565b6000815190506113c681612a96565b92915050565b6000813590506113db81612aad565b92915050565b600060a082840312156113f7576113f66127a8565b5b81905092915050565b60008135905061140f81612ac4565b92915050565b60008151905061142481612ac4565b92915050565b60008135905061143981612adb565b92915050565b600060208284031215611455576114546127d0565b5b6000611463848285016112b7565b91505092915050565b600060208284031215611482576114816127d0565b5b6000611490848285016112cc565b91505092915050565b6000602082840312156114af576114ae6127d0565b5b60006114bd8482850161138d565b91505092915050565b600080604083850312156114dd576114dc6127d0565b5b60006114eb858286016113a2565b92505060206114fc85828601611415565b9150509250929050565b60006020828403121561151c5761151b6127d0565b5b600061152a848285016113b7565b91505092915050565b6000806000806000806000806000806101008b8d031215611557576115566127d0565b5b60008b013567ffffffffffffffff811115611575576115746127c1565b5b6115818d828e016113e1565b9a505060208b013567ffffffffffffffff8111156115a2576115a16127c1565b5b6115ae8d828e016112e1565b995099505060406115c18d828e01611400565b97505060606115d28d828e016112b7565b96505060806115e38d828e01611400565b95505060a08b013567ffffffffffffffff811115611604576116036127c1565b5b6116108d828e01611337565b945094505060c06116238d828e01611400565b92505060e06116348d828e01611400565b9150509295989b9194979a5092959850565b60006020828403121561165c5761165b6127d0565b5b600061166a84828501611415565b91505092915050565b600061167f8383611af1565b60408301905092915050565b60006116978383611b30565b60408301905092915050565b60006116af8383611c18565b905092915050565b60006116c38383611c9d565b60208301905092915050565b6116d88161260b565b82525050565b6116e78161260b565b82525050565b60006116f9838561214b565b9350611704826120de565b8060005b8581101561173d5761171a8284612319565b6117248882611673565b975061172f83612117565b925050600181019050611708565b5085925050509392505050565b6000611756838561215c565b9350611761826120e8565b8060005b8581101561179a576117778284612324565b611781888261168b565b975061178c83612124565b925050600181019050611765565b5085925050509392505050565b60006117b3838561216d565b9350836020840285016117c5846120f2565b8060005b878110156118095784840389526117e0828461232f565b6117ea85826116a3565b94506117f583612131565b925060208a019950506001810190506117c9565b50829750879450505050509392505050565b6000611827838561218f565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561185a576118596127c6565b5b60208302925061186b8385846126f8565b82840190509392505050565b60006118828261210c565b61188c818561217e565b9350611897836120fc565b8060005b838110156118c85781516118af88826116b7565b97506118ba8361213e565b92505060018101905061189b565b5085935050505092915050565b60006118e183856121a0565b93506118ee8385846126f8565b6118f7836127d5565b840190509392505050565b61190b8161268c565b82525050565b61191a8161269e565b82525050565b611929816126b0565b82525050565b61193881612645565b82525050565b611947816126c2565b82525050565b600061195a6029836121b1565b9150611965826127f3565b604082019050919050565b600061197d6014836121b1565b915061198882612842565b602082019050919050565b60006119a06010836121b1565b91506119ab8261286b565b602082019050919050565b60006119c3600f836121b1565b91506119ce82612894565b602082019050919050565b60006119e6602e836121b1565b91506119f1826128bd565b604082019050919050565b6000611a09601e836121b1565b9150611a148261290c565b602082019050919050565b6000611a2c6021836121b1565b9150611a3782612935565b604082019050919050565b6000611a4f6015836121b1565b9150611a5a82612984565b602082019050919050565b6000611a726010836121b1565b9150611a7d826129ad565b602082019050919050565b6000611a95600e836121b1565b9150611aa0826129d6565b602082019050919050565b6000611ab86013836121b1565b9150611ac3826129ff565b602082019050919050565b6000611adb6015836121b1565b9150611ae682612a28565b602082019050919050565b60408201611b0260008301836121c2565b611b0f60008501826116cf565b50611b1d6020830183612357565b611b2a6020850182611c9d565b50505050565b60408201611b4160008301836121c2565b611b4e60008501826116cf565b50611b5c6020830183612357565b611b696020850182611c9d565b50505050565b600060a08301611b8260008401846121d9565b8583036000870152611b958382846116ed565b92505050611ba6602084018461223c565b8583036020870152611bb983828461174a565b92505050611bca60408401846121c2565b611bd760408601826116cf565b50611be5606084018461236e565b611bf26060860182611cbb565b50611c00608084018461236e565b611c0d6080860182611cbb565b508091505092915050565b600060808301611c2b60008401846121c2565b611c3860008601826116cf565b50611c4660208401846121c2565b611c5360208601826116cf565b50611c61604084018461229f565b8583036040870152611c748382846118d5565b92505050611c856060840184612302565b611c92606086018261192f565b508091505092915050565b611ca681612672565b82525050565b611cb581612672565b82525050565b611cc48161267c565b82525050565b6000602082019050611cdf60008301846116de565b92915050565b6000604082019050611cfa60008301856116de565b611d0760208301846116de565b9392505050565b60006020820190508181036000830152611d2981848661181b565b90509392505050565b6000602082019050611d476000830184611902565b92915050565b6000602082019050611d626000830184611911565b92915050565b6000602082019050611d7d6000830184611920565b92915050565b60006020820190508181036000830152611d9c8161194d565b9050919050565b60006020820190508181036000830152611dbc81611970565b9050919050565b60006020820190508181036000830152611ddc81611993565b9050919050565b60006020820190508181036000830152611dfc816119b6565b9050919050565b60006020820190508181036000830152611e1c816119d9565b9050919050565b60006020820190508181036000830152611e3c816119fc565b9050919050565b60006020820190508181036000830152611e5c81611a1f565b9050919050565b60006020820190508181036000830152611e7c81611a42565b9050919050565b60006020820190508181036000830152611e9c81611a65565b9050919050565b60006020820190508181036000830152611ebc81611a88565b9050919050565b60006020820190508181036000830152611edc81611aab565b9050919050565b60006020820190508181036000830152611efc81611ace565b9050919050565b60006080820190508181036000830152611f1d8188611b6f565b90508181036020830152611f328186886117a7565b9050611f41604083018561193e565b611f4e60608301846116de565b9695505050505050565b60006060820190508181036000830152611f728186611b6f565b9050611f816020830185611cac565b611f8e6040830184611cac565b949350505050565b6000602082019050611fab6000830184611cac565b92915050565b6000604082019050611fc66000830185611cac565b611fd36020830184611cac565b9392505050565b6000606082019050611fef6000830186611cac565b611ffc6020830185611cac565b818103604083015261200e8184611877565b9050949350505050565b60008083356001602003843603038112612035576120346127ad565b5b80840192508235915067ffffffffffffffff821115612057576120566127a3565b5b602083019250604082023603831315612073576120726127bc565b5b509250929050565b60008083356001602003843603038112612098576120976127ad565b5b80840192508235915067ffffffffffffffff8211156120ba576120b96127a3565b5b6020830192506040820236038313156120d6576120d56127bc565b5b509250929050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b6000604082019050919050565b6000604082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006121d160208401846112b7565b905092915050565b600080833560016020038436030381126121f6576121f56127cb565b5b83810192508235915060208301925067ffffffffffffffff82111561221e5761221d612794565b5b604082023603841315612234576122336127b2565b5b509250929050565b60008083356001602003843603038112612259576122586127cb565b5b83810192508235915060208301925067ffffffffffffffff82111561228157612280612794565b5b604082023603841315612297576122966127b2565b5b509250929050565b600080833560016020038436030381126122bc576122bb6127cb565b5b83810192508235915060208301925067ffffffffffffffff8211156122e4576122e3612794565b5b6001820236038413156122fa576122f96127b2565b5b509250929050565b600061231160208401846113cc565b905092915050565b600082905092915050565b600082905092915050565b60008235600160800383360303811261234b5761234a6127cb565b5b82810191505092915050565b60006123666020840184611400565b905092915050565b600061237d602084018461142a565b905092915050565b600061239082612672565b915061239b83612672565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123d0576123cf612707565b5b828201905092915050565b60006123e682612672565b91506123f183612672565b92508261240157612400612736565b5b828204905092915050565b6000808291508390505b60018511156124565780860481111561243257612431612707565b5b60018516156124415780820291505b808102905061244f856127e6565b9450612416565b94509492505050565b600061246a82612672565b915061247583612672565b92506124a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846124aa565b905092915050565b6000826124ba5760019050612576565b816124c85760009050612576565b81600181146124de57600281146124e857612517565b6001915050612576565b60ff8411156124fa576124f9612707565b5b8360020a91508482111561251157612510612707565b5b50612576565b5060208310610133831016604e8410600b841016171561254c5782820a90508381111561254757612546612707565b5b612576565b612559848484600161240c565b925090508184048111156125705761256f612707565b5b81810290505b9392505050565b600061258882612672565b915061259383612672565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125cc576125cb612707565b5b828202905092915050565b60006125e282612672565b91506125ed83612672565b925082821015612600576125ff612707565b5b828203905092915050565b600061261682612652565b9050919050565b60008115159050919050565b6000819050919050565b600061263e8261260b565b9050919050565b60008160030b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b6000612697826126d4565b9050919050565b60006126a9826126d4565b9050919050565b60006126bb826126d4565b9050919050565b60006126cd82612672565b9050919050565b60006126df826126e6565b9050919050565b60006126f182612652565b9050919050565b82818337600083830152505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f4f7264657220757365722073686f756c6420657175616c205769646f5374617260008201527f6b6e6574526f7565720000000000000000000000000000000000000000000000602082015250565b7f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000600082015250565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b7f5452414e534645525f4641494c45440000000000000000000000000000000000600082015250565b7f4f6e6c792073696e676c6520746f6b656e20696e70757420616c6c6f7765642060008201527f696e2064657374696e6174696f6e000000000000000000000000000000000000602082015250565b7f496e636f686572656e742064657374696e6174696f6e207061796c6f61640000600082015250565b7f4f6e6c792073696e676c6520746f6b656e206f7574707574206578706563746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c3220526563697069656e74204d69736d617463680000000000000000000000600082015250565b7f466565206f7574206f662072616e676500000000000000000000000000000000600082015250565b7f415050524f56455f4641494c4544000000000000000000000000000000000000600082015250565b7f4554485f5452414e534645525f4641494c454400000000000000000000000000600082015250565b7f42726964676520546f6b656e204d69736d617463680000000000000000000000600082015250565b612a5a8161260b565b8114612a6557600080fd5b50565b612a718161261d565b8114612a7c57600080fd5b50565b612a8881612629565b8114612a9357600080fd5b50565b612a9f81612633565b8114612aaa57600080fd5b50565b612ab681612645565b8114612ac157600080fd5b50565b612acd81612672565b8114612ad857600080fd5b50565b612ae48161267c565b8114612aef57600080fd5b5056fea2646970667358221220a0b8a8027883189ff0580debb07aa6a57c6c16b3a9f67cc2ee614ed4db77a89d64736f6c634300080700330000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b309000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c40000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39401b64371585074b2c333e8b9fea28198ed8b75efcec2f3e3f7650a63de2999c1
Deployed Bytecode
0x60806040526004361061004e5760003560e01c80631e2fef041461005a57806330fe9dab1461007657806339e730ab146100a15780638355c01b146100cc578063bb980811146100f757610055565b3661005557005b600080fd5b610074600480360381019061006f9190611533565b610122565b005b34801561008257600080fd5b5061008b610a1f565b6040516100989190611f96565b60405180910390f35b3480156100ad57600080fd5b506100b6610a25565b6040516100c39190611d32565b60405180910390f35b3480156100d857600080fd5b506100e1610a49565b6040516100ee9190611d68565b60405180910390f35b34801561010357600080fd5b5061010c610a6d565b6040516101199190611d4d565b60405180910390f35b3073ffffffffffffffffffffffffffffffffffffffff168a604001602081019061014c919061143f565b73ffffffffffffffffffffffffffffffffffffffff16146101a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019990611d83565b60405180910390fd5b60018a80602001906101b4919061207b565b9050146101f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed90611e43565b60405180910390fd5b80826102029190612385565b341015610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90611dc3565b60405180910390fd5b6064871115610288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027f90611e83565b60405180910390fd5b60008a806020019061029a919061207b565b60008181106102ac576102ab612765565b5b90506040020160000160208101906102c4919061143f565b905060008585905011156105ce577332c2757fe876013d2d6cb3460071676f8d70a49e630cc9be1486866040518363ffffffff1660e01b815260040161030b929190611d0e565b60206040518083038186803b15801561032357600080fd5b505af4158015610337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035b9190611499565b61039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039190611e23565b60405180910390fd5b6001858560008181106103b0576103af612765565b5b90506020020135146103f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ee90611e03565b60405180910390fd5b60007f0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b30973ffffffffffffffffffffffffffffffffffffffff1663944a663f836040518263ffffffff1660e01b81526004016104529190611cca565b602060405180830381600087803b15801561046c57600080fd5b505af1158015610480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a49190611646565b905080868660018181106104bb576104ba612765565b5b9050602002013514610502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f990611ee3565b60405180910390fd5b867332c2757fe876013d2d6cb3460071676f8d70a49e63fe8b3a1f88886040518363ffffffff1660e01b815260040161053c929190611d0e565b60206040518083038186803b15801561055457600080fd5b505af4158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c9190611646565b146105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c390611e63565b60405180910390fd5b505b6105e68b80600001906105e19190612018565b610a91565b60008a8a9050111561069e577f0000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39473ffffffffffffffffffffffffffffffffffffffff1663916a3bd983853461063b91906125d7565b61064591906125d7565b8d8d8d60008d6040518763ffffffff1660e01b815260040161066b959493929190611f03565b6000604051808303818588803b15801561068457600080fd5b505af1158015610698573d6000803e3d6000fd5b50505050505b60008060007f0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b30973ffffffffffffffffffffffffffffffffffffffff166360d704db6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561070b57600080fd5b505af115801561071f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610743919061146c565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156107dc5784864761078791906125d7565b61079191906125d7565b92506127108b846107a2919061257d565b6107ac91906123db565b91506107d7828273ffffffffffffffffffffffffffffffffffffffff16610d0890919063ffffffff16565b6108ae565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108159190611cca565b60206040518083038186803b15801561082d57600080fd5b505afa158015610841573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108659190611646565b92506127108b84610876919061257d565b61088091906123db565b91506108ad81838673ffffffffffffffffffffffffffffffffffffffff16610d5b9092919063ffffffff16565b5b81836108ba91906125d7565b92505050600086869050111561099b5760006001608060026108dc919061245f565b6108e691906125d7565b821690506000608083901c90506000888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509050828160028151811061094e5761094d612765565b5b602002602001018181525050818160038151811061096f5761096e612765565b5b60200260200101818152505061098985856000548a610df3565b61099381876110a9565b5050506109a8565b6109a782828987610df3565b5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdcbe317d6f3924abbc85e084cb4b96823dfa69fb3e6270933740dc977853dc098e8a8d604051610a0993929190611f58565b60405180910390a3505050505050505050505050565b60005481565b7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c481565b7f0000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39481565b7f0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b30981565b60007f0000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39473ffffffffffffffffffffffffffffffffffffffff16631802553e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610af957600080fd5b505afa158015610b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b319190611506565b905060005b83839050811015610d025736848483818110610b5557610b54612765565b5b90506040020190508180600101925050600073ffffffffffffffffffffffffffffffffffffffff16816000016020810190610b90919061143f565b73ffffffffffffffffffffffffffffffffffffffff161415610bb25750610cfd565b610bf533308360200135846000016020810190610bcf919061143f565b73ffffffffffffffffffffffffffffffffffffffff16611180909392919063ffffffff16565b8060200135816000016020810190610c0d919061143f565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30866040518363ffffffff1660e01b8152600401610c47929190611ce5565b60206040518083038186803b158015610c5f57600080fd5b505afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190611646565b1015610cfb57610cfa837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836000016020810190610cd5919061143f565b73ffffffffffffffffffffffffffffffffffffffff1661121f9092919063ffffffff16565b5b505b610b36565b50505050565b600080600080600085875af1905080610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90611ec3565b60405180910390fd5b505050565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490611de3565b60405180910390fd5b50505050565b60007f0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b30973ffffffffffffffffffffffffffffffffffffffff1663c61b1f5b866040518263ffffffff1660e01b8152600401610e4e9190611cca565b602060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea0919061146c565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f55578073ffffffffffffffffffffffffffffffffffffffff1663e2bbb1588386610eff9190612385565b86866040518463ffffffff1660e01b8152600401610f1e929190611fb1565b6000604051808303818588803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b50505050506110a2565b838573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30846040518363ffffffff1660e01b8152600401610f91929190611ce5565b60206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190611646565b101561103357611032817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8773ffffffffffffffffffffffffffffffffffffffff1661121f9092919063ffffffff16565b5b8073ffffffffffffffffffffffffffffffffffffffff1663e2bbb1588386866040518463ffffffff1660e01b815260040161106f929190611fb1565b6000604051808303818588803b15801561108857600080fd5b505af115801561109c573d6000803e3d6000fd5b50505050505b5050505050565b7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c473ffffffffffffffffffffffffffffffffffffffff16633e3aa6c5826000547f0240060cdb34fcc260f41eac7474ee1d7c80b7e3607daff9ac67c7ea2ebb1c44866040518563ffffffff1660e01b815260040161112993929190611fda565b60408051808303818588803b15801561114157600080fd5b505af1158015611155573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061117a91906114c6565b50505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90611da3565b60405180910390fd5b5050505050565b60006040517f095ea7b3000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a890611ea3565b60405180910390fd5b50505050565b6000813590506112c681612a51565b92915050565b6000815190506112db81612a51565b92915050565b60008083601f8401126112f7576112f661279e565b5b8235905067ffffffffffffffff81111561131457611313612799565b5b6020830191508360208202830111156113305761132f6127b7565b5b9250929050565b60008083601f84011261134d5761134c61279e565b5b8235905067ffffffffffffffff81111561136a57611369612799565b5b602083019150836020820283011115611386576113856127b7565b5b9250929050565b60008151905061139c81612a68565b92915050565b6000815190506113b181612a7f565b92915050565b6000815190506113c681612a96565b92915050565b6000813590506113db81612aad565b92915050565b600060a082840312156113f7576113f66127a8565b5b81905092915050565b60008135905061140f81612ac4565b92915050565b60008151905061142481612ac4565b92915050565b60008135905061143981612adb565b92915050565b600060208284031215611455576114546127d0565b5b6000611463848285016112b7565b91505092915050565b600060208284031215611482576114816127d0565b5b6000611490848285016112cc565b91505092915050565b6000602082840312156114af576114ae6127d0565b5b60006114bd8482850161138d565b91505092915050565b600080604083850312156114dd576114dc6127d0565b5b60006114eb858286016113a2565b92505060206114fc85828601611415565b9150509250929050565b60006020828403121561151c5761151b6127d0565b5b600061152a848285016113b7565b91505092915050565b6000806000806000806000806000806101008b8d031215611557576115566127d0565b5b60008b013567ffffffffffffffff811115611575576115746127c1565b5b6115818d828e016113e1565b9a505060208b013567ffffffffffffffff8111156115a2576115a16127c1565b5b6115ae8d828e016112e1565b995099505060406115c18d828e01611400565b97505060606115d28d828e016112b7565b96505060806115e38d828e01611400565b95505060a08b013567ffffffffffffffff811115611604576116036127c1565b5b6116108d828e01611337565b945094505060c06116238d828e01611400565b92505060e06116348d828e01611400565b9150509295989b9194979a5092959850565b60006020828403121561165c5761165b6127d0565b5b600061166a84828501611415565b91505092915050565b600061167f8383611af1565b60408301905092915050565b60006116978383611b30565b60408301905092915050565b60006116af8383611c18565b905092915050565b60006116c38383611c9d565b60208301905092915050565b6116d88161260b565b82525050565b6116e78161260b565b82525050565b60006116f9838561214b565b9350611704826120de565b8060005b8581101561173d5761171a8284612319565b6117248882611673565b975061172f83612117565b925050600181019050611708565b5085925050509392505050565b6000611756838561215c565b9350611761826120e8565b8060005b8581101561179a576117778284612324565b611781888261168b565b975061178c83612124565b925050600181019050611765565b5085925050509392505050565b60006117b3838561216d565b9350836020840285016117c5846120f2565b8060005b878110156118095784840389526117e0828461232f565b6117ea85826116a3565b94506117f583612131565b925060208a019950506001810190506117c9565b50829750879450505050509392505050565b6000611827838561218f565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561185a576118596127c6565b5b60208302925061186b8385846126f8565b82840190509392505050565b60006118828261210c565b61188c818561217e565b9350611897836120fc565b8060005b838110156118c85781516118af88826116b7565b97506118ba8361213e565b92505060018101905061189b565b5085935050505092915050565b60006118e183856121a0565b93506118ee8385846126f8565b6118f7836127d5565b840190509392505050565b61190b8161268c565b82525050565b61191a8161269e565b82525050565b611929816126b0565b82525050565b61193881612645565b82525050565b611947816126c2565b82525050565b600061195a6029836121b1565b9150611965826127f3565b604082019050919050565b600061197d6014836121b1565b915061198882612842565b602082019050919050565b60006119a06010836121b1565b91506119ab8261286b565b602082019050919050565b60006119c3600f836121b1565b91506119ce82612894565b602082019050919050565b60006119e6602e836121b1565b91506119f1826128bd565b604082019050919050565b6000611a09601e836121b1565b9150611a148261290c565b602082019050919050565b6000611a2c6021836121b1565b9150611a3782612935565b604082019050919050565b6000611a4f6015836121b1565b9150611a5a82612984565b602082019050919050565b6000611a726010836121b1565b9150611a7d826129ad565b602082019050919050565b6000611a95600e836121b1565b9150611aa0826129d6565b602082019050919050565b6000611ab86013836121b1565b9150611ac3826129ff565b602082019050919050565b6000611adb6015836121b1565b9150611ae682612a28565b602082019050919050565b60408201611b0260008301836121c2565b611b0f60008501826116cf565b50611b1d6020830183612357565b611b2a6020850182611c9d565b50505050565b60408201611b4160008301836121c2565b611b4e60008501826116cf565b50611b5c6020830183612357565b611b696020850182611c9d565b50505050565b600060a08301611b8260008401846121d9565b8583036000870152611b958382846116ed565b92505050611ba6602084018461223c565b8583036020870152611bb983828461174a565b92505050611bca60408401846121c2565b611bd760408601826116cf565b50611be5606084018461236e565b611bf26060860182611cbb565b50611c00608084018461236e565b611c0d6080860182611cbb565b508091505092915050565b600060808301611c2b60008401846121c2565b611c3860008601826116cf565b50611c4660208401846121c2565b611c5360208601826116cf565b50611c61604084018461229f565b8583036040870152611c748382846118d5565b92505050611c856060840184612302565b611c92606086018261192f565b508091505092915050565b611ca681612672565b82525050565b611cb581612672565b82525050565b611cc48161267c565b82525050565b6000602082019050611cdf60008301846116de565b92915050565b6000604082019050611cfa60008301856116de565b611d0760208301846116de565b9392505050565b60006020820190508181036000830152611d2981848661181b565b90509392505050565b6000602082019050611d476000830184611902565b92915050565b6000602082019050611d626000830184611911565b92915050565b6000602082019050611d7d6000830184611920565b92915050565b60006020820190508181036000830152611d9c8161194d565b9050919050565b60006020820190508181036000830152611dbc81611970565b9050919050565b60006020820190508181036000830152611ddc81611993565b9050919050565b60006020820190508181036000830152611dfc816119b6565b9050919050565b60006020820190508181036000830152611e1c816119d9565b9050919050565b60006020820190508181036000830152611e3c816119fc565b9050919050565b60006020820190508181036000830152611e5c81611a1f565b9050919050565b60006020820190508181036000830152611e7c81611a42565b9050919050565b60006020820190508181036000830152611e9c81611a65565b9050919050565b60006020820190508181036000830152611ebc81611a88565b9050919050565b60006020820190508181036000830152611edc81611aab565b9050919050565b60006020820190508181036000830152611efc81611ace565b9050919050565b60006080820190508181036000830152611f1d8188611b6f565b90508181036020830152611f328186886117a7565b9050611f41604083018561193e565b611f4e60608301846116de565b9695505050505050565b60006060820190508181036000830152611f728186611b6f565b9050611f816020830185611cac565b611f8e6040830184611cac565b949350505050565b6000602082019050611fab6000830184611cac565b92915050565b6000604082019050611fc66000830185611cac565b611fd36020830184611cac565b9392505050565b6000606082019050611fef6000830186611cac565b611ffc6020830185611cac565b818103604083015261200e8184611877565b9050949350505050565b60008083356001602003843603038112612035576120346127ad565b5b80840192508235915067ffffffffffffffff821115612057576120566127a3565b5b602083019250604082023603831315612073576120726127bc565b5b509250929050565b60008083356001602003843603038112612098576120976127ad565b5b80840192508235915067ffffffffffffffff8211156120ba576120b96127a3565b5b6020830192506040820236038313156120d6576120d56127bc565b5b509250929050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b6000604082019050919050565b6000604082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006121d160208401846112b7565b905092915050565b600080833560016020038436030381126121f6576121f56127cb565b5b83810192508235915060208301925067ffffffffffffffff82111561221e5761221d612794565b5b604082023603841315612234576122336127b2565b5b509250929050565b60008083356001602003843603038112612259576122586127cb565b5b83810192508235915060208301925067ffffffffffffffff82111561228157612280612794565b5b604082023603841315612297576122966127b2565b5b509250929050565b600080833560016020038436030381126122bc576122bb6127cb565b5b83810192508235915060208301925067ffffffffffffffff8211156122e4576122e3612794565b5b6001820236038413156122fa576122f96127b2565b5b509250929050565b600061231160208401846113cc565b905092915050565b600082905092915050565b600082905092915050565b60008235600160800383360303811261234b5761234a6127cb565b5b82810191505092915050565b60006123666020840184611400565b905092915050565b600061237d602084018461142a565b905092915050565b600061239082612672565b915061239b83612672565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123d0576123cf612707565b5b828201905092915050565b60006123e682612672565b91506123f183612672565b92508261240157612400612736565b5b828204905092915050565b6000808291508390505b60018511156124565780860481111561243257612431612707565b5b60018516156124415780820291505b808102905061244f856127e6565b9450612416565b94509492505050565b600061246a82612672565b915061247583612672565b92506124a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846124aa565b905092915050565b6000826124ba5760019050612576565b816124c85760009050612576565b81600181146124de57600281146124e857612517565b6001915050612576565b60ff8411156124fa576124f9612707565b5b8360020a91508482111561251157612510612707565b5b50612576565b5060208310610133831016604e8410600b841016171561254c5782820a90508381111561254757612546612707565b5b612576565b612559848484600161240c565b925090508184048111156125705761256f612707565b5b81810290505b9392505050565b600061258882612672565b915061259383612672565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125cc576125cb612707565b5b828202905092915050565b60006125e282612672565b91506125ed83612672565b925082821015612600576125ff612707565b5b828203905092915050565b600061261682612652565b9050919050565b60008115159050919050565b6000819050919050565b600061263e8261260b565b9050919050565b60008160030b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b6000612697826126d4565b9050919050565b60006126a9826126d4565b9050919050565b60006126bb826126d4565b9050919050565b60006126cd82612672565b9050919050565b60006126df826126e6565b9050919050565b60006126f182612652565b9050919050565b82818337600083830152505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f4f7264657220757365722073686f756c6420657175616c205769646f5374617260008201527f6b6e6574526f7565720000000000000000000000000000000000000000000000602082015250565b7f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000600082015250565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b7f5452414e534645525f4641494c45440000000000000000000000000000000000600082015250565b7f4f6e6c792073696e676c6520746f6b656e20696e70757420616c6c6f7765642060008201527f696e2064657374696e6174696f6e000000000000000000000000000000000000602082015250565b7f496e636f686572656e742064657374696e6174696f6e207061796c6f61640000600082015250565b7f4f6e6c792073696e676c6520746f6b656e206f7574707574206578706563746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c3220526563697069656e74204d69736d617463680000000000000000000000600082015250565b7f466565206f7574206f662072616e676500000000000000000000000000000000600082015250565b7f415050524f56455f4641494c4544000000000000000000000000000000000000600082015250565b7f4554485f5452414e534645525f4641494c454400000000000000000000000000600082015250565b7f42726964676520546f6b656e204d69736d617463680000000000000000000000600082015250565b612a5a8161260b565b8114612a6557600080fd5b50565b612a718161261d565b8114612a7c57600080fd5b50565b612a8881612629565b8114612a9357600080fd5b50565b612a9f81612633565b8114612aaa57600080fd5b50565b612ab681612645565b8114612ac157600080fd5b50565b612acd81612672565b8114612ad857600080fd5b50565b612ae48161267c565b8114612aef57600080fd5b5056fea2646970667358221220a0b8a8027883189ff0580debb07aa6a57c6c16b3a9f67cc2ee614ed4db77a89d64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b309000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c40000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd39401b64371585074b2c333e8b9fea28198ed8b75efcec2f3e3f7650a63de2999c1
-----Decoded View---------------
Arg [0] : _widoConfig (address): 0x2fBaB6FDC1b9236e74375Ac4331F867967E6b309
Arg [1] : _starknetCore (address): 0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4
Arg [2] : _widoRouter (address): 0x7Fb69e8fb1525ceEc03783FFd8a317bafbDfD394
Arg [3] : _l2WidoRecipient (uint256): 774344487152719977056596713676738542095583354372615681057915688698153376193
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000002fbab6fdc1b9236e74375ac4331f867967e6b309
Arg [1] : 000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c4
Arg [2] : 0000000000000000000000007fb69e8fb1525ceec03783ffd8a317bafbdfd394
Arg [3] : 01b64371585074b2c333e8b9fea28198ed8b75efcec2f3e3f7650a63de2999c1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.