Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CompoundSubscriptions
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-07-06 */ pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; interface ERC20 { function totalSupply() external view returns (uint256 supply); function balanceOf(address _owner) external view returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); function decimals() external view returns (uint256 digits); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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); } } } } // SPDX-License-Identifier: MIT library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } 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; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by 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; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(ERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(ERC20 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. */ function safeApprove(ERC20 token, address spender, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(ERC20 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(ERC20 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)); } function _callOptionalReturn(ERC20 token, bytes memory data) private { 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"); } } } contract AdminAuth { using SafeERC20 for ERC20; address public owner; address public admin; modifier onlyOwner() { require(owner == msg.sender); _; } constructor() public { owner = msg.sender; } /// @notice Admin is set by owner first time, after that admin is super role and has permission to change owner /// @param _admin Address of multisig that becomes admin function setAdminByOwner(address _admin) public { require(msg.sender == owner); require(admin == address(0)); admin = _admin; } /// @notice Admin is able to set new admin /// @param _admin Address of multisig that becomes new admin function setAdminByAdmin(address _admin) public { require(msg.sender == admin); admin = _admin; } /// @notice Admin is able to change owner /// @param _owner Address of new owner function setOwnerByAdmin(address _owner) public { require(msg.sender == admin); owner = _owner; } /// @notice Destroy the contract function kill() public onlyOwner { selfdestruct(payable(owner)); } /// @notice withdraw stuck funds function withdrawStuckFunds(address _token, uint _amount) public onlyOwner { if (_token == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { payable(owner).transfer(_amount); } else { ERC20(_token).safeTransfer(owner, _amount); } } } /// @title Stores subscription information for Compound automatization contract CompoundSubscriptions is AdminAuth { struct CompoundHolder { address user; uint128 minRatio; uint128 maxRatio; uint128 optimalRatioBoost; uint128 optimalRatioRepay; bool boostEnabled; } struct SubPosition { uint arrPos; bool subscribed; } CompoundHolder[] public subscribers; mapping (address => SubPosition) public subscribersPos; uint public changeIndex; event Subscribed(address indexed user); event Unsubscribed(address indexed user); event Updated(address indexed user); event ParamUpdates(address indexed user, uint128, uint128, uint128, uint128, bool); /// @dev Called by the DSProxy contract which owns the Compound position /// @notice Adds the users Compound poistion in the list of subscriptions so it can be monitored /// @param _minRatio Minimum ratio below which repay is triggered /// @param _maxRatio Maximum ratio after which boost is triggered /// @param _optimalBoost Ratio amount which boost should target /// @param _optimalRepay Ratio amount which repay should target /// @param _boostEnabled Boolean determing if boost is enabled function subscribe(uint128 _minRatio, uint128 _maxRatio, uint128 _optimalBoost, uint128 _optimalRepay, bool _boostEnabled) external { // if boost is not enabled, set max ratio to max uint uint128 localMaxRatio = _boostEnabled ? _maxRatio : uint128(-1); require(checkParams(_minRatio, localMaxRatio), "Must be correct params"); SubPosition storage subInfo = subscribersPos[msg.sender]; CompoundHolder memory subscription = CompoundHolder({ minRatio: _minRatio, maxRatio: localMaxRatio, optimalRatioBoost: _optimalBoost, optimalRatioRepay: _optimalRepay, user: msg.sender, boostEnabled: _boostEnabled }); changeIndex++; if (subInfo.subscribed) { subscribers[subInfo.arrPos] = subscription; emit Updated(msg.sender); emit ParamUpdates(msg.sender, _minRatio, localMaxRatio, _optimalBoost, _optimalRepay, _boostEnabled); } else { subscribers.push(subscription); subInfo.arrPos = subscribers.length - 1; subInfo.subscribed = true; emit Subscribed(msg.sender); } } /// @notice Called by the users DSProxy /// @dev Owner who subscribed cancels his subscription function unsubscribe() external { _unsubscribe(msg.sender); } /// @dev Checks limit if minRatio is bigger than max /// @param _minRatio Minimum ratio, bellow which repay can be triggered /// @param _maxRatio Maximum ratio, over which boost can be triggered /// @return Returns bool if the params are correct function checkParams(uint128 _minRatio, uint128 _maxRatio) internal pure returns (bool) { if (_minRatio > _maxRatio) { return false; } return true; } /// @dev Internal method to remove a subscriber from the list /// @param _user The actual address that owns the Compound position function _unsubscribe(address _user) internal { require(subscribers.length > 0, "Must have subscribers in the list"); SubPosition storage subInfo = subscribersPos[_user]; require(subInfo.subscribed, "Must first be subscribed"); address lastOwner = subscribers[subscribers.length - 1].user; SubPosition storage subInfo2 = subscribersPos[lastOwner]; subInfo2.arrPos = subInfo.arrPos; subscribers[subInfo.arrPos] = subscribers[subscribers.length - 1]; subscribers.pop(); // remove last element and reduce arr length changeIndex++; subInfo.subscribed = false; subInfo.arrPos = 0; emit Unsubscribed(msg.sender); } /// @dev Checks if the user is subscribed /// @param _user The actual address that owns the Compound position /// @return If the user is subscribed function isSubscribed(address _user) public view returns (bool) { SubPosition storage subInfo = subscribersPos[_user]; return subInfo.subscribed; } /// @dev Returns subscribtion information about a user /// @param _user The actual address that owns the Compound position /// @return Subscription information about the user if exists function getHolder(address _user) public view returns (CompoundHolder memory) { SubPosition storage subInfo = subscribersPos[_user]; return subscribers[subInfo.arrPos]; } /// @notice Helper method to return all the subscribed CDPs /// @return List of all subscribers function getSubscribers() public view returns (CompoundHolder[] memory) { return subscribers; } /// @notice Helper method for the frontend, returns all the subscribed CDPs paginated /// @param _page What page of subscribers you want /// @param _perPage Number of entries per page /// @return List of all subscribers for that page function getSubscribersByPage(uint _page, uint _perPage) public view returns (CompoundHolder[] memory) { CompoundHolder[] memory holders = new CompoundHolder[](_perPage); uint start = _page * _perPage; uint end = start + _perPage; end = (end > holders.length) ? holders.length : end; uint count = 0; for (uint i = start; i < end; i++) { holders[count] = subscribers[i]; count++; } return holders; } ////////////// ADMIN METHODS /////////////////// /// @notice Admin function to unsubscribe a CDP /// @param _user The actual address that owns the Compound position function unsubscribeByAdmin(address _user) public onlyOwner { SubPosition storage subInfo = subscribersPos[_user]; if (subInfo.subscribed) { _unsubscribe(_user); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint128","name":"","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"","type":"uint128"},{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"ParamUpdates","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Subscribed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Unsubscribed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Updated","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getHolder","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint128","name":"minRatio","type":"uint128"},{"internalType":"uint128","name":"maxRatio","type":"uint128"},{"internalType":"uint128","name":"optimalRatioBoost","type":"uint128"},{"internalType":"uint128","name":"optimalRatioRepay","type":"uint128"},{"internalType":"bool","name":"boostEnabled","type":"bool"}],"internalType":"struct CompoundSubscriptions.CompoundHolder","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSubscribers","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint128","name":"minRatio","type":"uint128"},{"internalType":"uint128","name":"maxRatio","type":"uint128"},{"internalType":"uint128","name":"optimalRatioBoost","type":"uint128"},{"internalType":"uint128","name":"optimalRatioRepay","type":"uint128"},{"internalType":"bool","name":"boostEnabled","type":"bool"}],"internalType":"struct CompoundSubscriptions.CompoundHolder[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_page","type":"uint256"},{"internalType":"uint256","name":"_perPage","type":"uint256"}],"name":"getSubscribersByPage","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint128","name":"minRatio","type":"uint128"},{"internalType":"uint128","name":"maxRatio","type":"uint128"},{"internalType":"uint128","name":"optimalRatioBoost","type":"uint128"},{"internalType":"uint128","name":"optimalRatioRepay","type":"uint128"},{"internalType":"bool","name":"boostEnabled","type":"bool"}],"internalType":"struct CompoundSubscriptions.CompoundHolder[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isSubscribed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdminByAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdminByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwnerByAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_minRatio","type":"uint128"},{"internalType":"uint128","name":"_maxRatio","type":"uint128"},{"internalType":"uint128","name":"_optimalBoost","type":"uint128"},{"internalType":"uint128","name":"_optimalRepay","type":"uint128"},{"internalType":"bool","name":"_boostEnabled","type":"bool"}],"name":"subscribe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"subscribers","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint128","name":"minRatio","type":"uint128"},{"internalType":"uint128","name":"maxRatio","type":"uint128"},{"internalType":"uint128","name":"optimalRatioBoost","type":"uint128"},{"internalType":"uint128","name":"optimalRatioRepay","type":"uint128"},{"internalType":"bool","name":"boostEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subscribersPos","outputs":[{"internalType":"uint256","name":"arrPos","type":"uint256"},{"internalType":"bool","name":"subscribed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unsubscribe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"unsubscribeByAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawStuckFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600080546001600160a01b031916331790556119e9806100256000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80638cf0a2d6116100b2578063b92ae87c11610081578063deca5f8811610066578063deca5f881461026a578063f851a4401461027d578063fcae4484146102855761011b565b8063b92ae87c1461022a578063cd75c7d41461024a5761011b565b80638cf0a2d6146101dc5780638da5cb5b146101ef578063a7304bf714610204578063b3c2ec6f146102175761011b565b806337296c26116100ee57806337296c261461017b5780633a1283221461019c57806341c0e1b5146101af57806359221a68146101b75761011b565b806305cc61ad14610120578063106b03391461013e5780631e48907b1461015357806332a6a0c414610168575b600080fd5b61012861028d565b60405161013591906116e8565b60405180910390f35b610146610366565b604051610135919061193b565b6101666101613660046114ad565b61036c565b005b610166610176366004611515565b6103d7565b61018e6101893660046114ad565b61087a565b604051610135929190611944565b6101666101aa3660046114cf565b610896565b610166610969565b6101ca6101c5366004611585565b6109a8565b60405161013596959493929190611669565b6101286101ea36600461159d565b610a30565b6101f7610b8e565b6040516101359190611648565b6101666102123660046114ad565b610baa565b6101666102253660046114ad565b610c15565b61023d6102383660046114ad565b610c74565b6040516101359190611736565b61025d6102583660046114ad565b610ca2565b60405161013591906118f1565b6101666102783660046114ad565b610d87565b6101f7610dce565b610166610dea565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561035d5760008481526020908190206040805160c08101825260048602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001808201546fffffffffffffffffffffffffffffffff8082168688015270010000000000000000000000000000000091829004811694860194909452600283015480851660608701520490921660808401526003015460ff16151560a083015290835290920191016102b1565b50505050905090565b60045481565b60015473ffffffffffffffffffffffffffffffffffffffff16331461039057600080fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081610404577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610406565b845b90506104128682610df5565b610451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890611826565b60405180910390fd5b336000908152600360205260409020610468611454565b506040805160c0810182523381526fffffffffffffffffffffffffffffffff808a166020830152848116928201929092528682166060820152908516608082015283151560a082015260048054600190810190915582015460ff1615610674578060028360000154815481106104da57fe5b6000918252602080832084516004939093020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921782558301516001820180546040808701517fffffffffffffffffffffffffffffffff000000000000000000000000000000009283166fffffffffffffffffffffffffffffffff958616178516700100000000000000000000000000000000918616820217909355606087015160028601805460808a01519416918616919091178516929094169092021790915560a090930151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055905133917fe00da2178806f37f69815e9ed5ed3072ec1d55206d60916d99b469c7daa421e491a23373ffffffffffffffffffffffffffffffffffffffff167f508cd13d884a850b53749d0842aae60210b6697a08539737860eb1922ca3d62a89858989896040516106679594939291906118ff565b60405180910390a2610870565b6002805460018082018355600083815284517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600490940293840180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560208501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf840180546040808901517fffffffffffffffffffffffffffffffff000000000000000000000000000000009283166fffffffffffffffffffffffffffffffff95861617851670010000000000000000000000000000000091861682021790935560608901517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad08801805460808c01519416918616919091178516929094169092021790915560a08601517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad190940180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811695151595909517905593547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0186558582018054909316909117909155905133917fa88fac53823b534c72d6958345adbe6801e072750d83b490d52ebbac51473a6391a25b5050505050505050565b6003602052600090815260409020805460019091015460ff1682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108ba57600080fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff83161415610938576000805460405173ffffffffffffffffffffffffffffffffffffffff9091169183156108fc02918491818181858888f19350505050158015610932573d6000803e3d6000fd5b50610965565b6000546109659073ffffffffffffffffffffffffffffffffffffffff84811691168363ffffffff610e3416565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461098d57600080fd5b60005473ffffffffffffffffffffffffffffffffffffffff16ff5b600281815481106109b557fe5b6000918252602090912060049091020180546001820154600283015460039093015473ffffffffffffffffffffffffffffffffffffffff90921693506fffffffffffffffffffffffffffffffff8082169370010000000000000000000000000000000092839004821693818316939091049091169060ff1686565b6060808267ffffffffffffffff81118015610a4a57600080fd5b50604051908082528060200260200182016040528015610a8457816020015b610a71611454565b815260200190600190039081610a695790505b50805190915084840290818501908111610a9e5780610aa1565b82515b90506000825b82811015610b805760028181548110610abc57fe5b60009182526020918290206040805160c0810182526004909302909101805473ffffffffffffffffffffffffffffffffffffffff16835260018101546fffffffffffffffffffffffffffffffff80821695850195909552700100000000000000000000000000000000908190048516928401929092526002810154808516606085015291909104909216608082015260039091015460ff16151560a08201528551869084908110610b6957fe5b602090810291909101015260019182019101610aa7565b509293505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff163314610bce57600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c3957600080fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020600181015460ff16156109655761096582610eda565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090206001015460ff1690565b610caa611454565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604090208054600280549091908110610ce057fe5b60009182526020918290206040805160c0810182526004909302909101805473ffffffffffffffffffffffffffffffffffffffff16835260018101546fffffffffffffffffffffffffffffffff80821695850195909552700100000000000000000000000000000000908190048516928401929092526002810154808516606085015291909104909216608082015260039091015460ff16151560a0820152915050919050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dab57600080fd5b60015473ffffffffffffffffffffffffffffffffffffffff1615610bce57600080fd5b60015473ffffffffffffffffffffffffffffffffffffffff1681565b610df333610eda565b565b6000816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161115610e2b57506000610b88565b50600192915050565b610ed58363a9059cbb60e01b8484604051602401610e539291906116c2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611249565b505050565b600254610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610448906117c9565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020600181015460ff16610f76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890611792565b60028054600091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610faa57fe5b6000918252602080832060049092029091015473ffffffffffffffffffffffffffffffffffffffff1680835260039091526040909120835481556002805492935090917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061101957fe5b9060005260206000209060040201600284600001548154811061103857fe5b60009182526020909120825460049092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911781556001808301805491830180547fffffffffffffffffffffffffffffffff000000000000000000000000000000009081166fffffffffffffffffffffffffffffffff94851617808355925470010000000000000000000000000000000090819004851681029385169390931790915560028086018054828701805490941690861617808455905484900485169093029290931691909117905560039283015492909101805460ff90931615157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009093169290921790915580548061116b57fe5b60008281526020812060047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930183810290910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600181810184905560028201849055600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915591909455825484019092559185018054909116905580845560405133917fae563681ccc696fae58fe830f401bc9c043a43ddb9f7c2830b32c3c70d9966e791a250505050565b60606112ab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112ff9092919063ffffffff16565b805190915015610ed557808060200190518101906112c991906114f9565b610ed5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890611894565b606061130e8484600085611316565b949350505050565b60606113218561141b565b611357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489061185d565b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051611381919061162c565b60006040518083038185875af1925050503d80600081146113be576040519150601f19603f3d011682016040523d82523d6000602084013e6113c3565b606091505b509150915081156113d757915061130e9050565b8051156113e75780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190611741565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061130e575050151592915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b6000602082840312156114be578081fd5b6114c88383611489565b9392505050565b600080604083850312156114e1578081fd5b6114eb8484611489565b946020939093013593505050565b60006020828403121561150a578081fd5b81516114c881611984565b600080600080600060a0868803121561152c578081fd5b853561153781611995565b9450602086013561154781611995565b9350604086013561155781611995565b9250606086013561156781611995565b9150608086013561157781611984565b809150509295509295909350565b600060208284031215611596578081fd5b5035919050565b600080604083850312156115af578182fd5b50508035926020909101359150565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101516fffffffffffffffffffffffffffffffff8082166020850152806040840151166040850152806060840151166060850152806080840151166080850152505060a0810151151560a08301525050565b6000825161163e818460208701611954565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9690961686526fffffffffffffffffffffffffffffffff9485166020870152928416604086015290831660608501529091166080830152151560a082015260c00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561172a576117178385516115be565b9284019260c09290920191600101611704565b50909695505050505050565b901515815260200190565b6000602082528251806020840152611760816040850160208701611954565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60208082526018908201527f4d75737420666972737420626520737562736372696265640000000000000000604082015260600190565b60208082526021908201527f4d757374206861766520737562736372696265727320696e20746865206c697360408201527f7400000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526016908201527f4d75737420626520636f727265637420706172616d7300000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b60c08101610b8882846115be565b6fffffffffffffffffffffffffffffffff9586168152938516602085015291841660408401529092166060820152901515608082015260a00190565b90815260200190565b9182521515602082015260400190565b60005b8381101561196f578181015183820152602001611957565b8381111561197e576000848401525b50505050565b801515811461199257600080fd5b50565b6fffffffffffffffffffffffffffffffff8116811461199257600080fdfea2646970667358221220cc3a54bef48e7c0949180eded7674ff5bd977a5f62bcb41a4f71e8a203e1c0ad64736f6c63430006060033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061011b5760003560e01c80638cf0a2d6116100b2578063b92ae87c11610081578063deca5f8811610066578063deca5f881461026a578063f851a4401461027d578063fcae4484146102855761011b565b8063b92ae87c1461022a578063cd75c7d41461024a5761011b565b80638cf0a2d6146101dc5780638da5cb5b146101ef578063a7304bf714610204578063b3c2ec6f146102175761011b565b806337296c26116100ee57806337296c261461017b5780633a1283221461019c57806341c0e1b5146101af57806359221a68146101b75761011b565b806305cc61ad14610120578063106b03391461013e5780631e48907b1461015357806332a6a0c414610168575b600080fd5b61012861028d565b60405161013591906116e8565b60405180910390f35b610146610366565b604051610135919061193b565b6101666101613660046114ad565b61036c565b005b610166610176366004611515565b6103d7565b61018e6101893660046114ad565b61087a565b604051610135929190611944565b6101666101aa3660046114cf565b610896565b610166610969565b6101ca6101c5366004611585565b6109a8565b60405161013596959493929190611669565b6101286101ea36600461159d565b610a30565b6101f7610b8e565b6040516101359190611648565b6101666102123660046114ad565b610baa565b6101666102253660046114ad565b610c15565b61023d6102383660046114ad565b610c74565b6040516101359190611736565b61025d6102583660046114ad565b610ca2565b60405161013591906118f1565b6101666102783660046114ad565b610d87565b6101f7610dce565b610166610dea565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561035d5760008481526020908190206040805160c08101825260048602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001808201546fffffffffffffffffffffffffffffffff8082168688015270010000000000000000000000000000000091829004811694860194909452600283015480851660608701520490921660808401526003015460ff16151560a083015290835290920191016102b1565b50505050905090565b60045481565b60015473ffffffffffffffffffffffffffffffffffffffff16331461039057600080fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081610404577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610406565b845b90506104128682610df5565b610451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890611826565b60405180910390fd5b336000908152600360205260409020610468611454565b506040805160c0810182523381526fffffffffffffffffffffffffffffffff808a166020830152848116928201929092528682166060820152908516608082015283151560a082015260048054600190810190915582015460ff1615610674578060028360000154815481106104da57fe5b6000918252602080832084516004939093020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921782558301516001820180546040808701517fffffffffffffffffffffffffffffffff000000000000000000000000000000009283166fffffffffffffffffffffffffffffffff958616178516700100000000000000000000000000000000918616820217909355606087015160028601805460808a01519416918616919091178516929094169092021790915560a090930151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055905133917fe00da2178806f37f69815e9ed5ed3072ec1d55206d60916d99b469c7daa421e491a23373ffffffffffffffffffffffffffffffffffffffff167f508cd13d884a850b53749d0842aae60210b6697a08539737860eb1922ca3d62a89858989896040516106679594939291906118ff565b60405180910390a2610870565b6002805460018082018355600083815284517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600490940293840180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560208501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf840180546040808901517fffffffffffffffffffffffffffffffff000000000000000000000000000000009283166fffffffffffffffffffffffffffffffff95861617851670010000000000000000000000000000000091861682021790935560608901517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad08801805460808c01519416918616919091178516929094169092021790915560a08601517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad190940180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811695151595909517905593547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0186558582018054909316909117909155905133917fa88fac53823b534c72d6958345adbe6801e072750d83b490d52ebbac51473a6391a25b5050505050505050565b6003602052600090815260409020805460019091015460ff1682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108ba57600080fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff83161415610938576000805460405173ffffffffffffffffffffffffffffffffffffffff9091169183156108fc02918491818181858888f19350505050158015610932573d6000803e3d6000fd5b50610965565b6000546109659073ffffffffffffffffffffffffffffffffffffffff84811691168363ffffffff610e3416565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461098d57600080fd5b60005473ffffffffffffffffffffffffffffffffffffffff16ff5b600281815481106109b557fe5b6000918252602090912060049091020180546001820154600283015460039093015473ffffffffffffffffffffffffffffffffffffffff90921693506fffffffffffffffffffffffffffffffff8082169370010000000000000000000000000000000092839004821693818316939091049091169060ff1686565b6060808267ffffffffffffffff81118015610a4a57600080fd5b50604051908082528060200260200182016040528015610a8457816020015b610a71611454565b815260200190600190039081610a695790505b50805190915084840290818501908111610a9e5780610aa1565b82515b90506000825b82811015610b805760028181548110610abc57fe5b60009182526020918290206040805160c0810182526004909302909101805473ffffffffffffffffffffffffffffffffffffffff16835260018101546fffffffffffffffffffffffffffffffff80821695850195909552700100000000000000000000000000000000908190048516928401929092526002810154808516606085015291909104909216608082015260039091015460ff16151560a08201528551869084908110610b6957fe5b602090810291909101015260019182019101610aa7565b509293505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff163314610bce57600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c3957600080fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020600181015460ff16156109655761096582610eda565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090206001015460ff1690565b610caa611454565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604090208054600280549091908110610ce057fe5b60009182526020918290206040805160c0810182526004909302909101805473ffffffffffffffffffffffffffffffffffffffff16835260018101546fffffffffffffffffffffffffffffffff80821695850195909552700100000000000000000000000000000000908190048516928401929092526002810154808516606085015291909104909216608082015260039091015460ff16151560a0820152915050919050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dab57600080fd5b60015473ffffffffffffffffffffffffffffffffffffffff1615610bce57600080fd5b60015473ffffffffffffffffffffffffffffffffffffffff1681565b610df333610eda565b565b6000816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161115610e2b57506000610b88565b50600192915050565b610ed58363a9059cbb60e01b8484604051602401610e539291906116c2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611249565b505050565b600254610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610448906117c9565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020600181015460ff16610f76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890611792565b60028054600091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610faa57fe5b6000918252602080832060049092029091015473ffffffffffffffffffffffffffffffffffffffff1680835260039091526040909120835481556002805492935090917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061101957fe5b9060005260206000209060040201600284600001548154811061103857fe5b60009182526020909120825460049092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911781556001808301805491830180547fffffffffffffffffffffffffffffffff000000000000000000000000000000009081166fffffffffffffffffffffffffffffffff94851617808355925470010000000000000000000000000000000090819004851681029385169390931790915560028086018054828701805490941690861617808455905484900485169093029290931691909117905560039283015492909101805460ff90931615157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009093169290921790915580548061116b57fe5b60008281526020812060047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90930183810290910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600181810184905560028201849055600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915591909455825484019092559185018054909116905580845560405133917fae563681ccc696fae58fe830f401bc9c043a43ddb9f7c2830b32c3c70d9966e791a250505050565b60606112ab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112ff9092919063ffffffff16565b805190915015610ed557808060200190518101906112c991906114f9565b610ed5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890611894565b606061130e8484600085611316565b949350505050565b60606113218561141b565b611357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489061185d565b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051611381919061162c565b60006040518083038185875af1925050503d80600081146113be576040519150601f19603f3d011682016040523d82523d6000602084013e6113c3565b606091505b509150915081156113d757915061130e9050565b8051156113e75780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190611741565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061130e575050151592915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b6000602082840312156114be578081fd5b6114c88383611489565b9392505050565b600080604083850312156114e1578081fd5b6114eb8484611489565b946020939093013593505050565b60006020828403121561150a578081fd5b81516114c881611984565b600080600080600060a0868803121561152c578081fd5b853561153781611995565b9450602086013561154781611995565b9350604086013561155781611995565b9250606086013561156781611995565b9150608086013561157781611984565b809150509295509295909350565b600060208284031215611596578081fd5b5035919050565b600080604083850312156115af578182fd5b50508035926020909101359150565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101516fffffffffffffffffffffffffffffffff8082166020850152806040840151166040850152806060840151166060850152806080840151166080850152505060a0810151151560a08301525050565b6000825161163e818460208701611954565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9690961686526fffffffffffffffffffffffffffffffff9485166020870152928416604086015290831660608501529091166080830152151560a082015260c00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561172a576117178385516115be565b9284019260c09290920191600101611704565b50909695505050505050565b901515815260200190565b6000602082528251806020840152611760816040850160208701611954565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60208082526018908201527f4d75737420666972737420626520737562736372696265640000000000000000604082015260600190565b60208082526021908201527f4d757374206861766520737562736372696265727320696e20746865206c697360408201527f7400000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526016908201527f4d75737420626520636f727265637420706172616d7300000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b60c08101610b8882846115be565b6fffffffffffffffffffffffffffffffff9586168152938516602085015291841660408401529092166060820152901515608082015260a00190565b90815260200190565b9182521515602082015260400190565b60005b8381101561196f578181015183820152602001611957565b8381111561197e576000848401525b50505050565b801515811461199257600080fd5b50565b6fffffffffffffffffffffffffffffffff8116811461199257600080fdfea2646970667358221220cc3a54bef48e7c0949180eded7674ff5bd977a5f62bcb41a4f71e8a203e1c0ad64736f6c63430006060033
Deployed Bytecode Sourcemap
9094:6194:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9094:6194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;14003:109:0;;;:::i;:::-;;;;;;;;;;;;;;;;9550:23;;;:::i;:::-;;;;;;;;8435:122;;;;;;;;;:::i;:::-;;10335:1265;;;;;;;;;:::i;9487:54::-;;;;;;;;;:::i;:::-;;;;;;;;;8730:285;;;;;;;;;:::i;8603:80::-;;;:::i;9445:35::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14374:509;;;;;;;;;:::i;7542:20::-;;;:::i;:::-;;;;;;;;8214:122;;;;;;;;;:::i;15073:212::-;;;;;;;;;:::i;13314:172::-;;;;;;;;;:::i;:::-;;;;;;;;13694:195;;;;;;;;;:::i;:::-;;;;;;;;7931:161;;;;;;;;;:::i;7569:20::-;;;:::i;11713:75::-;;;:::i;14003:109::-;14050:23;14093:11;14086:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14003:109;:::o;9550:23::-;;;;:::o;8435:122::-;8516:5;;;;8502:10;:19;8494:28;;12:1:-1;9;2:12;8494:28:0;8535:5;:14;;;;;;;;;;;;;;;8435:122::o;10335:1265::-;10543:21;10567:13;:39;;10603:2;10567:39;;;10583:9;10567:39;10543:63;;10625:37;10637:9;10648:13;10625:11;:37::i;:::-;10617:72;;;;;;;;;;;;;;;;;;;;;;10747:10;10702:27;10732:26;;;:14;:26;;;;;10771:34;;:::i;:::-;-1:-1:-1;10808:294:0;;;;;;;;11030:10;10808:294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11115:11;:13;;;;;;;;;11145:18;;;;;11141:452;;;11210:12;11180:11;11192:7;:14;;;11180:27;;;;;;;;;;;;;;;;:42;;:27;;;;;;:42;;;;;;;;;;;;;;;;;-1:-1:-1;11180:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:19;;11252:10;;11244:19;;;11296:10;11283:95;;;11308:9;11319:13;11334;11349;11364;11283:95;;;;;;;;;;;;;;;;;;;11141:452;;;11411:11;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;11411:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11475:18;;-1:-1:-1;11475:22:0;11458:39;;11512:18;;;:25;;;;;;;;;;;11559:22;;11570:10;;11559:22;;;11141:452;10335:1265;;;;;;;;:::o;9487:54::-;;;;;;;;;;;;;;;;;;;;;:::o;8730:285::-;7638:5;;:19;:5;7647:10;7638:19;7630:28;;12:1:-1;9;2:12;7630:28:0;8830:42:::1;8820:52;::::0;::::1;;8816:192;;;8897:5;::::0;;8889:32:::1;::::0;8897:5:::1;::::0;;::::1;::::0;8889:32;::::1;;;::::0;8913:7;;8889:32;8897:5;8889:32;8913:7;8897:5;8889:32;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;8889:32:0;8816:192;;;8981:5;::::0;8954:42:::1;::::0;8981:5:::1;8954:26:::0;;::::1;::::0;8981:5:::1;8988:7:::0;8954:42:::1;:26;:42;:::i;:::-;8730:285:::0;;:::o;8603:80::-;7638:5;;:19;:5;7647:10;7638:19;7630:28;;12:1:-1;9;2:12;7630:28:0;8668:5:::1;::::0;::::1;;8647:28;9445:35:::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9445:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14374:509::-;14452:23;14488:31;14543:8;14522:30;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14522:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;14658:14:0;;14488:64;;-1:-1:-1;14578:16:0;;;;14616;;;;14652:20;;14651:45;;14693:3;14651:45;;;14676:7;:14;14651:45;14645:51;-1:-1:-1;14709:10:0;14748:5;14734:115;14759:3;14755:1;:7;14734:115;;;14801:11;14813:1;14801:14;;;;;;;;;;;;;;;;;14784:31;;;;;;;;14801:14;;;;;;;14784:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;;:7;;14792:5;;14784:14;;;;;;;;;;;;;;;:31;14830:7;;;;;14764:3;14734:115;;;-1:-1:-1;14868:7:0;;-1:-1:-1;;;;14374:509:0;;;;;:::o;7542:20::-;;;;;;:::o;8214:122::-;8295:5;;;;8281:10;:19;8273:28;;12:1:-1;9;2:12;8273:28:0;8314:5;:14;;;;;;;;;;;;;;;8214:122::o;15073:212::-;7638:5;;:19;:5;7647:10;7638:19;7630:28;;12:1:-1;9;2:12;7630:28:0;15174:21:::1;::::0;::::1;15144:27;15174:21:::0;;;:14:::1;:21;::::0;;;;15212:18:::1;::::0;::::1;::::0;::::1;;15208:70;;;15247:19;15260:5;15247:12;:19::i;13314:172::-:0;13419:21;;13372:4;13419:21;;;:14;:21;;;;;13460:18;;;;;;13314:172::o;13694:195::-;13749:21;;:::i;:::-;13813;;;13783:27;13813:21;;;:14;:21;;;;;13866:14;;13854:11;:27;;:11;;13866:14;13854:27;;;;;;;;;;;;;;;13847:34;;;;;;;;13854:27;;;;;;;13847:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13694:195:0;;;:::o;7931:161::-;8012:5;;;;7998:10;:19;7990:28;;12:1:-1;9;2:12;7990:28:0;8037:5;;:19;:5;:19;8029:28;;12:1:-1;9;2:12;7569:20:0;;;;;;:::o;11713:75::-;11756:24;11769:10;11756:12;:24::i;:::-;11713:75::o;12062:198::-;12144:4;12179:9;12167:21;;:9;:21;;;12163:66;;;-1:-1:-1;12212:5:0;12205:12;;12163:66;-1:-1:-1;12248:4:0;12062:198;;;;:::o;5682:176::-;5764:86;5784:5;5814:23;;;5839:2;5843:5;5791:58;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;5791:58:0;;;49:4:-1;25:18;;61:17;;5791:58:0;182:15:-1;5791:58:0;;;;179:29:-1;;;;160:49;;;5764:19:0;:86::i;:::-;5682:176;;;:::o;12408:735::-;12473:11;:18;12465:68;;;;;;;;;;;;;;12576:21;;;12546:27;12576:21;;;:14;:21;;;;;12618:18;;;;;;12610:55;;;;;;;;;;;;;;12698:11;12710:18;;12678:17;;12698:11;12710:22;;;;12698:35;;;;;;;;;;;;;;;;;;;;;:40;;;12782:25;;;:14;:25;;;;;;;12836:14;;12818:32;;12893:11;12905:18;;12698:40;;-1:-1:-1;12782:25:0;;12905:22;;;;12893:35;;;;;;;;;;;;;;;;12863:11;12875:7;:14;;;12863:27;;;;;;;;;;;;;;;;:65;;:27;;;;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12939:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13014:13;;;;;;;13038:18;;;:26;;;;;;;13075:18;;;13111:24;;13124:10;;13111:24;;;12408:735;;;;:::o;7054:419::-;7136:23;7162:69;7190:4;7162:69;;;;;;;;;;;;;;;;;7170:5;7162:27;;;;:69;;;;;:::i;:::-;7246:17;;7136:95;;-1:-1:-1;7246:21:0;7242:224;;7388:10;7377:30;;;;;;;;;;;;;;7369:85;;;;;;;;;;;;;2036:196;2139:12;2171:53;2194:6;2202:4;2208:1;2211:12;2171:22;:53::i;:::-;2164:60;2036:196;-1:-1:-1;;;;2036:196:0:o;2798:979::-;2928:12;2961:18;2972:6;2961:10;:18::i;:::-;2953:60;;;;;;;;;;;;;;3087:12;3101:23;3128:6;:11;;3148:8;3159:4;3128:36;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;3086:78:0;;;;3179:7;3175:595;;;3210:10;-1:-1:-1;3203:17:0;;-1:-1:-1;3203:17:0;3175:595;3324:17;;:21;3320:439;;3587:10;3581:17;3648:15;3635:10;3631:2;3627:19;3620:44;3535:148;3730:12;3723:20;;;;;;;;;;;;823:619;883:4;1351:20;;1194:66;1391:23;;;;;;:42;;-1:-1:-1;;1418:15:0;;;1383:51;-1:-1:-1;;823:619:0:o;9094:6194::-;;;;;;;;;-1:-1:-1;9094:6194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;17938:42;17927:54;;18513:35;;18503:2;;18562:1;;18552:12;682:241;;786:2;774:9;765:7;761:23;757:32;754:2;;;-1:-1;;792:12;754:2;854:53;899:7;875:22;854:53;;;844:63;748:175;-1:-1;;;748:175;930:366;;;1051:2;1039:9;1030:7;1026:23;1022:32;1019:2;;;-1:-1;;1057:12;1019:2;1119:53;1164:7;1140:22;1119:53;;;1109:63;1209:2;1248:22;;;;612:20;;-1:-1;;;1013:283;1303:257;;1415:2;1403:9;1394:7;1390:23;1386:32;1383:2;;;-1:-1;;1421:12;1383:2;354:6;348:13;366:30;390:5;366:30;;1567:737;;;;;;1736:3;1724:9;1715:7;1711:23;1707:33;1704:2;;;-1:-1;;1743:12;1704:2;488:6;475:20;500:33;527:5;500:33;;;1795:63;-1:-1;1895:2;1934:22;;475:20;500:33;475:20;500:33;;;1903:63;-1:-1;2003:2;2042:22;;475:20;500:33;475:20;500:33;;;2011:63;-1:-1;2111:2;2150:22;;475:20;500:33;475:20;500:33;;;2119:63;-1:-1;2219:3;2256:22;;206:20;231:30;206:20;231:30;;;2228:60;;;;1698:606;;;;;;;;;2311:241;;2415:2;2403:9;2394:7;2390:23;2386:32;2383:2;;;-1:-1;;2421:12;2383:2;-1:-1;612:20;;2377:175;-1:-1;2377:175;2559:366;;;2680:2;2668:9;2659:7;2655:23;2651:32;2648:2;;;-1:-1;;2686:12;2648:2;-1:-1;;612:20;;;2838:2;2877:22;;;612:20;;-1:-1;2642:283;7312:1130;17938:42;7529:16;7523:23;17927:54;3306:3;3299:37;7698:4;7691:5;7687:16;7681:23;17818:34;;9784:5;17807:46;7698:4;7762:3;7758:14;9754:37;17818:34;7856:4;7849:5;7845:16;7839:23;17807:46;7856:4;7920:3;7916:14;9754:37;17818:34;8023:4;8016:5;8012:16;8006:23;17807:46;8023:4;8087:3;8083:14;9754:37;17818:34;8190:4;8183:5;8179:16;8173:23;17807:46;8190:4;8254:3;8250:14;9754:37;;;8352:4;8345:5;8341:16;8335:23;17719:13;17712:21;8352:4;8410:3;8406:14;4572:34;7430:1012;;;10043:262;;4889:5;16568:12;5000:52;5045:6;5040:3;5033:4;5026:5;5022:16;5000:52;;;5064:16;;;;;10168:137;-1:-1;;10168:137;10312:213;17938:42;17927:54;;;;3299:37;;10430:2;10415:18;;10401:124;10532:759;17938:42;17927:54;;;;3299:37;;17818:34;17807:46;;;10949:2;10934:18;;9754:37;17807:46;;;11032:2;11017:18;;9754:37;17807:46;;;11115:2;11100:18;;9754:37;17807:46;;;11198:3;11183:19;;9754:37;17719:13;17712:21;11276:3;11261:19;;4572:34;10784:3;10769:19;;10755:536;11298:324;17938:42;17927:54;;;;3299:37;;11608:2;11593:18;;9994:37;11444:2;11429:18;;11415:207;11629:485;11859:2;11873:47;;;16568:12;;11844:18;;;17162:19;;;11629:485;;11859:2;16391:14;;;;17202;;;;11629:485;4134:353;4159:6;4156:1;4153:13;4134:353;;;3082:108;3186:3;4226:6;4220:13;3082:108;;;16986:14;;;;3219:4;3210:14;;;;;4181:1;4174:9;4134:353;;;-1:-1;11926:178;;11830:284;-1:-1;;;;;;11830:284;12121:201;17719:13;;17712:21;4572:34;;12233:2;12218:18;;12204:118;12329:301;;12467:2;12488:17;12481:47;5237:5;16568:12;17174:6;12467:2;12456:9;12452:18;17162:19;5331:52;5376:6;17202:14;12456:9;17202:14;12467:2;5357:5;5353:16;5331:52;;;18437:2;18417:14;18433:7;18413:28;5395:39;;;;17202:14;5395:39;;12438:192;-1:-1;;12438:192;12637:407;12828:2;12842:47;;;5671:2;12813:18;;;17162:19;5707:26;17202:14;;;5687:47;5753:12;;;12799:245;13051:407;13242:2;13256:47;;;6004:2;13227:18;;;17162:19;6040:34;17202:14;;;6020:55;6109:3;6095:12;;;6088:25;6132:12;;;13213:245;13465:407;13656:2;13670:47;;;6383:2;13641:18;;;17162:19;6419:24;17202:14;;;6399:45;6463:12;;;13627:245;13879:407;14070:2;14084:47;;;6714:2;14055:18;;;17162:19;6750:31;17202:14;;;6730:52;6801:12;;;14041:245;14293:407;14484:2;14498:47;;;7052:2;14469:18;;;17162:19;7088:34;17202:14;;;7068:55;7157:12;7143;;;7136:34;7189:12;;;14455:245;14707:338;14887:3;14872:19;;14902:133;14876:9;15008:6;14902:133;;15052:647;17818:34;17807:46;;;9754:37;;17807:46;;;15441:2;15426:18;;9754:37;17807:46;;;15524:2;15509:18;;9754:37;17807:46;;;15607:2;15592:18;;9754:37;17719:13;;17712:21;15684:3;15669:19;;4572:34;15276:3;15261:19;;15247:452;15706:213;9994:37;;;15824:2;15809:18;;15795:124;15926:312;9994:37;;;17719:13;17712:21;16224:2;16209:18;;4572:34;16066:2;16051:18;;16037:201;18073:268;18138:1;18145:101;18159:6;18156:1;18153:13;18145:101;;;18226:11;;;18220:18;18207:11;;;18200:39;18181:2;18174:10;18145:101;;;18261:6;18258:1;18255:13;18252:2;;;18138:1;18317:6;18312:3;18308:16;18301:27;18252:2;;18122:219;;;;18578:111;18659:5;17719:13;17712:21;18637:5;18634:32;18624:2;;18680:1;;18670:12;18624:2;18618:71;;18696:117;17818:34;18783:5;17807:46;18758:5;18755:35;18745:2;;18804:1;;18794:12
Swarm Source
ipfs://cc3a54bef48e7c0949180eded7674ff5bd977a5f62bcb41a4f71e8a203e1c0ad
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.