More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,440 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem | 18798517 | 373 days ago | IN | 0 ETH | 0.0035193 | ||||
Redeem | 18792110 | 374 days ago | IN | 0 ETH | 0.00304496 | ||||
Redeem | 18666994 | 392 days ago | IN | 0 ETH | 0.00156507 | ||||
Redeem | 16676558 | 671 days ago | IN | 0 ETH | 0.00119076 | ||||
Redeem | 16564530 | 687 days ago | IN | 0 ETH | 0.00105659 | ||||
Redeem | 16455031 | 702 days ago | IN | 0 ETH | 0.00070437 | ||||
Redeem | 15639220 | 816 days ago | IN | 0 ETH | 0.00118399 | ||||
Redeem | 15633040 | 817 days ago | IN | 0 ETH | 0.00094664 | ||||
Redeem | 15481539 | 840 days ago | IN | 0 ETH | 0.00059162 | ||||
Redeem | 15458852 | 843 days ago | IN | 0 ETH | 0.00045772 | ||||
Redeem | 15443991 | 846 days ago | IN | 0 ETH | 0.00049999 | ||||
Redeem | 15442524 | 846 days ago | IN | 0 ETH | 0.00086852 | ||||
Redeem | 15433483 | 847 days ago | IN | 0 ETH | 0.00070494 | ||||
Redeem | 15340605 | 862 days ago | IN | 0 ETH | 0.00118211 | ||||
Redeem | 15106748 | 898 days ago | IN | 0 ETH | 0.0006714 | ||||
Redeem | 14796094 | 951 days ago | IN | 0 ETH | 0.00187756 | ||||
Redeem | 14643458 | 975 days ago | IN | 0 ETH | 0.00106295 | ||||
Redeem | 14643451 | 975 days ago | IN | 0 ETH | 0.00107717 | ||||
Redeem | 14510101 | 996 days ago | IN | 0 ETH | 0.0019141 | ||||
Redeem | 14508897 | 996 days ago | IN | 0 ETH | 0.00319133 | ||||
Redeem | 14507634 | 996 days ago | IN | 0 ETH | 0.00249563 | ||||
Redeem | 14505445 | 996 days ago | IN | 0 ETH | 0.00191095 | ||||
Redeem | 14503356 | 997 days ago | IN | 0 ETH | 0.00387353 | ||||
Redeem | 14480814 | 1000 days ago | IN | 0 ETH | 0.00216569 | ||||
Redeem | 14479170 | 1000 days ago | IN | 0 ETH | 0.00173527 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ParallelBondingContract
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-17 */ // File contracts/libraries/SafeMath.sol pragma solidity 0.7.5; 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) { 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; 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; } function sqrrt(uint256 a) internal pure returns (uint c) { if (a > 3) { c = a; uint b = add( div( a, 2), 1 ); while (b < c) { c = b; b = div( add( div( a, b ), b), 2 ); } } else if (a != 0) { c = 1; } } } // File contracts/libraries/Address.sol pragma solidity 0.7.5; library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } 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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } 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); } } } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function addressToString(address _address) internal pure returns(string memory) { bytes32 _bytes = bytes32(uint256(_address)); bytes memory HEX = "0123456789abcdef"; bytes memory _addr = new bytes(42); _addr[0] = '0'; _addr[1] = 'x'; for(uint256 i = 0; i < 20; i++) { _addr[2+i*2] = HEX[uint8(_bytes[i + 12] >> 4)]; _addr[3+i*2] = HEX[uint8(_bytes[i + 12] & 0x0f)]; } return string(_addr); } } // File contracts/interfaces/IERC20.sol pragma solidity 0.7.5; interface IERC20 { function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/libraries/SafeERC20.sol pragma solidity 0.7.5; 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)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { 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)); } function _callOptionalReturn(IERC20 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"); } } } // File contracts/interfaces/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.7.5; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File contracts/mocks/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.7.5; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File contracts/interfaces/IERC1155.sol pragma solidity ^0.7.5; /** @title ERC-1155 Multi Token Standard @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md Note: The ERC-165 identifier for this interface is 0xd9b67a26. */ interface IERC1155 /* is ERC165 */ { /** @dev Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). The `_operator` argument MUST be msg.sender. The `_from` argument MUST be the address of the holder whose balance is decreased. The `_to` argument MUST be the address of the recipient whose balance is increased. The `_id` argument MUST be the token type being transferred. The `_value` argument MUST be the number of tokens the holder balance is decreased by and match what the recipient balance is increased by. When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address). */ event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value); /** @dev Either `TransferSingle` or `TransferBatch` MUST emit when tokens are transferred, including zero value transfers as well as minting or burning (see "Safe Transfer Rules" section of the standard). The `_operator` argument MUST be msg.sender. The `_from` argument MUST be the address of the holder whose balance is decreased. The `_to` argument MUST be the address of the recipient whose balance is increased. The `_ids` argument MUST be the list of tokens being transferred. The `_values` argument MUST be the list of number of tokens (matching the list and order of tokens specified in _ids) the holder balance is decreased by and match what the recipient balance is increased by. When minting/creating tokens, the `_from` argument MUST be set to `0x0` (i.e. zero address). When burning/destroying tokens, the `_to` argument MUST be set to `0x0` (i.e. zero address). */ event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _values); /** @dev MUST emit when approval for a second party/operator address to manage all tokens for an owner address is enabled or disabled (absense of an event assumes disabled). */ event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /** @dev MUST emit when the URI is updated for a token ID. URIs are defined in RFC 3986. The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata URI JSON Schema". */ event URI(string _value, uint256 indexed _id); /** @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call). @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). MUST revert if `_to` is the zero address. MUST revert if balance of holder for token `_id` is lower than the `_value` sent. MUST revert on any other error. MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard). After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard). @param _from Source address @param _to Target address @param _id ID of the token type @param _value Transfer amount @param _data Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external; /** @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call). @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard). MUST revert if `_to` is the zero address. MUST revert if length of `_ids` is not the same as length of `_values`. MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient. MUST revert on any other error. MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard). Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc). After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard). @param _from Source address @param _to Target address @param _ids IDs of each token type (order and length must match _values array) @param _values Transfer amounts per token type (order and length must match _ids array) @param _data Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external; /** @notice Get the balance of an account's Tokens. @param _owner The address of the token holder @param _id ID of the Token @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) external view returns (uint256); /** @notice Get the balance of multiple account/token pairs @param _owners The addresses of the token holders @param _ids ID of the Tokens @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); /** @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens. @dev MUST emit the ApprovalForAll event on success. @param _operator Address to add to the set of authorized operators @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external; /** @notice Queries the approval status of an operator for a given owner. @param _owner The owner of the Tokens @param _operator Address of authorized operator @return True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) external view returns (bool); } // File contracts/OP1155/IParagonBondingTreasury.sol pragma solidity 0.7.5; interface IParagonBondingTreasury { function sendPDT(uint _amountPayoutToken) external; function valueOfToken( address _principalToken, uint _amount ) external view returns ( uint value_ ); function PDT() external view returns (address); } // File contracts/types/Ownable.sol pragma solidity 0.7.5; contract Ownable { address public policy; constructor () { policy = msg.sender; } modifier onlyPolicy() { require( policy == msg.sender, "Ownable: caller is not the owner" ); _; } function transferManagment(address _newOwner) external onlyPolicy() { require( _newOwner != address(0) ); policy = _newOwner; } } // File contracts/OP1155/ParallelBondingContract.sol // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; /// @title Parallel Bonding Contract /// @author JeffX /// @notice Bonding Parallel ERC1155s in return for PDT tokens contract ParallelBondingContract is Ownable { using SafeERC20 for IERC20; using SafeMath for uint; /// EVENTS /// /// @notice Emitted when A bond is created /// @param deposit Address of where bond is deposited to /// @param payout Amount of PDT to be paid out /// @param expires Block number bond will be fully redeemable event BondCreated( uint deposit, uint payout, uint expires ); /// @notice Emitted when a bond is redeemed /// @param recipient Address receiving PDT /// @param payout Amount of PDT redeemed /// @param remaining Amount of PDT left to be paid out event BondRedeemed( address recipient, uint payout, uint remaining ); /// STATE VARIABLES /// /// @notice Paragon DAO Token IERC20 immutable public PDT; /// @notice Parallel ERC1155 IERC1155 immutable public LL; /// @notice Custom Treasury IParagonBondingTreasury immutable public customTreasury; /// @notice Olympus DAO address address immutable public olympusDAO; /// @notice Olympus treasury address address public olympusTreasury; /// @notice Total Parallel tokens that have been bonded uint public totalPrincipalBonded; /// @notice Total PDT tokens given as payout uint public totalPayoutGiven; /// @notice Vesting term in blocks uint public vestingTerm; /// @notice Percent fee that goes to Olympus uint public immutable olympusFee = 33300; /// @notice Array of IDs that have been bondable uint[] public bondedIds; /// @notice Bool if bond contract has been initialized bool public initialized; /// @notice Stores bond information for depositors mapping( address => Bond ) public bondInfo; /// @notice Stores bond information for a Parallel ID mapping( uint => IdDetails ) public idDetails; /// STRUCTS /// /// @notice Details of an addresses current bond /// @param payout PDT tokens remaining to be paid /// @param vesting Blocks left to vest /// @param lastBlock Last interaction struct Bond { uint payout; uint vesting; uint lastBlock; } /// @notice Details of an ID that is to be bonded /// @param bondPrice Payout price of the ID /// @param remainingToBeSold Remaining amount of tokens that can be bonded /// @param inArray Bool if ID is in array that keeps track of IDs struct IdDetails { uint bondPrice; uint remainingToBeSold; bool inArray; } /// CONSTRUCTOR /// /// @param _customTreasury Address of cusotm treasury /// @param _LL Address of the Parallel token /// @param _olympusTreasury Address of the Olympus treasury /// @param _initialOwner Address of the initial owner /// @param _olympusDAO Address of Olympus DAO constructor( address _customTreasury, address _LL, address _olympusTreasury, address _initialOwner, address _olympusDAO ) { require( _customTreasury != address(0) ); customTreasury = IParagonBondingTreasury( _customTreasury ); PDT = IERC20( IParagonBondingTreasury(_customTreasury).PDT() ); require( _LL != address(0) ); LL = IERC1155( _LL ); require( _olympusTreasury != address(0) ); olympusTreasury = _olympusTreasury; require( _initialOwner != address(0) ); policy = _initialOwner; require( _olympusDAO != address(0) ); olympusDAO = _olympusDAO; } /// POLICY FUNCTIONS /// /// @notice Initializes bond and sets vesting rate /// @param _vestingTerm Vesting term in blocks function initializeBond(uint _vestingTerm) external onlyPolicy() { require(!initialized, "Already initialized"); vestingTerm = _vestingTerm; initialized = true; } /// @notice Updates current vesting term /// @param _vesting New vesting in blocks function setVesting( uint _vesting ) external onlyPolicy() { require(initialized, "Not initalized"); vestingTerm = _vesting; } /// @notice Set bond price and how many to be sold for each ID /// @param _ids Array of IDs that will be sold /// @param _prices PDT given to bond correspond ID in `_ids` /// @param _toBeSold Number of IDs looking to be acquired function setIdDetails(uint[] calldata _ids, uint[] calldata _prices, uint _toBeSold) external onlyPolicy() { require(_ids.length == _prices.length, "Lengths do not match"); for(uint i; i < _ids.length; i++) { IdDetails memory idDetail = idDetails[_ids[i]]; idDetail.bondPrice = _prices[i]; idDetail.remainingToBeSold = _toBeSold; if(!idDetail.inArray) { bondedIds.push(_ids[i]); idDetail.inArray = true; } idDetails[_ids[i]] = idDetail; } } /// @notice Updates address to send Olympus fee to /// @param _olympusTreasury Address of new Olympus treasury function changeOlympusTreasury(address _olympusTreasury) external { require( msg.sender == olympusDAO, "Only Olympus DAO" ); olympusTreasury = _olympusTreasury; } /// USER FUNCTIONS /// /// @notice Bond Parallel ERC1155 to get PDT tokens /// @param _id ID number that is being bonded /// @param _amount Amount of sepcific `_id` to bond /// @param _depositor Address that PDT tokens will be redeemable for function deposit(uint _id, uint _amount, address _depositor) external returns (uint) { require(initialized, "Not initalized"); require( idDetails[_id].bondPrice > 0 && idDetails[_id].remainingToBeSold >= _amount, "Not bondable"); require( _amount > 0, "Cannot bond 0" ); require( _depositor != address(0), "Invalid address" ); uint payout; uint fee; (payout, fee) = payoutFor( _id ); // payout and fee is computed payout = payout.mul(_amount); fee = fee.mul(_amount); // depositor info is stored bondInfo[ _depositor ] = Bond({ payout: bondInfo[ _depositor ].payout.add( payout ), vesting: vestingTerm, lastBlock: block.number }); idDetails[_id].remainingToBeSold = idDetails[_id].remainingToBeSold.sub(_amount); totalPrincipalBonded = totalPrincipalBonded.add(_amount); // total bonded increased totalPayoutGiven = totalPayoutGiven.add(payout); // total payout increased customTreasury.sendPDT( payout.add(fee) ); PDT.safeTransfer(olympusTreasury, fee); LL.safeTransferFrom( msg.sender, address(customTreasury), _id, _amount, "" ); // transfer principal bonded to custom treasury // indexed events are emitted emit BondCreated( _id, payout, block.number.add( vestingTerm ) ); return payout; } /// @notice Redeem bond for `depositor` /// @param _depositor Address of depositor being redeemed /// @return Amount of PDT redeemed function redeem(address _depositor) external returns (uint) { Bond memory info = bondInfo[ _depositor ]; uint percentVested = percentVestedFor( _depositor ); // (blocks since last interaction / vesting term remaining) if ( percentVested >= 10000 ) { // if fully vested delete bondInfo[ _depositor ]; // delete user info emit BondRedeemed( _depositor, info.payout, 0 ); // emit bond data PDT.safeTransfer( _depositor, info.payout ); return info.payout; } else { // if unfinished // calculate payout vested uint payout = info.payout.mul( percentVested ).div( 10000 ); // store updated deposit info bondInfo[ _depositor ] = Bond({ payout: info.payout.sub( payout ), vesting: info.vesting.sub( block.number.sub( info.lastBlock ) ), lastBlock: block.number }); emit BondRedeemed( _depositor, payout, bondInfo[ _depositor ].payout ); PDT.safeTransfer( _depositor, payout ); return payout; } } /// VIEW FUNCTIONS /// /// @notice Payout and fee for a specific bond ID /// @param _id ID to get payout and fee for /// @return payout_ Amount of PDT user will recieve for bonding `_id` /// @return fee_ Amount of PDT Olympus will recieve for the bonding of `_id` function payoutFor( uint _id ) public view returns ( uint payout_, uint fee_) { uint price = idDetails[_id].bondPrice; fee_ = price.mul( olympusFee ).div( 1e6 ); payout_ = price.sub(fee_); } /// @notice Calculate how far into vesting `_depositor` is /// @param _depositor Address of depositor /// @return percentVested_ Percent `_depositor` is into vesting function percentVestedFor( address _depositor ) public view returns ( uint percentVested_ ) { Bond memory bond = bondInfo[ _depositor ]; uint blocksSinceLast = block.number.sub( bond.lastBlock ); uint vesting = bond.vesting; if ( vesting > 0 ) { percentVested_ = blocksSinceLast.mul( 10000 ).div( vesting ); } else { percentVested_ = 0; } } /// @notice Calculate amount of payout token available for claim by `_depositor` /// @param _depositor Address of depositor /// @return pendingPayout_ Pending payout for `_depositor` function pendingPayoutFor( address _depositor ) external view returns ( uint pendingPayout_ ) { uint percentVested = percentVestedFor( _depositor ); uint payout = bondInfo[ _depositor ].payout; if ( percentVested >= 10000 ) { pendingPayout_ = payout; } else { pendingPayout_ = payout.mul( percentVested ).div( 10000 ); } } /// @notice Returns all the ids that are bondable and the amounts that can be bonded for each /// @return Array of all IDs that are bondable /// @return Array of amount remaining to be bonded for each bondable ID function bondableIds() external view returns (uint[] memory, uint[] memory) { uint numberOfBondable; for(uint i = 0; i < bondedIds.length; i++) { uint id = bondedIds[i]; (bool active,) = canBeBonded(id); if(active) numberOfBondable++; } uint256[] memory ids = new uint256[](numberOfBondable); uint256[] memory leftToBond = new uint256[](numberOfBondable); uint nonce; for(uint i = 0; i < bondedIds.length; i++) { uint id = bondedIds[i]; (bool active, uint amount) = canBeBonded(id); if(active) { ids[nonce] = id; leftToBond[nonce] = amount; nonce++; } } return (ids, leftToBond); } /// @notice Determines if `_id` can be bonded, and if so how much is left /// @param _id ID to check if can be bonded /// @return Bool if `_id` can be bonded /// @return Amount of tokens that be bonded for `_id` function canBeBonded(uint _id) public view returns (bool, uint) { IdDetails memory idDetail = idDetails[_id]; if(idDetail.bondPrice > 0 && idDetail.remainingToBeSold > 0) { return (true, idDetail.remainingToBeSold); } else { return (false, 0); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_customTreasury","type":"address"},{"internalType":"address","name":"_LL","type":"address"},{"internalType":"address","name":"_olympusTreasury","type":"address"},{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_olympusDAO","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"deposit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"}],"name":"BondCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remaining","type":"uint256"}],"name":"BondRedeemed","type":"event"},{"inputs":[],"name":"LL","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PDT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondInfo","outputs":[{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"uint256","name":"vesting","type":"uint256"},{"internalType":"uint256","name":"lastBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondableIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bondedIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"canBeBonded","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_olympusTreasury","type":"address"}],"name":"changeOlympusTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"customTreasury","outputs":[{"internalType":"contract IParagonBondingTreasury","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_depositor","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idDetails","outputs":[{"internalType":"uint256","name":"bondPrice","type":"uint256"},{"internalType":"uint256","name":"remainingToBeSold","type":"uint256"},{"internalType":"bool","name":"inArray","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vestingTerm","type":"uint256"}],"name":"initializeBond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"olympusDAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"olympusFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"olympusTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"payoutFor","outputs":[{"internalType":"uint256","name":"payout_","type":"uint256"},{"internalType":"uint256","name":"fee_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"pendingPayoutFor","outputs":[{"internalType":"uint256","name":"pendingPayout_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"percentVestedFor","outputs":[{"internalType":"uint256","name":"percentVested_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"policy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_toBeSold","type":"uint256"}],"name":"setIdDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vesting","type":"uint256"}],"name":"setVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalPayoutGiven","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPrincipalBonded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferManagment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vestingTerm","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
610120604052618214610100908152503480156200001c57600080fd5b5060405162002be538038062002be5833981810160405260a08110156200004257600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620000f657600080fd5b8473ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508473ffffffffffffffffffffffffffffffffffffffff1663c49c127a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200017457600080fd5b505afa15801562000189573d6000803e3d6000fd5b505050506040513d6020811015620001a057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200022257600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200029457600080fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200031057600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200038b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050505060805160601c60a05160601c60c05160601c60e05160601c610100516127aa6200043b60003980610f525280611631525080610b005280610e045250806113bd528061150452806119da52508061098552806114c752508061148152806117a452806119885280611a0452506127aa6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80637cbe044c116100de578063ba176a9a11610097578063ca9835cd11610071578063ca9835cd1461071a578063cd1234b31461075c578063e1c6a1e0146107c2578063e1e71d9c146107f05761018e565b8063ba176a9a14610621578063c49c127a1461063f578063c61040ce146106735761018e565b80637cbe044c1461049b57806386b59413146104b95780638dbdbe6d1461050b57806394c12d1b1461057757806395a2251f14610595578063a7684a39146105ed5761018e565b80633f0fb92f1161014b5780634adf8432116101255780634adf843214610392578063507930ec146103c657806371bcc39c1461041e5780637927ebf8146104525761018e565b80633f0fb92f146102d55780633fd68de4146103195780634966d7b0146103645761018e565b806301b88ee8146101935780630505c8c9146101eb5780630651b7231461021f578063158ef93e146102535780632bab6bde146102735780633bfdd7de14610291575b600080fd5b6101d5600480360360208110156101a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108c8565b6040518082815260200191505060405180910390f35b6101f361095f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610227610983565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61025b6109a7565b60405180821515815260200191505060405180910390f35b61027b6109ba565b6040518082815260200191505060405180910390f35b6102d3600480360360208110156102a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109c0565b005b610317600480360360208110156102eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610afe565b005b6103456004803603602081101561032f57600080fd5b8101908080359060200190929190505050610c03565b6040518083151581526020018281526020019250505060405180910390f35b6103906004803603602081101561037a57600080fd5b8101908080359060200190929190505050610c99565b005b61039a610e02565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610408600480360360208110156103dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e26565b6040518082815260200191505060405180910390f35b610426610f02565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047e6004803603602081101561046857600080fd5b8101908080359060200190929190505050610f28565b604051808381526020018281526020019250505060405180910390f35b6104a3610fab565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b8101908080359060200190929190505050610fb1565b604051808481526020018381526020018215158152602001935050505060405180910390f35b6105616004803603606081101561052157600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fe8565b6040518082815260200191505060405180910390f35b61057f61162f565b6040518082815260200191505060405180910390f35b6105d7600480360360208110156105ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611653565b6040518082815260200191505060405180910390f35b6105f56119d8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106296119fc565b6040518082815260200191505060405180910390f35b610647611a02565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61067b611a26565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106c25780820151818401526020810190506106a7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156107045780820151818401526020810190506106e9565b5050505090500194505050505060405180910390f35b6107466004803603602081101561073057600080fd5b8101908080359060200190929190505050611bbe565b6040518082815260200191505060405180910390f35b61079e6004803603602081101561077257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611be2565b60405180848152602001838152602001828152602001935050505060405180910390f35b6107ee600480360360208110156107d857600080fd5b8101908080359060200190929190505050611c0c565b005b6108c66004803603606081101561080657600080fd5b810190808035906020019064010000000081111561082357600080fd5b82018360208201111561083557600080fd5b8035906020019184602083028401116401000000008311171561085757600080fd5b90919293919293908035906020019064010000000081111561087857600080fd5b82018360208201111561088a57600080fd5b803590602001918460208302840111640100000000831117156108ac57600080fd5b909192939192939080359060200190929190505050611d59565b005b6000806108d483610e26565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050612710821061092e57809250610958565b6109556127106109478484611ffb90919063ffffffff16565b61208190919063ffffffff16565b92505b5050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660009054906101000a900460ff1681565b60035481565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610abb57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4f6e6c79204f6c796d7075732044414f0000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610c0e6126e5565b6008600085815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff161515151581525050905060008160000151118015610c75575060008160200151115b15610c8b57600181602001519250925050610c94565b60008092509250505b915091565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900460ff1615610ddd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f416c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b806004819055506001600660006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e30612708565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506000610eb38260400151436120cb90919063ffffffff16565b90506000826020015190506000811115610ef557610eee81610ee061271085611ffb90919063ffffffff16565b61208190919063ffffffff16565b9350610efa565b600093505b505050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600060086000858152602001908152602001600020600001549050610f8e620f4240610f807f000000000000000000000000000000000000000000000000000000000000000084611ffb90919063ffffffff16565b61208190919063ffffffff16565b9150610fa382826120cb90919063ffffffff16565b925050915091565b60025481565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16905083565b6000600660009054906101000a900460ff1661106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420696e6974616c697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b600060086000868152602001908152602001600020600001541180156110a8575082600860008681526020019081526020016000206001015410155b61111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420626f6e6461626c65000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008311611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f43616e6e6f7420626f6e6420300000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b60008061123f86610f28565b809250819350505061125a8583611ffb90919063ffffffff16565b915061126f8582611ffb90919063ffffffff16565b905060405180606001604052806112d184600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461211590919063ffffffff16565b8152602001600454815260200143815250600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505061136b8560086000898152602001908152602001600020600101546120cb90919063ffffffff16565b600860008881526020019081526020016000206001018190555061139a8560025461211590919063ffffffff16565b6002819055506113b58260035461211590919063ffffffff16565b6003819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b5e9684661140a838561211590919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144057600080fd5b505af1158015611454573d6000803e3d6000fd5b505050506114c5600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661219d9092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f242432a337f000000000000000000000000000000000000000000000000000000000000000089896040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020018060200182810382526000815260200160200195505050505050600060405180830381600087803b1580156115b057600080fd5b505af11580156115c4573d6000803e3d6000fd5b505050507fb7ce5a2d90f1705ca02547b0eb827724683e0df3b809477ae4326d0eefed0bc086836116006004544361211590919063ffffffff16565b60405180848152602001838152602001828152602001935050505060405180910390a181925050509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061165d612708565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905060006116d284610e26565b905061271081106117f657600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160009055600282016000905550507f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b18483600001516000604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a16117e88483600001517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661219d9092919063ffffffff16565b8160000151925050506119d3565b6000611823612710611815848660000151611ffb90919063ffffffff16565b61208190919063ffffffff16565b905060405180606001604052806118478386600001516120cb90919063ffffffff16565b81526020016118796118668660400151436120cb90919063ffffffff16565b86602001516120cb90919063ffffffff16565b815260200143815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050507f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b18582600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a16119cc85827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661219d9092919063ffffffff16565b8093505050505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b606080600080600090505b600580549050811015611a8657600060058281548110611a4d57fe5b906000526020600020015490506000611a6582610c03565b5090508015611a775783806001019450505b50508080600101915050611a31565b5060608167ffffffffffffffff81118015611aa057600080fd5b50604051908082528060200260200182016040528015611acf5781602001602082028036833780820191505090505b50905060608267ffffffffffffffff81118015611aeb57600080fd5b50604051908082528060200260200182016040528015611b1a5781602001602082028036833780820191505090505b509050600080600090505b600580549050811015611baf57600060058281548110611b4157fe5b90600052602060002001549050600080611b5a83610c03565b915091508115611b9f5782878681518110611b7157fe5b60200260200101818152505080868681518110611b8a57fe5b60200260200101818152505084806001019550505b5050508080600101915050611b25565b50828295509550505050509091565b60058181548110611bce57600080fd5b906000526020600020016000915090505481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900460ff16611d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420696e6974616c697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b8060048190555050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b828290508585905014611e95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c656e6774687320646f206e6f74206d6174636800000000000000000000000081525060200191505060405180910390fd5b60005b85859050811015611ff357611eab6126e5565b60086000888885818110611ebb57fe5b90506020020135815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff1615151515815250509050848483818110611f1857fe5b90506020020135816000018181525050828160200181815250508060400151611f88576005878784818110611f4957fe5b90506020020135908060018154018082558091505060019003906000526020600020016000909190919091505560018160400190151590811515815250505b8060086000898986818110611f9957fe5b905060200201358152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff021916908315150217905550905050508080600101915050611e98565b505050505050565b60008083141561200e576000905061207b565b600082840290508284828161201f57fe5b0414612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061272a6021913960400191505060405180910390fd5b809150505b92915050565b60006120c383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061223f565b905092915050565b600061210d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612305565b905092915050565b600080828401905083811015612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61223a8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123c5565b505050565b600080831182906122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122b0578082015181840152602081019050612295565b50505050905090810190601f1680156122dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816122f757fe5b049050809150509392505050565b60008383111582906123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561237757808201518184015260208101905061235c565b50505050905090810190601f1680156123a45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060612427826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124b49092919063ffffffff16565b90506000815111156124af5780806020019051602081101561244857600080fd5b81019080805190602001909291905050506124ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061274b602a913960400191505060405180910390fd5b5b505050565b60606124c384846000856124cc565b90509392505050565b60606124d7856126d2565b612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106125995780518252602082019150602081019050602083039250612576565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146125fb576040519150601f19603f3d011682016040523d82523d6000602084013e612600565b606091505b509150915081156126155780925050506126ca565b6000815111156126285780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561268f578082015181840152602081019050612674565b50505050905090810190601f1680156126bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b905060008111915050919050565b604051806060016040528060008152602001600081526020016000151581525090565b6040518060600160405280600081526020016000815260200160008152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220ec251c7447b645f5dfeb8f8b426504a9db90aede2ca0e8dd94114ef72f51470664736f6c63430007050033000000000000000000000000a9ab2478531dcc5597a91413b39d462b3413e47c00000000000000000000000076be3b62873462d2142405439777e971754e8e770000000000000000000000009a315bdf513367c0377fb36545857d12e85813ef00000000000000000000000012267aefd8bb461817df348ce16c933e76c1aa0d000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80637cbe044c116100de578063ba176a9a11610097578063ca9835cd11610071578063ca9835cd1461071a578063cd1234b31461075c578063e1c6a1e0146107c2578063e1e71d9c146107f05761018e565b8063ba176a9a14610621578063c49c127a1461063f578063c61040ce146106735761018e565b80637cbe044c1461049b57806386b59413146104b95780638dbdbe6d1461050b57806394c12d1b1461057757806395a2251f14610595578063a7684a39146105ed5761018e565b80633f0fb92f1161014b5780634adf8432116101255780634adf843214610392578063507930ec146103c657806371bcc39c1461041e5780637927ebf8146104525761018e565b80633f0fb92f146102d55780633fd68de4146103195780634966d7b0146103645761018e565b806301b88ee8146101935780630505c8c9146101eb5780630651b7231461021f578063158ef93e146102535780632bab6bde146102735780633bfdd7de14610291575b600080fd5b6101d5600480360360208110156101a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108c8565b6040518082815260200191505060405180910390f35b6101f361095f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610227610983565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61025b6109a7565b60405180821515815260200191505060405180910390f35b61027b6109ba565b6040518082815260200191505060405180910390f35b6102d3600480360360208110156102a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109c0565b005b610317600480360360208110156102eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610afe565b005b6103456004803603602081101561032f57600080fd5b8101908080359060200190929190505050610c03565b6040518083151581526020018281526020019250505060405180910390f35b6103906004803603602081101561037a57600080fd5b8101908080359060200190929190505050610c99565b005b61039a610e02565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610408600480360360208110156103dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e26565b6040518082815260200191505060405180910390f35b610426610f02565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047e6004803603602081101561046857600080fd5b8101908080359060200190929190505050610f28565b604051808381526020018281526020019250505060405180910390f35b6104a3610fab565b6040518082815260200191505060405180910390f35b6104e5600480360360208110156104cf57600080fd5b8101908080359060200190929190505050610fb1565b604051808481526020018381526020018215158152602001935050505060405180910390f35b6105616004803603606081101561052157600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fe8565b6040518082815260200191505060405180910390f35b61057f61162f565b6040518082815260200191505060405180910390f35b6105d7600480360360208110156105ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611653565b6040518082815260200191505060405180910390f35b6105f56119d8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106296119fc565b6040518082815260200191505060405180910390f35b610647611a02565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61067b611a26565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106c25780820151818401526020810190506106a7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156107045780820151818401526020810190506106e9565b5050505090500194505050505060405180910390f35b6107466004803603602081101561073057600080fd5b8101908080359060200190929190505050611bbe565b6040518082815260200191505060405180910390f35b61079e6004803603602081101561077257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611be2565b60405180848152602001838152602001828152602001935050505060405180910390f35b6107ee600480360360208110156107d857600080fd5b8101908080359060200190929190505050611c0c565b005b6108c66004803603606081101561080657600080fd5b810190808035906020019064010000000081111561082357600080fd5b82018360208201111561083557600080fd5b8035906020019184602083028401116401000000008311171561085757600080fd5b90919293919293908035906020019064010000000081111561087857600080fd5b82018360208201111561088a57600080fd5b803590602001918460208302840111640100000000831117156108ac57600080fd5b909192939192939080359060200190929190505050611d59565b005b6000806108d483610e26565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050612710821061092e57809250610958565b6109556127106109478484611ffb90919063ffffffff16565b61208190919063ffffffff16565b92505b5050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000076be3b62873462d2142405439777e971754e8e7781565b600660009054906101000a900460ff1681565b60035481565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610abb57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bbf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4f6e6c79204f6c796d7075732044414f0000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610c0e6126e5565b6008600085815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff161515151581525050905060008160000151118015610c75575060008160200151115b15610c8b57600181602001519250925050610c94565b60008092509250505b915091565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900460ff1615610ddd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f416c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b806004819055506001600660006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b81565b6000610e30612708565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506000610eb38260400151436120cb90919063ffffffff16565b90506000826020015190506000811115610ef557610eee81610ee061271085611ffb90919063ffffffff16565b61208190919063ffffffff16565b9350610efa565b600093505b505050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600060086000858152602001908152602001600020600001549050610f8e620f4240610f807f000000000000000000000000000000000000000000000000000000000000821484611ffb90919063ffffffff16565b61208190919063ffffffff16565b9150610fa382826120cb90919063ffffffff16565b925050915091565b60025481565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16905083565b6000600660009054906101000a900460ff1661106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420696e6974616c697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b600060086000868152602001908152602001600020600001541180156110a8575082600860008681526020019081526020016000206001015410155b61111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420626f6e6461626c65000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008311611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f43616e6e6f7420626f6e6420300000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b60008061123f86610f28565b809250819350505061125a8583611ffb90919063ffffffff16565b915061126f8582611ffb90919063ffffffff16565b905060405180606001604052806112d184600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461211590919063ffffffff16565b8152602001600454815260200143815250600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505061136b8560086000898152602001908152602001600020600101546120cb90919063ffffffff16565b600860008881526020019081526020016000206001018190555061139a8560025461211590919063ffffffff16565b6002819055506113b58260035461211590919063ffffffff16565b6003819055507f000000000000000000000000a9ab2478531dcc5597a91413b39d462b3413e47c73ffffffffffffffffffffffffffffffffffffffff1663b5e9684661140a838561211590919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561144057600080fd5b505af1158015611454573d6000803e3d6000fd5b505050506114c5600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16827f000000000000000000000000375abb85c329753b1ba849a601438ae77eec989373ffffffffffffffffffffffffffffffffffffffff1661219d9092919063ffffffff16565b7f00000000000000000000000076be3b62873462d2142405439777e971754e8e7773ffffffffffffffffffffffffffffffffffffffff1663f242432a337f000000000000000000000000a9ab2478531dcc5597a91413b39d462b3413e47c89896040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020018060200182810382526000815260200160200195505050505050600060405180830381600087803b1580156115b057600080fd5b505af11580156115c4573d6000803e3d6000fd5b505050507fb7ce5a2d90f1705ca02547b0eb827724683e0df3b809477ae4326d0eefed0bc086836116006004544361211590919063ffffffff16565b60405180848152602001838152602001828152602001935050505060405180910390a181925050509392505050565b7f000000000000000000000000000000000000000000000000000000000000821481565b600061165d612708565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905060006116d284610e26565b905061271081106117f657600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160009055600282016000905550507f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b18483600001516000604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a16117e88483600001517f000000000000000000000000375abb85c329753b1ba849a601438ae77eec989373ffffffffffffffffffffffffffffffffffffffff1661219d9092919063ffffffff16565b8160000151925050506119d3565b6000611823612710611815848660000151611ffb90919063ffffffff16565b61208190919063ffffffff16565b905060405180606001604052806118478386600001516120cb90919063ffffffff16565b81526020016118796118668660400151436120cb90919063ffffffff16565b86602001516120cb90919063ffffffff16565b815260200143815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050507f51c99f515c87b0d95ba97f616edd182e8f161c4932eac17c6fefe9dab58b77b18582600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a16119cc85827f000000000000000000000000375abb85c329753b1ba849a601438ae77eec989373ffffffffffffffffffffffffffffffffffffffff1661219d9092919063ffffffff16565b8093505050505b919050565b7f000000000000000000000000a9ab2478531dcc5597a91413b39d462b3413e47c81565b60045481565b7f000000000000000000000000375abb85c329753b1ba849a601438ae77eec989381565b606080600080600090505b600580549050811015611a8657600060058281548110611a4d57fe5b906000526020600020015490506000611a6582610c03565b5090508015611a775783806001019450505b50508080600101915050611a31565b5060608167ffffffffffffffff81118015611aa057600080fd5b50604051908082528060200260200182016040528015611acf5781602001602082028036833780820191505090505b50905060608267ffffffffffffffff81118015611aeb57600080fd5b50604051908082528060200260200182016040528015611b1a5781602001602082028036833780820191505090505b509050600080600090505b600580549050811015611baf57600060058281548110611b4157fe5b90600052602060002001549050600080611b5a83610c03565b915091508115611b9f5782878681518110611b7157fe5b60200260200101818152505080868681518110611b8a57fe5b60200260200101818152505084806001019550505b5050508080600101915050611b25565b50828295509550505050509091565b60058181548110611bce57600080fd5b906000526020600020016000915090505481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900460ff16611d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420696e6974616c697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b8060048190555050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b828290508585905014611e95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c656e6774687320646f206e6f74206d6174636800000000000000000000000081525060200191505060405180910390fd5b60005b85859050811015611ff357611eab6126e5565b60086000888885818110611ebb57fe5b90506020020135815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff1615151515815250509050848483818110611f1857fe5b90506020020135816000018181525050828160200181815250508060400151611f88576005878784818110611f4957fe5b90506020020135908060018154018082558091505060019003906000526020600020016000909190919091505560018160400190151590811515815250505b8060086000898986818110611f9957fe5b905060200201358152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff021916908315150217905550905050508080600101915050611e98565b505050505050565b60008083141561200e576000905061207b565b600082840290508284828161201f57fe5b0414612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061272a6021913960400191505060405180910390fd5b809150505b92915050565b60006120c383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061223f565b905092915050565b600061210d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612305565b905092915050565b600080828401905083811015612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61223a8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123c5565b505050565b600080831182906122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122b0578082015181840152602081019050612295565b50505050905090810190601f1680156122dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816122f757fe5b049050809150509392505050565b60008383111582906123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561237757808201518184015260208101905061235c565b50505050905090810190601f1680156123a45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060612427826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124b49092919063ffffffff16565b90506000815111156124af5780806020019051602081101561244857600080fd5b81019080805190602001909291905050506124ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061274b602a913960400191505060405180910390fd5b5b505050565b60606124c384846000856124cc565b90509392505050565b60606124d7856126d2565b612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106125995780518252602082019150602081019050602083039250612576565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146125fb576040519150601f19603f3d011682016040523d82523d6000602084013e612600565b606091505b509150915081156126155780925050506126ca565b6000815111156126285780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561268f578082015181840152602081019050612674565b50505050905090810190601f1680156126bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b905060008111915050919050565b604051806060016040528060008152602001600081526020016000151581525090565b6040518060600160405280600081526020016000815260200160008152509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220ec251c7447b645f5dfeb8f8b426504a9db90aede2ca0e8dd94114ef72f51470664736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a9ab2478531dcc5597a91413b39d462b3413e47c00000000000000000000000076be3b62873462d2142405439777e971754e8e770000000000000000000000009a315bdf513367c0377fb36545857d12e85813ef00000000000000000000000012267aefd8bb461817df348ce16c933e76c1aa0d000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b
-----Decoded View---------------
Arg [0] : _customTreasury (address): 0xA9aB2478531Dcc5597A91413b39d462B3413E47c
Arg [1] : _LL (address): 0x76BE3b62873462d2142405439777e971754E8E77
Arg [2] : _olympusTreasury (address): 0x9A315BdF513367C0377FB36545857d12e85813Ef
Arg [3] : _initialOwner (address): 0x12267aefd8Bb461817Df348CE16c933e76C1Aa0D
Arg [4] : _olympusDAO (address): 0x245cc372C84B3645Bf0Ffe6538620B04a217988B
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000a9ab2478531dcc5597a91413b39d462b3413e47c
Arg [1] : 00000000000000000000000076be3b62873462d2142405439777e971754e8e77
Arg [2] : 0000000000000000000000009a315bdf513367c0377fb36545857d12e85813ef
Arg [3] : 00000000000000000000000012267aefd8bb461817df348ce16c933e76c1aa0d
Arg [4] : 000000000000000000000000245cc372c84b3645bf0ffe6538620b04a217988b
Deployed Bytecode Sourcemap
20463:12084:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30513:400;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19821:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21329:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22119:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21769:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20044:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25800:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32222:314;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;24336:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21496:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29857:427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21580:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29423:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;21680:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22317:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26290:1466;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21924:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27939:1161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21397:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21844:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21261:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31152:817;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22027:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22207:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24641:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25067:586;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30513:400;30585:19;30618:18;30639:30;30657:10;30639:16;:30::i;:::-;30618:51;;30680:11;30694:8;:22;30704:10;30694:22;;;;;;;;;;;;;;;:29;;;30680:43;;30758:5;30741:13;:22;30736:170;;30798:6;30781:23;;30736:170;;;30854:40;30887:5;30854:27;30866:13;30854:6;:10;;:27;;;;:::i;:::-;:31;;:40;;;;:::i;:::-;30837:57;;30736:170;30513:400;;;;;:::o;19821:21::-;;;;;;;;;;;;:::o;21329:28::-;;;:::o;22119:23::-;;;;;;;;;;;;;:::o;21769:28::-;;;;:::o;20044:150::-;19964:10;19954:20;;:6;;;;;;;;;;:20;;;19945:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20153:1:::1;20132:23;;:9;:23;;;;20123:34;;;::::0;::::1;;20177:9;20168:6;::::0;:18:::1;;;;;;;;;;;;;;;;;;20044:150:::0;:::o;25800:185::-;25900:10;25886:24;;:10;:24;;;25877:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25961:16;25943:15;;:34;;;;;;;;;;;;;;;;;;25800:185;:::o;32222:314::-;32274:4;32280;32297:25;;:::i;:::-;32325:9;:14;32335:3;32325:14;;;;;;;;;;;32297:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32374:1;32353:8;:18;;;:22;:56;;;;;32408:1;32379:8;:26;;;:30;32353:56;32350:179;;;32434:4;32440:8;:26;;;32426:41;;;;;;;32350:179;32508:5;32515:1;32500:17;;;;;32222:314;;;;:::o;24336:194::-;19964:10;19954:20;;:6;;;;;;;;;;:20;;;19945:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24421:11:::1;;;;;;;;;;;24420:12;24412:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24481:12;24467:11;:26;;;;24518:4;24504:11;;:18;;;;;;;;;;;;;;;;;;24336:194:::0;:::o;21496:35::-;;;:::o;29857:427::-;29927:19;29960:16;;:::i;:::-;29979:8;:22;29989:10;29979:22;;;;;;;;;;;;;;;29960:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30012:20;30035:34;30053:4;:14;;;30035:12;:16;;:34;;;;:::i;:::-;30012:57;;30080:12;30095:4;:12;;;30080:27;;30135:1;30125:7;:11;30120:157;;;30171:43;30205:7;30171:28;30192:5;30171:15;:19;;:28;;;;:::i;:::-;:32;;:43;;;;:::i;:::-;30154:60;;30120:157;;;30264:1;30247:18;;30120:157;29857:427;;;;;;:::o;21580:30::-;;;;;;;;;;;;;:::o;29423:222::-;29476:12;29490:9;29512:10;29525:9;:14;29535:3;29525:14;;;;;;;;;;;:24;;;29512:37;;29567:34;29596:3;29567:23;29578:10;29567:5;:9;;:23;;;;:::i;:::-;:27;;:34;;;;:::i;:::-;29560:41;;29622:15;29632:4;29622:5;:9;;:15;;;;:::i;:::-;29612:25;;29423:222;;;;:::o;21680:32::-;;;;:::o;22317:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26290:1466::-;26369:4;26394:11;;;;;;;;;;;26386:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26471:1;26444:9;:14;26454:3;26444:14;;;;;;;;;;;:24;;;:28;:75;;;;;26512:7;26476:9;:14;26486:3;26476:14;;;;;;;;;;;:32;;;:43;;26444:75;26435:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26566:1;26556:7;:11;26547:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26628:1;26606:24;;:10;:24;;;;26597:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26664:11;26686:8;26723:16;26734:3;26723:9;:16::i;:::-;26707:32;;;;;;;;26791:19;26802:7;26791:6;:10;;:19;;;;:::i;:::-;26782:28;;26827:16;26835:7;26827:3;:7;;:16;;;;:::i;:::-;26821:22;;26934:157;;;;;;;;26963:43;26998:6;26963:8;:22;26973:10;26963:22;;;;;;;;;;;;;;;:29;;;:33;;:43;;;;:::i;:::-;26934:157;;;;27030:11;;26934:157;;;;27067:12;26934:157;;;26909:8;:22;26919:10;26909:22;;;;;;;;;;;;;;;:182;;;;;;;;;;;;;;;;;;;;;;;;;;;27139:45;27176:7;27139:9;:14;27149:3;27139:14;;;;;;;;;;;:32;;;:36;;:45;;;;:::i;:::-;27104:9;:14;27114:3;27104:14;;;;;;;;;;;:32;;:80;;;;27220:33;27245:7;27220:20;;:24;;:33;;;;:::i;:::-;27197:20;:56;;;;27309:28;27330:6;27309:16;;:20;;:28;;;;:::i;:::-;27290:16;:47;;;;27376:14;:22;;;27400:15;27411:3;27400:6;:10;;:15;;;;:::i;:::-;27376:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27430:38;27447:15;;;;;;;;;;;27464:3;27430;:16;;;;:38;;;;;:::i;:::-;27481:2;:19;;;27502:10;27522:14;27539:3;27544:7;27481:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27662:59;27675:3;27680:6;27688:31;27706:11;;27688:12;:16;;:31;;;;:::i;:::-;27662:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27741:6;27734:13;;;;26290:1466;;;;;:::o;21924:40::-;;;:::o;27939:1161::-;27993:4;28010:16;;:::i;:::-;28029:8;:22;28039:10;28029:22;;;;;;;;;;;;;;;28010:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28062:18;28083:30;28101:10;28083:16;:30::i;:::-;28062:51;;28208:5;28191:13;:22;28186:897;;28257:8;:22;28267:10;28257:22;;;;;;;;;;;;;;;;28250:29;;;;;;;;;;;;;;;;;;;;28319:42;28333:10;28345:4;:11;;;28358:1;28319:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28394:43;28412:10;28424:4;:11;;;28394:3;:16;;;;:43;;;;;:::i;:::-;28459:4;:11;;;28452:18;;;;;;28186:897;28562:11;28576:45;28614:5;28576:32;28593:13;28576:4;:11;;;:15;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;28562:59;;28706:197;;;;;;;;28738:25;28755:6;28738:4;:11;;;:15;;:25;;;;:::i;:::-;28706:197;;;;28791:54;28809:34;28827:4;:14;;;28809:12;:16;;:34;;;;:::i;:::-;28791:4;:12;;;:16;;:54;;;;:::i;:::-;28706:197;;;;28875:12;28706:197;;;28681:8;:22;28691:10;28681:22;;;;;;;;;;;;;;;:222;;;;;;;;;;;;;;;;;;;;;;;;;;;28925:65;28939:10;28951:6;28959:8;:22;28969:10;28959:22;;;;;;;;;;;;;;;:29;;;28925:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29005:38;29023:10;29035:6;29005:3;:16;;;;:38;;;;;:::i;:::-;29065:6;29058:13;;;;;27939:1161;;;;:::o;21397:55::-;;;:::o;21844:23::-;;;;:::o;21261:27::-;;;:::o;31152:817::-;31198:13;31213;31239:21;31277:6;31286:1;31277:10;;31273:183;31293:9;:16;;;;31289:1;:20;31273:183;;;31331:7;31341:9;31351:1;31341:12;;;;;;;;;;;;;;;;31331:22;;31369:11;31385:15;31397:2;31385:11;:15::i;:::-;31368:32;;;31418:6;31415:29;;;31426:18;;;;;;;31415:29;31273:183;;31311:3;;;;;;;31273:183;;;;31468:20;31505:16;31491:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31468:54;;31533:27;31577:16;31563:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31533:61;;31607:10;31632:6;31641:1;31632:10;;31628:297;31648:9;:16;;;;31644:1;:20;31628:297;;;31686:7;31696:9;31706:1;31696:12;;;;;;;;;;;;;;;;31686:22;;31724:11;31737;31752:15;31764:2;31752:11;:15::i;:::-;31723:44;;;;31785:6;31782:132;;;31825:2;31812:3;31816:5;31812:10;;;;;;;;;;;;;:15;;;;;31866:6;31846:10;31857:5;31846:17;;;;;;;;;;;;;:26;;;;;31891:7;;;;;;;31782:132;31628:297;;;31666:3;;;;;;;31628:297;;;;31945:3;31950:10;31937:24;;;;;;;;31152:817;;:::o;22027:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22207:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24641:149::-;19964:10;19954:20;;:6;;;;;;;;;;:20;;;19945:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24719:11:::1;;;;;;;;;;;24711:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24774:8;24760:11;:22;;;;24641:149:::0;:::o;25067:586::-;19964:10;19954:20;;:6;;;;;;;;;;:20;;;19945:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25208:7:::1;;:14;;25193:4;;:11;;:29;25185:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25262:6;25258:388;25274:4;;:11;;25270:1;:15;25258:388;;;25307:25;;:::i;:::-;25335:9;:18;25345:4;;25350:1;25345:7;;;;;;;;;;;;;25335:18;;;;;;;;;;;25307:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;25389:7;;25397:1;25389:10;;;;;;;;;;;;;25368:8;:18;;:31;;;::::0;::::1;25443:9;25414:8;:26;;:38;;;::::0;::::1;25471:8;:16;;;25467:122;;25508:9;25523:4;;25528:1;25523:7;;;;;;;;;;;;;25508:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25569:4;25550:8;:16;;:23;;;;;;;;;::::0;::::1;25467:122;25624:8;25603:9;:18;25613:4;;25618:1;25613:7;;;;;;;;;;;;;25603:18;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25258:388;25287:3;;;;;;;25258:388;;;;25067:586:::0;;;;;:::o;631:250::-;689:7;718:1;713;:6;709:47;;;743:1;736:8;;;;709:47;768:9;784:1;780;:5;768:17;;813:1;808;804;:5;;;;;;:10;796:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;872:1;865:8;;;631:250;;;;;:::o;889:132::-;947:7;974:39;978:1;981;974:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;967:46;;889:132;;;;:::o;287:136::-;345:7;372:43;376:1;379;372:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;365:50;;287:136;;;;:::o;98:181::-;156:7;176:9;192:1;188;:5;176:17;;217:1;212;:6;;204:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;270:1;263:8;;;98:181;;;;:::o;8063:177::-;8146:86;8166:5;8196:23;;;8221:2;8225:5;8173:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8146:19;:86::i;:::-;8063:177;;;:::o;1029:189::-;1115:7;1147:1;1143;:5;1150:12;1135:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1174:9;1190:1;1186;:5;;;;;;1174:17;;1209:1;1202:8;;;1029:189;;;;;:::o;431:192::-;517:7;550:1;545;:6;;553:12;537:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;577:9;593:1;589;:5;577:17;;614:1;607:8;;;431:192;;;;;:::o;9452:420::-;9535:23;9561:69;9589:4;9561:69;;;;;;;;;;;;;;;;;9569:5;9561:27;;;;:69;;;;;:::i;:::-;9535:95;;9665:1;9645:10;:17;:21;9641:224;;;9787:10;9776:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9768:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9641:224;9452:420;;;:::o;2803:196::-;2906:12;2938:53;2961:6;2969:4;2975:1;2978:12;2938:22;:53::i;:::-;2931:60;;2803:196;;;;;:::o;3779:979::-;3909:12;3942:18;3953:6;3942:10;:18::i;:::-;3934:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4068:12;4082:23;4109:6;:11;;4129:8;4140:4;4109:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4067:78;;;;4160:7;4156:595;;;4191:10;4184:17;;;;;;4156:595;4325:1;4305:10;:17;:21;4301:439;;;4568:10;4562:17;4629:15;4616:10;4612:2;4608:19;4601:44;4516:148;4711:12;4704:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3779:979;;;;;;;:::o;1976:233::-;2036:4;2055:12;2166:7;2154:20;2146:28;;2200:1;2193:4;:8;2186:15;;;1976:233;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://ec251c7447b645f5dfeb8f8b426504a9db90aede2ca0e8dd94114ef72f514706
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.074347 | 265,186.3464 | $19,715.81 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.