Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 6 from a total of 6 transactions
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DssVestSuckable
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 200 runs
Other Settings:
istanbul EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-or-later // // DssVest - Token vesting contract // // Copyright (C) 2021 Dai Foundation // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. pragma solidity 0.6.12; interface MintLike { function mint(address, uint256) external; } interface ChainlogLike { function getAddress(bytes32) external view returns (address); } interface JoinLike { function exit(address, uint256) external; function vat() external view returns (address); } interface VatLike { function hope(address) external; function suck(address, address, uint256) external; function live() external view returns (uint256); } interface TokenLike { function transferFrom(address, address, uint256) external returns (bool); } abstract contract DssVest { // --- Data --- mapping (address => uint256) public wards; struct Award { address usr; // Vesting recipient uint48 bgn; // Start of vesting period [timestamp] uint48 clf; // The cliff date [timestamp] uint48 fin; // End of vesting period [timestamp] address mgr; // A manager address that can yank uint8 res; // Restricted uint128 tot; // Total reward amount uint128 rxd; // Amount of vest claimed } mapping (uint256 => Award) public awards; uint256 public cap; // Maximum per-second issuance token rate uint256 public ids; // Total vestings uint256 internal locked; uint256 public constant TWENTY_YEARS = 20 * 365 days; // --- Events --- event Rely(address indexed usr); event Deny(address indexed usr); event File(bytes32 indexed what, uint256 data); event Init(uint256 indexed id, address indexed usr); event Vest(uint256 indexed id, uint256 amt); event Restrict(uint256 indexed id); event Unrestrict(uint256 indexed id); event Yank(uint256 indexed id, uint256 end); event Move(uint256 indexed id, address indexed dst); // Getters to access only to the value desired function usr(uint256 _id) external view returns (address) { return awards[_id].usr; } function bgn(uint256 _id) external view returns (uint256) { return awards[_id].bgn; } function clf(uint256 _id) external view returns (uint256) { return awards[_id].clf; } function fin(uint256 _id) external view returns (uint256) { return awards[_id].fin; } function mgr(uint256 _id) external view returns (address) { return awards[_id].mgr; } function res(uint256 _id) external view returns (uint256) { return awards[_id].res; } function tot(uint256 _id) external view returns (uint256) { return awards[_id].tot; } function rxd(uint256 _id) external view returns (uint256) { return awards[_id].rxd; } /** @dev Base vesting logic contract constructor */ constructor() public { wards[msg.sender] = 1; emit Rely(msg.sender); } // --- Mutex --- modifier lock { require(locked == 0, "DssVest/system-locked"); locked = 1; _; locked = 0; } // --- Auth --- modifier auth { require(wards[msg.sender] == 1, "DssVest/not-authorized"); _; } function rely(address _usr) external auth { wards[_usr] = 1; emit Rely(_usr); } function deny(address _usr) external auth { wards[_usr] = 0; emit Deny(_usr); } /** @dev (Required) Set the per-second token issuance rate. @param what The tag of the value to change (ex. bytes32("cap")) @param data The value to update (ex. cap of 1000 tokens/yr == 1000*WAD/365 days) */ function file(bytes32 what, uint256 data) external lock auth { if (what == "cap") cap = data; // The maximum amount of tokens that can be streamed per-second per vest else revert("DssVest/file-unrecognized-param"); emit File(what, data); } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x > y ? y : x; } function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "DssVest/add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "DssVest/sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "DssVest/mul-overflow"); } function toUint48(uint256 x) internal pure returns (uint48 z) { require((z = uint48(x)) == x, "DssVest/uint48-overflow"); } function toUint128(uint256 x) internal pure returns (uint128 z) { require((z = uint128(x)) == x, "DssVest/uint128-overflow"); } /** @dev Govanance adds a vesting contract @param _usr The recipient of the reward @param _tot The total amount of the vest @param _bgn The starting timestamp of the vest @param _tau The duration of the vest (in seconds) @param _eta The cliff duration in seconds (i.e. 1 years) @param _mgr An optional manager for the contract. Can yank if vesting ends prematurely. @return id The id of the vesting contract */ function create(address _usr, uint256 _tot, uint256 _bgn, uint256 _tau, uint256 _eta, address _mgr) external lock auth returns (uint256 id) { require(_usr != address(0), "DssVest/invalid-user"); require(_tot > 0, "DssVest/no-vest-total-amount"); require(_bgn < add(block.timestamp, TWENTY_YEARS), "DssVest/bgn-too-far"); require(_bgn > sub(block.timestamp, TWENTY_YEARS), "DssVest/bgn-too-long-ago"); require(_tau > 0, "DssVest/tau-zero"); require(_tot / _tau <= cap, "DssVest/rate-too-high"); require(_tau <= TWENTY_YEARS, "DssVest/tau-too-long"); require(_eta <= _tau, "DssVest/eta-too-long"); require(ids < type(uint256).max, "DssVest/ids-overflow"); id = ++ids; awards[id] = Award({ usr: _usr, bgn: toUint48(_bgn), clf: toUint48(add(_bgn, _eta)), fin: toUint48(add(_bgn, _tau)), tot: toUint128(_tot), rxd: 0, mgr: _mgr, res: 0 }); emit Init(id, _usr); } /** @dev Anyone (or only owner of a vesting contract if restricted) calls this to claim all available rewards @param _id The id of the vesting contract */ function vest(uint256 _id) external { _vest(_id, type(uint256).max); } /** @dev Anyone (or only owner of a vesting contract if restricted) calls this to claim rewards @param _id The id of the vesting contract @param _maxAmt The maximum amount to vest */ function vest(uint256 _id, uint256 _maxAmt) external { _vest(_id, _maxAmt); } /** @dev Anyone (or only owner of a vesting contract if restricted) calls this to claim rewards @param _id The id of the vesting contract @param _maxAmt The maximum amount to vest */ function _vest(uint256 _id, uint256 _maxAmt) internal lock { Award memory _award = awards[_id]; require(_award.usr != address(0), "DssVest/invalid-award"); require(_award.res == 0 || _award.usr == msg.sender, "DssVest/only-user-can-claim"); uint256 amt = unpaid(block.timestamp, _award.bgn, _award.clf, _award.fin, _award.tot, _award.rxd); amt = min(amt, _maxAmt); awards[_id].rxd = toUint128(add(_award.rxd, amt)); pay(_award.usr, amt); emit Vest(_id, amt); } /** @dev amount of tokens accrued, not accounting for tokens paid @param _id The id of the vesting contract @return amt The accrued amount */ function accrued(uint256 _id) external view returns (uint256 amt) { Award memory _award = awards[_id]; require(_award.usr != address(0), "DssVest/invalid-award"); amt = accrued(block.timestamp, _award.bgn, _award.fin, _award.tot); } /** @dev amount of tokens accrued, not accounting for tokens paid @param _time The timestamp to perform the calculation @param _bgn The start time of the contract @param _fin The end time of the contract @param _tot The total amount of the contract @return amt The accrued amount */ function accrued(uint256 _time, uint48 _bgn, uint48 _fin, uint128 _tot) internal pure returns (uint256 amt) { if (_time < _bgn) { amt = 0; } else if (_time >= _fin) { amt = _tot; } else { amt = mul(_tot, sub(_time, _bgn)) / sub(_fin, _bgn); // 0 <= amt < _award.tot } } /** @dev return the amount of vested, claimable GEM for a given ID @param _id The id of the vesting contract @return amt The claimable amount */ function unpaid(uint256 _id) external view returns (uint256 amt) { Award memory _award = awards[_id]; require(_award.usr != address(0), "DssVest/invalid-award"); amt = unpaid(block.timestamp, _award.bgn, _award.clf, _award.fin, _award.tot, _award.rxd); } /** @dev amount of tokens accrued, not accounting for tokens paid @param _time The timestamp to perform the calculation @param _bgn The start time of the contract @param _clf The timestamp of the cliff @param _fin The end time of the contract @param _tot The total amount of the contract @param _rxd The number of gems received @return amt The claimable amount */ function unpaid(uint256 _time, uint48 _bgn, uint48 _clf, uint48 _fin, uint128 _tot, uint128 _rxd) internal pure returns (uint256 amt) { amt = _time < _clf ? 0 : sub(accrued(_time, _bgn, _fin, _tot), _rxd); } /** @dev Allows governance or the owner to restrict vesting to the owner only @param _id The id of the vesting contract */ function restrict(uint256 _id) external lock { address usr_ = awards[_id].usr; require(usr_ != address(0), "DssVest/invalid-award"); require(wards[msg.sender] == 1 || usr_ == msg.sender, "DssVest/not-authorized"); awards[_id].res = 1; emit Restrict(_id); } /** @dev Allows governance or the owner to enable permissionless vesting @param _id The id of the vesting contract */ function unrestrict(uint256 _id) external lock { address usr_ = awards[_id].usr; require(usr_ != address(0), "DssVest/invalid-award"); require(wards[msg.sender] == 1 || usr_ == msg.sender, "DssVest/not-authorized"); awards[_id].res = 0; emit Unrestrict(_id); } /** @dev Allows governance or the manager to remove a vesting contract immediately @param _id The id of the vesting contract */ function yank(uint256 _id) external { _yank(_id, block.timestamp); } /** @dev Allows governance or the manager to remove a vesting contract at a future time @param _id The id of the vesting contract @param _end A scheduled time to end the vest */ function yank(uint256 _id, uint256 _end) external { _yank(_id, _end); } /** @dev Allows governance or the manager to end pre-maturely a vesting contract @param _id The id of the vesting contract @param _end A scheduled time to end the vest */ function _yank(uint256 _id, uint256 _end) internal lock { require(wards[msg.sender] == 1 || awards[_id].mgr == msg.sender, "DssVest/not-authorized"); Award memory _award = awards[_id]; require(_award.usr != address(0), "DssVest/invalid-award"); if (_end < block.timestamp) { _end = block.timestamp; } if (_end < _award.fin) { uint48 end = toUint48(_end); awards[_id].fin = end; if (end < _award.bgn) { awards[_id].bgn = end; awards[_id].clf = end; awards[_id].tot = 0; } else if (end < _award.clf) { awards[_id].clf = end; awards[_id].tot = 0; } else { awards[_id].tot = toUint128( add( unpaid(_end, _award.bgn, _award.clf, _award.fin, _award.tot, _award.rxd), _award.rxd ) ); } } emit Yank(_id, _end); } /** @dev Allows owner to move a contract to a different address @param _id The id of the vesting contract @param _dst The address to send ownership of the contract to */ function move(uint256 _id, address _dst) external lock { require(awards[_id].usr == msg.sender, "DssVest/only-user-can-move"); require(_dst != address(0), "DssVest/zero-address-invalid"); awards[_id].usr = _dst; emit Move(_id, _dst); } /** @dev Return true if a contract is valid @param _id The id of the vesting contract @return isValid True for valid contract */ function valid(uint256 _id) external view returns (bool isValid) { isValid = awards[_id].rxd < awards[_id].tot; } /** @dev Override this to implement payment logic. @param _guy The payment target. @param _amt The payment amount. [units are implementation-specific] */ function pay(address _guy, uint256 _amt) virtual internal; } contract DssVestMintable is DssVest { MintLike public immutable gem; /** @dev This contract must be authorized to 'mint' on the token @param _gem The contract address of the mintable token */ constructor(address _gem) public DssVest() { require(_gem != address(0), "DssVestMintable/Invalid-token-address"); gem = MintLike(_gem); } /** @dev Override pay to handle mint logic @param _guy The recipient of the minted token @param _amt The amount of token units to send to the _guy */ function pay(address _guy, uint256 _amt) override internal { gem.mint(_guy, _amt); } } contract DssVestSuckable is DssVest { uint256 internal constant RAY = 10**27; ChainlogLike public immutable chainlog; VatLike public immutable vat; JoinLike public immutable join; /** @dev This contract must be authorized to 'suck' on the vat @param _chainlog The contract address of the MCD chainlog @param _join The native join contract from MCD */ constructor(address _chainlog, address _join) public DssVest() { require(_chainlog != address(0), "DssVestSuckable/invalid-chainlog-address"); ChainlogLike chainlog_ = chainlog = ChainlogLike(_chainlog); VatLike vat_ = vat = VatLike(chainlog_.getAddress("MCD_VAT")); require(JoinLike(_join).vat() == address(vat_), "DssVestSuckable/invalid-join-vat"); join = JoinLike(_join); vat_.hope(_join); } /** @dev Override pay to handle suck logic @param _guy The recipient of the ERC-20 Dai @param _amt The amount of Dai to send to the _guy [WAD] */ function pay(address _guy, uint256 _amt) override internal { require(vat.live() == 1, "DssVestSuckable/vat-not-live"); vat.suck(chainlog.getAddress("MCD_VOW"), address(this), mul(_amt, RAY)); join.exit(_guy, _amt); } /** @dev Compatibility with older implementations of `DssVestSuckable` */ function daiJoin() external view returns (address) { return address(join); } } /* Transferrable token DssVest. Can be used to enable streaming payments of any arbitrary token from an address (i.e. CU multisig) to individual contributors. */ contract DssVestTransferrable is DssVest { address public immutable czar; TokenLike public immutable gem; /** @dev This contract must be approved for transfer of the gem on the czar @param _czar The owner of the tokens to be distributed @param _gem The token to be distributed */ constructor(address _czar, address _gem) public DssVest() { require(_czar != address(0), "DssVestTransferrable/Invalid-distributor-address"); require(_gem != address(0), "DssVestTransferrable/Invalid-token-address"); czar = _czar; gem = TokenLike(_gem); } /** @dev Override pay to handle transfer logic @param _guy The recipient of the ERC-20 Dai @param _amt The amount of gem to send to the _guy (in native token units) */ function pay(address _guy, uint256 _amt) override internal { require(gem.transferFrom(czar, _guy, _amt), "DssVestTransferrable/failed-transfer"); } }
{ "remappings": [ "ds-test/=lib/ds-test/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "istanbul", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_chainlog","type":"address"},{"internalType":"address","name":"_join","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Init","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"dst","type":"address"}],"name":"Move","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Restrict","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Unrestrict","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Vest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"end","type":"uint256"}],"name":"Yank","type":"event"},{"inputs":[],"name":"TWENTY_YEARS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"accrued","outputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"awards","outputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint48","name":"bgn","type":"uint48"},{"internalType":"uint48","name":"clf","type":"uint48"},{"internalType":"uint48","name":"fin","type":"uint48"},{"internalType":"address","name":"mgr","type":"address"},{"internalType":"uint8","name":"res","type":"uint8"},{"internalType":"uint128","name":"tot","type":"uint128"},{"internalType":"uint128","name":"rxd","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"bgn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainlog","outputs":[{"internalType":"contract ChainlogLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"clf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"},{"internalType":"uint256","name":"_tot","type":"uint256"},{"internalType":"uint256","name":"_bgn","type":"uint256"},{"internalType":"uint256","name":"_tau","type":"uint256"},{"internalType":"uint256","name":"_eta","type":"uint256"},{"internalType":"address","name":"_mgr","type":"address"}],"name":"create","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daiJoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"fin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ids","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"join","outputs":[{"internalType":"contract JoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"mgr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_dst","type":"address"}],"name":"move","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"res","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"restrict","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"rxd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"tot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"unpaid","outputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"unrestrict","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"usr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"valid","outputs":[{"internalType":"bool","name":"isValid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"vest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_maxAmt","type":"uint256"}],"name":"vest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"yank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"yank","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b50604051620025e4380380620025e4833981810160405260408110156200003757600080fd5b50805160209182015133600081815293849052604080852060019055519293919290917fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6091a26001600160a01b038216620000c45760405162461bcd60e51b8152600401808060200182810382526028815260200180620025bc6028913960400191505060405180910390fd5b6001600160601b0319606083901b16608052604080516321f8a72160e01b8152661350d117d5905560ca1b600482015290516001600160a01b0384169160009183916321f8a721916024808301926020929190829003018186803b1580156200012c57600080fd5b505afa15801562000141573d6000803e3d6000fd5b505050506040513d60208110156200015857600080fd5b50516001600160601b0319606082901b1660a052604080516336569e7760e01b815290516001600160a01b03928316935083928616916336569e77916004808301926020929190829003018186803b158015620001b457600080fd5b505afa158015620001c9573d6000803e3d6000fd5b505050506040513d6020811015620001e057600080fd5b50516001600160a01b0316146200023e576040805162461bcd60e51b815260206004820181905260248201527f447373566573745375636b61626c652f696e76616c69642d6a6f696e2d766174604482015290519081900360640190fd5b6001600160601b0319606084901b1660c052604080516328ec8bf160e21b81526001600160a01b03808616600483015291519183169163a3b22fc49160248082019260009290919082900301818387803b1580156200029c57600080fd5b505af1158015620002b1573d6000803e3d6000fd5b505050505050505060805160601c60a05160601c60c05160601c6122b46200030860003980610cd55280610d3f52806121065250806107625280611edf5280611fb8525080610d9f5280611fe752506122b46000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063bb7c46f31161010f578063d8a8e03a116100a2578063e529780d11610071578063e529780d14610524578063e7657e1514610541578063f52981f414610549578063fc5a5b6314610566576101e5565b8063d8a8e03a14610478578063db64ff8f146104a4578063dc2c788f146104ea578063e054720f14610507576101e5565b8063c659cd45116100de578063c659cd4514610419578063cdf4349714610436578063ce6f74aa14610453578063d4e8fd2e1461045b576101e5565b8063bb7c46f314610397578063bf353dbb146103ba578063bf8712c5146103e0578063c11645bc14610411576101e5565b806353e8863d116101875780637d8d2702116101565780637d8d27021461032f578063892de51d1461034c5780639c52a7f114610369578063b688a3631461038f576101e5565b806353e8863d146102c757806360fb494b146102e457806365fae35e146102ec5780636a760b8014610312576101e5565b8063355274ea116101c3578063355274ea1461025b57806336569e77146102635780633c433d5f14610287578063509aaa1d146102a4576101e5565b806321f6c0cf146101ea57806326e027f11461021957806329ae811414610238575b600080fd5b6102076004803603602081101561020057600080fd5b50356105eb565b60408051918252519081900360200190f35b6102366004803603602081101561022f57600080fd5b503561060f565b005b6102366004803603604081101561024e57600080fd5b508035906020013561061c565b61020761075a565b61026b610760565b604080516001600160a01b039092168252519081900360200190f35b6102366004803603602081101561029d57600080fd5b5035610784565b610236600480360360408110156102ba57600080fd5b50803590602001356108ea565b610207600480360360208110156102dd57600080fd5b50356108f8565b610207610a14565b6102366004803603602081101561030257600080fd5b50356001600160a01b0316610a1c565b6102366004803603602081101561032857600080fd5b5035610ab3565b6102366004803603602081101561034557600080fd5b5035610abf565b6102076004803603602081101561036257600080fd5b5035610c1f565b6102366004803603602081101561037f57600080fd5b50356001600160a01b0316610c3d565b61026b610cd3565b610236600480360360408110156103ad57600080fd5b5080359060200135610cf7565b610207600480360360208110156103d057600080fd5b50356001600160a01b0316610d01565b6103fd600480360360208110156103f657600080fd5b5035610d13565b604080519115158252519081900360200190f35b61026b610d3d565b61026b6004803603602081101561042f57600080fd5b5035610d61565b6102076004803603602081101561044c57600080fd5b5035610d7c565b61026b610d9d565b6102076004803603602081101561047157600080fd5b5035610dc1565b6102366004803603604081101561048e57600080fd5b50803590602001356001600160a01b0316610de1565b610207600480360360c08110156104ba57600080fd5b506001600160a01b03813581169160208101359160408201359160608101359160808201359160a0013516610f50565b61026b6004803603602081101561050057600080fd5b50356114bb565b6102076004803603602081101561051d57600080fd5b50356114e1565b6102076004803603602081101561053a57600080fd5b5035611506565b610207611524565b6102076004803603602081101561055f57600080fd5b503561152a565b6105836004803603602081101561057c57600080fd5b5035611635565b604080516001600160a01b03998a16815265ffffffffffff98891660208201529688168782015294909616606086015291909516608084015260ff90941660a08301526001600160801b0393841660c08301529190921660e083015251908190036101000190f35b600081815260016020526040902054600160a01b900465ffffffffffff165b919050565b61061981426116a5565b50565b6004541561065f576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b6001600481905533600090815260208190526040902054146106b6576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b816206361760ec1b14156106ce57600281905561071b565b6040805162461bcd60e51b815260206004820152601f60248201527f447373566573742f66696c652d756e7265636f676e697a65642d706172616d00604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a250506000600455565b60025481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600454156107c7576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b60016004819055600082815260209190915260409020546001600160a01b031680610831576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b336000908152602081905260409020546001148061085757506001600160a01b03811633145b610896576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6000828152600160208190526040808320909101805460ff60d01b1916600160d01b1790555183917f9247a2bf1b75bc397d4043d99b9cebce531548a01dbb56a5d4c5f5ca26051e8d91a250506000600455565b6108f482826116a5565b5050565b60006109026121fa565b5060008281526001602081815260409283902083516101008101855281546001600160a01b03808216808452600160a01b830465ffffffffffff90811696850196909652600160d01b92839004861697840197909752948301549384166060830152600160301b840490941660808201529290910460ff1660a0830152600201546001600160801b0380821660c0840152600160801b9091041660e0820152906109eb576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b610a0d428260200151836040015184606001518560c001518660e00151611a30565b9392505050565b632598060081565b33600090815260208190526040902054600114610a6e576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b61061981600019611a72565b60045415610b02576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b60016004819055600082815260209190915260409020546001600160a01b031680610b6c576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b3360009081526020819052604090205460011480610b9257506001600160a01b03811633145b610bd1576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6000828152600160208190526040808320909101805460ff60d01b191690555183917f3d1b575f06b2d660af77eec35d9b3ffcfa956b6c1fdbc840992d4b03b03e622b91a250506000600455565b6000908152600160205260409020600201546001600160801b031690565b33600090815260208190526040902054600114610c8f576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b6108f48282611a72565b60006020819052908152604090205481565b6000908152600160205260409020600201546001600160801b03808216600160801b909204161090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000908152600160205260409020546001600160a01b031690565b600090815260016020526040902054600160d01b900465ffffffffffff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b60009081526001602081905260409091200154600160d01b900460ff1690565b60045415610e24576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b60016004819055600083815260209190915260409020546001600160a01b03163314610e97576040805162461bcd60e51b815260206004820152601a60248201527f447373566573742f6f6e6c792d757365722d63616e2d6d6f7665000000000000604482015290519081900360640190fd5b6001600160a01b038116610ef2576040805162461bcd60e51b815260206004820152601c60248201527f447373566573742f7a65726f2d616464726573732d696e76616c696400000000604482015290519081900360640190fd5b60008281526001602052604080822080546001600160a01b0319166001600160a01b0385169081179091559051909184917f8ceddd02f4fb8ef0d5d6212cf4c91d59d366e04b977e8b2b944168d2a6d850819190a350506000600455565b6000600454600014610f97576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b600160048190553360009081526020819052604090205414610fee576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6001600160a01b038716611040576040805162461bcd60e51b81526020600482015260146024820152732239b9ab32b9ba17b4b73b30b634b216bab9b2b960611b604482015290519081900360640190fd5b60008611611095576040805162461bcd60e51b815260206004820152601c60248201527f447373566573742f6e6f2d766573742d746f74616c2d616d6f756e7400000000604482015290519081900360640190fd5b6110a3426325980600611cde565b85106110ec576040805162461bcd60e51b81526020600482015260136024820152722239b9ab32b9ba17b133b716ba37b796b330b960691b604482015290519081900360640190fd5b6110fa426325980600611d33565b851161114d576040805162461bcd60e51b815260206004820152601860248201527f447373566573742f62676e2d746f6f2d6c6f6e672d61676f0000000000000000604482015290519081900360640190fd5b60008411611195576040805162461bcd60e51b815260206004820152601060248201526f447373566573742f7461752d7a65726f60801b604482015290519081900360640190fd5b6002548487816111a157fe5b0411156111ed576040805162461bcd60e51b8152602060048201526015602482015274088e6e6accae6e85ee4c2e8ca5ae8dede5ad0d2ced605b1b604482015290519081900360640190fd5b632598060084111561123d576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f7461752d746f6f2d6c6f6e6760601b604482015290519081900360640190fd5b83831115611289576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f6574612d746f6f2d6c6f6e6760601b604482015290519081900360640190fd5b600019600354106112d8576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f6964732d6f766572666c6f7760601b604482015290519081900360640190fd5b5060038054600101908190556040805161010081019091526001600160a01b03881681526020810161130987611d83565b65ffffffffffff1681526020016113286113238887611cde565b611d83565b65ffffffffffff1681526020016113426113238888611cde565b65ffffffffffff1681526001600160a01b03841660208201526000604082015260600161136e88611de0565b6001600160801b03908116825260006020928301819052848152600180845260408083208651815496880151888401516001600160a01b03199098166001600160a01b039283161765ffffffffffff60a01b1916600160a01b65ffffffffffff92831602176001600160d01b0316600160d01b98821689021783556060890151948301805460808b015160a08c015165ffffffffffff1990921697909316969096176601000000000000600160d01b031916600160301b928416929092029190911760ff60d01b191660ff9095169097029390931790955560c08601516002909501805460e0909701516001600160801b0319909716958516959095178416600160801b96909416959095029290921790925591519189169183917f2e3cc5298d3204a0f0fc2be0f6fdefcef002025f4c75caf950b23e6cfbfb78d091a360006004559695505050505050565b60009081526001602081905260409091200154600160301b90046001600160a01b031690565b600090815260016020526040902060020154600160801b90046001600160801b031690565b6000908152600160208190526040909120015465ffffffffffff1690565b60035481565b60006115346121fa565b5060008281526001602081815260409283902083516101008101855281546001600160a01b03808216808452600160a01b830465ffffffffffff90811696850196909652600160d01b92839004861697840197909752948301549384166060830152600160301b840490941660808201529290910460ff1660a0830152600201546001600160801b0380821660c0840152600160801b9091041660e08201529061161d576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b610a0d42826020015183606001518460c00151611e3e565b60016020819052600091825260409091208054918101546002909101546001600160a01b038084169365ffffffffffff600160a01b8204811694600160d01b9283900482169491811693600160301b8204169260ff910416906001600160801b0380821691600160801b90041688565b600454156116e8576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b6001600481905533600090815260208190526040902054148061172c575060008281526001602081905260409091200154600160301b90046001600160a01b031633145b61176b576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6117736121fa565b5060008281526001602081815260409283902083516101008101855281546001600160a01b03808216808452600160a01b830465ffffffffffff90811696850196909652600160d01b92839004861697840197909752948301549384166060830152600160301b840490941660808201529290910460ff1660a0830152600201546001600160801b0380821660c0840152600160801b9091041660e08201529061185c576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b42821015611868574291505b806060015165ffffffffffff168210156119f057600061188783611d83565b600085815260016020818152604090922001805465ffffffffffff191665ffffffffffff84811691821790925591850151929350919091161115611921576000848152600160205260409020805465ffffffffffff60a01b1916600160a01b65ffffffffffff8416908102919091176001600160d01b0316600160d01b9190910217815560020180546001600160801b03191690556119ee565b816040015165ffffffffffff168165ffffffffffff16101561197e57600084815260016020526040902080546001600160d01b0316600160d01b65ffffffffffff84160217815560020180546001600160801b03191690556119ee565b6119be6119b96119a6858560200151866040015187606001518860c001518960e00151611a30565b8460e001516001600160801b0316611cde565b611de0565b600085815260016020526040902060020180546001600160801b0319166001600160801b03929092169190911790555b505b60408051838152905184917f6f2a3ed78a3066d89360b6c89e52bf3313f52e859401a3ea5fa0f033fd540c3c919081900360200190a25050600060045550565b60008465ffffffffffff168710611a6457611a5f611a5088888787611e3e565b836001600160801b0316611d33565b611a67565b60005b979650505050505050565b60045415611ab5576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b6001600455611ac26121fa565b5060008281526001602081815260409283902083516101008101855281546001600160a01b03808216808452600160a01b830465ffffffffffff90811696850196909652600160d01b92839004861697840197909752948301549384166060830152600160301b840490941660808201529290910460ff1660a0830152600201546001600160801b0380821660c0840152600160801b9091041660e082015290611bab576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b60a081015160ff161580611bc8575080516001600160a01b031633145b611c19576040805162461bcd60e51b815260206004820152601b60248201527f447373566573742f6f6e6c792d757365722d63616e2d636c61696d0000000000604482015290519081900360640190fd5b6000611c3d428360200151846040015185606001518660c001518760e00151611a30565b9050611c498184611ec8565b9050611c656119b98360e001516001600160801b031683611cde565b600085815260016020526040902060020180546001600160801b03928316600160801b0292169190911790558151611c9d9082611edd565b60408051828152905185917fa2906882572b0e9dfe893158bb064bc308eb1bd87d1da481850f9d17fc293847919081900360200190a2505060006004555050565b80820182811015611d2d576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b80820382811115611d2d576040805162461bcd60e51b8152602060048201526015602482015274447373566573742f7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b8065ffffffffffff8116811461060a576040805162461bcd60e51b815260206004820152601760248201527f447373566573742f75696e7434382d6f766572666c6f77000000000000000000604482015290519081900360640190fd5b806001600160801b038116811461060a576040805162461bcd60e51b815260206004820152601860248201527f447373566573742f75696e743132382d6f766572666c6f770000000000000000604482015290519081900360640190fd5b60008365ffffffffffff16851015611e5857506000611ec0565b8265ffffffffffff168510611e7757506001600160801b038116611ec0565b611e918365ffffffffffff168565ffffffffffff16611d33565b611eb5836001600160801b0316611eb0888865ffffffffffff16611d33565b612197565b81611ebc57fe5b0490505b949350505050565b6000818311611ed75782610a0d565b50919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663957aa58c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f3657600080fd5b505afa158015611f4a573d6000803e3d6000fd5b505050506040513d6020811015611f6057600080fd5b5051600114611fb6576040805162461bcd60e51b815260206004820152601c60248201527f447373566573745375636b61626c652f7661742d6e6f742d6c69766500000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f24e23eb7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166321f8a7216040518163ffffffff1660e01b81526004018080664d43445f564f5760c81b815250602001905060206040518083038186803b15801561205357600080fd5b505afa158015612067573d6000803e3d6000fd5b505050506040513d602081101561207d57600080fd5b505130612096856b033b2e3c9fd0803ce8000000612197565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156120ec57600080fd5b505af1158015612100573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef693bed83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b505050505050565b60008115806121b2575050808202828282816121af57fe5b04145b611d2d576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091529056fe447373566573742f73797374656d2d6c6f636b65640000000000000000000000447373566573742f6e6f742d617574686f72697a656400000000000000000000a26469706673582212206802a98b7954ea4354f32c8051fa035eb2a8ce57ffe52037ebe137fc578fd0fb64736f6c634300060c0033447373566573745375636b61626c652f696e76616c69642d636861696e6c6f672d61646472657373000000000000000000000000da0ab1e0017debcd72be8599041a2aa3ba7e740f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063bb7c46f31161010f578063d8a8e03a116100a2578063e529780d11610071578063e529780d14610524578063e7657e1514610541578063f52981f414610549578063fc5a5b6314610566576101e5565b8063d8a8e03a14610478578063db64ff8f146104a4578063dc2c788f146104ea578063e054720f14610507576101e5565b8063c659cd45116100de578063c659cd4514610419578063cdf4349714610436578063ce6f74aa14610453578063d4e8fd2e1461045b576101e5565b8063bb7c46f314610397578063bf353dbb146103ba578063bf8712c5146103e0578063c11645bc14610411576101e5565b806353e8863d116101875780637d8d2702116101565780637d8d27021461032f578063892de51d1461034c5780639c52a7f114610369578063b688a3631461038f576101e5565b806353e8863d146102c757806360fb494b146102e457806365fae35e146102ec5780636a760b8014610312576101e5565b8063355274ea116101c3578063355274ea1461025b57806336569e77146102635780633c433d5f14610287578063509aaa1d146102a4576101e5565b806321f6c0cf146101ea57806326e027f11461021957806329ae811414610238575b600080fd5b6102076004803603602081101561020057600080fd5b50356105eb565b60408051918252519081900360200190f35b6102366004803603602081101561022f57600080fd5b503561060f565b005b6102366004803603604081101561024e57600080fd5b508035906020013561061c565b61020761075a565b61026b610760565b604080516001600160a01b039092168252519081900360200190f35b6102366004803603602081101561029d57600080fd5b5035610784565b610236600480360360408110156102ba57600080fd5b50803590602001356108ea565b610207600480360360208110156102dd57600080fd5b50356108f8565b610207610a14565b6102366004803603602081101561030257600080fd5b50356001600160a01b0316610a1c565b6102366004803603602081101561032857600080fd5b5035610ab3565b6102366004803603602081101561034557600080fd5b5035610abf565b6102076004803603602081101561036257600080fd5b5035610c1f565b6102366004803603602081101561037f57600080fd5b50356001600160a01b0316610c3d565b61026b610cd3565b610236600480360360408110156103ad57600080fd5b5080359060200135610cf7565b610207600480360360208110156103d057600080fd5b50356001600160a01b0316610d01565b6103fd600480360360208110156103f657600080fd5b5035610d13565b604080519115158252519081900360200190f35b61026b610d3d565b61026b6004803603602081101561042f57600080fd5b5035610d61565b6102076004803603602081101561044c57600080fd5b5035610d7c565b61026b610d9d565b6102076004803603602081101561047157600080fd5b5035610dc1565b6102366004803603604081101561048e57600080fd5b50803590602001356001600160a01b0316610de1565b610207600480360360c08110156104ba57600080fd5b506001600160a01b03813581169160208101359160408201359160608101359160808201359160a0013516610f50565b61026b6004803603602081101561050057600080fd5b50356114bb565b6102076004803603602081101561051d57600080fd5b50356114e1565b6102076004803603602081101561053a57600080fd5b5035611506565b610207611524565b6102076004803603602081101561055f57600080fd5b503561152a565b6105836004803603602081101561057c57600080fd5b5035611635565b604080516001600160a01b03998a16815265ffffffffffff98891660208201529688168782015294909616606086015291909516608084015260ff90941660a08301526001600160801b0393841660c08301529190921660e083015251908190036101000190f35b600081815260016020526040902054600160a01b900465ffffffffffff165b919050565b61061981426116a5565b50565b6004541561065f576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b6001600481905533600090815260208190526040902054146106b6576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b816206361760ec1b14156106ce57600281905561071b565b6040805162461bcd60e51b815260206004820152601f60248201527f447373566573742f66696c652d756e7265636f676e697a65642d706172616d00604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a250506000600455565b60025481565b7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b600454156107c7576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b60016004819055600082815260209190915260409020546001600160a01b031680610831576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b336000908152602081905260409020546001148061085757506001600160a01b03811633145b610896576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6000828152600160208190526040808320909101805460ff60d01b1916600160d01b1790555183917f9247a2bf1b75bc397d4043d99b9cebce531548a01dbb56a5d4c5f5ca26051e8d91a250506000600455565b6108f482826116a5565b5050565b60006109026121fa565b5060008281526001602081815260409283902083516101008101855281546001600160a01b03808216808452600160a01b830465ffffffffffff90811696850196909652600160d01b92839004861697840197909752948301549384166060830152600160301b840490941660808201529290910460ff1660a0830152600201546001600160801b0380821660c0840152600160801b9091041660e0820152906109eb576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b610a0d428260200151836040015184606001518560c001518660e00151611a30565b9392505050565b632598060081565b33600090815260208190526040902054600114610a6e576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b61061981600019611a72565b60045415610b02576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b60016004819055600082815260209190915260409020546001600160a01b031680610b6c576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b3360009081526020819052604090205460011480610b9257506001600160a01b03811633145b610bd1576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6000828152600160208190526040808320909101805460ff60d01b191690555183917f3d1b575f06b2d660af77eec35d9b3ffcfa956b6c1fdbc840992d4b03b03e622b91a250506000600455565b6000908152600160205260409020600201546001600160801b031690565b33600090815260208190526040902054600114610c8f576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b7f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb81565b6108f48282611a72565b60006020819052908152604090205481565b6000908152600160205260409020600201546001600160801b03808216600160801b909204161090565b7f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb90565b6000908152600160205260409020546001600160a01b031690565b600090815260016020526040902054600160d01b900465ffffffffffff1690565b7f000000000000000000000000da0ab1e0017debcd72be8599041a2aa3ba7e740f81565b60009081526001602081905260409091200154600160d01b900460ff1690565b60045415610e24576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b60016004819055600083815260209190915260409020546001600160a01b03163314610e97576040805162461bcd60e51b815260206004820152601a60248201527f447373566573742f6f6e6c792d757365722d63616e2d6d6f7665000000000000604482015290519081900360640190fd5b6001600160a01b038116610ef2576040805162461bcd60e51b815260206004820152601c60248201527f447373566573742f7a65726f2d616464726573732d696e76616c696400000000604482015290519081900360640190fd5b60008281526001602052604080822080546001600160a01b0319166001600160a01b0385169081179091559051909184917f8ceddd02f4fb8ef0d5d6212cf4c91d59d366e04b977e8b2b944168d2a6d850819190a350506000600455565b6000600454600014610f97576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b600160048190553360009081526020819052604090205414610fee576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6001600160a01b038716611040576040805162461bcd60e51b81526020600482015260146024820152732239b9ab32b9ba17b4b73b30b634b216bab9b2b960611b604482015290519081900360640190fd5b60008611611095576040805162461bcd60e51b815260206004820152601c60248201527f447373566573742f6e6f2d766573742d746f74616c2d616d6f756e7400000000604482015290519081900360640190fd5b6110a3426325980600611cde565b85106110ec576040805162461bcd60e51b81526020600482015260136024820152722239b9ab32b9ba17b133b716ba37b796b330b960691b604482015290519081900360640190fd5b6110fa426325980600611d33565b851161114d576040805162461bcd60e51b815260206004820152601860248201527f447373566573742f62676e2d746f6f2d6c6f6e672d61676f0000000000000000604482015290519081900360640190fd5b60008411611195576040805162461bcd60e51b815260206004820152601060248201526f447373566573742f7461752d7a65726f60801b604482015290519081900360640190fd5b6002548487816111a157fe5b0411156111ed576040805162461bcd60e51b8152602060048201526015602482015274088e6e6accae6e85ee4c2e8ca5ae8dede5ad0d2ced605b1b604482015290519081900360640190fd5b632598060084111561123d576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f7461752d746f6f2d6c6f6e6760601b604482015290519081900360640190fd5b83831115611289576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f6574612d746f6f2d6c6f6e6760601b604482015290519081900360640190fd5b600019600354106112d8576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f6964732d6f766572666c6f7760601b604482015290519081900360640190fd5b5060038054600101908190556040805161010081019091526001600160a01b03881681526020810161130987611d83565b65ffffffffffff1681526020016113286113238887611cde565b611d83565b65ffffffffffff1681526020016113426113238888611cde565b65ffffffffffff1681526001600160a01b03841660208201526000604082015260600161136e88611de0565b6001600160801b03908116825260006020928301819052848152600180845260408083208651815496880151888401516001600160a01b03199098166001600160a01b039283161765ffffffffffff60a01b1916600160a01b65ffffffffffff92831602176001600160d01b0316600160d01b98821689021783556060890151948301805460808b015160a08c015165ffffffffffff1990921697909316969096176601000000000000600160d01b031916600160301b928416929092029190911760ff60d01b191660ff9095169097029390931790955560c08601516002909501805460e0909701516001600160801b0319909716958516959095178416600160801b96909416959095029290921790925591519189169183917f2e3cc5298d3204a0f0fc2be0f6fdefcef002025f4c75caf950b23e6cfbfb78d091a360006004559695505050505050565b60009081526001602081905260409091200154600160301b90046001600160a01b031690565b600090815260016020526040902060020154600160801b90046001600160801b031690565b6000908152600160208190526040909120015465ffffffffffff1690565b60035481565b60006115346121fa565b5060008281526001602081815260409283902083516101008101855281546001600160a01b03808216808452600160a01b830465ffffffffffff90811696850196909652600160d01b92839004861697840197909752948301549384166060830152600160301b840490941660808201529290910460ff1660a0830152600201546001600160801b0380821660c0840152600160801b9091041660e08201529061161d576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b610a0d42826020015183606001518460c00151611e3e565b60016020819052600091825260409091208054918101546002909101546001600160a01b038084169365ffffffffffff600160a01b8204811694600160d01b9283900482169491811693600160301b8204169260ff910416906001600160801b0380821691600160801b90041688565b600454156116e8576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b6001600481905533600090815260208190526040902054148061172c575060008281526001602081905260409091200154600160301b90046001600160a01b031633145b61176b576040805162461bcd60e51b8152602060048201526016602482015260008051602061225f833981519152604482015290519081900360640190fd5b6117736121fa565b5060008281526001602081815260409283902083516101008101855281546001600160a01b03808216808452600160a01b830465ffffffffffff90811696850196909652600160d01b92839004861697840197909752948301549384166060830152600160301b840490941660808201529290910460ff1660a0830152600201546001600160801b0380821660c0840152600160801b9091041660e08201529061185c576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b42821015611868574291505b806060015165ffffffffffff168210156119f057600061188783611d83565b600085815260016020818152604090922001805465ffffffffffff191665ffffffffffff84811691821790925591850151929350919091161115611921576000848152600160205260409020805465ffffffffffff60a01b1916600160a01b65ffffffffffff8416908102919091176001600160d01b0316600160d01b9190910217815560020180546001600160801b03191690556119ee565b816040015165ffffffffffff168165ffffffffffff16101561197e57600084815260016020526040902080546001600160d01b0316600160d01b65ffffffffffff84160217815560020180546001600160801b03191690556119ee565b6119be6119b96119a6858560200151866040015187606001518860c001518960e00151611a30565b8460e001516001600160801b0316611cde565b611de0565b600085815260016020526040902060020180546001600160801b0319166001600160801b03929092169190911790555b505b60408051838152905184917f6f2a3ed78a3066d89360b6c89e52bf3313f52e859401a3ea5fa0f033fd540c3c919081900360200190a25050600060045550565b60008465ffffffffffff168710611a6457611a5f611a5088888787611e3e565b836001600160801b0316611d33565b611a67565b60005b979650505050505050565b60045415611ab5576040805162461bcd60e51b8152602060048201526015602482015260008051602061223f833981519152604482015290519081900360640190fd5b6001600455611ac26121fa565b5060008281526001602081815260409283902083516101008101855281546001600160a01b03808216808452600160a01b830465ffffffffffff90811696850196909652600160d01b92839004861697840197909752948301549384166060830152600160301b840490941660808201529290910460ff1660a0830152600201546001600160801b0380821660c0840152600160801b9091041660e082015290611bab576040805162461bcd60e51b8152602060048201526015602482015274111cdcd5995cdd0bda5b9d985b1a590b585dd85c99605a1b604482015290519081900360640190fd5b60a081015160ff161580611bc8575080516001600160a01b031633145b611c19576040805162461bcd60e51b815260206004820152601b60248201527f447373566573742f6f6e6c792d757365722d63616e2d636c61696d0000000000604482015290519081900360640190fd5b6000611c3d428360200151846040015185606001518660c001518760e00151611a30565b9050611c498184611ec8565b9050611c656119b98360e001516001600160801b031683611cde565b600085815260016020526040902060020180546001600160801b03928316600160801b0292169190911790558151611c9d9082611edd565b60408051828152905185917fa2906882572b0e9dfe893158bb064bc308eb1bd87d1da481850f9d17fc293847919081900360200190a2505060006004555050565b80820182811015611d2d576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b80820382811115611d2d576040805162461bcd60e51b8152602060048201526015602482015274447373566573742f7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b8065ffffffffffff8116811461060a576040805162461bcd60e51b815260206004820152601760248201527f447373566573742f75696e7434382d6f766572666c6f77000000000000000000604482015290519081900360640190fd5b806001600160801b038116811461060a576040805162461bcd60e51b815260206004820152601860248201527f447373566573742f75696e743132382d6f766572666c6f770000000000000000604482015290519081900360640190fd5b60008365ffffffffffff16851015611e5857506000611ec0565b8265ffffffffffff168510611e7757506001600160801b038116611ec0565b611e918365ffffffffffff168565ffffffffffff16611d33565b611eb5836001600160801b0316611eb0888865ffffffffffff16611d33565b612197565b81611ebc57fe5b0490505b949350505050565b6000818311611ed75782610a0d565b50919050565b7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b031663957aa58c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f3657600080fd5b505afa158015611f4a573d6000803e3d6000fd5b505050506040513d6020811015611f6057600080fd5b5051600114611fb6576040805162461bcd60e51b815260206004820152601c60248201527f447373566573745375636b61626c652f7661742d6e6f742d6c69766500000000604482015290519081900360640190fd5b7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b031663f24e23eb7f000000000000000000000000da0ab1e0017debcd72be8599041a2aa3ba7e740f6001600160a01b03166321f8a7216040518163ffffffff1660e01b81526004018080664d43445f564f5760c81b815250602001905060206040518083038186803b15801561205357600080fd5b505afa158015612067573d6000803e3d6000fd5b505050506040513d602081101561207d57600080fd5b505130612096856b033b2e3c9fd0803ce8000000612197565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156120ec57600080fd5b505af1158015612100573d6000803e3d6000fd5b505050507f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb6001600160a01b031663ef693bed83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b505050505050565b60008115806121b2575050808202828282816121af57fe5b04145b611d2d576040805162461bcd60e51b8152602060048201526014602482015273447373566573742f6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091529056fe447373566573742f73797374656d2d6c6f636b65640000000000000000000000447373566573742f6e6f742d617574686f72697a656400000000000000000000a26469706673582212206802a98b7954ea4354f32c8051fa035eb2a8ce57ffe52037ebe137fc578fd0fb64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000da0ab1e0017debcd72be8599041a2aa3ba7e740f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb
-----Decoded View---------------
Arg [0] : _chainlog (address): 0xdA0Ab1e0017DEbCd72Be8599041a2aa3bA7e740F
Arg [1] : _join (address): 0x3C0f895007CA717Aa01c8693e59DF1e8C3777FEB
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000da0ab1e0017debcd72be8599041a2aa3ba7e740f
Arg [1] : 0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.