Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 32 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Faa S Rew... | 11646668 | 1328 days ago | IN | 0 ETH | 0.30959241 | ||||
Create Faa S Rew... | 11637235 | 1330 days ago | IN | 0 ETH | 0.61222651 | ||||
Create Faa S Rew... | 11611871 | 1334 days ago | IN | 0 ETH | 0.55729554 | ||||
Create Faa S Rew... | 11559770 | 1342 days ago | IN | 0 ETH | 0.45437167 | ||||
Create Faa S Rew... | 11554622 | 1342 days ago | IN | 0 ETH | 0.4845873 | ||||
Create Faa S Rew... | 11529183 | 1346 days ago | IN | 0 ETH | 0.29338368 | ||||
Create Faa S Rew... | 11524998 | 1347 days ago | IN | 0 ETH | 0.21218764 | ||||
Create Faa S Rew... | 11466369 | 1356 days ago | IN | 0 ETH | 0.22814875 | ||||
Create Faa S Rew... | 11466367 | 1356 days ago | IN | 0 ETH | 0.22814059 | ||||
Create Faa S Rew... | 11465848 | 1356 days ago | IN | 0 ETH | 0.26526285 | ||||
Create Faa S Rew... | 11462808 | 1356 days ago | IN | 0 ETH | 0.24321679 | ||||
Create Faa S Rew... | 11439070 | 1360 days ago | IN | 0 ETH | 0.13285762 | ||||
Create Faa S Rew... | 11434655 | 1361 days ago | IN | 0 ETH | 0.5918532 | ||||
Create Faa S Rew... | 11427450 | 1362 days ago | IN | 0 ETH | 0.1914771 | ||||
Create Faa S Rew... | 11411432 | 1364 days ago | IN | 0 ETH | 0.01336137 | ||||
Create Faa S Rew... | 11411432 | 1364 days ago | IN | 0 ETH | 0.01249288 | ||||
Create Faa S Rew... | 11400474 | 1366 days ago | IN | 0 ETH | 0.25182875 | ||||
Create Faa S Rew... | 11399449 | 1366 days ago | IN | 0 ETH | 0.13406061 | ||||
Create Faa S Rew... | 11375818 | 1370 days ago | IN | 0 ETH | 0.31252584 | ||||
Create Faa S Rew... | 11357163 | 1373 days ago | IN | 0 ETH | 0.3170067 | ||||
Create Faa S Rew... | 11355855 | 1373 days ago | IN | 0 ETH | 0.13769477 | ||||
Create Faa S Rew... | 11355710 | 1373 days ago | IN | 0 ETH | 0.09563482 | ||||
Create Faa S Rew... | 11345931 | 1374 days ago | IN | 0 ETH | 0.1258356 | ||||
Create Faa S Rew... | 11345855 | 1374 days ago | IN | 0 ETH | 0.09593901 | ||||
Create Faa S Rew... | 11330840 | 1377 days ago | IN | 0 ETH | 0.2215746 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
FaasPoolProxy
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-22 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; pragma experimental ABIEncoderV2; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value : weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IBPool is IERC20 { function version() external view returns(uint); function swapExactAmountIn(address, uint, address, uint, uint) external returns (uint, uint); function swapExactAmountOut(address, uint, address, uint, uint) external returns (uint, uint); function calcInGivenOut(uint, uint, uint, uint, uint, uint) external pure returns (uint); function calcOutGivenIn(uint, uint, uint, uint, uint, uint) external pure returns (uint); function getDenormalizedWeight(address) external view returns (uint); function swapFee() external view returns (uint); function setSwapFee(uint _swapFee) external; function bind(address token, uint balance, uint denorm) external; function rebind(address token, uint balance, uint denorm) external; function finalize( uint _swapFee, uint _initPoolSupply, address[] calldata _bindTokens, uint[] calldata _bindDenorms ) external; function setPublicSwap(bool _publicSwap) external; function setController(address _controller) external; function setExchangeProxy(address _exchangeProxy) external; function getFinalTokens() external view returns (address[] memory tokens); function getTotalDenormalizedWeight() external view returns (uint); function getBalance(address token) external view returns (uint); function joinPool(uint poolAmountOut, uint[] calldata maxAmountsIn) external; function joinPoolFor(address account, uint rewardAmountOut, uint[] calldata maxAmountsIn) external; function joinswapPoolAmountOut(address tokenIn, uint poolAmountOut, uint maxAmountIn) external returns (uint tokenAmountIn); function exitPool(uint poolAmountIn, uint[] calldata minAmountsOut) external; function exitswapPoolAmountIn(address tokenOut, uint poolAmountIn, uint minAmountOut) external returns (uint tokenAmountOut); function exitswapExternAmountOut(address tokenOut, uint tokenAmountOut, uint maxPoolAmountIn) external returns (uint poolAmountIn); function joinswapExternAmountIn( address tokenIn, uint tokenAmountIn, uint minPoolAmountOut ) external returns (uint poolAmountOut); function finalizeRewardFundInfo(address _rewardFund, uint _unstakingFrozenTime) external; function addRewardPool(IERC20 _rewardToken, uint256 _startBlock, uint256 _endRewardBlock, uint256 _rewardPerBlock, uint256 _lockRewardPercent, uint256 _startVestingBlock, uint256 _endVestingBlock) external; } interface IFreeFromUpTo { function freeFromUpTo(address from, uint256 value) external returns (uint256 freed); } interface IBFactory { function newBPool() external returns (IBPool); } interface IValueLiquidRegistry { function getBestPoolsWithLimit(address, address, uint) external view returns (address[] memory); } interface IWETH { function deposit() external payable; function allowance(address owner, address spender) external view returns (uint256); function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; function balanceOf(address account) external view returns (uint256); } // Token pool of arbitrary ERC20 token. // This is owned and used by a parent FaaSPool. contract FaaSRewardFund { using SafeERC20 for IERC20; using SafeMath for uint256; event NewAdmin(address indexed newAdmin); event NewPendingAdmin(address indexed newPendingAdmin); event NewDelay(uint indexed newDelay); event CancelTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta); event ExecuteTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta); event QueueTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta); uint public constant GRACE_PERIOD = 14 days; uint public constant MINIMUM_DELAY = 1 days; uint public constant MAXIMUM_DELAY = 30 days; bool private _initialized; address public faasPool; address public admin; address public pendingAdmin; uint public delay; bool public admin_initialized; mapping(bytes32 => bool) public queuedTransactions; constructor() public { admin_initialized = false; _initialized = false; } function initialized(address admin_, uint delay_, address _faasPool) public { require(_initialized == false, "Timelock::constructor: Delay must exceed minimum delay."); require(delay_ >= MINIMUM_DELAY, "Timelock::constructor: Delay must exceed minimum delay."); require(delay_ <= MAXIMUM_DELAY, "Timelock::constructor: Delay must not exceed maximum delay."); admin = admin_; faasPool = _faasPool; delay = delay_; _initialized = true; } // XXX: function() external payable { } receive() external payable {} function setDelay(uint delay_) public { require(msg.sender == address(this), "Timelock::setDelay: Call must come from Timelock."); require(delay_ >= MINIMUM_DELAY, "Timelock::setDelay: Delay must exceed minimum delay."); require(delay_ <= MAXIMUM_DELAY, "Timelock::setDelay: Delay must not exceed maximum delay."); delay = delay_; emit NewDelay(delay); } function acceptAdmin() public { require(msg.sender == pendingAdmin, "Timelock::acceptAdmin: Call must come from pendingAdmin."); admin = msg.sender; pendingAdmin = address(0); emit NewAdmin(admin); } function setPendingAdmin(address pendingAdmin_) public { // allows one time setting of admin for deployment purposes if (admin_initialized) { require(msg.sender == address(this), "Timelock::setPendingAdmin: Call must come from Timelock."); } else { require(msg.sender == admin, "Timelock::setPendingAdmin: First call must come from admin."); admin_initialized = true; } pendingAdmin = pendingAdmin_; emit NewPendingAdmin(pendingAdmin); } function queueTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public returns (bytes32) { require(msg.sender == admin, "Timelock::queueTransaction: Call must come from admin."); require(eta >= getBlockTimestamp().add(delay), "Timelock::queueTransaction: Estimated execution block must satisfy delay."); bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta)); queuedTransactions[txHash] = true; emit QueueTransaction(txHash, target, value, signature, data, eta); return txHash; } function cancelTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public { require(msg.sender == admin, "Timelock::cancelTransaction: Call must come from admin."); bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta)); queuedTransactions[txHash] = false; emit CancelTransaction(txHash, target, value, signature, data, eta); } function executeTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public payable returns (bytes memory) { require(msg.sender == admin, "Timelock::executeTransaction: Call must come from admin."); bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta)); require(queuedTransactions[txHash], "Timelock::executeTransaction: Transaction hasn't been queued."); require(getBlockTimestamp() >= eta, "Timelock::executeTransaction: Transaction hasn't surpassed time lock."); require(getBlockTimestamp() <= eta.add(GRACE_PERIOD), "Timelock::executeTransaction: Transaction is stale."); queuedTransactions[txHash] = false; bytes memory callData; if (bytes(signature).length == 0) { callData = data; } else { callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data); } // solium-disable-next-line security/no-call-value (bool success, bytes memory returnData) = target.call{value : value}(callData); require(success, "Timelock::executeTransaction: Transaction execution reverted."); emit ExecuteTransaction(txHash, target, value, signature, data, eta); return returnData; } function getBlockTimestamp() internal view returns (uint) { return block.timestamp; } function balance(IERC20 _token) public view returns (uint256) { return _token.balanceOf(address(this)); } function safeTransfer(IERC20 _token, address _to, uint256 _value) external { require(msg.sender == faasPool, "!faasPool"); uint256 _tokenBal = balance(_token); _token.safeTransfer(_to, _tokenBal > _value ? _value : _tokenBal); } /** * This function allows governance to take unsupported tokens out of the contract. This is in an effort to make someone whole, should they seriously mess up. * There is no guarantee governance will vote to return these. It also allows for removal of airdropped tokens. */ function governanceRecoverUnsupported(IERC20 _token, uint _amount, address _to) external { require(msg.sender == address(this), "!timelock"); if ((address(_token) == address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE))) { (bool xfer,) = _to.call{value : _amount}(""); require(xfer, "ERR_ETH_FAILED"); } else { _token.safeTransfer(_to, _amount); } } } contract FaasPoolProxy { using SafeMath for uint256; using SafeERC20 for IERC20; using Address for address; IFreeFromUpTo public constant chi = IFreeFromUpTo(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c); modifier discountCHI(uint8 flag) { if ((flag & 0x1) == 0) { _; } else { uint256 gasStart = gasleft(); _; uint256 gasSpent = 21000 + gasStart - gasleft() + 16 * msg.data.length; chi.freeFromUpTo(msg.sender, (gasSpent + 14154) / 41130); } } IWETH weth; address private constant ETH_ADDRESS = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); address public governance; address public exchangeProxy; constructor(address _weth,address _exchangeProxy) public { weth = IWETH(_weth); governance = tx.origin; exchangeProxy = _exchangeProxy; } struct PoolRewardInfo { IERC20 rewardToken; uint256 startBlock; uint256 endRewardBlock; uint256 rewardPerBlock; uint256 lockRewardPercent; uint256 startVestingBlock; uint256 endVestingBlock; uint unstakingFrozenTime; uint rewardFundAmount; } struct PoolInfo { IBFactory factory; address[] tokens; uint[] balances; uint[] denorms; uint swapFee; uint initPoolSupply; } receive() external payable {} function setExchangeProxy(address _exchangeProxy) external { require(msg.sender == governance, "!governance"); exchangeProxy = _exchangeProxy; } function createInternal( PoolInfo calldata poolInfo ) internal returns (IBPool pool) { address[] memory tokens = poolInfo.tokens; require(tokens.length == poolInfo.balances.length, "ERR_LENGTH_MISMATCH"); require(tokens.length == poolInfo.denorms.length, "ERR_LENGTH_MISMATCH"); pool = poolInfo.factory.newBPool(); bool containsETH = false; for (uint i = 0; i < tokens.length; i++) { if (transferFromAllTo(tokens[i], poolInfo.balances[i], address(pool))) { containsETH = true; tokens[i] = address(weth); } } require(msg.value == 0 || containsETH, "!invalid payable"); pool.finalize(poolInfo.swapFee, poolInfo.initPoolSupply, tokens, poolInfo.denorms); } function createFaaSReward( PoolInfo calldata poolInfo, PoolRewardInfo calldata poolRewardInfo, uint8 flag ) payable external discountCHI(flag) returns (IBPool pool) { pool = createInternal(poolInfo); { FaaSRewardFund faasRewardFund = new FaaSRewardFund(); pool.finalizeRewardFundInfo(address(faasRewardFund), poolRewardInfo.unstakingFrozenTime); pool.addRewardPool( poolRewardInfo.rewardToken, poolRewardInfo.startBlock, poolRewardInfo.endRewardBlock, poolRewardInfo.rewardPerBlock, poolRewardInfo.lockRewardPercent, poolRewardInfo.startVestingBlock, poolRewardInfo.endVestingBlock); transferFromAllTo(address(poolRewardInfo.rewardToken), poolRewardInfo.rewardFundAmount, address(faasRewardFund)); faasRewardFund.initialized(msg.sender, poolRewardInfo.unstakingFrozenTime + 1 days, address(pool)); pool.setExchangeProxy(exchangeProxy); pool.setController(address(faasRewardFund)); } uint lpAmount = pool.balanceOf(address(this)); if (lpAmount > 0) { IERC20(pool).safeTransfer(msg.sender, lpAmount); } } function isETH(IERC20 token) internal pure returns (bool) { return (address(token) == ETH_ADDRESS); } function transferFromAllTo(address token, uint amount, address to) internal returns (bool containsETH) { if (isETH(IERC20(token))) { require(amount == msg.value, "!invalid amount"); weth.deposit{value : amount}(); weth.transfer(to, amount); containsETH = true; } else { IERC20(token).safeTransferFrom(msg.sender, to, amount); } return containsETH; } function transferFromAllAndApprove(address token, uint amount, address spender) internal returns (bool containsETH) { if (isETH(IERC20(token))) { require(amount == msg.value, "!invalid amount"); weth.deposit{value : amount}(); if (weth.allowance(address(this), spender) > 0) { IERC20(address(weth)).safeApprove(address(spender), 0); } IERC20(address(weth)).safeApprove(spender, amount); containsETH = true; } else { IERC20(token).safeTransferFrom(msg.sender, address(this), amount); if (IERC20(token).allowance(address(this), spender) > 0) { IERC20(token).safeApprove(spender, 0); } IERC20(token).safeApprove(spender, amount); } return containsETH; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_exchangeProxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"chi","outputs":[{"internalType":"contract IFreeFromUpTo","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"contract IBFactory","name":"factory","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256[]","name":"denorms","type":"uint256[]"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"initPoolSupply","type":"uint256"}],"internalType":"struct FaasPoolProxy.PoolInfo","name":"poolInfo","type":"tuple"},{"components":[{"internalType":"contract IERC20","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endRewardBlock","type":"uint256"},{"internalType":"uint256","name":"rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"lockRewardPercent","type":"uint256"},{"internalType":"uint256","name":"startVestingBlock","type":"uint256"},{"internalType":"uint256","name":"endVestingBlock","type":"uint256"},{"internalType":"uint256","name":"unstakingFrozenTime","type":"uint256"},{"internalType":"uint256","name":"rewardFundAmount","type":"uint256"}],"internalType":"struct FaasPoolProxy.PoolRewardInfo","name":"poolRewardInfo","type":"tuple"},{"internalType":"uint8","name":"flag","type":"uint8"}],"name":"createFaaSReward","outputs":[{"internalType":"contract IBPool","name":"pool","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"exchangeProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_exchangeProxy","type":"address"}],"name":"setExchangeProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620037dd380380620037dd833981016040819052620000349162000070565b600080546001600160a01b039384166001600160a01b0319918216179091556001805482163217905560028054929093169116179055620000c7565b6000806040838503121562000083578182fd5b82516200009081620000ae565b6020840151909250620000a381620000ae565b809150509250929050565b6001600160a01b0381168114620000c457600080fd5b50565b61370680620000d76000396000f3fe60806040526004361061005e5760003560e01c8063c92aecc411610043578063c92aecc4146100aa578063e653bf3a146100bf578063f6a687e2146100e157610065565b80635aa6e6751461006a578063c7c30be11461009557610065565b3661006557005b600080fd5b34801561007657600080fd5b5061007f6100f4565b60405161008c9190611349565b60405180910390f35b3480156100a157600080fd5b5061007f610110565b3480156100b657600080fd5b5061007f61012c565b3480156100cb57600080fd5b506100df6100da36600461120e565b61013e565b005b61007f6100ef366004611266565b6101df565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6d4946c0e9f43f4dee607b0ef1fa1c81565b60015473ffffffffffffffffffffffffffffffffffffffff163314610198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f9061148a565b60405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081600181166105da576101f385610a90565b9150600060405161020390611201565b604051809103906000f08015801561021f573d6000803e3d6000fd5b506040517fc06b6f1d00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff84169063c06b6f1d9061027b90849060e08a01359060040161136a565b600060405180830381600087803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff84169050636d142e5b6102d7602088018861120e565b8760200135886040013589606001358a608001358b60a001358c60c001356040518863ffffffff1660e01b815260040161031797969594939291906113f1565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50610367925061035b915050602087018761120e565b86610100013583610d83565b506040517ffc80a1c700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063fc80a1c7906103c79033906201518060e08b013501908890600401611390565b600060405180830381600087803b1580156103e157600080fd5b505af11580156103f5573d6000803e3d6000fd5b50506002546040517fe653bf3a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816945063e653bf3a935061044f921690600401611349565b600060405180830381600087803b15801561046957600080fd5b505af115801561047d573d6000803e3d6000fd5b50506040517f92eefe9b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861692506392eefe9b91506104d3908490600401611349565b600060405180830381600087803b1580156104ed57600080fd5b505af1158015610501573d6000803e3d6000fd5b50506040517f70a082310000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff861692506370a08231915061055b903090600401611349565b60206040518083038186803b15801561057357600080fd5b505afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab91906112fb565b905080156105d4576105d473ffffffffffffffffffffffffffffffffffffffff84163383610f2a565b50610a88565b60005a90506105e886610a90565b925060006040516105f890611201565b604051809103906000f080158015610614573d6000803e3d6000fd5b506040517fc06b6f1d00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff85169063c06b6f1d9061067090849060e08b01359060040161136a565b600060405180830381600087803b15801561068a57600080fd5b505af115801561069e573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff85169050636d142e5b6106cc602089018961120e565b886020013589604001358a606001358b608001358c60a001358d60c001356040518863ffffffff1660e01b815260040161070c97969594939291906113f1565b600060405180830381600087803b15801561072657600080fd5b505af115801561073a573d6000803e3d6000fd5b5061075c9250610750915050602088018861120e565b87610100013583610d83565b506040517ffc80a1c700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063fc80a1c7906107bc9033906201518060e08c013501908990600401611390565b600060405180830381600087803b1580156107d657600080fd5b505af11580156107ea573d6000803e3d6000fd5b50506002546040517fe653bf3a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808916945063e653bf3a9350610844921690600401611349565b600060405180830381600087803b15801561085e57600080fd5b505af1158015610872573d6000803e3d6000fd5b50506040517f92eefe9b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871692506392eefe9b91506108c8908490600401611349565b600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b50506040517f70a082310000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff871692506370a082319150610950903090600401611349565b60206040518083038186803b15801561096857600080fd5b505afa15801561097c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a091906112fb565b905080156109c9576109c973ffffffffffffffffffffffffffffffffffffffff85163383610f2a565b506000601036025a8361520801030190506d4946c0e9f43f4dee607b0ef1fa1c73ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a0aa8461374a0181610a1457fe5b046040518363ffffffff1660e01b8152600401610a3292919061136a565b602060405180830381600087803b158015610a4c57600080fd5b505af1158015610a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8491906112fb565b5050505b509392505050565b60006060610aa1602084018461169c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929350610ae392505050604084018461169c565b9050815114610b1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f906114c1565b610b2b606084018461169c565b9050815114610b66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f906114c1565b610b73602084018461120e565b73ffffffffffffffffffffffffffffffffffffffff1663d556c5dc6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bba57600080fd5b505af1158015610bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf2919061124a565b91506000805b8251811015610cb557610c3f838281518110610c1057fe5b6020026020010151868060400190610c28919061169c565b84818110610c3257fe5b9050602002013586610d83565b15610cad5760005483516001935073ffffffffffffffffffffffffffffffffffffffff90911690849083908110610c7257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b600101610bf8565b50341580610cc05750805b610cf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f906114f8565b73ffffffffffffffffffffffffffffffffffffffff831663650e872c608086013560a087013585610d2a60608a018a61169c565b6040518663ffffffff1660e01b8152600401610d4a9594939291906115fa565b600060405180830381600087803b158015610d6457600080fd5b505af1158015610d78573d6000803e3d6000fd5b505050505050919050565b6000610d8e84610fd0565b15610f0157348314610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f9061152f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e3457600080fd5b505af1158015610e48573d6000803e3d6000fd5b50506000546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116935063a9059cbb9250610ea591508590879060040161136a565b602060405180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef7919061122a565b5060019050610f23565b610f2373ffffffffffffffffffffffffffffffffffffffff8516338486611002565b9392505050565b610fcb8363a9059cbb60e01b8484604051602401610f4992919061136a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611029565b505050565b73ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b611023846323b872dd60e01b858585604051602401610f49939291906113c0565b50505050565b606061108b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166110df9092919063ffffffff16565b805190915015610fcb57808060200190518101906110a9919061122a565b610fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f9061159d565b60606110ee84846000856110f6565b949350505050565b6060611101856111fb565b611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f90611566565b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051611161919061132d565b60006040518083038185875af1925050503d806000811461119e576040519150601f19603f3d011682016040523d82523d6000602084013e6111a3565b606091505b509150915081156111b75791506110ee9050565b8051156111c75780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f9190611439565b3b151590565b611f778061175a83390190565b60006020828403121561121f578081fd5b8135610f2381611734565b60006020828403121561123b578081fd5b81518015158114610f23578182fd5b60006020828403121561125b578081fd5b8151610f2381611734565b600080600083850361016081121561127c578283fd5b843567ffffffffffffffff811115611292578384fd5b850160c081880312156112a3578384fd5b93506101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156112d5578283fd5b5060208401915061014084013560ff811681146112f0578182fd5b809150509250925092565b60006020828403121561130c578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000825161133f818460208701611708565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff93841681526020810192909252909116604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff979097168752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b6000602082528251806020840152611458816040850160208701611708565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6020808252600b908201527f21676f7665726e616e6365000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604082015260600190565b60208082526010908201527f21696e76616c69642070617961626c6500000000000000000000000000000000604082015260600190565b6020808252600f908201527f21696e76616c696420616d6f756e740000000000000000000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b600060808201878352602087818501526080604085015281875180845260a0860191508289019350845b8181101561164757611637838651611313565b9383019391830191600101611624565b505084810360608601528581527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115611680578384fd5b8186029250828783830137909101019081529695505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126116d0578283fd5b83018035915067ffffffffffffffff8211156116ea578283fd5b602090810192508102360382131561170157600080fd5b9250929050565b60005b8381101561172357818101518382015260200161170b565b838111156110235750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461175657600080fd5b5056fe608060405234801561001057600080fd5b506004805460ff19908116909155600080549091169055611f41806100366000396000f3fe6080604052600436106101485760003560e01c80637d645fab116100c0578063e177246e11610074578063f2b0653711610059578063f2b065371461032e578063f851a4401461034e578063fc80a1c7146103635761014f565b8063e177246e146102ee578063e3d670d71461030e5761014f565b8063c1a287e2116100a5578063c1a287e2146102a4578063d1660f99146102b9578063dfb4b724146102d95761014f565b80637d645fab1461027a578063b1b43ae51461028f5761014f565b80634dd18bf511610117578063591fcdfe116100fc578063591fcdfe146102235780636a42b8f8146102435780636fc1f57e146102585761014f565b80634dd18bf5146101e357806354575af4146102035761014f565b80630825f38f146101545780630e18b6811461017d57806326782247146101945780633a66f901146101b65761014f565b3661014f57005b600080fd5b61016761016236600461144f565b610383565b60405161017491906116de565b60405180910390f35b34801561018957600080fd5b50610192610682565b005b3480156101a057600080fd5b506101a961074e565b6040516101749190611629565b3480156101c257600080fd5b506101d66101d136600461144f565b61076a565b60405161017491906116d5565b3480156101ef57600080fd5b506101926101fe3660046113f2565b6108f3565b34801561020f57600080fd5b5061019261021e36600461154c565b610a2e565b34801561022f57600080fd5b5061019261023e36600461144f565b610b68565b34801561024f57600080fd5b506101d6610c9c565b34801561026457600080fd5b5061026d610ca2565b60405161017491906116ca565b34801561028657600080fd5b506101d6610cab565b34801561029b57600080fd5b506101d6610cb2565b3480156102b057600080fd5b506101d6610cb9565b3480156102c557600080fd5b506101926102d436600461150c565b610cc0565b3480156102e557600080fd5b506101a9610d5a565b3480156102fa57600080fd5b506101926103093660046114f4565b610d7b565b34801561031a57600080fd5b506101d66103293660046113f2565b610e61565b34801561033a57600080fd5b5061026d6103493660046114f4565b610f0c565b34801561035a57600080fd5b506101a9610f21565b34801561036f57600080fd5b5061019261037e36600461140e565b610f3d565b60015460609073ffffffffffffffffffffffffffffffffffffffff1633146103e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906116f1565b60405180910390fd5b600086868686866040516020016103fb959493929190611670565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600590935291205490915060ff1661047a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611a93565b82610483611098565b10156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906118f9565b6104c8836212750061109c565b6104d0611098565b1115610508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611865565b600081815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055845160609061054c575083610578565b8580519060200120856040516020016105669291906115c2565b60405160208183030381529060405290505b600060608973ffffffffffffffffffffffffffffffffffffffff1689846040516105a2919061160a565b60006040518083038185875af1925050503d80600081146105df576040519150601f19603f3d011682016040523d82523d6000602084013e6105e4565b606091505b509150915081610620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611c75565b8973ffffffffffffffffffffffffffffffffffffffff16847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b60405161066d9493929190611e7d565b60405180910390a39998505050505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146106d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611b27565b60018054337fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179182905560028054909116905560405173ffffffffffffffffffffffffffffffffffffffff909116907f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c90600090a2565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015460009073ffffffffffffffffffffffffffffffffffffffff1633146107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611c18565b6107d26003546107cc611098565b9061109c565b82101561080b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611d09565b60008686868686604051602001610826959493929190611670565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000818152600590925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055915073ffffffffffffffffffffffffffffffffffffffff88169082907f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f906108e1908a908a908a908a90611e7d565b60405180910390a39695505050505050565b60045460ff161561093c57333014610937576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611bbb565b6109b9565b60015473ffffffffffffffffffffffffffffffffffffffff16331461098d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906119d9565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b333014610a67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611e46565b73ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610b425760008173ffffffffffffffffffffffffffffffffffffffff1683604051610abf90611626565b60006040518083038185875af1925050503d8060008114610afc576040519150601f19603f3d011682016040523d82523d6000602084013e610b01565b606091505b5050905080610b3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611b84565b50610b63565b610b6373ffffffffffffffffffffffffffffffffffffffff841682846110e2565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610bb9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d79061174e565b60008585858585604051602001610bd4959493929190611670565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000818152600590925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055915073ffffffffffffffffffffffffffffffffffffffff87169082907f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8790610c8c908990899089908990611e7d565b60405180910390a3505050505050565b60035481565b60045460ff1681565b62278d0081565b6201518081565b6212750081565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314610d16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611af0565b6000610d2184610e61565b9050610d5483838311610d345782610d36565b835b73ffffffffffffffffffffffffffffffffffffffff871691906110e2565b50505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1681565b333014610db4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611de9565b62015180811015610df1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d79061197c565b62278d00811115610e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611a36565b600381905560405181907f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90600090a250565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190610eb6903090600401611629565b60206040518083038186803b158015610ece57600080fd5b505afa158015610ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f069190611560565b92915050565b60056020526000908152604090205460ff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60005460ff1615610f7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611808565b62015180821015610fb7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611808565b62278d00821115610ff4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906117ab565b6001805473ffffffffffffffffffffffffffffffffffffffff9485167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116178155600080546003949094557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0092909416610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9093169290921716179055565b4290565b6000828201838110156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906118c2565b9392505050565b610b638363a9059cbb60e01b848460405160240161110192919061164a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260606111e0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112349092919063ffffffff16565b805190915015610b6357808060200190518101906111fe91906114d4565b610b63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611d8c565b6060611243848460008561124b565b949350505050565b606061125685611350565b61128c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611cd2565b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516112b6919061160a565b60006040518083038185875af1925050503d80600081146112f3576040519150601f19603f3d011682016040523d82523d6000602084013e6112f8565b606091505b5091509150811561130c5791506112439050565b80511561131c5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d791906116de565b3b151590565b600082601f830112611366578081fd5b813567ffffffffffffffff8082111561137d578283fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011682010181811083821117156113bb578485fd5b6040528281529250828483016020018610156113d657600080fd5b8260208601602083013760006020848301015250505092915050565b600060208284031215611403578081fd5b81356110db81611ee6565b600080600060608486031215611422578182fd5b833561142d81611ee6565b925060208401359150604084013561144481611ee6565b809150509250925092565b600080600080600060a08688031215611466578081fd5b853561147181611ee6565b945060208601359350604086013567ffffffffffffffff80821115611494578283fd5b6114a089838a01611356565b945060608801359150808211156114b5578283fd5b506114c288828901611356565b95989497509295608001359392505050565b6000602082840312156114e5578081fd5b815180151581146110db578182fd5b600060208284031215611505578081fd5b5035919050565b600080600060608486031215611520578283fd5b833561152b81611ee6565b9250602084013561153b81611ee6565b929592945050506040919091013590565b600080600060608486031215611422578283fd5b600060208284031215611571578081fd5b5051919050565b60008151808452611590816020860160208601611eba565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60007fffffffff000000000000000000000000000000000000000000000000000000008416825282516115fc816004850160208701611eba565b919091016004019392505050565b6000825161161c818460208701611eba565b9190910192915050565b90565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8716825285602083015260a060408301526116a560a0830186611578565b82810360608401526116b78186611578565b9150508260808301529695505050505050565b901515815260200190565b90815260200190565b6000602082526110db6020830184611578565b60208082526038908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20436160408201527f6c6c206d75737420636f6d652066726f6d2061646d696e2e0000000000000000606082015260800190565b60208082526037908201527f54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2043616c60408201527f6c206d75737420636f6d652066726f6d2061646d696e2e000000000000000000606082015260800190565b6020808252603b908201527f54696d656c6f636b3a3a636f6e7374727563746f723a2044656c6179206d757360408201527f74206e6f7420657863656564206d6178696d756d2064656c61792e0000000000606082015260800190565b60208082526037908201527f54696d656c6f636b3a3a636f6e7374727563746f723a2044656c6179206d757360408201527f7420657863656564206d696e696d756d2064656c61792e000000000000000000606082015260800190565b60208082526033908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260408201527f616e73616374696f6e206973207374616c652e00000000000000000000000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526045908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260408201527f616e73616374696f6e206861736e2774207375727061737365642074696d652060608201527f6c6f636b2e000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526034908201527f54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206560408201527f7863656564206d696e696d756d2064656c61792e000000000000000000000000606082015260800190565b6020808252603b908201527f54696d656c6f636b3a3a73657450656e64696e6741646d696e3a20466972737460408201527f2063616c6c206d75737420636f6d652066726f6d2061646d696e2e0000000000606082015260800190565b60208082526038908201527f54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e60408201527f6f7420657863656564206d6178696d756d2064656c61792e0000000000000000606082015260800190565b6020808252603d908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260408201527f616e73616374696f6e206861736e2774206265656e207175657565642e000000606082015260800190565b60208082526009908201527f2166616173506f6f6c0000000000000000000000000000000000000000000000604082015260600190565b60208082526038908201527f54696d656c6f636b3a3a61636365707441646d696e3a2043616c6c206d75737460408201527f20636f6d652066726f6d2070656e64696e6741646d696e2e0000000000000000606082015260800190565b6020808252600e908201527f4552525f4554485f4641494c4544000000000000000000000000000000000000604082015260600190565b60208082526038908201527f54696d656c6f636b3a3a73657450656e64696e6741646d696e3a2043616c6c2060408201527f6d75737420636f6d652066726f6d2054696d656c6f636b2e0000000000000000606082015260800190565b60208082526036908201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a2043616c6c60408201527f206d75737420636f6d652066726f6d2061646d696e2e00000000000000000000606082015260800190565b6020808252603d908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260408201527f616e73616374696f6e20657865637574696f6e2072657665727465642e000000606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526049908201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a204573746960408201527f6d6174656420657865637574696f6e20626c6f636b206d75737420736174697360608201527f66792064656c61792e0000000000000000000000000000000000000000000000608082015260a00190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b60208082526031908201527f54696d656c6f636b3a3a73657444656c61793a2043616c6c206d75737420636f60408201527f6d652066726f6d2054696d656c6f636b2e000000000000000000000000000000606082015260800190565b60208082526009908201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604082015260600190565b600085825260806020830152611e966080830186611578565b8281036040840152611ea88186611578565b91505082606083015295945050505050565b60005b83811015611ed5578181015183820152602001611ebd565b83811115610d545750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114611f0857600080fd5b5056fea2646970667358221220649af48a631493c626ba39e2468d60057c8e5323a0bf63151d2428546c2750d164736f6c634300060c0033a26469706673582212206790d69b7e9b3984e929df8a3657cf588b6cabf532c2ef06968e9222430b80d564736f6c634300060c0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b936525a77ba0529f6c0feab28f8b0ae6c0398c7
Deployed Bytecode
0x60806040526004361061005e5760003560e01c8063c92aecc411610043578063c92aecc4146100aa578063e653bf3a146100bf578063f6a687e2146100e157610065565b80635aa6e6751461006a578063c7c30be11461009557610065565b3661006557005b600080fd5b34801561007657600080fd5b5061007f6100f4565b60405161008c9190611349565b60405180910390f35b3480156100a157600080fd5b5061007f610110565b3480156100b657600080fd5b5061007f61012c565b3480156100cb57600080fd5b506100df6100da36600461120e565b61013e565b005b61007f6100ef366004611266565b6101df565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6d4946c0e9f43f4dee607b0ef1fa1c81565b60015473ffffffffffffffffffffffffffffffffffffffff163314610198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f9061148a565b60405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081600181166105da576101f385610a90565b9150600060405161020390611201565b604051809103906000f08015801561021f573d6000803e3d6000fd5b506040517fc06b6f1d00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff84169063c06b6f1d9061027b90849060e08a01359060040161136a565b600060405180830381600087803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff84169050636d142e5b6102d7602088018861120e565b8760200135886040013589606001358a608001358b60a001358c60c001356040518863ffffffff1660e01b815260040161031797969594939291906113f1565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50610367925061035b915050602087018761120e565b86610100013583610d83565b506040517ffc80a1c700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063fc80a1c7906103c79033906201518060e08b013501908890600401611390565b600060405180830381600087803b1580156103e157600080fd5b505af11580156103f5573d6000803e3d6000fd5b50506002546040517fe653bf3a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816945063e653bf3a935061044f921690600401611349565b600060405180830381600087803b15801561046957600080fd5b505af115801561047d573d6000803e3d6000fd5b50506040517f92eefe9b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861692506392eefe9b91506104d3908490600401611349565b600060405180830381600087803b1580156104ed57600080fd5b505af1158015610501573d6000803e3d6000fd5b50506040517f70a082310000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff861692506370a08231915061055b903090600401611349565b60206040518083038186803b15801561057357600080fd5b505afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab91906112fb565b905080156105d4576105d473ffffffffffffffffffffffffffffffffffffffff84163383610f2a565b50610a88565b60005a90506105e886610a90565b925060006040516105f890611201565b604051809103906000f080158015610614573d6000803e3d6000fd5b506040517fc06b6f1d00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff85169063c06b6f1d9061067090849060e08b01359060040161136a565b600060405180830381600087803b15801561068a57600080fd5b505af115801561069e573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff85169050636d142e5b6106cc602089018961120e565b886020013589604001358a606001358b608001358c60a001358d60c001356040518863ffffffff1660e01b815260040161070c97969594939291906113f1565b600060405180830381600087803b15801561072657600080fd5b505af115801561073a573d6000803e3d6000fd5b5061075c9250610750915050602088018861120e565b87610100013583610d83565b506040517ffc80a1c700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063fc80a1c7906107bc9033906201518060e08c013501908990600401611390565b600060405180830381600087803b1580156107d657600080fd5b505af11580156107ea573d6000803e3d6000fd5b50506002546040517fe653bf3a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808916945063e653bf3a9350610844921690600401611349565b600060405180830381600087803b15801561085e57600080fd5b505af1158015610872573d6000803e3d6000fd5b50506040517f92eefe9b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871692506392eefe9b91506108c8908490600401611349565b600060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b50506040517f70a082310000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff871692506370a082319150610950903090600401611349565b60206040518083038186803b15801561096857600080fd5b505afa15801561097c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a091906112fb565b905080156109c9576109c973ffffffffffffffffffffffffffffffffffffffff85163383610f2a565b506000601036025a8361520801030190506d4946c0e9f43f4dee607b0ef1fa1c73ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a0aa8461374a0181610a1457fe5b046040518363ffffffff1660e01b8152600401610a3292919061136a565b602060405180830381600087803b158015610a4c57600080fd5b505af1158015610a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8491906112fb565b5050505b509392505050565b60006060610aa1602084018461169c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929350610ae392505050604084018461169c565b9050815114610b1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f906114c1565b610b2b606084018461169c565b9050815114610b66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f906114c1565b610b73602084018461120e565b73ffffffffffffffffffffffffffffffffffffffff1663d556c5dc6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bba57600080fd5b505af1158015610bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf2919061124a565b91506000805b8251811015610cb557610c3f838281518110610c1057fe5b6020026020010151868060400190610c28919061169c565b84818110610c3257fe5b9050602002013586610d83565b15610cad5760005483516001935073ffffffffffffffffffffffffffffffffffffffff90911690849083908110610c7257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b600101610bf8565b50341580610cc05750805b610cf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f906114f8565b73ffffffffffffffffffffffffffffffffffffffff831663650e872c608086013560a087013585610d2a60608a018a61169c565b6040518663ffffffff1660e01b8152600401610d4a9594939291906115fa565b600060405180830381600087803b158015610d6457600080fd5b505af1158015610d78573d6000803e3d6000fd5b505050505050919050565b6000610d8e84610fd0565b15610f0157348314610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f9061152f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e3457600080fd5b505af1158015610e48573d6000803e3d6000fd5b50506000546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116935063a9059cbb9250610ea591508590879060040161136a565b602060405180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef7919061122a565b5060019050610f23565b610f2373ffffffffffffffffffffffffffffffffffffffff8516338486611002565b9392505050565b610fcb8363a9059cbb60e01b8484604051602401610f4992919061136a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611029565b505050565b73ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b611023846323b872dd60e01b858585604051602401610f49939291906113c0565b50505050565b606061108b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166110df9092919063ffffffff16565b805190915015610fcb57808060200190518101906110a9919061122a565b610fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f9061159d565b60606110ee84846000856110f6565b949350505050565b6060611101856111fb565b611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f90611566565b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051611161919061132d565b60006040518083038185875af1925050503d806000811461119e576040519150601f19603f3d011682016040523d82523d6000602084013e6111a3565b606091505b509150915081156111b75791506110ee9050565b8051156111c75780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018f9190611439565b3b151590565b611f778061175a83390190565b60006020828403121561121f578081fd5b8135610f2381611734565b60006020828403121561123b578081fd5b81518015158114610f23578182fd5b60006020828403121561125b578081fd5b8151610f2381611734565b600080600083850361016081121561127c578283fd5b843567ffffffffffffffff811115611292578384fd5b850160c081880312156112a3578384fd5b93506101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156112d5578283fd5b5060208401915061014084013560ff811681146112f0578182fd5b809150509250925092565b60006020828403121561130c578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000825161133f818460208701611708565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff93841681526020810192909252909116604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff979097168752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b6000602082528251806020840152611458816040850160208701611708565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6020808252600b908201527f21676f7665726e616e6365000000000000000000000000000000000000000000604082015260600190565b60208082526013908201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604082015260600190565b60208082526010908201527f21696e76616c69642070617961626c6500000000000000000000000000000000604082015260600190565b6020808252600f908201527f21696e76616c696420616d6f756e740000000000000000000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b600060808201878352602087818501526080604085015281875180845260a0860191508289019350845b8181101561164757611637838651611313565b9383019391830191600101611624565b505084810360608601528581527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115611680578384fd5b8186029250828783830137909101019081529695505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126116d0578283fd5b83018035915067ffffffffffffffff8211156116ea578283fd5b602090810192508102360382131561170157600080fd5b9250929050565b60005b8381101561172357818101518382015260200161170b565b838111156110235750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461175657600080fd5b5056fe608060405234801561001057600080fd5b506004805460ff19908116909155600080549091169055611f41806100366000396000f3fe6080604052600436106101485760003560e01c80637d645fab116100c0578063e177246e11610074578063f2b0653711610059578063f2b065371461032e578063f851a4401461034e578063fc80a1c7146103635761014f565b8063e177246e146102ee578063e3d670d71461030e5761014f565b8063c1a287e2116100a5578063c1a287e2146102a4578063d1660f99146102b9578063dfb4b724146102d95761014f565b80637d645fab1461027a578063b1b43ae51461028f5761014f565b80634dd18bf511610117578063591fcdfe116100fc578063591fcdfe146102235780636a42b8f8146102435780636fc1f57e146102585761014f565b80634dd18bf5146101e357806354575af4146102035761014f565b80630825f38f146101545780630e18b6811461017d57806326782247146101945780633a66f901146101b65761014f565b3661014f57005b600080fd5b61016761016236600461144f565b610383565b60405161017491906116de565b60405180910390f35b34801561018957600080fd5b50610192610682565b005b3480156101a057600080fd5b506101a961074e565b6040516101749190611629565b3480156101c257600080fd5b506101d66101d136600461144f565b61076a565b60405161017491906116d5565b3480156101ef57600080fd5b506101926101fe3660046113f2565b6108f3565b34801561020f57600080fd5b5061019261021e36600461154c565b610a2e565b34801561022f57600080fd5b5061019261023e36600461144f565b610b68565b34801561024f57600080fd5b506101d6610c9c565b34801561026457600080fd5b5061026d610ca2565b60405161017491906116ca565b34801561028657600080fd5b506101d6610cab565b34801561029b57600080fd5b506101d6610cb2565b3480156102b057600080fd5b506101d6610cb9565b3480156102c557600080fd5b506101926102d436600461150c565b610cc0565b3480156102e557600080fd5b506101a9610d5a565b3480156102fa57600080fd5b506101926103093660046114f4565b610d7b565b34801561031a57600080fd5b506101d66103293660046113f2565b610e61565b34801561033a57600080fd5b5061026d6103493660046114f4565b610f0c565b34801561035a57600080fd5b506101a9610f21565b34801561036f57600080fd5b5061019261037e36600461140e565b610f3d565b60015460609073ffffffffffffffffffffffffffffffffffffffff1633146103e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906116f1565b60405180910390fd5b600086868686866040516020016103fb959493929190611670565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600590935291205490915060ff1661047a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611a93565b82610483611098565b10156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906118f9565b6104c8836212750061109c565b6104d0611098565b1115610508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611865565b600081815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055845160609061054c575083610578565b8580519060200120856040516020016105669291906115c2565b60405160208183030381529060405290505b600060608973ffffffffffffffffffffffffffffffffffffffff1689846040516105a2919061160a565b60006040518083038185875af1925050503d80600081146105df576040519150601f19603f3d011682016040523d82523d6000602084013e6105e4565b606091505b509150915081610620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611c75565b8973ffffffffffffffffffffffffffffffffffffffff16847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b60405161066d9493929190611e7d565b60405180910390a39998505050505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146106d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611b27565b60018054337fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179182905560028054909116905560405173ffffffffffffffffffffffffffffffffffffffff909116907f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c90600090a2565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015460009073ffffffffffffffffffffffffffffffffffffffff1633146107be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611c18565b6107d26003546107cc611098565b9061109c565b82101561080b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611d09565b60008686868686604051602001610826959493929190611670565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000818152600590925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055915073ffffffffffffffffffffffffffffffffffffffff88169082907f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f906108e1908a908a908a908a90611e7d565b60405180910390a39695505050505050565b60045460ff161561093c57333014610937576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611bbb565b6109b9565b60015473ffffffffffffffffffffffffffffffffffffffff16331461098d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906119d9565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117918290556040519116907f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b333014610a67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611e46565b73ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610b425760008173ffffffffffffffffffffffffffffffffffffffff1683604051610abf90611626565b60006040518083038185875af1925050503d8060008114610afc576040519150601f19603f3d011682016040523d82523d6000602084013e610b01565b606091505b5050905080610b3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611b84565b50610b63565b610b6373ffffffffffffffffffffffffffffffffffffffff841682846110e2565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610bb9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d79061174e565b60008585858585604051602001610bd4959493929190611670565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000818152600590925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055915073ffffffffffffffffffffffffffffffffffffffff87169082907f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8790610c8c908990899089908990611e7d565b60405180910390a3505050505050565b60035481565b60045460ff1681565b62278d0081565b6201518081565b6212750081565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314610d16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611af0565b6000610d2184610e61565b9050610d5483838311610d345782610d36565b835b73ffffffffffffffffffffffffffffffffffffffff871691906110e2565b50505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1681565b333014610db4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611de9565b62015180811015610df1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d79061197c565b62278d00811115610e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611a36565b600381905560405181907f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90600090a250565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190610eb6903090600401611629565b60206040518083038186803b158015610ece57600080fd5b505afa158015610ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f069190611560565b92915050565b60056020526000908152604090205460ff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60005460ff1615610f7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611808565b62015180821015610fb7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611808565b62278d00821115610ff4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906117ab565b6001805473ffffffffffffffffffffffffffffffffffffffff9485167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116178155600080546003949094557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0092909416610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9093169290921716179055565b4290565b6000828201838110156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d7906118c2565b9392505050565b610b638363a9059cbb60e01b848460405160240161110192919061164a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915260606111e0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112349092919063ffffffff16565b805190915015610b6357808060200190518101906111fe91906114d4565b610b63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611d8c565b6060611243848460008561124b565b949350505050565b606061125685611350565b61128c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d790611cd2565b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516112b6919061160a565b60006040518083038185875af1925050503d80600081146112f3576040519150601f19603f3d011682016040523d82523d6000602084013e6112f8565b606091505b5091509150811561130c5791506112439050565b80511561131c5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d791906116de565b3b151590565b600082601f830112611366578081fd5b813567ffffffffffffffff8082111561137d578283fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011682010181811083821117156113bb578485fd5b6040528281529250828483016020018610156113d657600080fd5b8260208601602083013760006020848301015250505092915050565b600060208284031215611403578081fd5b81356110db81611ee6565b600080600060608486031215611422578182fd5b833561142d81611ee6565b925060208401359150604084013561144481611ee6565b809150509250925092565b600080600080600060a08688031215611466578081fd5b853561147181611ee6565b945060208601359350604086013567ffffffffffffffff80821115611494578283fd5b6114a089838a01611356565b945060608801359150808211156114b5578283fd5b506114c288828901611356565b95989497509295608001359392505050565b6000602082840312156114e5578081fd5b815180151581146110db578182fd5b600060208284031215611505578081fd5b5035919050565b600080600060608486031215611520578283fd5b833561152b81611ee6565b9250602084013561153b81611ee6565b929592945050506040919091013590565b600080600060608486031215611422578283fd5b600060208284031215611571578081fd5b5051919050565b60008151808452611590816020860160208601611eba565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60007fffffffff000000000000000000000000000000000000000000000000000000008416825282516115fc816004850160208701611eba565b919091016004019392505050565b6000825161161c818460208701611eba565b9190910192915050565b90565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8716825285602083015260a060408301526116a560a0830186611578565b82810360608401526116b78186611578565b9150508260808301529695505050505050565b901515815260200190565b90815260200190565b6000602082526110db6020830184611578565b60208082526038908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20436160408201527f6c6c206d75737420636f6d652066726f6d2061646d696e2e0000000000000000606082015260800190565b60208082526037908201527f54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2043616c60408201527f6c206d75737420636f6d652066726f6d2061646d696e2e000000000000000000606082015260800190565b6020808252603b908201527f54696d656c6f636b3a3a636f6e7374727563746f723a2044656c6179206d757360408201527f74206e6f7420657863656564206d6178696d756d2064656c61792e0000000000606082015260800190565b60208082526037908201527f54696d656c6f636b3a3a636f6e7374727563746f723a2044656c6179206d757360408201527f7420657863656564206d696e696d756d2064656c61792e000000000000000000606082015260800190565b60208082526033908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260408201527f616e73616374696f6e206973207374616c652e00000000000000000000000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526045908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260408201527f616e73616374696f6e206861736e2774207375727061737365642074696d652060608201527f6c6f636b2e000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526034908201527f54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206560408201527f7863656564206d696e696d756d2064656c61792e000000000000000000000000606082015260800190565b6020808252603b908201527f54696d656c6f636b3a3a73657450656e64696e6741646d696e3a20466972737460408201527f2063616c6c206d75737420636f6d652066726f6d2061646d696e2e0000000000606082015260800190565b60208082526038908201527f54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e60408201527f6f7420657863656564206d6178696d756d2064656c61792e0000000000000000606082015260800190565b6020808252603d908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260408201527f616e73616374696f6e206861736e2774206265656e207175657565642e000000606082015260800190565b60208082526009908201527f2166616173506f6f6c0000000000000000000000000000000000000000000000604082015260600190565b60208082526038908201527f54696d656c6f636b3a3a61636365707441646d696e3a2043616c6c206d75737460408201527f20636f6d652066726f6d2070656e64696e6741646d696e2e0000000000000000606082015260800190565b6020808252600e908201527f4552525f4554485f4641494c4544000000000000000000000000000000000000604082015260600190565b60208082526038908201527f54696d656c6f636b3a3a73657450656e64696e6741646d696e3a2043616c6c2060408201527f6d75737420636f6d652066726f6d2054696d656c6f636b2e0000000000000000606082015260800190565b60208082526036908201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a2043616c6c60408201527f206d75737420636f6d652066726f6d2061646d696e2e00000000000000000000606082015260800190565b6020808252603d908201527f54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a20547260408201527f616e73616374696f6e20657865637574696f6e2072657665727465642e000000606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526049908201527f54696d656c6f636b3a3a71756575655472616e73616374696f6e3a204573746960408201527f6d6174656420657865637574696f6e20626c6f636b206d75737420736174697360608201527f66792064656c61792e0000000000000000000000000000000000000000000000608082015260a00190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b60208082526031908201527f54696d656c6f636b3a3a73657444656c61793a2043616c6c206d75737420636f60408201527f6d652066726f6d2054696d656c6f636b2e000000000000000000000000000000606082015260800190565b60208082526009908201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604082015260600190565b600085825260806020830152611e966080830186611578565b8281036040840152611ea88186611578565b91505082606083015295945050505050565b60005b83811015611ed5578181015183820152602001611ebd565b83811115610d545750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114611f0857600080fd5b5056fea2646970667358221220649af48a631493c626ba39e2468d60057c8e5323a0bf63151d2428546c2750d164736f6c634300060c0033a26469706673582212206790d69b7e9b3984e929df8a3657cf588b6cabf532c2ef06968e9222430b80d564736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b936525a77ba0529f6c0feab28f8b0ae6c0398c7
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _exchangeProxy (address): 0xB936525A77Ba0529f6C0feaB28f8b0AE6c0398C7
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 000000000000000000000000b936525a77ba0529f6c0feab28f8b0ae6c0398c7
Deployed Bytecode Sourcemap
27607:5262:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28296:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28328:28;;;;;;;;;;;;;:::i;27737:93::-;;;;;;;;;;;;;:::i;29103:167::-;;;;;;;;;;-1:-1:-1;29103:167:0;;;;;:::i;:::-;;:::i;:::-;;30101:1316;;;;;;:::i;:::-;;:::i;28296:25::-;;;;;;:::o;28328:28::-;;;;;;:::o;27737:93::-;27787:42;27737:93;:::o;29103:167::-;29195:10;;;;29181;:24;29173:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29232:13;:30;;;;;;;;;;;;;;;29103:167::o;30101:1316::-;30285:11;30270:4;27895:3;27888:10;;27883:284;;30316:24:::1;30331:8;30316:14;:24::i;:::-;30309:31;;30366:29;30398:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30433:88:0::1;::::0;;;;30366:52;;-1:-1:-1;30433:27:0::1;::::0;::::1;::::0;::::1;::::0;:88:::1;::::0;30366:52;;30486:34:::1;::::0;::::1;;::::0;30433:88:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;30536:18:0::1;::::0;::::1;::::0;-1:-1:-1;30536:18:0::1;30573:26;;::::0;::::1;::::0;::::1;:::i;:::-;30618:14;:25;;;30662:14;:29;;;30710:14;:29;;;30758:14;:32;;;30809:14;:32;;;30860:14;:30;;;30536:355;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30906:112:0::1;::::0;-1:-1:-1;30932:26:0::1;::::0;-1:-1:-1;;30932:26:0::1;::::0;::::1;:14:::0;:26:::1;:::i;:::-;30961:14;:31;;;31002:14;30906:17;:112::i;:::-;-1:-1:-1::0;31033:98:0::1;::::0;;;;:26:::1;::::0;::::1;::::0;::::1;::::0;:98:::1;::::0;31060:10:::1;::::0;31109:6:::1;31072:34;::::0;::::1;;:43;::::0;31125:4;;31033:98:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31168:13:0::1;::::0;31146:36:::1;::::0;;;;:21:::1;::::0;;::::1;::::0;-1:-1:-1;31146:21:0::1;::::0;-1:-1:-1;31146:36:0::1;::::0;31168:13:::1;::::0;31146:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31197:43:0::1;::::0;;;;:18:::1;::::0;::::1;::::0;-1:-1:-1;31197:18:0::1;::::0;-1:-1:-1;31197:43:0::1;::::0;31224:14;;31197:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31278:29:0::1;::::0;;;;31262:13:::1;::::0;-1:-1:-1;31278:14:0::1;::::0;::::1;::::0;-1:-1:-1;31278:14:0::1;::::0;-1:-1:-1;31278:29:0::1;::::0;31301:4:::1;::::0;31278:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31262:45:::0;-1:-1:-1;31322:12:0;;31318:92:::1;;31351:47;:25;::::0;::::1;31377:10;31389:8:::0;31351:25:::1;:47::i;:::-;27921:1;27883:284:::0;;;27955:16;27974:9;27955:28;;30316:24:::1;30331:8;30316:14;:24::i;:::-;30309:31;;30366:29;30398:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30433:88:0::1;::::0;;;;30366:52;;-1:-1:-1;30433:27:0::1;::::0;::::1;::::0;::::1;::::0;:88:::1;::::0;30366:52;;30486:34:::1;::::0;::::1;;::::0;30433:88:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;30536:18:0::1;::::0;::::1;::::0;-1:-1:-1;30536:18:0::1;30573:26;;::::0;::::1;::::0;::::1;:::i;:::-;30618:14;:25;;;30662:14;:29;;;30710:14;:29;;;30758:14;:32;;;30809:14;:32;;;30860:14;:30;;;30536:355;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30906:112:0::1;::::0;-1:-1:-1;30932:26:0::1;::::0;-1:-1:-1;;30932:26:0::1;::::0;::::1;:14:::0;:26:::1;:::i;:::-;30961:14;:31;;;31002:14;30906:17;:112::i;:::-;-1:-1:-1::0;31033:98:0::1;::::0;;;;:26:::1;::::0;::::1;::::0;::::1;::::0;:98:::1;::::0;31060:10:::1;::::0;31109:6:::1;31072:34;::::0;::::1;;:43;::::0;31125:4;;31033:98:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31168:13:0::1;::::0;31146:36:::1;::::0;;;;:21:::1;::::0;;::::1;::::0;-1:-1:-1;31146:21:0::1;::::0;-1:-1:-1;31146:36:0::1;::::0;31168:13:::1;::::0;31146:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31197:43:0::1;::::0;;;;:18:::1;::::0;::::1;::::0;-1:-1:-1;31197:18:0::1;::::0;-1:-1:-1;31197:43:0::1;::::0;31224:14;;31197:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31278:29:0::1;::::0;;;;31262:13:::1;::::0;-1:-1:-1;31278:14:0::1;::::0;::::1;::::0;-1:-1:-1;31278:14:0::1;::::0;-1:-1:-1;31278:29:0::1;::::0;31301:4:::1;::::0;31278:29:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31262:45:::0;-1:-1:-1;31322:12:0;;31318:92:::1;;31351:47;:25;::::0;::::1;31377:10;31389:8:::0;31351:25:::1;:47::i;:::-;-1:-1:-1::0;28014:16:0;28064:2;28069:8;28064:20;28052:9;28041:8;28033:5;:16;:28;:51;28014:70;;27787:42;28099:16;;;28116:10;28149:5;28129:8;28140:5;28129:16;28128:26;;;;;;28099:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27883:284;;;30101:1316;;;;;;:::o;29276:817::-;29364:11;29388:23;29414:15;;;;:8;:15;:::i;:::-;29388:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29388:41:0;;-1:-1:-1;29465:17:0;;-1:-1:-1;;;29465:17:0;;;;;:::i;:::-;:24;;29448:6;:13;:41;29440:73;;;;;;;;;;;;:::i;:::-;29549:16;;;;:8;:16;:::i;:::-;:23;;29532:6;:13;:40;29524:72;;;;;;;;;;;;:::i;:::-;29614:16;;;;:8;:16;:::i;:::-;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29607:34;;29652:16;29692:6;29687:235;29708:6;:13;29704:1;:17;29687:235;;;29747:65;29765:6;29772:1;29765:9;;;;;;;;;;;;;;29776:8;:17;;;;;;;;:::i;:::-;29794:1;29776:20;;;;;;;;;;;;;29806:4;29747:17;:65::i;:::-;29743:168;;;29890:4;;29870:9;;29847:4;;-1:-1:-1;29890:4:0;;;;;29870:6;;29877:1;;29870:9;;;;;;;;;;;:25;;;;;;;;;;;29743:168;29723:3;;29687:235;;;-1:-1:-1;29940:9:0;:14;;:29;;;29958:11;29940:29;29932:58;;;;;;;;;;;;:::i;:::-;30001:13;;;;30015:16;;;;30033:23;;;;30058:6;30066:16;;;;30015:8;30066:16;:::i;:::-;30001:82;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29276:817;;;;;:::o;31548:455::-;31633:16;31666:20;31679:5;31666;:20::i;:::-;31662:305;;;31721:9;31711:6;:19;31703:47;;;;;;;;;;;;:::i;:::-;31765:4;;;;;;;;;;:12;;;31786:6;31765:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31810:4:0;;:25;;;;;:4;;;;;-1:-1:-1;31810:13:0;;-1:-1:-1;31810:25:0;;-1:-1:-1;31824:2:0;;31828:6;;31810:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31864:4;31850:18;;31662:305;;;31901:54;:30;;;31932:10;31944:2;31948:6;31901:30;:54::i;:::-;31548:455;;;;;:::o;14633:177::-;14716:86;14736:5;14766:23;;;14791:2;14795:5;14743:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14716:19;:86::i;:::-;14633:177;;;:::o;31425:115::-;31502:29;;;28246:42;31502:29;31425:115;;;:::o;14818:205::-;14919:96;14939:5;14969:27;;;14998:4;15004:2;15008:5;14946:68;;;;;;;;;;:::i;14919:96::-;14818:205;;;;:::o;16938:761::-;17362:23;17388:69;17416:4;17388:69;;;;;;;;;;;;;;;;;17396:5;17388:27;;;;:69;;;;;:::i;:::-;17472:17;;17362:95;;-1:-1:-1;17472:21:0;17468:224;;17614:10;17603:30;;;;;;;;;;;;:::i;:::-;17595:85;;;;;;;;;;;;:::i;11711:196::-;11814:12;11846:53;11869:6;11877:4;11883:1;11886:12;11846:22;:53::i;:::-;11839:60;11711:196;-1:-1:-1;;;;11711:196:0:o;13088:979::-;13218:12;13251:18;13262:6;13251:10;:18::i;:::-;13243:60;;;;;;;;;;;;:::i;:::-;13377:12;13391:23;13418:6;:11;;13439:8;13449:4;13418:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13376:78;;;;13469:7;13465:595;;;13500:10;-1:-1:-1;13493:17:0;;-1:-1:-1;13493:17:0;13465:595;13614:17;;:21;13610:439;;13877:10;13871:17;13938:15;13925:10;13921:2;13917:19;13910:44;13825:148;14020:12;14013:20;;;;;;;;;;;:::i;8793:422::-;9160:20;9199:8;;;8793:422::o;-1:-1:-1:-;;;;;;;;:::o;1476:241::-;;1580:2;1568:9;1559:7;1555:23;1551:32;1548:2;;;-1:-1;;1586:12;1548:2;85:6;72:20;97:33;124:5;97:33;:::i;1724:257::-;;1836:2;1824:9;1815:7;1811:23;1807:32;1804:2;;;-1:-1;;1842:12;1804:2;223:6;217:13;21769:5;19117:13;19110:21;21747:5;21744:32;21734:2;;-1:-1;;21780:12;2270:291;;2399:2;2387:9;2378:7;2374:23;2370:32;2367:2;;;-1:-1;;2405:12;2367:2;546:6;540:13;558:47;599:5;558:47;:::i;2842:699::-;;;;3028:9;3019:7;3015:23;3040:3;3015:23;3011:33;3008:2;;;-1:-1;;3047:12;3008:2;3105:17;3092:31;3143:18;3135:6;3132:30;3129:2;;;-1:-1;;3165:12;3129:2;3244:22;;930:3;912:16;;;908:26;905:2;;;-1:-1;;937:12;905:2;3185:91;-1:-1;1147:3;1129:16;;;1125:26;1122:2;;;-1:-1;;1154:12;1122:2;;3313;3390:9;3386:22;3321:97;;3455:3;3497:9;3493:22;1408:20;19759:4;22473:5;19748:16;22450:5;22447:33;22437:2;;-1:-1;;22484:12;22437:2;3464:61;;;;3002:539;;;;;:::o;3548:263::-;;3663:2;3651:9;3642:7;3638:23;3634:32;3631:2;;;-1:-1;;3669:12;3631:2;-1:-1;1280:13;;3625:186;-1:-1;3625:186::o;4149:103::-;19554:42;19543:54;4210:37;;4204:48::o;8969:271::-;;5774:5;17841:12;5885:52;5930:6;5925:3;5918:4;5911:5;5907:16;5885:52;:::i;:::-;5949:16;;;;;9103:137;-1:-1;;9103:137::o;9247:222::-;19554:42;19543:54;;;;4210:37;;9374:2;9359:18;;9345:124::o;9721:349::-;19554:42;19543:54;;;;4079:58;;10056:2;10041:18;;8920:37;9884:2;9869:18;;9855:215::o;10077:460::-;19554:42;19543:54;;;4079:58;;10440:2;10425:18;;8920:37;;;;19543:54;;;10523:2;10508:18;;4210:37;10268:2;10253:18;;10239:298::o;10544:444::-;19554:42;19543:54;;;4210:37;;19543:54;;;;10891:2;10876:18;;4210:37;10974:2;10959:18;;8920:37;;;;10727:2;10712:18;;10698:290::o;11592:918::-;19554:42;19543:54;;;;6062:64;;12078:2;12063:18;;8920:37;;;;12161:2;12146:18;;8920:37;;;;12244:2;12229:18;;8920:37;;;;12327:3;12312:19;;8920:37;12411:3;12396:19;;8920:37;12495:3;12480:19;;8920:37;11900:3;11885:19;;11871:639::o;12788:310::-;;12935:2;12956:17;12949:47;6617:5;17841:12;18385:6;12935:2;12924:9;12920:18;18373:19;6711:52;6756:6;18413:14;12924:9;18413:14;12935:2;6737:5;6733:16;6711:52;:::i;:::-;21547:2;21527:14;21543:7;21523:28;6775:39;;;;18413:14;6775:39;;12906:192;-1:-1;;12906:192::o;13105:416::-;13305:2;13319:47;;;7051:2;13290:18;;;18373:19;7087:13;18413:14;;;7067:34;7120:12;;;13276:245::o;13528:416::-;13728:2;13742:47;;;7371:2;13713:18;;;18373:19;7407:21;18413:14;;;7387:42;7448:12;;;13699:245::o;13951:416::-;14151:2;14165:47;;;7699:2;14136:18;;;18373:19;7735:18;18413:14;;;7715:39;7773:12;;;14122:245::o;14374:416::-;14574:2;14588:47;;;8024:2;14559:18;;;18373:19;8060:17;18413:14;;;8040:38;8097:12;;;14545:245::o;14797:416::-;14997:2;15011:47;;;8348:2;14982:18;;;18373:19;8384:31;18413:14;;;8364:52;8435:12;;;14968:245::o;15220:416::-;15420:2;15434:47;;;8686:2;15405:18;;;18373:19;8722:34;18413:14;;;8702:55;8791:12;8777;;;8770:34;8823:12;;;15391:245::o;15643:872::-;;15964:3;15953:9;15949:19;8950:5;8927:3;8920:37;16129:2;8950:5;16129:2;16118:9;16114:18;8920:37;15964:3;16166:2;16155:9;16151:18;16144:48;16206:108;4603:5;17841:12;18385:6;18380:3;18373:19;18413:14;15953:9;18413:14;4615:93;;16129:2;4779:5;17695:14;4791:21;;-1:-1;4818:260;4843:6;4840:1;4837:13;4818:260;;;3906:46;3948:3;4910:6;4904:13;3906:46;:::i;:::-;18228:14;;;;3972;;;;4865:1;4858:9;4818:260;;;4822:14;;16362:9;16356:4;16352:20;16347:2;16336:9;16332:18;16325:48;18385:6;18380:3;18373:19;5398:66;5390:6;5387:78;5384:2;;;-1:-1;;5468:12;5384:2;16129;5503:6;5499:17;5489:27;;21110:6;21105:3;16129:2;18417:3;18413:14;21087:30;21148:16;;;;21141:27;;;21148:16;15935:580;-1:-1;;;;;;15935:580::o;16522:522::-;;;16673:11;16660:25;16724:48;16748:8;16732:14;16728:29;16724:48;16704:18;16700:73;16690:2;;-1:-1;;16777:12;16690:2;16804:33;;16858:18;;;-1:-1;16896:18;16885:30;;16882:2;;;-1:-1;;16918:12;16882:2;16763:4;16946:13;;;;-1:-1;16998:17;;16732:14;16978:38;16968:49;;16965:2;;;17030:1;;17020:12;16965:2;16628:416;;;;;:::o;21183:268::-;21248:1;21255:101;21269:6;21266:1;21263:13;21255:101;;;21336:11;;;21330:18;21317:11;;;21310:39;21291:2;21284:10;21255:101;;;21371:6;21368:1;21365:13;21362:2;;;-1:-1;;21248:1;21418:16;;21411:27;21232:219::o;21564:117::-;19554:42;21651:5;19543:54;21626:5;21623:35;21613:2;;21672:1;;21662:12;21613:2;21607:74;:::o
Swarm Source
ipfs://6790d69b7e9b3984e929df8a3657cf588b6cabf532c2ef06968e9222430b80d5
Loading...
Loading
Loading...
Loading
OVERVIEW
Farms-as-a-Service (FaaS) is a project that allow users to create own FaaS pool and let the community stake to it.Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.