Source Code
Latest 25 from a total of 251 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Token T... | 22253566 | 309 days ago | IN | 0 ETH | 0.00018336 | ||||
| Withdraw Token T... | 22253566 | 309 days ago | IN | 0 ETH | 0.00016887 | ||||
| Withdraw Token T... | 22253566 | 309 days ago | IN | 0 ETH | 0.00018008 | ||||
| Withdraw Token T... | 22253443 | 309 days ago | IN | 0 ETH | 0.00115193 | ||||
| Swap Cvx Crv To ... | 22229692 | 312 days ago | IN | 0 ETH | 0.00040666 | ||||
| Swap Cvx Crv To ... | 22229682 | 312 days ago | IN | 0 ETH | 0.00041124 | ||||
| Swap Cvx Crv To ... | 22229677 | 312 days ago | IN | 0 ETH | 0.00039292 | ||||
| Swap Cvx Crv To ... | 22229673 | 312 days ago | IN | 0 ETH | 0.00040725 | ||||
| Swap Cvx Crv To ... | 22229664 | 312 days ago | IN | 0 ETH | 0.00034862 | ||||
| Swap Cvx Crv To ... | 22229654 | 312 days ago | IN | 0 ETH | 0.00042694 | ||||
| Swap Cvx Crv To ... | 22229650 | 312 days ago | IN | 0 ETH | 0.00040541 | ||||
| Swap Cvx Crv To ... | 22229646 | 312 days ago | IN | 0 ETH | 0.00043747 | ||||
| Swap Cvx Crv To ... | 22229640 | 312 days ago | IN | 0 ETH | 0.00051204 | ||||
| Swap Cvx Crv To ... | 22229601 | 312 days ago | IN | 0 ETH | 0.00038478 | ||||
| Swap Cvx Crv To ... | 22229596 | 312 days ago | IN | 0 ETH | 0.00037856 | ||||
| Swap Cvx Crv To ... | 22229593 | 312 days ago | IN | 0 ETH | 0.0004024 | ||||
| Swap Cvx Crv To ... | 22229583 | 312 days ago | IN | 0 ETH | 0.00036795 | ||||
| Swap Cvx Crv To ... | 22229574 | 312 days ago | IN | 0 ETH | 0.00037588 | ||||
| Swap Cvx Crv To ... | 22229562 | 312 days ago | IN | 0 ETH | 0.00036789 | ||||
| Swap Cvx Crv To ... | 22229558 | 313 days ago | IN | 0 ETH | 0.00033842 | ||||
| Swap Cvx Crv To ... | 22229553 | 313 days ago | IN | 0 ETH | 0.00035655 | ||||
| Swap Cvx Crv To ... | 22229549 | 313 days ago | IN | 0 ETH | 0.00034223 | ||||
| Swap Cvx Crv To ... | 22229539 | 313 days ago | IN | 0 ETH | 0.00037126 | ||||
| Swap Cvx Crv To ... | 22229536 | 313 days ago | IN | 0 ETH | 0.00035136 | ||||
| Swap Cvx Crv To ... | 22229526 | 313 days ago | IN | 0 ETH | 0.00035145 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 21635611 | 395 days ago | 0.1 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
VeCrvVault
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.27;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "hardhat/console.sol";
import "./BaseVault.sol";
import "./IStyCrv.sol";
import "./ICurvePool.sol";
import "./IAsdCrv.sol";
import "./IStkCvxCrv.sol";
contract VeCrvVault is BaseVault {
using SafeERC20 for IERC20;
// 代币地址
address public constant YCRV = 0xFCc5c47bE19d06BF83eB04298b026F81069ff65b; // yCRV代币地址
address public constant CRV = 0xD533a949740bb3306d119CC777fa900bA034cd52; // CRV代币地址
address public constant SDCRV = 0xD1b5651E55D4CeeD36251c61c50C889B36F6abB5; // sdCRV代币地址
address public constant CVXCRV = 0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7; // cvxCRV代币地址
// 质押币地址
address public constant ASDCRV = 0x43E54C2E7b3e294De3A155785F52AB49d87B9922; // asdCRV质押代币地址
address public constant STKCVXCRV =
0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434; // stkcvxCRV质押代币地址
address public constant STYCRV = 0x27B5739e22ad9033bcBf192059122d163b60349D; // styCRV质押代币地址
// Curve池地址
address public constant YCRV_CRV_POOL =
0x99f5aCc8EC2Da2BC0771c32814EFF52b712de1E5; // yCRV/CRV池
address public constant SDCRV_CRV_POOL =
0xCA0253A98D16e9C1e3614caFDA19318EE69772D0; // sdCRV/CRV池
address public constant CVXCRV_CRV_POOL =
0x971add32Ea87f10bD192671630be3BE8A11b8623; // cvxCRV/CRV池
// 兑换事件
event Swap(
uint256 inputAmount,
uint256 outputAmount,
string inputTokenName,
string outputTokenName
);
// yCRV 兑换为 sdCRV
// @param amount 要兑换的yCRV数量
function swapYCrvToSdCrv(
uint256 yCrvAmount,
uint256 minOutput
) external onlyOperator {
require(yCrvAmount > 0, "Amount must be greater than 0");
// 获取当前 pricePerShare
uint256 pricePerShare = IStYCRV(STYCRV).pricePerShare();
// 计算对应的份额数
uint256 shares = (yCrvAmount * 1e18) / pricePerShare;
// 授权styCRV合约使用styCrv
IERC20(STYCRV).forceApprove(STYCRV, shares);
// 从styCRV取回yCRV,使用计算出的份额数
IStYCRV(STYCRV).withdraw(shares);
// 添加余额检查
require(
IERC20(YCRV).balanceOf(address(this)) >= yCrvAmount,
"Insufficient yCRV balance"
);
// 首先授权yCRV给yCRV/CRV池
IERC20(YCRV).forceApprove(YCRV_CRV_POOL, yCrvAmount);
// 将yCRV兑换为CRV
ICurvePool yCrvCrvPool = ICurvePool(YCRV_CRV_POOL);
// 0 CRV
// 1 yCRV
uint256 crvAmount = yCrvCrvPool.exchange(1, 0, yCrvAmount, 0);
// 授权CRV给sdCRV/CRV池
IERC20(CRV).forceApprove(SDCRV_CRV_POOL, crvAmount);
// 0 crv 1 sdcrv
// 将CRV兑换为sdCRV
uint256 sdcrvAmount = ICurvePool(SDCRV_CRV_POOL).exchange(
0,
1,
crvAmount,
minOutput
);
// todo
require(sdcrvAmount > yCrvAmount, "sdcrvAmount < amount");
// 授权sdCRV给质押合约
IERC20(SDCRV).forceApprove(ASDCRV, sdcrvAmount);
// 质押sdCRV到asdCRV
IAsdCRV(ASDCRV).deposit(sdcrvAmount, address(this));
emit Swap(yCrvAmount, sdcrvAmount, "yCRV", "sdCRV");
}
// yCRV 兑换为 cvxCRV
// @param amount 要兑换的yCRV数量
function swapYCrvToCvxCrv(
uint256 amount,
uint256 minOutput
) external onlyOperator {
require(amount > 0, "Amount must be greater than 0");
// 获取当前 pricePerShare
uint256 pricePerShare = IStYCRV(STYCRV).pricePerShare();
// 计算对应的份额数
// shares = yCrvAmount * (10 ** decimals) / pricePerShare
uint256 shares = (amount * 1e18) / pricePerShare;
IERC20(STYCRV).forceApprove(STYCRV, shares);
// 从styCRV取回yCRV,使用计算出的份额数
IStYCRV(STYCRV).withdraw(shares);
// 添加余额检查
require(
IERC20(YCRV).balanceOf(address(this)) >= amount,
"Insufficient yCRV balance"
);
// 首先授权yCRV给yCRV/CRV池
IERC20(YCRV).forceApprove(YCRV_CRV_POOL, amount);
// 将yCRV兑换为CRV (0 CRV 1 yCRV)
uint256 crvAmount = ICurvePool(YCRV_CRV_POOL).exchange(1, 0, amount, 0);
// 授权CRV给cvxCRV/CRV池
IERC20(CRV).forceApprove(CVXCRV_CRV_POOL, crvAmount);
// 将CRV兑换为cvxCRV
uint256 cvxcrvAmount = ICurvePool(CVXCRV_CRV_POOL).exchange(
0,
1,
crvAmount,
// todo
minOutput
);
// todo
require(cvxcrvAmount > amount, "cvxcrvAmount < amount");
// 质押
// 授权cvxCRV给质押合约
IERC20(CVXCRV).forceApprove(STKCVXCRV, cvxcrvAmount);
// 质押cvxCRV到stkcvxCRV
IStkCVXCRV(STKCVXCRV).stake(cvxcrvAmount, address(this));
emit Swap(amount, cvxcrvAmount, "yCRV", "cvxCRV");
}
// sdCRV 兑换为 cvxCRV
// @param amount 要兑换的sdCRV数量
function swapSdCrvToCvxCrv(
uint256 amount,
uint256 minOutput
) external onlyOperator {
require(amount > 0, "Amount must be greater than 0");
// 兑换sdCrv所需的asdCrv的份额
uint256 asdCrvShare = IAsdCRV(ASDCRV).convertToShares(amount);
// 授权asdCRV给asdCRV合约
IERC20(ASDCRV).forceApprove(ASDCRV, asdCrvShare);
// 调用redeem方法将asdCRV转换为sdCRV
uint256 assets = IAsdCRV(ASDCRV).redeem(
asdCrvShare,
address(this),
address(this)
);
// 首先授权sdCRV给sdCRV/CRV池
IERC20(SDCRV).forceApprove(SDCRV_CRV_POOL, assets);
// 将sdCRV兑换为CRV (0 crv 1 sdcrv)
uint256 crvAmount = ICurvePool(SDCRV_CRV_POOL).exchange(
1,
0,
assets,
0
);
// 授权CRV给cvxCRV/CRV池
IERC20(CRV).forceApprove(CVXCRV_CRV_POOL, crvAmount);
// 将CRV兑换为cvxCRV (0 crv 1 cvxcrv)
uint256 cvxcrvAmount = ICurvePool(CVXCRV_CRV_POOL).exchange(
0,
1,
crvAmount,
minOutput
);
console.log("cvxcrvAmount", cvxcrvAmount);
require(cvxcrvAmount > amount, "cvx crvAmount < amount ");
// 质押
// 授权cvxCRV给质押合约
IERC20(CVXCRV).forceApprove(STKCVXCRV, cvxcrvAmount);
// 质押cvxCRV到stkcvxCRV
IStkCVXCRV(STKCVXCRV).stake(cvxcrvAmount, address(this));
emit Swap(amount, cvxcrvAmount, "sdCRV", "cvxCRV");
}
// sdCRV 兑换为 yCRV
// @param amount 要兑换的sdCRV数量
function swapSdCrvToYCrv(
uint256 amount,
uint256 minOutput
) external onlyOperator {
require(amount > 0, "Amount must be greater than 0");
// 计算需要的asdCRV份额
uint256 asdCrvShare = IAsdCRV(ASDCRV).convertToShares(amount);
// 授权asdCRV给asdCRV合约
IERC20(ASDCRV).forceApprove(ASDCRV, asdCrvShare);
// 调用redeem方法将asdCRV转换为sdCRV
uint256 assets = IAsdCRV(ASDCRV).redeem(
asdCrvShare,
address(this),
address(this)
);
// 首先授权sdCRV给sdCRV/CRV池
IERC20(SDCRV).forceApprove(SDCRV_CRV_POOL, assets);
// 将sdCRV兑换为CRV (0 crv 1 sdcrv)
uint256 crvAmount = ICurvePool(SDCRV_CRV_POOL).exchange(
1,
0,
assets,
0
);
// 授权CRV给yCRV/CRV池
IERC20(CRV).forceApprove(YCRV_CRV_POOL, crvAmount);
// 将CRV兑换为yCRV (0 CRV 1 yCRV)
uint256 ycrvAmount = ICurvePool(YCRV_CRV_POOL).exchange(
0,
1,
crvAmount,
// amount
minOutput
);
require(ycrvAmount > amount, "ycrvAmount < amount ");
// 授权yCRV给质押合约
IERC20(YCRV).forceApprove(STYCRV, ycrvAmount);
// 质押yCRV到stYCRV
IStYCRV(STYCRV).deposit(ycrvAmount);
emit Swap(amount, ycrvAmount, "sdCRV", "yCRV");
}
// cvxCRV 兑换为 yCRV
// @param amount 要兑换的cvxCRV数量
function swapCvxCrvToYCrv(
uint256 amount,
uint256 minOutput
) external onlyOperator {
require(amount > 0, "Amount must be greater than 0");
// 授权stkcvxCRV给stkcvxCRV合约
IERC20(STKCVXCRV).forceApprove(STKCVXCRV, amount);
// 从stkcvxCRV取回cvxCRV
IStkCVXCRV(STKCVXCRV).withdraw(amount);
// 添加余额检查
require(
IERC20(CVXCRV).balanceOf(address(this)) >= amount,
"Insufficient cvxCRV balance"
);
// 首先授权cvxCRV给cvxCRV/CRV池
IERC20(CVXCRV).forceApprove(CVXCRV_CRV_POOL, amount);
// 将cvxCRV兑换为CRV (0 crv 1 cvxcrv)
uint256 crvAmount = ICurvePool(CVXCRV_CRV_POOL).exchange(
1,
0,
amount,
0
);
// 授权CRV给yCRV/CRV池
IERC20(CRV).forceApprove(YCRV_CRV_POOL, crvAmount);
// 将CRV兑换为yCRV (0 CRV 1 yCRV)
uint256 ycrvAmount = ICurvePool(YCRV_CRV_POOL).exchange(
0,
1,
crvAmount,
// todo
minOutput
);
// todo
require(ycrvAmount > amount, "ycrvAmount < amount ");
// 授权yCRV给stYCRV质押合约
IERC20(YCRV).forceApprove(STYCRV, ycrvAmount);
// 质押yCRV到stYCRV
IStYCRV(STYCRV).deposit(ycrvAmount);
emit Swap(amount, ycrvAmount, "cvxCRV", "yCRV");
}
// cvxCRV 兑换为 sdCRV
// @param amount 要兑换的cvxCRV数量
function swapCvxCrvToSdCrv(
uint256 amount,
uint256 minOutput
) external onlyOperator {
require(amount > 0, "Amount must be greater than 0");
// 授权stkcvxCRV给stkcvxCRV合约
IERC20(STKCVXCRV).forceApprove(STKCVXCRV, amount);
// 从stkcvxCRV取回cvxCRV
IStkCVXCRV(STKCVXCRV).withdraw(amount);
// 添加余额检查
require(
IERC20(CVXCRV).balanceOf(address(this)) >= amount,
"Insufficient cvxCRV balance"
);
// 首先授权cvxCRV给cvxCRV/CRV池
IERC20(CVXCRV).forceApprove(CVXCRV_CRV_POOL, amount);
// 将cvxCRV兑换为CRV (0 crv 1 cvxcrv)
uint256 crvAmount = ICurvePool(CVXCRV_CRV_POOL).exchange(
1,
0,
amount,
0
);
// 授权CRV给sdCRV/CRV池
IERC20(CRV).forceApprove(SDCRV_CRV_POOL, crvAmount);
// 将CRV兑换为sdCRV (0 crv 1 sdcrv)
uint256 sdcrvAmount = ICurvePool(SDCRV_CRV_POOL).exchange(
0,
1,
crvAmount,
// todo
minOutput
);
// todo
require(sdcrvAmount > amount, "sdcrvAmount < amount ");
// 授权sdCRV给asdCRV合约
IERC20(SDCRV).forceApprove(ASDCRV, sdcrvAmount);
// 质押sdCRV到asdCRV
IAsdCRV(ASDCRV).deposit(sdcrvAmount, address(this));
emit Swap(amount, sdcrvAmount, "cvxCRV", "sdCRV");
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)
pragma solidity ^0.8.20;
import {IERC20} from "./IERC20.sol";
import {IERC165} from "./IERC165.sol";
/**
* @title IERC1363
* @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
*
* Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
* after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
*/
interface IERC1363 is IERC20, IERC165 {
/*
* Note: the ERC-165 identifier for this interface is 0xb0202a11.
* 0xb0202a11 ===
* bytes4(keccak256('transferAndCall(address,uint256)')) ^
* bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
* bytes4(keccak256('approveAndCall(address,uint256)')) ^
* bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
*/
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferAndCall(address to, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @param data Additional data with no specified format, sent in call to `to`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param from The address which you want to send tokens from.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferFromAndCall(address from, address to, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param from The address which you want to send tokens from.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @param data Additional data with no specified format, sent in call to `to`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
* @param spender The address which will spend the funds.
* @param value The amount of tokens to be spent.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function approveAndCall(address spender, uint256 value) external returns (bool);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
* @param spender The address which will spend the funds.
* @param value The amount of tokens to be spent.
* @param data Additional data with no specified format, sent in call to `spender`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)
pragma solidity ^0.8.20;
import {IERC165} from "../utils/introspection/IERC165.sol";// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../token/ERC20/IERC20.sol";// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
import {IERC1363} from "../../../interfaces/IERC1363.sol";
import {Address} from "../../../utils/Address.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC-20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
/**
* @dev An operation with an ERC-20 token failed.
*/
error SafeERC20FailedOperation(address token);
/**
* @dev Indicates a failed `decreaseAllowance` request.
*/
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*
* IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
* smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
* this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
* that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
* value, non-reverting calls are assumed to be successful.
*
* IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
* smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
* this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
* that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*
* NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function
* only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being
* set here.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no
* code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* Reverts if the returned value is other than `true`.
*/
function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
if (to.code.length == 0) {
safeTransfer(token, to, value);
} else if (!token.transferAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target
* has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* Reverts if the returned value is other than `true`.
*/
function transferFromAndCallRelaxed(
IERC1363 token,
address from,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransferFrom(token, from, to, value);
} else if (!token.transferFromAndCall(from, to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no
* code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.
* Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}
* once without retrying, and relies on the returned value to be true.
*
* Reverts if the returned value is other than `true`.
*/
function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
if (to.code.length == 0) {
forceApprove(token, to, value);
} else if (!token.approveAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
// bubble errors
if iszero(success) {
let ptr := mload(0x40)
returndatacopy(ptr, 0, returndatasize())
revert(ptr, returndatasize())
}
returnSize := returndatasize()
returnValue := mload(0)
}
if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.
*/
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
bool success;
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
returnSize := returndatasize()
returnValue := mload(0)
}
return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)
pragma solidity ^0.8.20;
import {Errors} from "./Errors.sol";
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert Errors.InsufficientBalance(address(this).balance, amount);
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert Errors.FailedCall();
}
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {Errors.FailedCall} error.
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert Errors.InsufficientBalance(address(this).balance, value);
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case
* of an unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {Errors.FailedCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.
*/
function _revert(bytes memory returndata) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly ("memory-safe") {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert Errors.FailedCall();
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of common custom errors used in multiple contracts
*
* IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
* It is recommended to avoid relying on the error API for critical functionality.
*
* _Available since v5.1._
*/
library Errors {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error InsufficientBalance(uint256 balance, uint256 needed);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedCall();
/**
* @dev The deployment failed.
*/
error FailedDeployment();
/**
* @dev A necessary precompile is missing.
*/
error MissingPrecompile(address);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.27;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
contract BaseVault {
using SafeERC20 for IERC20;
// 合约所有者地址
address public constant OWNER = 0xe70e7d5d21487FB116eeE41d0517f070A0727af8;
// 操作者地址
address public constant OPERATOR =
0xF3231342C8CEC8e9BEAfDcb05744f7576eD6aFD0;
// 事件
event TokenTransferred(
address indexed token,
address indexed to,
uint256 amount
);
// 修饰符
modifier onlyOwner() {
require(msg.sender == OWNER, "Only owner");
_;
}
modifier onlyOperator() {
require(msg.sender == OPERATOR || msg.sender == OWNER, "Only operator");
_;
}
// 代币转移功能
function withdrawTokenToOwner(
address token,
uint256 amount
) external onlyOperator {
require(amount > 0, "Amount must be greater than 0");
IERC20(token).safeTransfer(OWNER, amount);
emit TokenTransferred(token, OWNER, amount);
}
function withdrawTokenToOther(
address token,
address to,
uint256 amount
) external onlyOwner {
require(amount > 0, "Amount must be greater than 0");
require(to != address(0), "Invalid recipient address");
IERC20(token).safeTransfer(to, amount);
emit TokenTransferred(token, to, amount);
}
// ETH转账事件
event EthTransferred(address indexed to, uint256 amount);
// 将ETH转给owner
function withdrawEthToOwner() external onlyOwner {
uint256 balance = address(this).balance;
require(balance > 0, "No ETH balance");
(bool success, ) = OWNER.call{value: balance}("");
require(success, "ETH transfer failed");
emit EthTransferred(OWNER, balance);
}
// 将ETH转给指定地址
function withdrawEthToOther(address to) external onlyOwner {
require(to != address(0), "Invalid recipient address");
uint256 balance = address(this).balance;
require(balance > 0, "No ETH balance");
(bool success, ) = to.call{value: balance}("");
require(success, "ETH transfer failed");
emit EthTransferred(to, balance);
}
// 接收ETH的回调函数
receive() external payable {}
}// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.24;
// asdCRV 接口
interface IAsdCRV {
function redeem(
uint256 shares,
address receiver,
address owner
) external returns (uint256 assets);
function convertToShares(uint256 assets) external view returns (uint256);
function deposit(
uint256 assets,
address recipient
) external returns (uint256);
}// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.24;
// Curve池接口
interface ICurvePool {
function exchange(
int128 i,
int128 j,
uint256 dx,
uint256 min_dy
) external returns (uint256);
}// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.24;
// stkcvxCRV接口
interface IStkCVXCRV {
function withdraw(uint256 amount) external;
function stake(uint256 amount, address to) external;
}// SPDX-License-Identifier: GPL-3.0-only
pragma solidity ^0.8.24;
// styCRV接口
interface IStYCRV {
function withdraw(uint256 maxShares) external;
function deposit(uint256 amount) external;
function pricePerShare() external returns (uint256);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
library console {
address constant CONSOLE_ADDRESS =
0x000000000000000000636F6e736F6c652e6c6f67;
function _sendLogPayloadImplementation(bytes memory payload) internal view {
address consoleAddress = CONSOLE_ADDRESS;
/// @solidity memory-safe-assembly
assembly {
pop(
staticcall(
gas(),
consoleAddress,
add(payload, 32),
mload(payload),
0,
0
)
)
}
}
function _castToPure(
function(bytes memory) internal view fnIn
) internal pure returns (function(bytes memory) pure fnOut) {
assembly {
fnOut := fnIn
}
}
function _sendLogPayload(bytes memory payload) internal pure {
_castToPure(_sendLogPayloadImplementation)(payload);
}
function log() internal pure {
_sendLogPayload(abi.encodeWithSignature("log()"));
}
function logInt(int256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
}
function logUint(uint256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
}
function logString(string memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function logBool(bool p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function logAddress(address p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function logBytes(bytes memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
}
function logBytes1(bytes1 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
}
function logBytes2(bytes2 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
}
function logBytes3(bytes3 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
}
function logBytes4(bytes4 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
}
function logBytes5(bytes5 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
}
function logBytes6(bytes6 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
}
function logBytes7(bytes7 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
}
function logBytes8(bytes8 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
}
function logBytes9(bytes9 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
}
function logBytes10(bytes10 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
}
function logBytes11(bytes11 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
}
function logBytes12(bytes12 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
}
function logBytes13(bytes13 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
}
function logBytes14(bytes14 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
}
function logBytes15(bytes15 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
}
function logBytes16(bytes16 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
}
function logBytes17(bytes17 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
}
function logBytes18(bytes18 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
}
function logBytes19(bytes19 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
}
function logBytes20(bytes20 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
}
function logBytes21(bytes21 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
}
function logBytes22(bytes22 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
}
function logBytes23(bytes23 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
}
function logBytes24(bytes24 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
}
function logBytes25(bytes25 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
}
function logBytes26(bytes26 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
}
function logBytes27(bytes27 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
}
function logBytes28(bytes28 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
}
function logBytes29(bytes29 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
}
function logBytes30(bytes30 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
}
function logBytes31(bytes31 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
}
function logBytes32(bytes32 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
}
function log(uint256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
}
function log(string memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function log(bool p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function log(address p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function log(uint256 p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1));
}
function log(uint256 p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1));
}
function log(uint256 p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1));
}
function log(uint256 p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1));
}
function log(string memory p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1));
}
function log(string memory p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
}
function log(string memory p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
}
function log(string memory p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
}
function log(bool p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1));
}
function log(bool p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
}
function log(bool p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
}
function log(bool p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
}
function log(address p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1));
}
function log(address p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
}
function log(address p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
}
function log(address p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
}
function log(uint256 p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2));
}
function log(uint256 p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2));
}
function log(uint256 p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2));
}
function log(uint256 p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2));
}
function log(uint256 p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2));
}
function log(uint256 p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2));
}
function log(uint256 p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2));
}
function log(uint256 p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2));
}
function log(uint256 p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2));
}
function log(string memory p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2));
}
function log(string memory p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
}
function log(string memory p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
}
function log(string memory p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
}
function log(string memory p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2));
}
function log(string memory p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
}
function log(string memory p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
}
function log(string memory p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
}
function log(string memory p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2));
}
function log(string memory p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
}
function log(string memory p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
}
function log(string memory p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
}
function log(bool p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2));
}
function log(bool p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2));
}
function log(bool p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2));
}
function log(bool p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2));
}
function log(bool p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2));
}
function log(bool p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
}
function log(bool p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
}
function log(bool p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
}
function log(bool p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2));
}
function log(bool p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
}
function log(bool p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
}
function log(bool p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
}
function log(bool p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2));
}
function log(bool p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
}
function log(bool p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
}
function log(bool p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
}
function log(address p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2));
}
function log(address p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2));
}
function log(address p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2));
}
function log(address p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2));
}
function log(address p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2));
}
function log(address p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
}
function log(address p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
}
function log(address p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
}
function log(address p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2));
}
function log(address p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
}
function log(address p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
}
function log(address p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
}
function log(address p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2));
}
function log(address p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
}
function log(address p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
}
function log(address p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {
_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 pure {
_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 pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {
_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 pure {
_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 pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {
_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 pure {
_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 pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {
_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 pure {
_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 pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {
_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 pure {
_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 pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {
_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 pure {
_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 pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {
_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 pure {
_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 pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
}
}{
"evmVersion": "paris",
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"inputAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outputAmount","type":"uint256"},{"indexed":false,"internalType":"string","name":"inputTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"outputTokenName","type":"string"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferred","type":"event"},{"inputs":[],"name":"ASDCRV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CRV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CVXCRV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CVXCRV_CRV_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SDCRV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SDCRV_CRV_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STKCVXCRV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STYCRV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YCRV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YCRV_CRV_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapCvxCrvToSdCrv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapCvxCrvToYCrv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapSdCrvToCvxCrv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapSdCrvToYCrv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapYCrvToCvxCrv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"yCrvAmount","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapYCrvToSdCrv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawEthToOther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEthToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokenToOther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokenToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052348015600f57600080fd5b506144a18061001f6000396000f3fe6080604052600436106101395760003560e01c80638dc58f88116100ab578063b2fb56661161006f578063b2fb5666146103d5578063b88f7e71146103fe578063c09a166214610429578063cd561cb514610454578063e95b09011461047f578063f16e2aa7146104a857610140565b80638dc58f8814610304578063945c91421461032d578063983d273714610358578063a011b8f114610383578063ac74f62d146103ac57610140565b80633a70df2a116100fd5780633a70df2a1461021a57806343d4f09a1461023157806356a6338f1461025c5780637320a123146102855780637e34e654146102b057806382331138146102d957610140565b8063010d0b67146101455780630e11a5b214610170578063117803e31461019b578063207094be146101c657806323797ff0146101ef57610140565b3661014057005b600080fd5b34801561015157600080fd5b5061015a6104d1565b6040516101679190613643565b60405180910390f35b34801561017c57600080fd5b506101856104e9565b6040516101929190613643565b60405180910390f35b3480156101a757600080fd5b506101b0610501565b6040516101bd9190613643565b60405180910390f35b3480156101d257600080fd5b506101ed60048036038101906101e89190613699565b610519565b005b3480156101fb57600080fd5b50610204610bc4565b6040516102119190613643565b60405180910390f35b34801561022657600080fd5b5061022f610bdc565b005b34801561023d57600080fd5b50610246610dcc565b6040516102539190613643565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190613705565b610de4565b005b34801561029157600080fd5b5061029a610faf565b6040516102a79190613643565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190613699565b610fc7565b005b3480156102e557600080fd5b506102ee611587565b6040516102fb9190613643565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190613699565b61159f565b005b34801561033957600080fd5b50610342611ba0565b60405161034f9190613643565b60405180910390f35b34801561036457600080fd5b5061036d611bb8565b60405161037a9190613643565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613699565b611bd0565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613699565b6121c7565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613745565b61285a565b005b34801561040a57600080fd5b50610413612a23565b6040516104209190613643565b60405180910390f35b34801561043557600080fd5b5061043e612a3b565b60405161044b9190613643565b60405180910390f35b34801561046057600080fd5b50610469612a53565b6040516104769190613643565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190613699565b612a6b565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190613798565b61304e565b005b7399f5acc8ec2da2bc0771c32814eff52b712de1e581565b73971add32ea87f10bd192671630be3be8a11b862381565b73e70e7d5d21487fb116eee41d0517f070a0727af881565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806105a6575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6105e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105dc90613822565b60405180910390fd5b60008211610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f9061388e565b60405180910390fd5b60007327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b81526004016020604051808303816000875af115801561068b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106af91906138c3565b9050600081670de0b6b3a7640000856106c8919061391f565b6106d29190613990565b90506107277327b5739e22ad9033bcbf192059122d163b60349d827327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040161077491906139d0565b600060405180830381600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050508373fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107f49190613643565b602060405180830381865afa158015610811573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083591906138c3565b1015610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90613a37565b60405180910390fd5b6108c97399f5acc8ec2da2bc0771c32814eff52b712de1e58573fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007399f5acc8ec2da2bc0771c32814eff52b712de1e5905060008173ffffffffffffffffffffffffffffffffffffffff16633df02124600160008960006040518563ffffffff1660e01b81526004016109269493929190613b15565b6020604051808303816000875af1158015610945573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096991906138c3565b90506109be73ca0253a98d16e9c1e3614cafda19318ee69772d08273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073ca0253a98d16e9c1e3614cafda19318ee69772d073ffffffffffffffffffffffffffffffffffffffff16633df0212460006001858a6040518563ffffffff1660e01b8152600401610a159493929190613b5a565b6020604051808303816000875af1158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906138c3565b9050868111610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390613beb565b60405180910390fd5b610aef7343e54c2e7b3e294de3a155785f52ab49d87b99228273d1b5651e55d4ceed36251c61c50c889b36f6abb573ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff16636e553f6582306040518363ffffffff1660e01b8152600401610b3e929190613c0b565b6020604051808303816000875af1158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906138c3565b507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec58782604051610bb3929190613ccc565b60405180910390a150505050505050565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa781565b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613d67565b60405180910390fd5b600047905060008111610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90613dd3565b60405180910390fd5b600073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff1682604051610ce090613e24565b60006040518083038185875af1925050503d8060008114610d1d576040519150601f19603f3d011682016040523d82523d6000602084013e610d22565b606091505b5050905080610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d90613e85565b60405180910390fd5b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff167fcec1f18c3ab8ddaaa107a1591e3c369667eec613626611a8deaedef43069fcdd83604051610dc091906139d0565b60405180910390a25050565b73fcc5c47be19d06bf83eb04298b026f81069ff65b81565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e71575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790613822565b60405180910390fd5b60008111610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea9061388e565b60405180910390fd5b610f3273e70e7d5d21487fb116eee41d0517f070a0727af8828473ffffffffffffffffffffffffffffffffffffffff166133959092919063ffffffff16565b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f9c8515990fd8c61431c4ac8db9b81475f90c292a1dda77731e56c22e64fc764383604051610fa391906139d0565b60405180910390a35050565b7343e54c2e7b3e294de3a155785f52ab49d87b992281565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611054575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613822565b60405180910390fd5b600082116110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd9061388e565b60405180910390fd5b60007343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff1663c6e6f592846040518263ffffffff1660e01b815260040161112591906139d0565b602060405180830381865afa158015611142573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116691906138c3565b90506111bb7343e54c2e7b3e294de3a155785f52ab49d87b9922827343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff1663ba0876528330306040518463ffffffff1660e01b815260040161120e93929190613ea5565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125191906138c3565b90506112a673ca0253a98d16e9c1e3614cafda19318ee69772d08273d1b5651e55d4ceed36251c61c50c889b36f6abb573ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073ca0253a98d16e9c1e3614cafda19318ee69772d073ffffffffffffffffffffffffffffffffffffffff16633df02124600160008560006040518563ffffffff1660e01b81526004016112fe9493929190613b15565b6020604051808303816000875af115801561131d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134191906138c3565b90506113967399f5acc8ec2da2bc0771c32814eff52b712de1e58273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007399f5acc8ec2da2bc0771c32814eff52b712de1e573ffffffffffffffffffffffffffffffffffffffff16633df021246000600185896040518563ffffffff1660e01b81526004016113ed9493929190613b5a565b6020604051808303816000875af115801561140c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143091906138c3565b9050858111611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90613f28565b60405180910390fd5b6114c77327b5739e22ad9033bcbf192059122d163b60349d8273fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b815260040161151491906139d0565b600060405180830381600087803b15801561152e57600080fd5b505af1158015611542573d6000803e3d6000fd5b505050507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec58682604051611577929190613f48565b60405180910390a1505050505050565b73d1b5651e55d4ceed36251c61c50c889b36f6abb581565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061162c575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290613822565b60405180910390fd5b600082116116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a59061388e565b60405180910390fd5b60007343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff1663c6e6f592846040518263ffffffff1660e01b81526004016116fd91906139d0565b602060405180830381865afa15801561171a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e91906138c3565b90506117937343e54c2e7b3e294de3a155785f52ab49d87b9922827343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff1663ba0876528330306040518463ffffffff1660e01b81526004016117e693929190613ea5565b6020604051808303816000875af1158015611805573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182991906138c3565b905061187e73ca0253a98d16e9c1e3614cafda19318ee69772d08273d1b5651e55d4ceed36251c61c50c889b36f6abb573ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073ca0253a98d16e9c1e3614cafda19318ee69772d073ffffffffffffffffffffffffffffffffffffffff16633df02124600160008560006040518563ffffffff1660e01b81526004016118d69493929190613b15565b6020604051808303816000875af11580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191991906138c3565b905061196e73971add32ea87f10bd192671630be3be8a11b86238273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073971add32ea87f10bd192671630be3be8a11b862373ffffffffffffffffffffffffffffffffffffffff16633df021246000600185896040518563ffffffff1660e01b81526004016119c59493929190613b5a565b6020604051808303816000875af11580156119e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0891906138c3565b9050611a496040518060400160405280600c81526020017f637678637276416d6f756e74000000000000000000000000000000000000000081525082613414565b858111611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613fe3565b60405180910390fd5b611ade73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434827362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff16637acb775782306040518363ffffffff1660e01b8152600401611b2d929190613c0b565b600060405180830381600087803b158015611b4757600080fd5b505af1158015611b5b573d6000803e3d6000fd5b505050507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec58682604051611b9092919061404f565b60405180910390a1505050505050565b73d533a949740bb3306d119cc777fa900ba034cd5281565b73f3231342c8cec8e9beafdcb05744f7576ed6afd081565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611c5d575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390613822565b60405180910390fd5b60008211611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd69061388e565b60405180910390fd5b611d3273aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe4348373aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611d7f91906139d0565b600060405180830381600087803b158015611d9957600080fd5b505af1158015611dad573d6000803e3d6000fd5b50505050817362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611dff9190613643565b602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4091906138c3565b1015611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e78906140ea565b60405180910390fd5b611ed473971add32ea87f10bd192671630be3be8a11b8623837362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073971add32ea87f10bd192671630be3be8a11b862373ffffffffffffffffffffffffffffffffffffffff16633df02124600160008660006040518563ffffffff1660e01b8152600401611f2c9493929190613b15565b6020604051808303816000875af1158015611f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6f91906138c3565b9050611fc473ca0253a98d16e9c1e3614cafda19318ee69772d08273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073ca0253a98d16e9c1e3614cafda19318ee69772d073ffffffffffffffffffffffffffffffffffffffff16633df021246000600185876040518563ffffffff1660e01b815260040161201b9493929190613b5a565b6020604051808303816000875af115801561203a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205e91906138c3565b90508381116120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990614156565b60405180910390fd5b6120f57343e54c2e7b3e294de3a155785f52ab49d87b99228273d1b5651e55d4ceed36251c61c50c889b36f6abb573ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff16636e553f6582306040518363ffffffff1660e01b8152600401612144929190613c0b565b6020604051808303816000875af1158015612163573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218791906138c3565b507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec584826040516121b9929190614176565b60405180910390a150505050565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612254575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90613822565b60405180910390fd5b600082116122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd9061388e565b60405180910390fd5b60007327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235d91906138c3565b9050600081670de0b6b3a764000085612376919061391f565b6123809190613990565b90506123d57327b5739e22ad9033bcbf192059122d163b60349d827327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040161242291906139d0565b600060405180830381600087803b15801561243c57600080fd5b505af1158015612450573d6000803e3d6000fd5b505050508373fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016124a29190613643565b602060405180830381865afa1580156124bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e391906138c3565b1015612524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b90613a37565b60405180910390fd5b6125777399f5acc8ec2da2bc0771c32814eff52b712de1e58573fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007399f5acc8ec2da2bc0771c32814eff52b712de1e573ffffffffffffffffffffffffffffffffffffffff16633df02124600160008860006040518563ffffffff1660e01b81526004016125cf9493929190613b15565b6020604051808303816000875af11580156125ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261291906138c3565b905061266773971add32ea87f10bd192671630be3be8a11b86238273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073971add32ea87f10bd192671630be3be8a11b862373ffffffffffffffffffffffffffffffffffffffff16633df021246000600185896040518563ffffffff1660e01b81526004016126be9493929190613b5a565b6020604051808303816000875af11580156126dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270191906138c3565b9050858111612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90614211565b60405180910390fd5b61279873aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434827362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff16637acb775782306040518363ffffffff1660e01b81526004016127e7929190613c0b565b600060405180830381600087803b15801561280157600080fd5b505af1158015612815573d6000803e3d6000fd5b505050507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec5868260405161284a929190614231565b60405180910390a1505050505050565b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d390613d67565b60405180910390fd5b6000811161291f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129169061388e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361298e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612985906142cc565b60405180910390fd5b6129b982828573ffffffffffffffffffffffffffffffffffffffff166133959092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9c8515990fd8c61431c4ac8db9b81475f90c292a1dda77731e56c22e64fc764383604051612a1691906139d0565b60405180910390a3505050565b7327b5739e22ad9033bcbf192059122d163b60349d81565b73ca0253a98d16e9c1e3614cafda19318ee69772d081565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43481565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612af8575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e90613822565b60405180910390fd5b60008211612b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b719061388e565b60405180910390fd5b612bcd73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe4348373aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401612c1a91906139d0565b600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b50505050817362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c9a9190613643565b602060405180830381865afa158015612cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdb91906138c3565b1015612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d13906140ea565b60405180910390fd5b612d6f73971add32ea87f10bd192671630be3be8a11b8623837362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073971add32ea87f10bd192671630be3be8a11b862373ffffffffffffffffffffffffffffffffffffffff16633df02124600160008660006040518563ffffffff1660e01b8152600401612dc79493929190613b15565b6020604051808303816000875af1158015612de6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0a91906138c3565b9050612e5f7399f5acc8ec2da2bc0771c32814eff52b712de1e58273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007399f5acc8ec2da2bc0771c32814eff52b712de1e573ffffffffffffffffffffffffffffffffffffffff16633df021246000600185876040518563ffffffff1660e01b8152600401612eb69493929190613b5a565b6020604051808303816000875af1158015612ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef991906138c3565b9050838111612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3490613f28565b60405180910390fd5b612f907327b5739e22ad9033bcbf192059122d163b60349d8273fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b8152600401612fdd91906139d0565b600060405180830381600087803b158015612ff757600080fd5b505af115801561300b573d6000803e3d6000fd5b505050507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec584826040516130409291906142ec565b60405180910390a150505050565b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c790613d67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361313f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613136906142cc565b60405180910390fd5b600047905060008111613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e90613dd3565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516131ad90613e24565b60006040518083038185875af1925050503d80600081146131ea576040519150601f19603f3d011682016040523d82523d6000602084013e6131ef565b606091505b5050905080613233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322a90613e85565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167fcec1f18c3ab8ddaaa107a1591e3c369667eec613626611a8deaedef43069fcdd8360405161327991906139d0565b60405180910390a2505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040516024016132b792919061433b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061330584826134b0565b61338f57613384848573ffffffffffffffffffffffffffffffffffffffff1663095ea7b386600060405160240161333d929190614364565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613510565b61338e8482613510565b5b50505050565b61340f838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016133c892919061433b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613510565b505050565b6134ac828260405160240161342a92919061440c565b6040516020818303038152906040527fb60e72cc000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506135b2565b5050565b6000806000806020600086516020880160008a5af192503d915060005190508280156135055750600082146134e85760018114613504565b60008673ffffffffffffffffffffffffffffffffffffffff163b115b5b935050505092915050565b600080602060008451602086016000885af180613533576040513d6000823e3d81fd5b3d92506000519150506000821461354e57600181141561356a565b60008473ffffffffffffffffffffffffffffffffffffffff163b145b156135ac57836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016135a39190613643565b60405180910390fd5b50505050565b6135c9816135c16135cc6135ed565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6135f8819050919050565b61360061443c565b565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061362d82613602565b9050919050565b61363d81613622565b82525050565b60006020820190506136586000830184613634565b92915050565b600080fd5b6000819050919050565b61367681613663565b811461368157600080fd5b50565b6000813590506136938161366d565b92915050565b600080604083850312156136b0576136af61365e565b5b60006136be85828601613684565b92505060206136cf85828601613684565b9150509250929050565b6136e281613622565b81146136ed57600080fd5b50565b6000813590506136ff816136d9565b92915050565b6000806040838503121561371c5761371b61365e565b5b600061372a858286016136f0565b925050602061373b85828601613684565b9150509250929050565b60008060006060848603121561375e5761375d61365e565b5b600061376c868287016136f0565b935050602061377d868287016136f0565b925050604061378e86828701613684565b9150509250925092565b6000602082840312156137ae576137ad61365e565b5b60006137bc848285016136f0565b91505092915050565b600082825260208201905092915050565b7f4f6e6c79206f70657261746f7200000000000000000000000000000000000000600082015250565b600061380c600d836137c5565b9150613817826137d6565b602082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000613878601d836137c5565b915061388382613842565b602082019050919050565b600060208201905081810360008301526138a78161386b565b9050919050565b6000815190506138bd8161366d565b92915050565b6000602082840312156138d9576138d861365e565b5b60006138e7848285016138ae565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392a82613663565b915061393583613663565b925082820261394381613663565b9150828204841483151761395a576139596138f0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061399b82613663565b91506139a683613663565b9250826139b6576139b5613961565b5b828204905092915050565b6139ca81613663565b82525050565b60006020820190506139e560008301846139c1565b92915050565b7f496e73756666696369656e7420794352562062616c616e636500000000000000600082015250565b6000613a216019836137c5565b9150613a2c826139eb565b602082019050919050565b60006020820190508181036000830152613a5081613a14565b9050919050565b6000819050919050565b600081600f0b9050919050565b6000819050919050565b6000613a93613a8e613a8984613a57565b613a6e565b613a61565b9050919050565b613aa381613a78565b82525050565b6000819050919050565b6000613ace613ac9613ac484613aa9565b613a6e565b613a61565b9050919050565b613ade81613ab3565b82525050565b6000613aff613afa613af584613aa9565b613a6e565b613663565b9050919050565b613b0f81613ae4565b82525050565b6000608082019050613b2a6000830187613a9a565b613b376020830186613ad5565b613b4460408301856139c1565b613b516060830184613b06565b95945050505050565b6000608082019050613b6f6000830187613ad5565b613b7c6020830186613a9a565b613b8960408301856139c1565b613b9660608301846139c1565b95945050505050565b7f7364637276416d6f756e74203c20616d6f756e74000000000000000000000000600082015250565b6000613bd56014836137c5565b9150613be082613b9f565b602082019050919050565b60006020820190508181036000830152613c0481613bc8565b9050919050565b6000604082019050613c2060008301856139c1565b613c2d6020830184613634565b9392505050565b7f7943525600000000000000000000000000000000000000000000000000000000600082015250565b6000613c6a6004836137c5565b9150613c7582613c34565b602082019050919050565b7f7364435256000000000000000000000000000000000000000000000000000000600082015250565b6000613cb66005836137c5565b9150613cc182613c80565b602082019050919050565b6000608082019050613ce160008301856139c1565b613cee60208301846139c1565b8181036040830152613cff81613c5d565b90508181036060830152613d1281613ca9565b90509392505050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000613d51600a836137c5565b9150613d5c82613d1b565b602082019050919050565b60006020820190508181036000830152613d8081613d44565b9050919050565b7f4e6f204554482062616c616e6365000000000000000000000000000000000000600082015250565b6000613dbd600e836137c5565b9150613dc882613d87565b602082019050919050565b60006020820190508181036000830152613dec81613db0565b9050919050565b600081905092915050565b50565b6000613e0e600083613df3565b9150613e1982613dfe565b600082019050919050565b6000613e2f82613e01565b9150819050919050565b7f455448207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613e6f6013836137c5565b9150613e7a82613e39565b602082019050919050565b60006020820190508181036000830152613e9e81613e62565b9050919050565b6000606082019050613eba60008301866139c1565b613ec76020830185613634565b613ed46040830184613634565b949350505050565b7f79637276416d6f756e74203c20616d6f756e7420000000000000000000000000600082015250565b6000613f126014836137c5565b9150613f1d82613edc565b602082019050919050565b60006020820190508181036000830152613f4181613f05565b9050919050565b6000608082019050613f5d60008301856139c1565b613f6a60208301846139c1565b8181036040830152613f7b81613ca9565b90508181036060830152613f8e81613c5d565b90509392505050565b7f63767820637276416d6f756e74203c20616d6f756e7420000000000000000000600082015250565b6000613fcd6017836137c5565b9150613fd882613f97565b602082019050919050565b60006020820190508181036000830152613ffc81613fc0565b9050919050565b7f6376784352560000000000000000000000000000000000000000000000000000600082015250565b60006140396006836137c5565b915061404482614003565b602082019050919050565b600060808201905061406460008301856139c1565b61407160208301846139c1565b818103604083015261408281613ca9565b905081810360608301526140958161402c565b90509392505050565b7f496e73756666696369656e74206376784352562062616c616e63650000000000600082015250565b60006140d4601b836137c5565b91506140df8261409e565b602082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f7364637276416d6f756e74203c20616d6f756e74200000000000000000000000600082015250565b60006141406015836137c5565b915061414b8261410a565b602082019050919050565b6000602082019050818103600083015261416f81614133565b9050919050565b600060808201905061418b60008301856139c1565b61419860208301846139c1565b81810360408301526141a98161402c565b905081810360608301526141bc81613ca9565b90509392505050565b7f637678637276416d6f756e74203c20616d6f756e740000000000000000000000600082015250565b60006141fb6015836137c5565b9150614206826141c5565b602082019050919050565b6000602082019050818103600083015261422a816141ee565b9050919050565b600060808201905061424660008301856139c1565b61425360208301846139c1565b818103604083015261426481613c5d565b905081810360608301526142778161402c565b90509392505050565b7f496e76616c696420726563697069656e74206164647265737300000000000000600082015250565b60006142b66019836137c5565b91506142c182614280565b602082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b600060808201905061430160008301856139c1565b61430e60208301846139c1565b818103604083015261431f8161402c565b9050818103606083015261433281613c5d565b90509392505050565b60006040820190506143506000830185613634565b61435d60208301846139c1565b9392505050565b60006040820190506143796000830185613634565b6143866020830184613b06565b9392505050565b600081519050919050565b60005b838110156143b657808201518184015260208101905061439b565b60008484015250505050565b6000601f19601f8301169050919050565b60006143de8261438d565b6143e881856137c5565b93506143f8818560208601614398565b614401816143c2565b840191505092915050565b6000604082019050818103600083015261442681856143d3565b905061443560208301846139c1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfea2646970667358221220628327b7806c4087083bf96906c1d5284e4d6ac886250e9d33bbe05c4244f1cf64736f6c634300081b0033
Deployed Bytecode
0x6080604052600436106101395760003560e01c80638dc58f88116100ab578063b2fb56661161006f578063b2fb5666146103d5578063b88f7e71146103fe578063c09a166214610429578063cd561cb514610454578063e95b09011461047f578063f16e2aa7146104a857610140565b80638dc58f8814610304578063945c91421461032d578063983d273714610358578063a011b8f114610383578063ac74f62d146103ac57610140565b80633a70df2a116100fd5780633a70df2a1461021a57806343d4f09a1461023157806356a6338f1461025c5780637320a123146102855780637e34e654146102b057806382331138146102d957610140565b8063010d0b67146101455780630e11a5b214610170578063117803e31461019b578063207094be146101c657806323797ff0146101ef57610140565b3661014057005b600080fd5b34801561015157600080fd5b5061015a6104d1565b6040516101679190613643565b60405180910390f35b34801561017c57600080fd5b506101856104e9565b6040516101929190613643565b60405180910390f35b3480156101a757600080fd5b506101b0610501565b6040516101bd9190613643565b60405180910390f35b3480156101d257600080fd5b506101ed60048036038101906101e89190613699565b610519565b005b3480156101fb57600080fd5b50610204610bc4565b6040516102119190613643565b60405180910390f35b34801561022657600080fd5b5061022f610bdc565b005b34801561023d57600080fd5b50610246610dcc565b6040516102539190613643565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190613705565b610de4565b005b34801561029157600080fd5b5061029a610faf565b6040516102a79190613643565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190613699565b610fc7565b005b3480156102e557600080fd5b506102ee611587565b6040516102fb9190613643565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190613699565b61159f565b005b34801561033957600080fd5b50610342611ba0565b60405161034f9190613643565b60405180910390f35b34801561036457600080fd5b5061036d611bb8565b60405161037a9190613643565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613699565b611bd0565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613699565b6121c7565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613745565b61285a565b005b34801561040a57600080fd5b50610413612a23565b6040516104209190613643565b60405180910390f35b34801561043557600080fd5b5061043e612a3b565b60405161044b9190613643565b60405180910390f35b34801561046057600080fd5b50610469612a53565b6040516104769190613643565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190613699565b612a6b565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190613798565b61304e565b005b7399f5acc8ec2da2bc0771c32814eff52b712de1e581565b73971add32ea87f10bd192671630be3be8a11b862381565b73e70e7d5d21487fb116eee41d0517f070a0727af881565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806105a6575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6105e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105dc90613822565b60405180910390fd5b60008211610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f9061388e565b60405180910390fd5b60007327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b81526004016020604051808303816000875af115801561068b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106af91906138c3565b9050600081670de0b6b3a7640000856106c8919061391f565b6106d29190613990565b90506107277327b5739e22ad9033bcbf192059122d163b60349d827327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040161077491906139d0565b600060405180830381600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050508373fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107f49190613643565b602060405180830381865afa158015610811573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083591906138c3565b1015610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90613a37565b60405180910390fd5b6108c97399f5acc8ec2da2bc0771c32814eff52b712de1e58573fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007399f5acc8ec2da2bc0771c32814eff52b712de1e5905060008173ffffffffffffffffffffffffffffffffffffffff16633df02124600160008960006040518563ffffffff1660e01b81526004016109269493929190613b15565b6020604051808303816000875af1158015610945573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096991906138c3565b90506109be73ca0253a98d16e9c1e3614cafda19318ee69772d08273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073ca0253a98d16e9c1e3614cafda19318ee69772d073ffffffffffffffffffffffffffffffffffffffff16633df0212460006001858a6040518563ffffffff1660e01b8152600401610a159493929190613b5a565b6020604051808303816000875af1158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906138c3565b9050868111610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390613beb565b60405180910390fd5b610aef7343e54c2e7b3e294de3a155785f52ab49d87b99228273d1b5651e55d4ceed36251c61c50c889b36f6abb573ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff16636e553f6582306040518363ffffffff1660e01b8152600401610b3e929190613c0b565b6020604051808303816000875af1158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906138c3565b507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec58782604051610bb3929190613ccc565b60405180910390a150505050505050565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa781565b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613d67565b60405180910390fd5b600047905060008111610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90613dd3565b60405180910390fd5b600073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff1682604051610ce090613e24565b60006040518083038185875af1925050503d8060008114610d1d576040519150601f19603f3d011682016040523d82523d6000602084013e610d22565b606091505b5050905080610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d90613e85565b60405180910390fd5b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff167fcec1f18c3ab8ddaaa107a1591e3c369667eec613626611a8deaedef43069fcdd83604051610dc091906139d0565b60405180910390a25050565b73fcc5c47be19d06bf83eb04298b026f81069ff65b81565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e71575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790613822565b60405180910390fd5b60008111610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea9061388e565b60405180910390fd5b610f3273e70e7d5d21487fb116eee41d0517f070a0727af8828473ffffffffffffffffffffffffffffffffffffffff166133959092919063ffffffff16565b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f9c8515990fd8c61431c4ac8db9b81475f90c292a1dda77731e56c22e64fc764383604051610fa391906139d0565b60405180910390a35050565b7343e54c2e7b3e294de3a155785f52ab49d87b992281565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611054575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613822565b60405180910390fd5b600082116110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd9061388e565b60405180910390fd5b60007343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff1663c6e6f592846040518263ffffffff1660e01b815260040161112591906139d0565b602060405180830381865afa158015611142573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116691906138c3565b90506111bb7343e54c2e7b3e294de3a155785f52ab49d87b9922827343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff1663ba0876528330306040518463ffffffff1660e01b815260040161120e93929190613ea5565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125191906138c3565b90506112a673ca0253a98d16e9c1e3614cafda19318ee69772d08273d1b5651e55d4ceed36251c61c50c889b36f6abb573ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073ca0253a98d16e9c1e3614cafda19318ee69772d073ffffffffffffffffffffffffffffffffffffffff16633df02124600160008560006040518563ffffffff1660e01b81526004016112fe9493929190613b15565b6020604051808303816000875af115801561131d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134191906138c3565b90506113967399f5acc8ec2da2bc0771c32814eff52b712de1e58273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007399f5acc8ec2da2bc0771c32814eff52b712de1e573ffffffffffffffffffffffffffffffffffffffff16633df021246000600185896040518563ffffffff1660e01b81526004016113ed9493929190613b5a565b6020604051808303816000875af115801561140c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143091906138c3565b9050858111611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90613f28565b60405180910390fd5b6114c77327b5739e22ad9033bcbf192059122d163b60349d8273fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b815260040161151491906139d0565b600060405180830381600087803b15801561152e57600080fd5b505af1158015611542573d6000803e3d6000fd5b505050507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec58682604051611577929190613f48565b60405180910390a1505050505050565b73d1b5651e55d4ceed36251c61c50c889b36f6abb581565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061162c575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290613822565b60405180910390fd5b600082116116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a59061388e565b60405180910390fd5b60007343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff1663c6e6f592846040518263ffffffff1660e01b81526004016116fd91906139d0565b602060405180830381865afa15801561171a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e91906138c3565b90506117937343e54c2e7b3e294de3a155785f52ab49d87b9922827343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff1663ba0876528330306040518463ffffffff1660e01b81526004016117e693929190613ea5565b6020604051808303816000875af1158015611805573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182991906138c3565b905061187e73ca0253a98d16e9c1e3614cafda19318ee69772d08273d1b5651e55d4ceed36251c61c50c889b36f6abb573ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073ca0253a98d16e9c1e3614cafda19318ee69772d073ffffffffffffffffffffffffffffffffffffffff16633df02124600160008560006040518563ffffffff1660e01b81526004016118d69493929190613b15565b6020604051808303816000875af11580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191991906138c3565b905061196e73971add32ea87f10bd192671630be3be8a11b86238273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073971add32ea87f10bd192671630be3be8a11b862373ffffffffffffffffffffffffffffffffffffffff16633df021246000600185896040518563ffffffff1660e01b81526004016119c59493929190613b5a565b6020604051808303816000875af11580156119e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0891906138c3565b9050611a496040518060400160405280600c81526020017f637678637276416d6f756e74000000000000000000000000000000000000000081525082613414565b858111611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613fe3565b60405180910390fd5b611ade73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434827362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff16637acb775782306040518363ffffffff1660e01b8152600401611b2d929190613c0b565b600060405180830381600087803b158015611b4757600080fd5b505af1158015611b5b573d6000803e3d6000fd5b505050507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec58682604051611b9092919061404f565b60405180910390a1505050505050565b73d533a949740bb3306d119cc777fa900ba034cd5281565b73f3231342c8cec8e9beafdcb05744f7576ed6afd081565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611c5d575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390613822565b60405180910390fd5b60008211611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd69061388e565b60405180910390fd5b611d3273aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe4348373aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611d7f91906139d0565b600060405180830381600087803b158015611d9957600080fd5b505af1158015611dad573d6000803e3d6000fd5b50505050817362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611dff9190613643565b602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4091906138c3565b1015611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e78906140ea565b60405180910390fd5b611ed473971add32ea87f10bd192671630be3be8a11b8623837362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073971add32ea87f10bd192671630be3be8a11b862373ffffffffffffffffffffffffffffffffffffffff16633df02124600160008660006040518563ffffffff1660e01b8152600401611f2c9493929190613b15565b6020604051808303816000875af1158015611f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6f91906138c3565b9050611fc473ca0253a98d16e9c1e3614cafda19318ee69772d08273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073ca0253a98d16e9c1e3614cafda19318ee69772d073ffffffffffffffffffffffffffffffffffffffff16633df021246000600185876040518563ffffffff1660e01b815260040161201b9493929190613b5a565b6020604051808303816000875af115801561203a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205e91906138c3565b90508381116120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990614156565b60405180910390fd5b6120f57343e54c2e7b3e294de3a155785f52ab49d87b99228273d1b5651e55d4ceed36251c61c50c889b36f6abb573ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7343e54c2e7b3e294de3a155785f52ab49d87b992273ffffffffffffffffffffffffffffffffffffffff16636e553f6582306040518363ffffffff1660e01b8152600401612144929190613c0b565b6020604051808303816000875af1158015612163573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218791906138c3565b507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec584826040516121b9929190614176565b60405180910390a150505050565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612254575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90613822565b60405180910390fd5b600082116122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd9061388e565b60405180910390fd5b60007327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff166399530b066040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235d91906138c3565b9050600081670de0b6b3a764000085612376919061391f565b6123809190613990565b90506123d57327b5739e22ad9033bcbf192059122d163b60349d827327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040161242291906139d0565b600060405180830381600087803b15801561243c57600080fd5b505af1158015612450573d6000803e3d6000fd5b505050508373fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016124a29190613643565b602060405180830381865afa1580156124bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e391906138c3565b1015612524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b90613a37565b60405180910390fd5b6125777399f5acc8ec2da2bc0771c32814eff52b712de1e58573fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007399f5acc8ec2da2bc0771c32814eff52b712de1e573ffffffffffffffffffffffffffffffffffffffff16633df02124600160008860006040518563ffffffff1660e01b81526004016125cf9493929190613b15565b6020604051808303816000875af11580156125ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261291906138c3565b905061266773971add32ea87f10bd192671630be3be8a11b86238273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073971add32ea87f10bd192671630be3be8a11b862373ffffffffffffffffffffffffffffffffffffffff16633df021246000600185896040518563ffffffff1660e01b81526004016126be9493929190613b5a565b6020604051808303816000875af11580156126dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270191906138c3565b9050858111612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90614211565b60405180910390fd5b61279873aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434827362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff16637acb775782306040518363ffffffff1660e01b81526004016127e7929190613c0b565b600060405180830381600087803b15801561280157600080fd5b505af1158015612815573d6000803e3d6000fd5b505050507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec5868260405161284a929190614231565b60405180910390a1505050505050565b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d390613d67565b60405180910390fd5b6000811161291f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129169061388e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361298e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612985906142cc565b60405180910390fd5b6129b982828573ffffffffffffffffffffffffffffffffffffffff166133959092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9c8515990fd8c61431c4ac8db9b81475f90c292a1dda77731e56c22e64fc764383604051612a1691906139d0565b60405180910390a3505050565b7327b5739e22ad9033bcbf192059122d163b60349d81565b73ca0253a98d16e9c1e3614cafda19318ee69772d081565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43481565b73f3231342c8cec8e9beafdcb05744f7576ed6afd073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612af8575073e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e90613822565b60405180910390fd5b60008211612b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b719061388e565b60405180910390fd5b612bcd73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe4348373aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b73aa0c3f5f7dfd688c6e646f66cd2a6b66acdbe43473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401612c1a91906139d0565b600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b50505050817362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c9a9190613643565b602060405180830381865afa158015612cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdb91906138c3565b1015612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d13906140ea565b60405180910390fd5b612d6f73971add32ea87f10bd192671630be3be8a11b8623837362b9c7356a2dc64a1969e19c23e4f579f9810aa773ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b600073971add32ea87f10bd192671630be3be8a11b862373ffffffffffffffffffffffffffffffffffffffff16633df02124600160008660006040518563ffffffff1660e01b8152600401612dc79493929190613b15565b6020604051808303816000875af1158015612de6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0a91906138c3565b9050612e5f7399f5acc8ec2da2bc0771c32814eff52b712de1e58273d533a949740bb3306d119cc777fa900ba034cd5273ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b60007399f5acc8ec2da2bc0771c32814eff52b712de1e573ffffffffffffffffffffffffffffffffffffffff16633df021246000600185876040518563ffffffff1660e01b8152600401612eb69493929190613b5a565b6020604051808303816000875af1158015612ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef991906138c3565b9050838111612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3490613f28565b60405180910390fd5b612f907327b5739e22ad9033bcbf192059122d163b60349d8273fcc5c47be19d06bf83eb04298b026f81069ff65b73ffffffffffffffffffffffffffffffffffffffff166132869092919063ffffffff16565b7327b5739e22ad9033bcbf192059122d163b60349d73ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b8152600401612fdd91906139d0565b600060405180830381600087803b158015612ff757600080fd5b505af115801561300b573d6000803e3d6000fd5b505050507f57a627bba97118b6f73a75f8fbd45741e5322e4371d51ca0589e3ade6c6c3ec584826040516130409291906142ec565b60405180910390a150505050565b73e70e7d5d21487fb116eee41d0517f070a0727af873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c790613d67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361313f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613136906142cc565b60405180910390fd5b600047905060008111613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e90613dd3565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516131ad90613e24565b60006040518083038185875af1925050503d80600081146131ea576040519150601f19603f3d011682016040523d82523d6000602084013e6131ef565b606091505b5050905080613233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322a90613e85565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167fcec1f18c3ab8ddaaa107a1591e3c369667eec613626611a8deaedef43069fcdd8360405161327991906139d0565b60405180910390a2505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040516024016132b792919061433b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061330584826134b0565b61338f57613384848573ffffffffffffffffffffffffffffffffffffffff1663095ea7b386600060405160240161333d929190614364565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613510565b61338e8482613510565b5b50505050565b61340f838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016133c892919061433b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613510565b505050565b6134ac828260405160240161342a92919061440c565b6040516020818303038152906040527fb60e72cc000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506135b2565b5050565b6000806000806020600086516020880160008a5af192503d915060005190508280156135055750600082146134e85760018114613504565b60008673ffffffffffffffffffffffffffffffffffffffff163b115b5b935050505092915050565b600080602060008451602086016000885af180613533576040513d6000823e3d81fd5b3d92506000519150506000821461354e57600181141561356a565b60008473ffffffffffffffffffffffffffffffffffffffff163b145b156135ac57836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016135a39190613643565b60405180910390fd5b50505050565b6135c9816135c16135cc6135ed565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6135f8819050919050565b61360061443c565b565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061362d82613602565b9050919050565b61363d81613622565b82525050565b60006020820190506136586000830184613634565b92915050565b600080fd5b6000819050919050565b61367681613663565b811461368157600080fd5b50565b6000813590506136938161366d565b92915050565b600080604083850312156136b0576136af61365e565b5b60006136be85828601613684565b92505060206136cf85828601613684565b9150509250929050565b6136e281613622565b81146136ed57600080fd5b50565b6000813590506136ff816136d9565b92915050565b6000806040838503121561371c5761371b61365e565b5b600061372a858286016136f0565b925050602061373b85828601613684565b9150509250929050565b60008060006060848603121561375e5761375d61365e565b5b600061376c868287016136f0565b935050602061377d868287016136f0565b925050604061378e86828701613684565b9150509250925092565b6000602082840312156137ae576137ad61365e565b5b60006137bc848285016136f0565b91505092915050565b600082825260208201905092915050565b7f4f6e6c79206f70657261746f7200000000000000000000000000000000000000600082015250565b600061380c600d836137c5565b9150613817826137d6565b602082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000613878601d836137c5565b915061388382613842565b602082019050919050565b600060208201905081810360008301526138a78161386b565b9050919050565b6000815190506138bd8161366d565b92915050565b6000602082840312156138d9576138d861365e565b5b60006138e7848285016138ae565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392a82613663565b915061393583613663565b925082820261394381613663565b9150828204841483151761395a576139596138f0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061399b82613663565b91506139a683613663565b9250826139b6576139b5613961565b5b828204905092915050565b6139ca81613663565b82525050565b60006020820190506139e560008301846139c1565b92915050565b7f496e73756666696369656e7420794352562062616c616e636500000000000000600082015250565b6000613a216019836137c5565b9150613a2c826139eb565b602082019050919050565b60006020820190508181036000830152613a5081613a14565b9050919050565b6000819050919050565b600081600f0b9050919050565b6000819050919050565b6000613a93613a8e613a8984613a57565b613a6e565b613a61565b9050919050565b613aa381613a78565b82525050565b6000819050919050565b6000613ace613ac9613ac484613aa9565b613a6e565b613a61565b9050919050565b613ade81613ab3565b82525050565b6000613aff613afa613af584613aa9565b613a6e565b613663565b9050919050565b613b0f81613ae4565b82525050565b6000608082019050613b2a6000830187613a9a565b613b376020830186613ad5565b613b4460408301856139c1565b613b516060830184613b06565b95945050505050565b6000608082019050613b6f6000830187613ad5565b613b7c6020830186613a9a565b613b8960408301856139c1565b613b9660608301846139c1565b95945050505050565b7f7364637276416d6f756e74203c20616d6f756e74000000000000000000000000600082015250565b6000613bd56014836137c5565b9150613be082613b9f565b602082019050919050565b60006020820190508181036000830152613c0481613bc8565b9050919050565b6000604082019050613c2060008301856139c1565b613c2d6020830184613634565b9392505050565b7f7943525600000000000000000000000000000000000000000000000000000000600082015250565b6000613c6a6004836137c5565b9150613c7582613c34565b602082019050919050565b7f7364435256000000000000000000000000000000000000000000000000000000600082015250565b6000613cb66005836137c5565b9150613cc182613c80565b602082019050919050565b6000608082019050613ce160008301856139c1565b613cee60208301846139c1565b8181036040830152613cff81613c5d565b90508181036060830152613d1281613ca9565b90509392505050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000613d51600a836137c5565b9150613d5c82613d1b565b602082019050919050565b60006020820190508181036000830152613d8081613d44565b9050919050565b7f4e6f204554482062616c616e6365000000000000000000000000000000000000600082015250565b6000613dbd600e836137c5565b9150613dc882613d87565b602082019050919050565b60006020820190508181036000830152613dec81613db0565b9050919050565b600081905092915050565b50565b6000613e0e600083613df3565b9150613e1982613dfe565b600082019050919050565b6000613e2f82613e01565b9150819050919050565b7f455448207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613e6f6013836137c5565b9150613e7a82613e39565b602082019050919050565b60006020820190508181036000830152613e9e81613e62565b9050919050565b6000606082019050613eba60008301866139c1565b613ec76020830185613634565b613ed46040830184613634565b949350505050565b7f79637276416d6f756e74203c20616d6f756e7420000000000000000000000000600082015250565b6000613f126014836137c5565b9150613f1d82613edc565b602082019050919050565b60006020820190508181036000830152613f4181613f05565b9050919050565b6000608082019050613f5d60008301856139c1565b613f6a60208301846139c1565b8181036040830152613f7b81613ca9565b90508181036060830152613f8e81613c5d565b90509392505050565b7f63767820637276416d6f756e74203c20616d6f756e7420000000000000000000600082015250565b6000613fcd6017836137c5565b9150613fd882613f97565b602082019050919050565b60006020820190508181036000830152613ffc81613fc0565b9050919050565b7f6376784352560000000000000000000000000000000000000000000000000000600082015250565b60006140396006836137c5565b915061404482614003565b602082019050919050565b600060808201905061406460008301856139c1565b61407160208301846139c1565b818103604083015261408281613ca9565b905081810360608301526140958161402c565b90509392505050565b7f496e73756666696369656e74206376784352562062616c616e63650000000000600082015250565b60006140d4601b836137c5565b91506140df8261409e565b602082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f7364637276416d6f756e74203c20616d6f756e74200000000000000000000000600082015250565b60006141406015836137c5565b915061414b8261410a565b602082019050919050565b6000602082019050818103600083015261416f81614133565b9050919050565b600060808201905061418b60008301856139c1565b61419860208301846139c1565b81810360408301526141a98161402c565b905081810360608301526141bc81613ca9565b90509392505050565b7f637678637276416d6f756e74203c20616d6f756e740000000000000000000000600082015250565b60006141fb6015836137c5565b9150614206826141c5565b602082019050919050565b6000602082019050818103600083015261422a816141ee565b9050919050565b600060808201905061424660008301856139c1565b61425360208301846139c1565b818103604083015261426481613c5d565b905081810360608301526142778161402c565b90509392505050565b7f496e76616c696420726563697069656e74206164647265737300000000000000600082015250565b60006142b66019836137c5565b91506142c182614280565b602082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b600060808201905061430160008301856139c1565b61430e60208301846139c1565b818103604083015261431f8161402c565b9050818103606083015261433281613c5d565b90509392505050565b60006040820190506143506000830185613634565b61435d60208301846139c1565b9392505050565b60006040820190506143796000830185613634565b6143866020830184613b06565b9392505050565b600081519050919050565b60005b838110156143b657808201518184015260208101905061439b565b60008484015250505050565b6000601f19601f8301169050919050565b60006143de8261438d565b6143e881856137c5565b93506143f8818560208601614398565b614401816143c2565b840191505092915050565b6000604082019050818103600083015261442681856143d3565b905061443560208301846139c1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfea2646970667358221220628327b7806c4087083bf96906c1d5284e4d6ac886250e9d33bbe05c4244f1cf64736f6c634300081b0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.