Overview
ETH Balance
0.082854259927935087 ETH
Eth Value
$274.65 (@ $3,314.85/ETH)More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14671106 | 973 days ago | 0.08285425 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.2.7
Contract Source Code (Vyper language format)
# @version 0.2.7 """ @title Curve Fee Distribution @author Curve Finance @license MIT """ from vyper.interfaces import ERC20 interface VotingEscrow: def user_point_epoch(addr: address) -> uint256: view def epoch() -> uint256: view def user_point_history(addr: address, loc: uint256) -> Point: view def point_history(loc: uint256) -> Point: view def checkpoint(): nonpayable interface WETH: def withdraw(wad: uint256): nonpayable event CommitAdmin: admin: address event ApplyAdmin: admin: address event ToggleAllowCheckpointToken: toggle_flag: bool event CheckpointToken: time: uint256 tokens: uint256 event Claimed: recipient: indexed(address) amount: uint256 claim_epoch: uint256 max_epoch: uint256 struct Point: bias: int128 slope: int128 # - dweight / dt ts: uint256 blk: uint256 # block WEEK: constant(uint256) = 7 * 86400 TOKEN_CHECKPOINT_DEADLINE: constant(uint256) = 86400 start_time: public(uint256) time_cursor: public(uint256) time_cursor_of: public(HashMap[address, uint256]) user_epoch_of: public(HashMap[address, uint256]) last_token_time: public(uint256) tokens_per_week: public(uint256[1000000000000000]) voting_escrow: public(address) token: public(address) total_received: public(uint256) token_last_balance: public(uint256) ve_supply: public(uint256[1000000000000000]) # VE total supply at week bounds admin: public(address) future_admin: public(address) can_checkpoint_token: public(bool) emergency_return: public(address) is_killed: public(bool) @external def __init__( _voting_escrow: address, _start_time: uint256, _token: address, _admin: address, _emergency_return: address ): """ @notice Contract constructor @param _voting_escrow VotingEscrow contract address @param _start_time Epoch time for fee distribution to start @param _token Fee token address (ETH) @param _admin Admin address @param _emergency_return Address to transfer `_token` balance to if this contract is killed """ t: uint256 = _start_time / WEEK * WEEK self.start_time = t self.last_token_time = t self.time_cursor = t self.token = _token self.voting_escrow = _voting_escrow self.admin = _admin self.emergency_return = _emergency_return self.can_checkpoint_token = True @external @payable def __default__(): return @internal def _checkpoint_token(): token_balance: uint256 = self.balance to_distribute: uint256 = token_balance - self.token_last_balance self.token_last_balance = token_balance t: uint256 = self.last_token_time since_last: uint256 = block.timestamp - t self.last_token_time = block.timestamp this_week: uint256 = t / WEEK * WEEK next_week: uint256 = 0 for i in range(20): next_week = this_week + WEEK if block.timestamp < next_week: if since_last == 0 and block.timestamp == t: self.tokens_per_week[this_week] += to_distribute else: self.tokens_per_week[this_week] += to_distribute * (block.timestamp - t) / since_last break else: if since_last == 0 and next_week == t: self.tokens_per_week[this_week] += to_distribute else: self.tokens_per_week[this_week] += to_distribute * (next_week - t) / since_last t = next_week this_week = next_week log CheckpointToken(block.timestamp, to_distribute) @external def checkpoint_token(): """ @notice Update the token checkpoint @dev Calculates the total number of tokens to be distributed in a given week. During setup for the initial distribution this function is only callable by the contract owner. Beyond initial distro, it can be enabled for anyone to call. """ assert (msg.sender == self.admin) or\ (self.can_checkpoint_token and (block.timestamp > self.last_token_time + TOKEN_CHECKPOINT_DEADLINE)) self._checkpoint_token() @internal def _find_timestamp_epoch(ve: address, _timestamp: uint256) -> uint256: _min: uint256 = 0 _max: uint256 = VotingEscrow(ve).epoch() for i in range(128): if _min >= _max: break _mid: uint256 = (_min + _max + 2) / 2 pt: Point = VotingEscrow(ve).point_history(_mid) if pt.ts <= _timestamp: _min = _mid else: _max = _mid - 1 return _min @view @internal def _find_timestamp_user_epoch(ve: address, user: address, _timestamp: uint256, max_user_epoch: uint256) -> uint256: _min: uint256 = 0 _max: uint256 = max_user_epoch for i in range(128): if _min >= _max: break _mid: uint256 = (_min + _max + 2) / 2 pt: Point = VotingEscrow(ve).user_point_history(user, _mid) if pt.ts <= _timestamp: _min = _mid else: _max = _mid - 1 return _min @view @external def ve_for_at(_user: address, _timestamp: uint256) -> uint256: """ @notice Get the veCRV balance for `_user` at `_timestamp` @param _user Address to query balance for @param _timestamp Epoch time @return uint256 veCRV balance """ ve: address = self.voting_escrow max_user_epoch: uint256 = VotingEscrow(ve).user_point_epoch(_user) epoch: uint256 = self._find_timestamp_user_epoch(ve, _user, _timestamp, max_user_epoch) pt: Point = VotingEscrow(ve).user_point_history(_user, epoch) return convert(max(pt.bias - pt.slope * convert(_timestamp - pt.ts, int128), 0), uint256) @internal def _checkpoint_total_supply(): ve: address = self.voting_escrow t: uint256 = self.time_cursor rounded_timestamp: uint256 = block.timestamp / WEEK * WEEK VotingEscrow(ve).checkpoint() for i in range(20): if t > rounded_timestamp: break else: epoch: uint256 = self._find_timestamp_epoch(ve, t) pt: Point = VotingEscrow(ve).point_history(epoch) dt: int128 = 0 if t > pt.ts: # If the point is at 0 epoch, it can actually be earlier than the first deposit # Then make dt 0 dt = convert(t - pt.ts, int128) self.ve_supply[t] = convert(max(pt.bias - pt.slope * dt, 0), uint256) t += WEEK self.time_cursor = t @external def checkpoint_total_supply(): """ @notice Update the veCRV total supply checkpoint @dev The checkpoint is also updated by the first claimant each new epoch week. This function may be called independently of a claim, to reduce claiming gas costs. """ self._checkpoint_total_supply() @view @internal def _claim(addr: address, ve: address, _last_token_time: uint256) -> (uint256, uint256, uint256, uint256, bool): # Minimal user_epoch is 0 (if user had no point) user_epoch: uint256 = 0 to_distribute: uint256 = 0 max_user_epoch: uint256 = VotingEscrow(ve).user_point_epoch(addr) _start_time: uint256 = self.start_time if max_user_epoch == 0: # No lock = no fees return (0, 0, 0, 0, False) week_cursor: uint256 = self.time_cursor_of[addr] if week_cursor == 0: # Need to do the initial binary search user_epoch = self._find_timestamp_user_epoch(ve, addr, _start_time, max_user_epoch) else: user_epoch = self.user_epoch_of[addr] if user_epoch == 0: user_epoch = 1 user_point: Point = VotingEscrow(ve).user_point_history(addr, user_epoch) if week_cursor == 0: week_cursor = (user_point.ts + WEEK - 1) / WEEK * WEEK if week_cursor >= _last_token_time: return (0, 0, 0, 0, False) if week_cursor < _start_time: week_cursor = _start_time old_user_point: Point = empty(Point) # Iterate over weeks for i in range(50): if week_cursor >= _last_token_time: break if week_cursor >= user_point.ts and user_epoch <= max_user_epoch: user_epoch += 1 old_user_point = user_point if user_epoch > max_user_epoch: user_point = empty(Point) else: user_point = VotingEscrow(ve).user_point_history(addr, user_epoch) else: # Calc # + i * 2 is for rounding errors dt: int128 = convert(week_cursor - old_user_point.ts, int128) balance_of: uint256 = convert(max(old_user_point.bias - dt * old_user_point.slope, 0), uint256) if balance_of == 0 and user_epoch > max_user_epoch: break if balance_of > 0: to_distribute += balance_of * self.tokens_per_week[week_cursor] / self.ve_supply[week_cursor] week_cursor += WEEK user_epoch = min(max_user_epoch, user_epoch - 1) return (to_distribute, user_epoch, week_cursor, max_user_epoch, True) @view @external def claimable(addr: address = msg.sender) -> uint256: """ @notice Get the claimable revenue (approximation) @param addr Address to query balance for @return uint256 Claimable revenue """ claimable: uint256 = 0 user_epoch: uint256 = 0 week_cursor: uint256 = 0 max_user_epoch: uint256 = 0 is_update: bool = True claimable, user_epoch, week_cursor, max_user_epoch, is_update = self._claim(addr, self.voting_escrow, self.last_token_time / WEEK * WEEK) return claimable @external @nonreentrant('lock') def claim(_addr: address = msg.sender) -> uint256: """ @notice Claim fees for `_addr` @dev Each call to claim look at a maximum of 50 user veCRV points. For accounts with many veCRV related actions, this function may need to be called more than once to claim all available fees. In the `Claimed` event that fires, if `claim_epoch` is less than `max_epoch`, the account may claim again. @param _addr Address to claim fees for @return uint256 Amount of fees claimed in the call """ assert not self.is_killed if block.timestamp >= self.time_cursor: self._checkpoint_total_supply() last_token_time: uint256 = self.last_token_time if self.can_checkpoint_token and (block.timestamp > last_token_time + TOKEN_CHECKPOINT_DEADLINE): self._checkpoint_token() last_token_time = block.timestamp last_token_time = last_token_time / WEEK * WEEK amount: uint256 = 0 user_epoch: uint256 = 0 week_cursor: uint256 = 0 max_user_epoch: uint256 = 0 is_update: bool = True amount, user_epoch, week_cursor, max_user_epoch, is_update = self._claim(_addr, self.voting_escrow, last_token_time) if is_update: self.user_epoch_of[_addr] = user_epoch self.time_cursor_of[_addr] = week_cursor log Claimed(_addr, amount, user_epoch, max_user_epoch) if amount != 0: self.token_last_balance -= amount send(_addr, amount) return amount @external @nonreentrant('lock') def claim_many(_receivers: address[20]) -> bool: """ @notice Make multiple fee claims in a single call @dev Used to claim for many accounts at once, or to make multiple claims for the same address when that address has significant veCRV history @param _receivers List of addresses to claim for. Claiming terminates at the first `ZERO_ADDRESS`. @return bool success """ assert not self.is_killed if block.timestamp >= self.time_cursor: self._checkpoint_total_supply() last_token_time: uint256 = self.last_token_time if self.can_checkpoint_token and (block.timestamp > last_token_time + TOKEN_CHECKPOINT_DEADLINE): self._checkpoint_token() last_token_time = block.timestamp last_token_time = last_token_time / WEEK * WEEK voting_escrow: address = self.voting_escrow token: address = self.token total: uint256 = 0 amount: uint256 = 0 user_epoch: uint256 = 0 week_cursor: uint256 = 0 max_user_epoch: uint256 = 0 is_update: bool = True for addr in _receivers: if addr == ZERO_ADDRESS: break amount, user_epoch, week_cursor, max_user_epoch, is_update = self._claim(addr, voting_escrow, last_token_time) if is_update: self.user_epoch_of[addr] = user_epoch self.time_cursor_of[addr] = week_cursor log Claimed(addr, amount, user_epoch, max_user_epoch) if amount != 0: total += amount send(addr, amount) if total != 0: self.token_last_balance -= total return True @external @payable def burn(_coin: address, _amount: uint256) -> bool: """ @notice Receive WETH into the contract and trigger a token checkpoint @param _coin Address of the coin being received (must be WETH) @param _amount Amount to transfer @return bool success """ assert _coin == self.token assert _amount != 0 assert not self.is_killed ERC20(_coin).transferFrom(msg.sender, self, _amount) WETH(_coin).withdraw(_amount) if self.can_checkpoint_token and (block.timestamp > self.last_token_time + TOKEN_CHECKPOINT_DEADLINE): self._checkpoint_token() return True @external def commit_admin(_addr: address): """ @notice Commit transfer of ownership @param _addr New admin address """ assert msg.sender == self.admin # dev: access denied self.future_admin = _addr log CommitAdmin(_addr) @external def apply_admin(): """ @notice Apply transfer of ownership """ assert msg.sender == self.admin assert self.future_admin != ZERO_ADDRESS future_admin: address = self.future_admin self.admin = future_admin log ApplyAdmin(future_admin) @external def toggle_allow_checkpoint_token(): """ @notice Toggle permission for checkpointing by any account """ assert msg.sender == self.admin flag: bool = not self.can_checkpoint_token self.can_checkpoint_token = flag log ToggleAllowCheckpointToken(flag) @external def kill_me(): """ @notice Kill the contract @dev Killing transfers the entire ETH balance to the emergency return address and blocks the ability to claim or burn. The contract cannot be unkilled. """ assert msg.sender == self.admin self.is_killed = True send(self.emergency_return, self.balance) @external def recover_balance(_coin: address) -> bool: """ @notice Recover ERC20 tokens from this contract @dev Tokens are sent to the emergency return address. @param _coin Token address @return bool success """ assert msg.sender == self.admin assert _coin != self.token amount: uint256 = ERC20(_coin).balanceOf(self) response: Bytes[32] = raw_call( _coin, concat( method_id("transfer(address,uint256)"), convert(self.emergency_return, bytes32), convert(amount, bytes32), ), max_outsize=32, ) if len(response) != 0: assert convert(response, bool) return True
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"CommitAdmin","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyAdmin","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"ToggleAllowCheckpointToken","inputs":[{"type":"bool","name":"toggle_flag","indexed":false}],"anonymous":false,"type":"event"},{"name":"CheckpointToken","inputs":[{"type":"uint256","name":"time","indexed":false},{"type":"uint256","name":"tokens","indexed":false}],"anonymous":false,"type":"event"},{"name":"Claimed","inputs":[{"type":"address","name":"recipient","indexed":true},{"type":"uint256","name":"amount","indexed":false},{"type":"uint256","name":"claim_epoch","indexed":false},{"type":"uint256","name":"max_epoch","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address","name":"_voting_escrow"},{"type":"uint256","name":"_start_time"},{"type":"address","name":"_token"},{"type":"address","name":"_admin"},{"type":"address","name":"_emergency_return"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"name":"checkpoint_token","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":819695},{"name":"ve_for_at","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_user"},{"type":"uint256","name":"_timestamp"}],"stateMutability":"view","type":"function","gas":249507},{"name":"checkpoint_total_supply","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":10592495},{"name":"claimable","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function"},{"name":"claimable","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"view","type":"function"},{"name":"claim","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"nonpayable","type":"function"},{"name":"claim","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_addr"}],"stateMutability":"nonpayable","type":"function"},{"name":"claim_many","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address[20]","name":"_receivers"}],"stateMutability":"nonpayable","type":"function","gas":27012656},{"name":"burn","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_coin"},{"type":"uint256","name":"_amount"}],"stateMutability":"payable","type":"function","gas":823701},{"name":"commit_admin","outputs":[],"inputs":[{"type":"address","name":"_addr"}],"stateMutability":"nonpayable","type":"function","gas":38018},{"name":"apply_admin","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":39654},{"name":"toggle_allow_checkpoint_token","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":38793},{"name":"kill_me","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":72263},{"name":"recover_balance","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_coin"}],"stateMutability":"nonpayable","type":"function","gas":7898},{"name":"start_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1661},{"name":"time_cursor","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1691},{"name":"time_cursor_of","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":1936},{"name":"user_epoch_of","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":1966},{"name":"last_token_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1781},{"name":"tokens_per_week","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1920},{"name":"voting_escrow","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1841},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1871},{"name":"total_received","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1901},{"name":"token_last_balance","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1931},{"name":"ve_supply","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2070},{"name":"admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1991},{"name":"future_admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2021},{"name":"can_checkpoint_token","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2051},{"name":"emergency_return","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2081},{"name":"is_killed","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2111}]
Contract Creation Code
6f7fffffffffffffffffffffffffffffff60405260a061241161014039602061241160c03960c05160a01c1561003457600080fd5b602060406124110160c03960c05160a01c1561004f57600080fd5b602060606124110160c03960c05160a01c1561006a57600080fd5b602060806124110160c03960c05160a01c1561008557600080fd5b6101605162093a808082049050905062093a8080820282158284830414176100ac57600080fd5b809050905090506101e0526101e0516000556101e0516004556101e05160015561018051600755610140516006556101a051600b556101c051600e556001600d556123f956600436101561000d57612301565b600035601c526f7fffffffffffffffffffffffffffffff604052600015610340575b610140524761016052610160516009548082101561004c57600080fd5b8082039050905061018052610160516009556004546101a052426101a0518082101561007757600080fd5b808203905090506101c052426004556101a05162093a808082049050905062093a8080820282158284830414176100ad57600080fd5b809050905090506101e05260006102005261022060006014818352015b6101e05162093a808181830110156100e157600080fd5b8082019050905061020052610200514210156101ee576101c051151561010c576101a051421461010f565b60005b1561015a576101e05166038d7ea4c68000811061012b57600080fd5b600560c052602060c0200180546101805181818301101561014b57600080fd5b808201905090508155506101e5565b6101e05166038d7ea4c68000811061017157600080fd5b600560c052602060c02001805461018051426101a0518082101561019457600080fd5b8082039050905080820282158284830414176101af57600080fd5b809050905090506101c05180806101c557600080fd5b8204905090508181830110156101da57600080fd5b808201905090508155505b610304566102e3565b6101c0511515610206576101a0516102005114610209565b60005b15610254576101e05166038d7ea4c68000811061022557600080fd5b600560c052602060c0200180546101805181818301101561024557600080fd5b808201905090508155506102e2565b6101e05166038d7ea4c68000811061026b57600080fd5b600560c052602060c02001805461018051610200516101a0518082101561029157600080fd5b8082039050905080820282158284830414176102ac57600080fd5b809050905090506101c05180806102c257600080fd5b8204905090508181830110156102d757600080fd5b808201905090508155505b5b610200516101a052610200516101e0525b81516001018083528114156100ca575b5050426102205261018051610240527fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d66040610220a161014051565b63811a40fe60005114156103b257341561035957600080fd5b600b5433141561036a57600161039a565b600d5415610396576004546201518081818301101561038857600080fd5b808201905090504211610399565b60005b5b5b6103a457600080fd5b6006580161002f565b600050005b60001561056d575b61018052610140526101605260006101a0526020610240600463900cf0cf6101e0526101fc610140515afa6103ee57600080fd5b601f3d116103fb57600080fd5b600050610240516101c0526101e060006080818352015b6101c0516101a05110151561042657610559565b6101a0516101c05181818301101561043d57600080fd5b80820190509050600281818301101561045557600080fd5b80820190509050600280820490509050610200526102206080610320602463d1febfb96102a052610200516102c0526102bc610140515afa61049657600080fd5b607f3d116104a357600080fd5b61032080808080516103a0525050602081019050808080516103c0525050602081019050808080516103e05250506020810190508080805161040052505050506000506103a0805182528060200151826020015280604001518260400152806060015182606001525050610160516102605111151561052957610200516101a052610548565b6102005160018082101561053c57600080fd5b808203905090506101c0525b5b8151600101808352811415610412575b50506101a051600052600051610180515650005b600015610706575b6101c0526101405261016052610180526101a05260006101e0526101a0516102005261022060006080818352015b610200516101e0511015156105b7576106f2565b6101e051610200518181830110156105ce57600080fd5b8082019050905060028181830110156105e657600080fd5b8082019050905060028082049050905061024052610260608061038060446328d09d476102e052610160516103005261024051610320526102fc610140515afa61062f57600080fd5b607f3d1161063c57600080fd5b61038080808080516104005250506020810190508080805161042052505060208101905080808051610440525050602081019050808080516104605250505050600050610400805182528060200151826020015280604001518260400152806060015182606001525050610180516102a0511115156106c257610240516101e0526106e1565b610240516001808210156106d557600080fd5b80820390509050610200525b5b81516001018083528114156105a3575b50506101e0516000526000516101c0515650005b63ace296fb600051141561092457341561071f57600080fd5b60043560a01c1561072f57600080fd5b600654610140526020610200602463010ae757610180526004356101a05261019c610140515afa61075f57600080fd5b601f3d1161076c57600080fd5b6000506102005161016052610140516101605161018051610140516101a0526004356101c0526024356101e0526101605161020052610200516101e0516101c0516101a05160065801610575565b6102605261018052610160526101405261026051610180526101a060806102c060446328d09d476102205260043561024052610180516102605261023c610140515afa61080657600080fd5b607f3d1161081357600080fd5b6102c080808080516103405250506020810190508080805161036052505060208101905080808051610380525050602081019050808080516103a052505050506000506103408051825280602001518260200152806040015182604001528060600151826060015250506101a0516101c0516024356101e0518082101561089957600080fd5b808203905090506040518111156108af57600080fd5b808202808060008112156108bf57195b607f1c156108cc57600080fd5b905090509050808203808060008112156108e257195b607f1c156108ef57600080fd5b9050905090506000808212156109055780610907565b815b90509050600081121561091957600080fd5b60005260206000f350005b600015610be2575b6101405260065461016052600154610180524262093a808082049050905062093a80808202821582848304141761096257600080fd5b809050905090506101a052610160513b61097b57600080fd5b60006000600463c2c4c5c16101c0526101dc6000610160515af161099e57600080fd5b6101c060006014818352015b6101a0516101805111156109c157610bd356610ba0565b6101405161016051610180516101a0516101c0516101e051610160516102005261018051610220526102205161020051600658016103ba565b610280526101e0526101c0526101a052610180526101605261014052610280516101e0526102006080610300602463d1febfb9610280526101e0516102a05261029c610160515afa610a4b57600080fd5b607f3d11610a5857600080fd5b6103008080808051610380525050602081019050808080516103a0525050602081019050808080516103c0525050602081019050808080516103e0525050505060005061038080518252806020015182602001528060400151826040015280606001518260600152505060006102805261024051610180511115610b0657610180516102405180821015610aeb57600080fd5b80820390509050604051811115610b0157600080fd5b610280525b61020051610220516102805180820280806000811215610b2257195b607f1c15610b2f57600080fd5b90509050905080820380806000811215610b4557195b607f1c15610b5257600080fd5b905090509050600080821215610b685780610b6a565b815b905090506000811215610b7c57600080fd5b6101805166038d7ea4c680008110610b9357600080fd5b600a60c052602060c02001555b610180805162093a80818183011015610bb857600080fd5b808201905090508152505b81516001018083528114156109aa575b50506101805160015561014051565b63b21ed5026000511415610c09573415610bfb57600080fd5b6006580161092c565b600050005b600015611379575b6101a0526101405261016052610180526040366101c03760206102a0602463010ae75761022052610140516102405261023c610160515afa610c5257600080fd5b601f3d11610c5f57600080fd5b6000506102a0516102005260005461022052610200511515610d0557610240808080600081525050602081019050808060008152505060208101905080806000815250506020810190508080600081525050602081019050808060008152505060a09050905060c05260c0516102e0525b60006102e051111515610ce257610cfe565b60206102e05103610240015160206102e051036102e052610cd0565b6101a05156505b60026101405160e05260c052604060c020546102e0526102e0511515610db7576101405161016051610180516101a0516101c0516101e05161020051610220516102e05161016051610300526101405161032052610220516103405261020051610360526103605161034051610320516103005160065801610575565b6103c0526102e05261022052610200526101e0526101c0526101a0526101805261016052610140526103c0516101c052610dce565b60036101405160e05260c052604060c020546101c0525b6101c0511515610ddf5760016101c0525b610300608061042060446328d09d4761038052610140516103a0526101c0516103c05261039c610160515afa610e1457600080fd5b607f3d11610e2157600080fd5b61042080808080516104a0525050602081019050808080516104c0525050602081019050808080516104e05250506020810190508080805161050052505050506000506104a08051825280602001518260200152806040015182604001528060600151826060015250506102e0511515610ef8576103405162093a80818183011015610eac57600080fd5b80820190509050600180821015610ec257600080fd5b8082039050905062093a808082049050905062093a808082028215828483041417610eec57600080fd5b809050905090506102e0525b610180516102e051101515610f9157610380808080600081525050602081019050808060008152505060208101905080806000815250506020810190508080600081525050602081019050808060008152505060a09050905060c05260c051610420525b600061042051111515610f6e57610f8a565b6020610420510361038001516020610420510361042052610f5c565b6101a05156505b610220516102e0511015610fa857610220516102e0525b608036610420376104a060006032818352015b610180516102e051101515610fcf576112ae565b610340516102e051101515610fed57610200516101c0511115610ff0565b60005b1561110b576101c08051600181818301101561100b57600080fd5b80820190509050815250610420610300805182528060200151826020015280604001518260400152806060015182606001525050610200516101c05111156110595760803661030037611106565b610300608061056060446328d09d476104c052610140516104e0526101c051610500526104dc610160515afa61108e57600080fd5b607f3d1161109b57600080fd5b61056080808080516105e052505060208101905080808051610600525050602081019050808080516106205250506020810190508080805161064052505050506000506105e08051825280602001518260200152806040015182604001528060600151826060015250505b61129d565b6102e051610460518082101561112057600080fd5b8082039050905060405181111561113657600080fd5b6104c052610420516104c051610440518082028080600081121561115657195b607f1c1561116357600080fd5b9050905090508082038080600081121561117957195b607f1c1561118657600080fd5b90509050905060008082121561119c578061119e565b815b9050905060008112156111b057600080fd5b6104e0526104e05115156111cc57610200516101c051116111cf565b60005b156111d9576112ae565b60006104e051111561127a576101e080516104e0516102e05166038d7ea4c68000811061120557600080fd5b600560c052602060c0200154808202821582848304141761122557600080fd5b809050905090506102e05166038d7ea4c68000811061124357600080fd5b600a60c052602060c0200154808061125a57600080fd5b82049050905081818301101561126f57600080fd5b808201905090508152505b6102e0805162093a8081818301101561129257600080fd5b808201905090508152505b5b8151600101808352811415610fbb575b5050610200516101c0516001808210156112c757600080fd5b80820390509050808211156112dc57806112de565b815b905090506101c0526104a08080806101e0518152505060208101905080806101c0518152505060208101905080806102e0518152505060208101905080806102005181525050602081019050808060018152505060a09050905060c05260c051610540525b60006105405111151561135557611371565b602061054051036104a001516020610540510361054052611343565b6101a0515650005b63af38d75760005114156113915733610140526113c7565b63402914f560005114156113bf5760043560a01c156113af57600080fd5b60206004610140376000506113c7565b600015611505575b34156113d257600080fd5b6080366101603760016101e0526101405161016051610180516101a0516101c0516101e05161014051610200526006546102205260045462093a808082049050905062093a80808202821582848304141761142c57600080fd5b809050905090506102405261024051610220516102005160065801610c11565b6102a0526102c0526102e05261030052610320526101e0526101c0526101a0526101805261016052610140526102a080808080516103405250506020810190508080805161036052505060208101905080808051610380525050602081019050808080516103a0525050602081019050808080516103c0525050505061034080516101605280602001516101805280604001516101a05280606001516101c05280608001516101e052506101605160005260206000f350005b634e71d92d600051141561151d573361014052611553565b631e83409a600051141561154b5760043560a01c1561153b57600080fd5b6020600461014037600050611553565b600015611812575b62ffffff541561156257600080fd5b600162ffffff55341561157457600080fd5b600f541561158157600080fd5b600154421015156115a157610140516006580161092c565b610140526000505b60045461016052600d54156115d55761016051620151808181830110156115c757600080fd5b8082019050905042116115d8565b60005b156115ff5761014051610160516006580161002f565b610160526101405260005042610160525b6101605162093a808082049050905062093a80808202821582848304141761162657600080fd5b8090509050905061016052608036610180376001610200526101405161016051610180516101a0516101c0516101e05161020051610140516102205260065461024052610160516102605261026051610240516102205160065801610c11565b6102c0526102e052610300526103205261034052610200526101e0526101c0526101a0526101805261016052610140526102c0808080805161036052505060208101905080808051610380525050602081019050808080516103a0525050602081019050808080516103c0525050602081019050808080516103e0525050505061036080516101805280602001516101a05280604001516101c05280606001516101e0528060800151610200525061020051156117ad576101a05160036101405160e05260c052604060c020556101c05160026101405160e05260c052604060c0205561018051610220526101a051610240526101e05161026052610140517f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e6060610220a25b60006101805118156117f5576009805461018051808210156117ce57600080fd5b80820390509050815550600060006000600061018051610140516000f16117f457600080fd5b5b61018051600052600062ffffff5560206000f350600062ffffff55005b637b935a236000511415611b9e5762ffffff541561182f57600080fd5b600162ffffff55341561184157600080fd5b6000610120525b610120516004013560a01c1561185d57600080fd5b602061012051016101205261028061012051101561187a57611848565b600f541561188757600080fd5b6001544210151561189f576006580161092c565b6000505b60045461014052600d54156118d35761014051620151808181830110156118c557600080fd5b8082019050905042116118d6565b60005b156118f557610140516006580161002f565b6101405260005042610140525b6101405162093a808082049050905062093a80808202821582848304141761191c57600080fd5b8090509050905061014052600654610160526007546101805260a0366101a03760016102405261028060006014818352015b60206102805102600401356102605261026051151561196c57611b55565b6101406102a0525b6102a0515160206102a051016102a0526102a06102a051101561199657611974565b610260516102c052610160516102e0526101405161030052610300516102e0516102c05160065801610c11565b61036052610380526103a0526103c0526103e0526102806102a0525b6102a0515260206102a051036102a0526101406102a051101515611a02576119df565b610360808080805161040052505060208101905080808051610420525050602081019050808080516104405250506020810190508080805161046052505060208101905080808051610480525050505061040080516101c05280602001516101e052806040015161020052806060015161022052806080015161024052506102405115611af9576101e05160036102605160e05260c052604060c020556102005160026102605160e05260c052604060c020556101c0516102a0526101e0516102c052610220516102e052610260517f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e60606102a0a25b60006101c0511815611b44576101a080516101c051818183011015611b1d57600080fd5b8082019050905081525060006000600060006101c051610260516000f1611b4357600080fd5b5b5b815160010180835281141561194e575b505060006101a0511815611b8357600980546101a05180821015611b7857600080fd5b808203905090508155505b6001600052600062ffffff5560206000f350600062ffffff55005b639dc29fac6000511415611cb45760043560a01c15611bbc57600080fd5b60075460043514611bcc57600080fd5b600060243518611bdb57600080fd5b600f5415611be857600080fd5b602061020060646323b872dd61014052336101605230610180526024356101a05261015c60006004355af1611c1c57600080fd5b601f3d11611c2957600080fd5b600050610200506004353b611c3d57600080fd5b600060006024632e1a7d4d610140526024356101605261015c60006004355af1611c6657600080fd5b600d5415611c925760045462015180818183011015611c8457600080fd5b808201905090504211611c95565b60005b15611ca7576006580161002f565b6000505b600160005260206000f350005b63b1d3db756000511415611d21573415611ccd57600080fd5b60043560a01c15611cdd57600080fd5b600b543314611ceb57600080fd5b600435600c55600435610140527f59a407284ae6e2986675fa1400d6498af928ed01f4fd2dd6be4a2a8b4fc35b346020610140a1005b63c0e991a66000511415611d96573415611d3a57600080fd5b600b543314611d4857600080fd5b6000600c5418611d5757600080fd5b600c546101405261014051600b5561014051610160527f756f845176805c8ebf249854e909627308157f63c96e470e44a9e8549ba6fb1e6020610160a1005b632121bfc36000511415611dfd573415611daf57600080fd5b600b543314611dbd57600080fd5b600d54156101405261014051600d5561014051610160527fdbe6ac1081ebd8e648718341126659456f4009fcadfe1c23f66f5e61522610b26020610160a1005b63e36988536000511415611e43573415611e1657600080fd5b600b543314611e2457600080fd5b6001600f55600060006000600047600e546000f1611e4157600080fd5b005b63db2f5f796000511415612016573415611e5c57600080fd5b60043560a01c15611e6c57600080fd5b600b543314611e7a57600080fd5b60075460043518611e8a57600080fd5b60206101e060246370a0823161016052306101805261017c6004355afa611eb057600080fd5b601f3d11611ebd57600080fd5b6000506101e05161014052600060046101c0527fa9059cbb000000000000000000000000000000000000000000000000000000006101e0526101c060048060208461022001018260208501600060045af1505080518201915050600e5460208261022001015260208101905061014051602082610220010152602081019050806102205261022090508051602001806102c08284600060045af1611f6057600080fd5b505060206103806102c0516102e060006004355af1611f7e57600080fd5b60203d80821115611f8f5780611f91565b815b90509050610360526103608051602001806101608284600060045af1611fb657600080fd5b5050600061016051181561200957610160806020015160008251806020901315611fdf57600080fd5b8091901215611fed57600080fd5b806020036101000a8204905090509050151561200857600080fd5b5b600160005260206000f350005b63834ee417600051141561203d57341561202f57600080fd5b60005460005260206000f350005b63127dcbd3600051141561206457341561205657600080fd5b60015460005260206000f350005b632a2a314b60005114156120a957341561207d57600080fd5b60043560a01c1561208d57600080fd5b600260043560e05260c052604060c0205460005260206000f350005b63d5d46e8860005114156120ee5734156120c257600080fd5b60043560a01c156120d257600080fd5b600360043560e05260c052604060c0205460005260206000f350005b637f58e8f8600051141561211557341561210757600080fd5b60045460005260206000f350005b63edf59997600051141561215b57341561212e57600080fd5b60043566038d7ea4c68000811061214457600080fd5b600560c052602060c020015460005260206000f350005b63dfe05031600051141561218257341561217457600080fd5b60065460005260206000f350005b63fc0c546a60005114156121a957341561219b57600080fd5b60075460005260206000f350005b632f0c222e60005114156121d05734156121c257600080fd5b60085460005260206000f350005b6322b04bfc60005114156121f75734156121e957600080fd5b60095460005260206000f350005b63d4dafba8600051141561223d57341561221057600080fd5b60043566038d7ea4c68000811061222657600080fd5b600a60c052602060c020015460005260206000f350005b63f851a440600051141561226457341561225657600080fd5b600b5460005260206000f350005b6317f7182a600051141561228b57341561227d57600080fd5b600c5460005260206000f350005b63aeba473760005114156122b25734156122a457600080fd5b600d5460005260206000f350005b632c3f531e60005114156122d95734156122cb57600080fd5b600e5460005260206000f350005b639c868ac060005114156123005734156122f257600080fd5b600f5460005260206000f350005b5b60006000f35b6100f26123f9036100f26000396100f26123f9036000f300000000000000000000000019854c9a5ffa8116f48f984bdf946fb9cea9b5f700000000000000000000000000000000000000000000000000000000621cced0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000077da011d5314d80be59e939c2f7ec2f702e1dcc400000000000000000000000077da011d5314d80be59e939c2f7ec2f702e1dcc4
Deployed Bytecode
0x600436101561000d57612301565b600035601c526f7fffffffffffffffffffffffffffffff604052600015610340575b610140524761016052610160516009548082101561004c57600080fd5b8082039050905061018052610160516009556004546101a052426101a0518082101561007757600080fd5b808203905090506101c052426004556101a05162093a808082049050905062093a8080820282158284830414176100ad57600080fd5b809050905090506101e05260006102005261022060006014818352015b6101e05162093a808181830110156100e157600080fd5b8082019050905061020052610200514210156101ee576101c051151561010c576101a051421461010f565b60005b1561015a576101e05166038d7ea4c68000811061012b57600080fd5b600560c052602060c0200180546101805181818301101561014b57600080fd5b808201905090508155506101e5565b6101e05166038d7ea4c68000811061017157600080fd5b600560c052602060c02001805461018051426101a0518082101561019457600080fd5b8082039050905080820282158284830414176101af57600080fd5b809050905090506101c05180806101c557600080fd5b8204905090508181830110156101da57600080fd5b808201905090508155505b610304566102e3565b6101c0511515610206576101a0516102005114610209565b60005b15610254576101e05166038d7ea4c68000811061022557600080fd5b600560c052602060c0200180546101805181818301101561024557600080fd5b808201905090508155506102e2565b6101e05166038d7ea4c68000811061026b57600080fd5b600560c052602060c02001805461018051610200516101a0518082101561029157600080fd5b8082039050905080820282158284830414176102ac57600080fd5b809050905090506101c05180806102c257600080fd5b8204905090508181830110156102d757600080fd5b808201905090508155505b5b610200516101a052610200516101e0525b81516001018083528114156100ca575b5050426102205261018051610240527fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d66040610220a161014051565b63811a40fe60005114156103b257341561035957600080fd5b600b5433141561036a57600161039a565b600d5415610396576004546201518081818301101561038857600080fd5b808201905090504211610399565b60005b5b5b6103a457600080fd5b6006580161002f565b600050005b60001561056d575b61018052610140526101605260006101a0526020610240600463900cf0cf6101e0526101fc610140515afa6103ee57600080fd5b601f3d116103fb57600080fd5b600050610240516101c0526101e060006080818352015b6101c0516101a05110151561042657610559565b6101a0516101c05181818301101561043d57600080fd5b80820190509050600281818301101561045557600080fd5b80820190509050600280820490509050610200526102206080610320602463d1febfb96102a052610200516102c0526102bc610140515afa61049657600080fd5b607f3d116104a357600080fd5b61032080808080516103a0525050602081019050808080516103c0525050602081019050808080516103e05250506020810190508080805161040052505050506000506103a0805182528060200151826020015280604001518260400152806060015182606001525050610160516102605111151561052957610200516101a052610548565b6102005160018082101561053c57600080fd5b808203905090506101c0525b5b8151600101808352811415610412575b50506101a051600052600051610180515650005b600015610706575b6101c0526101405261016052610180526101a05260006101e0526101a0516102005261022060006080818352015b610200516101e0511015156105b7576106f2565b6101e051610200518181830110156105ce57600080fd5b8082019050905060028181830110156105e657600080fd5b8082019050905060028082049050905061024052610260608061038060446328d09d476102e052610160516103005261024051610320526102fc610140515afa61062f57600080fd5b607f3d1161063c57600080fd5b61038080808080516104005250506020810190508080805161042052505060208101905080808051610440525050602081019050808080516104605250505050600050610400805182528060200151826020015280604001518260400152806060015182606001525050610180516102a0511115156106c257610240516101e0526106e1565b610240516001808210156106d557600080fd5b80820390509050610200525b5b81516001018083528114156105a3575b50506101e0516000526000516101c0515650005b63ace296fb600051141561092457341561071f57600080fd5b60043560a01c1561072f57600080fd5b600654610140526020610200602463010ae757610180526004356101a05261019c610140515afa61075f57600080fd5b601f3d1161076c57600080fd5b6000506102005161016052610140516101605161018051610140516101a0526004356101c0526024356101e0526101605161020052610200516101e0516101c0516101a05160065801610575565b6102605261018052610160526101405261026051610180526101a060806102c060446328d09d476102205260043561024052610180516102605261023c610140515afa61080657600080fd5b607f3d1161081357600080fd5b6102c080808080516103405250506020810190508080805161036052505060208101905080808051610380525050602081019050808080516103a052505050506000506103408051825280602001518260200152806040015182604001528060600151826060015250506101a0516101c0516024356101e0518082101561089957600080fd5b808203905090506040518111156108af57600080fd5b808202808060008112156108bf57195b607f1c156108cc57600080fd5b905090509050808203808060008112156108e257195b607f1c156108ef57600080fd5b9050905090506000808212156109055780610907565b815b90509050600081121561091957600080fd5b60005260206000f350005b600015610be2575b6101405260065461016052600154610180524262093a808082049050905062093a80808202821582848304141761096257600080fd5b809050905090506101a052610160513b61097b57600080fd5b60006000600463c2c4c5c16101c0526101dc6000610160515af161099e57600080fd5b6101c060006014818352015b6101a0516101805111156109c157610bd356610ba0565b6101405161016051610180516101a0516101c0516101e051610160516102005261018051610220526102205161020051600658016103ba565b610280526101e0526101c0526101a052610180526101605261014052610280516101e0526102006080610300602463d1febfb9610280526101e0516102a05261029c610160515afa610a4b57600080fd5b607f3d11610a5857600080fd5b6103008080808051610380525050602081019050808080516103a0525050602081019050808080516103c0525050602081019050808080516103e0525050505060005061038080518252806020015182602001528060400151826040015280606001518260600152505060006102805261024051610180511115610b0657610180516102405180821015610aeb57600080fd5b80820390509050604051811115610b0157600080fd5b610280525b61020051610220516102805180820280806000811215610b2257195b607f1c15610b2f57600080fd5b90509050905080820380806000811215610b4557195b607f1c15610b5257600080fd5b905090509050600080821215610b685780610b6a565b815b905090506000811215610b7c57600080fd5b6101805166038d7ea4c680008110610b9357600080fd5b600a60c052602060c02001555b610180805162093a80818183011015610bb857600080fd5b808201905090508152505b81516001018083528114156109aa575b50506101805160015561014051565b63b21ed5026000511415610c09573415610bfb57600080fd5b6006580161092c565b600050005b600015611379575b6101a0526101405261016052610180526040366101c03760206102a0602463010ae75761022052610140516102405261023c610160515afa610c5257600080fd5b601f3d11610c5f57600080fd5b6000506102a0516102005260005461022052610200511515610d0557610240808080600081525050602081019050808060008152505060208101905080806000815250506020810190508080600081525050602081019050808060008152505060a09050905060c05260c0516102e0525b60006102e051111515610ce257610cfe565b60206102e05103610240015160206102e051036102e052610cd0565b6101a05156505b60026101405160e05260c052604060c020546102e0526102e0511515610db7576101405161016051610180516101a0516101c0516101e05161020051610220516102e05161016051610300526101405161032052610220516103405261020051610360526103605161034051610320516103005160065801610575565b6103c0526102e05261022052610200526101e0526101c0526101a0526101805261016052610140526103c0516101c052610dce565b60036101405160e05260c052604060c020546101c0525b6101c0511515610ddf5760016101c0525b610300608061042060446328d09d4761038052610140516103a0526101c0516103c05261039c610160515afa610e1457600080fd5b607f3d11610e2157600080fd5b61042080808080516104a0525050602081019050808080516104c0525050602081019050808080516104e05250506020810190508080805161050052505050506000506104a08051825280602001518260200152806040015182604001528060600151826060015250506102e0511515610ef8576103405162093a80818183011015610eac57600080fd5b80820190509050600180821015610ec257600080fd5b8082039050905062093a808082049050905062093a808082028215828483041417610eec57600080fd5b809050905090506102e0525b610180516102e051101515610f9157610380808080600081525050602081019050808060008152505060208101905080806000815250506020810190508080600081525050602081019050808060008152505060a09050905060c05260c051610420525b600061042051111515610f6e57610f8a565b6020610420510361038001516020610420510361042052610f5c565b6101a05156505b610220516102e0511015610fa857610220516102e0525b608036610420376104a060006032818352015b610180516102e051101515610fcf576112ae565b610340516102e051101515610fed57610200516101c0511115610ff0565b60005b1561110b576101c08051600181818301101561100b57600080fd5b80820190509050815250610420610300805182528060200151826020015280604001518260400152806060015182606001525050610200516101c05111156110595760803661030037611106565b610300608061056060446328d09d476104c052610140516104e0526101c051610500526104dc610160515afa61108e57600080fd5b607f3d1161109b57600080fd5b61056080808080516105e052505060208101905080808051610600525050602081019050808080516106205250506020810190508080805161064052505050506000506105e08051825280602001518260200152806040015182604001528060600151826060015250505b61129d565b6102e051610460518082101561112057600080fd5b8082039050905060405181111561113657600080fd5b6104c052610420516104c051610440518082028080600081121561115657195b607f1c1561116357600080fd5b9050905090508082038080600081121561117957195b607f1c1561118657600080fd5b90509050905060008082121561119c578061119e565b815b9050905060008112156111b057600080fd5b6104e0526104e05115156111cc57610200516101c051116111cf565b60005b156111d9576112ae565b60006104e051111561127a576101e080516104e0516102e05166038d7ea4c68000811061120557600080fd5b600560c052602060c0200154808202821582848304141761122557600080fd5b809050905090506102e05166038d7ea4c68000811061124357600080fd5b600a60c052602060c0200154808061125a57600080fd5b82049050905081818301101561126f57600080fd5b808201905090508152505b6102e0805162093a8081818301101561129257600080fd5b808201905090508152505b5b8151600101808352811415610fbb575b5050610200516101c0516001808210156112c757600080fd5b80820390509050808211156112dc57806112de565b815b905090506101c0526104a08080806101e0518152505060208101905080806101c0518152505060208101905080806102e0518152505060208101905080806102005181525050602081019050808060018152505060a09050905060c05260c051610540525b60006105405111151561135557611371565b602061054051036104a001516020610540510361054052611343565b6101a0515650005b63af38d75760005114156113915733610140526113c7565b63402914f560005114156113bf5760043560a01c156113af57600080fd5b60206004610140376000506113c7565b600015611505575b34156113d257600080fd5b6080366101603760016101e0526101405161016051610180516101a0516101c0516101e05161014051610200526006546102205260045462093a808082049050905062093a80808202821582848304141761142c57600080fd5b809050905090506102405261024051610220516102005160065801610c11565b6102a0526102c0526102e05261030052610320526101e0526101c0526101a0526101805261016052610140526102a080808080516103405250506020810190508080805161036052505060208101905080808051610380525050602081019050808080516103a0525050602081019050808080516103c0525050505061034080516101605280602001516101805280604001516101a05280606001516101c05280608001516101e052506101605160005260206000f350005b634e71d92d600051141561151d573361014052611553565b631e83409a600051141561154b5760043560a01c1561153b57600080fd5b6020600461014037600050611553565b600015611812575b62ffffff541561156257600080fd5b600162ffffff55341561157457600080fd5b600f541561158157600080fd5b600154421015156115a157610140516006580161092c565b610140526000505b60045461016052600d54156115d55761016051620151808181830110156115c757600080fd5b8082019050905042116115d8565b60005b156115ff5761014051610160516006580161002f565b610160526101405260005042610160525b6101605162093a808082049050905062093a80808202821582848304141761162657600080fd5b8090509050905061016052608036610180376001610200526101405161016051610180516101a0516101c0516101e05161020051610140516102205260065461024052610160516102605261026051610240516102205160065801610c11565b6102c0526102e052610300526103205261034052610200526101e0526101c0526101a0526101805261016052610140526102c0808080805161036052505060208101905080808051610380525050602081019050808080516103a0525050602081019050808080516103c0525050602081019050808080516103e0525050505061036080516101805280602001516101a05280604001516101c05280606001516101e0528060800151610200525061020051156117ad576101a05160036101405160e05260c052604060c020556101c05160026101405160e05260c052604060c0205561018051610220526101a051610240526101e05161026052610140517f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e6060610220a25b60006101805118156117f5576009805461018051808210156117ce57600080fd5b80820390509050815550600060006000600061018051610140516000f16117f457600080fd5b5b61018051600052600062ffffff5560206000f350600062ffffff55005b637b935a236000511415611b9e5762ffffff541561182f57600080fd5b600162ffffff55341561184157600080fd5b6000610120525b610120516004013560a01c1561185d57600080fd5b602061012051016101205261028061012051101561187a57611848565b600f541561188757600080fd5b6001544210151561189f576006580161092c565b6000505b60045461014052600d54156118d35761014051620151808181830110156118c557600080fd5b8082019050905042116118d6565b60005b156118f557610140516006580161002f565b6101405260005042610140525b6101405162093a808082049050905062093a80808202821582848304141761191c57600080fd5b8090509050905061014052600654610160526007546101805260a0366101a03760016102405261028060006014818352015b60206102805102600401356102605261026051151561196c57611b55565b6101406102a0525b6102a0515160206102a051016102a0526102a06102a051101561199657611974565b610260516102c052610160516102e0526101405161030052610300516102e0516102c05160065801610c11565b61036052610380526103a0526103c0526103e0526102806102a0525b6102a0515260206102a051036102a0526101406102a051101515611a02576119df565b610360808080805161040052505060208101905080808051610420525050602081019050808080516104405250506020810190508080805161046052505060208101905080808051610480525050505061040080516101c05280602001516101e052806040015161020052806060015161022052806080015161024052506102405115611af9576101e05160036102605160e05260c052604060c020556102005160026102605160e05260c052604060c020556101c0516102a0526101e0516102c052610220516102e052610260517f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e60606102a0a25b60006101c0511815611b44576101a080516101c051818183011015611b1d57600080fd5b8082019050905081525060006000600060006101c051610260516000f1611b4357600080fd5b5b5b815160010180835281141561194e575b505060006101a0511815611b8357600980546101a05180821015611b7857600080fd5b808203905090508155505b6001600052600062ffffff5560206000f350600062ffffff55005b639dc29fac6000511415611cb45760043560a01c15611bbc57600080fd5b60075460043514611bcc57600080fd5b600060243518611bdb57600080fd5b600f5415611be857600080fd5b602061020060646323b872dd61014052336101605230610180526024356101a05261015c60006004355af1611c1c57600080fd5b601f3d11611c2957600080fd5b600050610200506004353b611c3d57600080fd5b600060006024632e1a7d4d610140526024356101605261015c60006004355af1611c6657600080fd5b600d5415611c925760045462015180818183011015611c8457600080fd5b808201905090504211611c95565b60005b15611ca7576006580161002f565b6000505b600160005260206000f350005b63b1d3db756000511415611d21573415611ccd57600080fd5b60043560a01c15611cdd57600080fd5b600b543314611ceb57600080fd5b600435600c55600435610140527f59a407284ae6e2986675fa1400d6498af928ed01f4fd2dd6be4a2a8b4fc35b346020610140a1005b63c0e991a66000511415611d96573415611d3a57600080fd5b600b543314611d4857600080fd5b6000600c5418611d5757600080fd5b600c546101405261014051600b5561014051610160527f756f845176805c8ebf249854e909627308157f63c96e470e44a9e8549ba6fb1e6020610160a1005b632121bfc36000511415611dfd573415611daf57600080fd5b600b543314611dbd57600080fd5b600d54156101405261014051600d5561014051610160527fdbe6ac1081ebd8e648718341126659456f4009fcadfe1c23f66f5e61522610b26020610160a1005b63e36988536000511415611e43573415611e1657600080fd5b600b543314611e2457600080fd5b6001600f55600060006000600047600e546000f1611e4157600080fd5b005b63db2f5f796000511415612016573415611e5c57600080fd5b60043560a01c15611e6c57600080fd5b600b543314611e7a57600080fd5b60075460043518611e8a57600080fd5b60206101e060246370a0823161016052306101805261017c6004355afa611eb057600080fd5b601f3d11611ebd57600080fd5b6000506101e05161014052600060046101c0527fa9059cbb000000000000000000000000000000000000000000000000000000006101e0526101c060048060208461022001018260208501600060045af1505080518201915050600e5460208261022001015260208101905061014051602082610220010152602081019050806102205261022090508051602001806102c08284600060045af1611f6057600080fd5b505060206103806102c0516102e060006004355af1611f7e57600080fd5b60203d80821115611f8f5780611f91565b815b90509050610360526103608051602001806101608284600060045af1611fb657600080fd5b5050600061016051181561200957610160806020015160008251806020901315611fdf57600080fd5b8091901215611fed57600080fd5b806020036101000a8204905090509050151561200857600080fd5b5b600160005260206000f350005b63834ee417600051141561203d57341561202f57600080fd5b60005460005260206000f350005b63127dcbd3600051141561206457341561205657600080fd5b60015460005260206000f350005b632a2a314b60005114156120a957341561207d57600080fd5b60043560a01c1561208d57600080fd5b600260043560e05260c052604060c0205460005260206000f350005b63d5d46e8860005114156120ee5734156120c257600080fd5b60043560a01c156120d257600080fd5b600360043560e05260c052604060c0205460005260206000f350005b637f58e8f8600051141561211557341561210757600080fd5b60045460005260206000f350005b63edf59997600051141561215b57341561212e57600080fd5b60043566038d7ea4c68000811061214457600080fd5b600560c052602060c020015460005260206000f350005b63dfe05031600051141561218257341561217457600080fd5b60065460005260206000f350005b63fc0c546a60005114156121a957341561219b57600080fd5b60075460005260206000f350005b632f0c222e60005114156121d05734156121c257600080fd5b60085460005260206000f350005b6322b04bfc60005114156121f75734156121e957600080fd5b60095460005260206000f350005b63d4dafba8600051141561223d57341561221057600080fd5b60043566038d7ea4c68000811061222657600080fd5b600a60c052602060c020015460005260206000f350005b63f851a440600051141561226457341561225657600080fd5b600b5460005260206000f350005b6317f7182a600051141561228b57341561227d57600080fd5b600c5460005260206000f350005b63aeba473760005114156122b25734156122a457600080fd5b600d5460005260206000f350005b632c3f531e60005114156122d95734156122cb57600080fd5b600e5460005260206000f350005b639c868ac060005114156123005734156122f257600080fd5b600f5460005260206000f350005b5b60006000f3
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000019854c9a5ffa8116f48f984bdf946fb9cea9b5f700000000000000000000000000000000000000000000000000000000621cced0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000077da011d5314d80be59e939c2f7ec2f702e1dcc400000000000000000000000077da011d5314d80be59e939c2f7ec2f702e1dcc4
-----Decoded View---------------
Arg [0] : _voting_escrow (address): 0x19854C9A5fFa8116f48f984bDF946fB9CEa9B5f7
Arg [1] : _start_time (uint256): 1646055120
Arg [2] : _token (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [3] : _admin (address): 0x77DA011d5314D80BE59e939c2f7EC2F702E1DCC4
Arg [4] : _emergency_return (address): 0x77DA011d5314D80BE59e939c2f7EC2F702E1DCC4
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000019854c9a5ffa8116f48f984bdf946fb9cea9b5f7
Arg [1] : 00000000000000000000000000000000000000000000000000000000621cced0
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [3] : 00000000000000000000000077da011d5314d80be59e939c2f7ec2f702e1dcc4
Arg [4] : 00000000000000000000000077da011d5314d80be59e939c2f7ec2f702e1dcc4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,314.85 | 0.0829 | $274.65 |
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.