ETH Price: $3,516.97 (+0.31%)
Gas: 2 Gwei

Contract

0x7F82ff050128e29Fd89D85d01b93246F744E62A0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Checkpoint_token167431232023-03-02 20:05:23506 days ago1677787523IN
Angle Protocol: Fee Distributor
0 ETH0.0020439837.5760279
Checkpoint_token166912792023-02-23 13:05:23513 days ago1677157523IN
Angle Protocol: Fee Distributor
0 ETH0.0038600339.79585679
Checkpoint_token166423692023-02-16 16:05:35520 days ago1676563535IN
Angle Protocol: Fee Distributor
0 ETH0.0044081981.03889447
Checkpoint_token165904882023-02-09 10:05:23527 days ago1675937123IN
Angle Protocol: Fee Distributor
0 ETH0.0013402224.63824111
Checkpoint_token164401392023-01-19 10:05:23548 days ago1674122723IN
Angle Protocol: Fee Distributor
0 ETH0.0008279515.22096082
Claim164083712023-01-14 23:36:47552 days ago1673739407IN
Angle Protocol: Fee Distributor
0 ETH0.0081425423.66199202
Checkpoint_token162929862022-12-29 21:05:23569 days ago1672347923IN
Angle Protocol: Fee Distributor
0 ETH0.0010608819.50304042
Checkpoint_token162362402022-12-21 23:05:23576 days ago1671663923IN
Angle Protocol: Fee Distributor
0 ETH0.0010923414.67855195
Checkpoint_token161359982022-12-07 23:05:35590 days ago1670454335IN
Angle Protocol: Fee Distributor
0 ETH0.0009159615.98046347
Checkpoint_token160871552022-12-01 3:05:23597 days ago1669863923IN
Angle Protocol: Fee Distributor
0 ETH0.0009825812.29832341
Checkpoint_token159857472022-11-16 23:05:23611 days ago1668639923IN
Angle Protocol: Fee Distributor
0 ETH0.0011074414.88141444
Checkpoint_token158855022022-11-02 23:05:35625 days ago1667430335IN
Angle Protocol: Fee Distributor
0 ETH0.00109814.75452283
Checkpoint_token158182072022-10-24 13:17:11635 days ago1666617431IN
Angle Protocol: Fee Distributor
0 ETH0.001773934.29952832
Checkpoint_token157850192022-10-19 22:05:23640 days ago1666217123IN
Angle Protocol: Fee Distributor
0 ETH0.0023653945.73636371
Checkpoint_token157349002022-10-12 22:05:35647 days ago1665612335IN
Angle Protocol: Fee Distributor
0 ETH0.0008444416.32782456
Checkpoint_token156874602022-10-06 7:05:23653 days ago1665039923IN
Angle Protocol: Fee Distributor
0 ETH0.000543715.60554647
Checkpoint_token156347092022-09-28 22:05:35661 days ago1664402735IN
Angle Protocol: Fee Distributor
0 ETH0.0009121312.25686506
Checkpoint_token155846042022-09-21 22:05:23668 days ago1663797923IN
Angle Protocol: Fee Distributor
0 ETH0.0015074820.25695672
Checkpoint_token155355462022-09-14 23:06:28674 days ago1663196788IN
Angle Protocol: Fee Distributor
0 ETH0.0009795513.16293953
Checkpoint_token154927882022-09-07 22:05:03682 days ago1662588303IN
Angle Protocol: Fee Distributor
0 ETH0.0039020852.43468402
Checkpoint_token154519902022-09-01 9:04:52688 days ago1662023092IN
Angle Protocol: Fee Distributor
0 ETH0.0006695312.30856123
Checkpoint_token154054572022-08-24 22:04:53696 days ago1661378693IN
Angle Protocol: Fee Distributor
0 ETH0.0013417318.02967721
Checkpoint_token153640912022-08-18 9:05:11702 days ago1660813511IN
Angle Protocol: Fee Distributor
0 ETH0.000473138.69799567
Checkpoint_token153198162022-08-11 9:04:52709 days ago1660208692IN
Angle Protocol: Fee Distributor
0 ETH0.0011431721.01576118
Checkpoint_token152720442022-08-03 22:05:14717 days ago1659564314IN
Angle Protocol: Fee Distributor
0 ETH0.0012286221.43520844
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.16

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.2.16
"""
@title Angle Fee Distribution
@author Angle Protocol
@license MIT
"""

# Original idea and credit:
# Curve Finance's FeeDistributor
# https://github.com/curvefi/curve-dao-contracts/blob/master/contracts/FeeDistributor.vy

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


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
    @param _admin Admin address
    @param _emergency_return Address to transfer `_token` balance to
                             if this contract is killed
    """

    assert _voting_escrow != ZERO_ADDRESS
    assert _token != ZERO_ADDRESS
    assert _admin != ZERO_ADDRESS
    assert _emergency_return != ZERO_ADDRESS

    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


@internal
def _checkpoint_token():
    token_balance: uint256 = ERC20(self.token).balanceOf(self)
    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 veANGLE balance for `_user` at `_timestamp`
    @param _user Address to query balance for
    @param _timestamp Epoch time
    @return uint256 veANGLE 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), empty(int128)), 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, empty(int128)), uint256)
        t += WEEK

    self.time_cursor = t


@external
def checkpoint_total_supply():
    """
    @notice Update the veANGLE 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()


@internal
def _claim(addr: address, ve: address, _last_token_time: uint256) -> uint256:
    # 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

    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

    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, empty(int128)), 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)
    self.user_epoch_of[addr] = user_epoch
    self.time_cursor_of[addr] = week_cursor

    log Claimed(addr, to_distribute, user_epoch, max_user_epoch)

    return to_distribute


@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 veANGLE points.
         For accounts with many veANGLE 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 = self._claim(_addr, self.voting_escrow, last_token_time)
    if amount != 0:
        token: address = self.token
        assert ERC20(token).transfer(_addr, amount)
        self.token_last_balance -= 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 veANGLE 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

    for addr in _receivers:
        if addr == ZERO_ADDRESS:
            break

        amount: uint256 = self._claim(addr, voting_escrow, last_token_time)
        if amount != 0:
            assert ERC20(token).transfer(addr, amount)
            total += amount

    if total != 0:
        self.token_last_balance -= total

    return True


@external
def burn(_coin: address) -> bool:
    """
    @notice Receive _coin into the contract and trigger a token checkpoint
    @param _coin Address of the coin being received (must be in the whitelisted tokens)
    @return bool success
    """
    assert _coin == self.token
    assert not self.is_killed

    amount: uint256 = ERC20(_coin).balanceOf(msg.sender)
    if amount != 0:
        ERC20(_coin).transferFrom(msg.sender, self, 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
    assert _addr != ZERO_ADDRESS  # dev: future admin cannot be the 0 address
    self.future_admin = _addr
    log CommitAdmin(_addr)


@external
def accept_admin():
    """
    @notice Accept a pending ownership transfer
    """
    _admin: address = self.future_admin
    assert msg.sender == _admin  # dev: future admin only

    self.admin = _admin
    log ApplyAdmin(_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 tokens 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

    token: address = self.token
    assert ERC20(token).transfer(self.emergency_return, ERC20(token).balanceOf(self))


@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

Contract ABI

[{"name":"CommitAdmin","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyAdmin","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ToggleAllowCheckpointToken","inputs":[{"name":"toggle_flag","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"CheckpointToken","inputs":[{"name":"time","type":"uint256","indexed":false},{"name":"tokens","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Claimed","inputs":[{"name":"recipient","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false},{"name":"claim_epoch","type":"uint256","indexed":false},{"name":"max_epoch","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_voting_escrow","type":"address"},{"name":"_start_time","type":"uint256"},{"name":"_token","type":"address"},{"name":"_admin","type":"address"},{"name":"_emergency_return","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"checkpoint_token","inputs":[],"outputs":[],"gas":855540},{"stateMutability":"view","type":"function","name":"ve_for_at","inputs":[{"name":"_user","type":"address"},{"name":"_timestamp","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":518366},{"stateMutability":"nonpayable","type":"function","name":"checkpoint_total_supply","inputs":[],"outputs":[],"gas":21265540},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim_many","inputs":[{"name":"_receivers","type":"address[20]"}],"outputs":[{"name":"","type":"bool"}],"gas":50179990},{"stateMutability":"nonpayable","type":"function","name":"burn","inputs":[{"name":"_coin","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":862907},{"stateMutability":"nonpayable","type":"function","name":"commit_admin","inputs":[{"name":"_addr","type":"address"}],"outputs":[],"gas":39722},{"stateMutability":"nonpayable","type":"function","name":"accept_admin","inputs":[],"outputs":[],"gas":39570},{"stateMutability":"nonpayable","type":"function","name":"toggle_allow_checkpoint_token","inputs":[],"outputs":[],"gas":41700},{"stateMutability":"nonpayable","type":"function","name":"kill_me","inputs":[],"outputs":[],"gas":46824},{"stateMutability":"nonpayable","type":"function","name":"recover_balance","inputs":[{"name":"_coin","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":19233},{"stateMutability":"view","type":"function","name":"start_time","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2718},{"stateMutability":"view","type":"function","name":"time_cursor","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2748},{"stateMutability":"view","type":"function","name":"time_cursor_of","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":2993},{"stateMutability":"view","type":"function","name":"user_epoch_of","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3023},{"stateMutability":"view","type":"function","name":"last_token_time","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2838},{"stateMutability":"view","type":"function","name":"tokens_per_week","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":2913},{"stateMutability":"view","type":"function","name":"voting_escrow","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2898},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2928},{"stateMutability":"view","type":"function","name":"total_received","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2958},{"stateMutability":"view","type":"function","name":"token_last_balance","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2988},{"stateMutability":"view","type":"function","name":"ve_supply","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3063},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3048},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3078},{"stateMutability":"view","type":"function","name":"can_checkpoint_token","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":3108},{"stateMutability":"view","type":"function","name":"emergency_return","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3138},{"stateMutability":"view","type":"function","name":"is_killed","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":3168}]

6f7fffffffffffffffffffffffffffffff60405260a0611d32610140396020611d3260c03960c05160a01c611d2d5760206040611d320160c03960c05160a01c611d2d5760206060611d320160c03960c05160a01c611d2d5760206080611d320160c03960c05160a01c611d2d576000610140511815611d2d576000610180511815611d2d5760006101a0511815611d2d5760006101c0511815611d2d576101605162093a808082049050905062093a80808202821582848304141715611d2d57809050905090506101e0526101e0516002556101e0516006556101e0516003556101805166038d7ea4c68008556101405166038d7ea4c68007556101a05166071afd498d000b556101c05166071afd498d000e55611d1556600436101561000d57610da0565b600035601c526f7fffffffffffffffffffffffffffffff60405260005134611bf75763811a40fe8114156100965766071afd498d000b54331415610052576001610082565b66071afd498d000d541561007e57600654620151808181830110611bf757808201905090504211610081565b60005b5b5b15611bf75760065801610da6565b600050005b63ace296fb8114156102675760043560a01c611bf75766038d7ea4c6800754610140526020610200602463010ae757610180526004356101a05261019c610140515afa15611bf757601f3d1115611bf7576000506102005161016052610140516101605161018051610140516101a052604060046101c0376101605161020052610200516101e0516101c0516101a05160065801611225565b6102605261018052610160526101405261026051610180526101a060806102c060446328d09d476102205260043561024052610180516102605261023c610140515afa15611bf757607f3d1115611bf7576102c080808080516103405250506020810190508080805161036052505060208101905080808051610380525050602081019050808080516103a052505050506000506103408051825280602001518260200152806040015182604001528060600151826060015250506101a0516101c0516024356101e051808210611bf757808203905090506040518111611bf75780820280607f1d8160801d1415611bf7578090509050905080820380607f1d8160801d1415611bf757809050905090506000808212156102505780610252565b815b9050905060008112611bf75760005260206000f35b63b21ed5028114156102815760065801611396565b600050005b634e71d92d8114156102975733610140526102c2565b631e83409a8114156102bd5760043560a01c611bf75760206004610140376000506102c2565b61046b565b600054611bf757600160005566071afd498d000f54611bf75760035442106102f9576101405160065801611396565b610140526000505b6006546101605266071afd498d000d541561032d5761016051620151808181830110611bf757808201905090504211610330565b60005b1561035757610140516101605160065801610da6565b610160526101405260005042610160525b6101605162093a808082049050905062093a80808202821582848304141715611bf7578090509050905061016052610140516101605161018051610140516101a05266038d7ea4c68007546101c052610160516101e0526101e0516101c0516101a0516006580161160d565b61024052610180526101605261014052610240516101805260006101805118156104595766038d7ea4c68008546101a0526020610260604463a9059cbb6101c052610140516101e05261018051610200526101dc60006101a0515af115611bf757601f3d1115611bf7576000506102605115611bf75766038d7ea4c6800a805461018051808210611bf757808203905090508155505b61018051600052600060005560206000f35b637b935a238114156106d357600154611bf75760016001556000610120525b610120516004013560a01c611bf75760206101205101610120526102806101205110156104b65761048a565b66071afd498d000f54611bf75760035442106104d95760065801611396565b6000505b6006546101405266071afd498d000d541561050d5761014051620151808181830110611bf757808201905090504211610510565b60005b1561052f576101405160065801610da6565b6101405260005042610140525b6101405162093a808082049050905062093a80808202821582848304141715611bf757809050905090506101405266038d7ea4c68007546101605266038d7ea4c68008546101805260006101a0526101e060006014818352015b60206101e05102600401356101c0526101c0516105a557610695565b6101405161016051610180516101a0516101c0516101e051610200516101c05161022052610160516102405261014051610260526102605161024051610220516006580161160d565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c0516102005260006102005118156106845760206102c0604463a9059cbb610220526101c05161024052610200516102605261023c6000610180515af115611bf757601f3d1115611bf7576000506102c05115611bf7576101a08051610200518181830110611bf757808201905090508152505b5b8151600101808352811415610589575b505060006101a05118156106c35766038d7ea4c6800a80546101a051808210611bf757808203905090508155505b6001600052600060015560206000f35b6389afcb448114156107e05760043560a01c611bf75766038d7ea4c68008546004351415611bf75766071afd498d000f54611bf75760206101e060246370a0823161016052336101805261017c6004355afa15611bf757601f3d1115611bf7576000506101e0516101405260006101405118156107d557602061022060646323b872dd610160523361018052306101a052610140516101c05261017c60006004355af115611bf757601f3d1115611bf7576000506102205066071afd498d000d54156107b757600654620151808181830110611bf7578082019050905042116107ba565b60005b156107d4576101405160065801610da6565b610140526000505b5b600160005260206000f35b63b1d3db758114156108575760043560a01c611bf75766071afd498d000b54331415611bf75760006004351815611bf75760043566071afd498d000c557f59a407284ae6e2986675fa1400d6498af928ed01f4fd2dd6be4a2a8b4fc35b3461014080808060043581525050602090509050610140a1005b63e1593b138114156108c35766071afd498d000c546101405261014051331415611bf7576101405166071afd498d000b557f756f845176805c8ebf249854e909627308157f63c96e470e44a9e8549ba6fb1e6101608080806101405181525050602090509050610160a1005b632121bfc38114156109355766071afd498d000b54331415611bf75766071afd498d000d5415610140526101405166071afd498d000d557fdbe6ac1081ebd8e648718341126659456f4009fcadfe1c23f66f5e61522610b26101608080806101405181525050602090509050610160a1005b63e36988538114156109e45766071afd498d000b54331415611bf757600166071afd498d000f5566038d7ea4c68008546101405260206102a0604463a9059cbb6102005266071afd498d000e546102205260206101e060246370a0823161016052306101805261017c610140515afa15611bf757601f3d1115611bf7576000506101e0516102405261021c6000610140515af115611bf757601f3d1115611bf7576000506102a05115611bf757005b63db2f5f79811415610b865760043560a01c611bf75766071afd498d000b54331415611bf75766038d7ea4c68008546004351815611bf75760206101e060246370a0823161016052306101805261017c6004355afa15611bf757601f3d1115611bf7576000506101e05161014052600060046101c0527fa9059cbb000000000000000000000000000000000000000000000000000000006101e0526101c060048060208461022001018260208501600060045af150508051820191505066071afd498d000e5460208261022001015260208101905061014051602082610220010152602081019050806102205261022090508051602001806102c08284600060045af115611bf757505060206103806102c0516102e060006004355af115611bf75760203d80821115610b175780610b19565b815b90509050610360526103608051602001806101608284600060045af115611bf75750506000610160511815610b7b576101608060200151600082518060209013611bf75780919012611bf757806020036101000a820490509050905015611bf7575b600160005260206000f35b63834ee417811415610b9e5760025460005260206000f35b63127dcbd3811415610bb65760035460005260206000f35b632a2a314b811415610be65760043560a01c611bf757600460043560e05260c052604060c0205460005260206000f35b63d5d46e88811415610c165760043560a01c611bf757600560043560e05260c052604060c0205460005260206000f35b637f58e8f8811415610c2e5760065460005260206000f35b63edf59997811415610c5c57600160043566038d7ea4c68000811015611bf757026007015460005260206000f35b63dfe05031811415610c7a5766038d7ea4c680075460005260206000f35b63fc0c546a811415610c985766038d7ea4c680085460005260206000f35b632f0c222e811415610cb65766038d7ea4c680095460005260206000f35b6322b04bfc811415610cd45766038d7ea4c6800a5460005260206000f35b63d4dafba8811415610d0857600160043566038d7ea4c68000811015611bf7570266038d7ea4c6800b015460005260206000f35b63f851a440811415610d265766071afd498d000b5460005260206000f35b6317f7182a811415610d445766071afd498d000c5460005260206000f35b63aeba4737811415610d625766071afd498d000d5460005260206000f35b632c3f531e811415610d805766071afd498d000e5460005260206000f35b639c868ac0811415610d9e5766071afd498d000f5460005260206000f35b505b60006000fd5b61014052602061020060246370a0823161018052306101a05261019c66038d7ea4c68008545afa15611bf757601f3d1115611bf75760005061020051610160526101605166038d7ea4c6800a54808210611bf75780820390509050610180526101605166038d7ea4c6800a556006546101a052426101a051808210611bf757808203905090506101c052426006556101a05162093a808082049050905062093a80808202821582848304141715611bf757809050905090506101e05260006102005261022060006014818352015b6101e05162093a808181830110611bf757808201905090506102005261020051421015610f64576101c051610eae576101a0514214610eb1565b60005b15610eed5760016101e05166038d7ea4c68000811015611bf757026007018054610180518181830110611bf75780820190509050815550610f5b565b60016101e05166038d7ea4c68000811015611bf75702600701805461018051426101a051808210611bf75780820390509050808202821582848304141715611bf757809050905090506101c051808015611bf7578204905090508181830110611bf757808201905090508155505b61104c5661102b565b6101c051610f7a576101a0516102005114610f7d565b60005b15610fb95760016101e05166038d7ea4c68000811015611bf757026007018054610180518181830110611bf7578082019050905081555061102a565b60016101e05166038d7ea4c68000811015611bf75702600701805461018051610200516101a051808210611bf75780820390509050808202821582848304141715611bf757809050905090506101c051808015611bf7578204905090508181830110611bf757808201905090508155505b5b610200516101a052610200516101e0525b8151600101808352811415610e74575b50507fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6610220808080428152505060208101905080806101805181525050604090509050610220a161014051565b61018052610140526101605260006101a0526020610240600463900cf0cf6101e0526101fc610140515afa15611bf757601f3d1115611bf757600050610240516101c0526101e060006080818352015b6101c0516101a051106110fc57611213565b6101a0516101c0518181830110611bf7578082019050905060028181830110611bf75780820190509050600280820490509050610200526102206080610320602463d1febfb96102a052610200516102c0526102bc610140515afa15611bf757607f3d1115611bf75761032080808080516103a0525050602081019050808080516103c0525050602081019050808080516103e05250506020810190508080805161040052505050506000506103a08051825280602001518260200152806040015182604001528060600151826060015250506101605161026051116111e957610200516101a052611202565b610200516001808210611bf757808203905090506101c0525b5b81516001018083528114156110ea575b50506101a05160005260005161018051565b6101c0526101405261016052610180526101a05260006101e0526101a0516102005261022060006080818352015b610200516101e0511061126557611384565b6101e051610200518181830110611bf7578082019050905060028181830110611bf7578082019050905060028082049050905061024052610260608061038060446328d09d476102e052610160516103005261024051610320526102fc610140515afa15611bf757607f3d1115611bf75761038080808080516104005250506020810190508080805161042052505060208101905080808051610440525050602081019050808080516104605250505050600050610400805182528060200151826020015280604001518260400152806060015182606001525050610180516102a0511161135a57610240516101e052611373565b610240516001808210611bf75780820390509050610200525b5b8151600101808352811415611253575b50506101e0516000526000516101c051565b6101405266038d7ea4c680075461016052600354610180524262093a808082049050905062093a80808202821582848304141715611bf757809050905090506101a052610160513b15611bf75760006000600463c2c4c5c16101c0526101dc6000610160515af115611bf7576101c060006014818352015b6101a051610180511115611425576115fe566115d1565b6101405161016051610180516101a0516101c0516101e0516101605161020052610180516102205261022051610200516006580161109a565b610280526101e0526101c0526101a052610180526101605261014052610280516101e0526102006080610300602463d1febfb9610280526101e0516102a05261029c610160515afa15611bf757607f3d1115611bf7576103008080808051610380525050602081019050808080516103a0525050602081019050808080516103c0525050602081019050808080516103e0525050505060005061038080518252806020015182602001528060400151826040015280606001518260600152505060006102805261024051610180511115611556576101805161024051808210611bf757808203905090506040518111611bf757610280525b61020051610220516102805180820280607f1d8160801d1415611bf7578090509050905080820380607f1d8160801d1415611bf757809050905090506000808212156115a257806115a4565b815b9050905060008112611bf75760016101805166038d7ea4c68000811015611bf7570266038d7ea4c6800b01555b610180805162093a808181830110611bf757808201905090508152505b815160010180835281141561140e575b50506101805160035561014051565b6101a0526101405261016052610180526040366101c03760206102a0602463010ae75761022052610140516102405261023c610160515afa15611bf757601f3d1115611bf7576000506102a05161020052600254610220526102005161167b5760006000526000516101a051565b60046101405160e05260c052604060c02054610240526102405161172b576101405161016051610180516101a0516101c0516101e05161020051610220516102405161016051610260526101405161028052610220516102a052610200516102c0526102c0516102a051610280516102605160065801611225565b610320526102405261022052610200526101e0526101c0526101a052610180526101605261014052610320516101c052611742565b60056101405160e05260c052604060c020546101c0525b6101c0516117515760016101c0525b610260608061038060446328d09d476102e05261014051610300526101c051610320526102fc610160515afa15611bf757607f3d1115611bf7576103808080808051610400525050602081019050808080516104205250506020810190508080805161044052505060208101905080808051610460525050505060005061040080518252806020015182602001528060400151826040015280606001518260600152505061024051611850576102a05162093a808181830110611bf757808201905090506001808210611bf7578082039050905062093a808082049050905062093a80808202821582848304141715611bf75780905090509050610240525b61018051610240511061186b5760006000526000516101a051565b610220516102405110156118825761022051610240525b6080366102e03761036060006032818352015b6101805161024051106118a757611b2c565b6102a05161024051106118c357610200516101c05111156118c6565b60005b156119d3576101c0805160018181830110611bf757808201905090508152506102e0610260805182528060200151826020015280604001518260400152806060015182606001525050610200516101c051111561192957608036610260376119ce565b610260608061042060446328d09d4761038052610140516103a0526101c0516103c05261039c610160515afa15611bf757607f3d1115611bf75761042080808080516104a0525050602081019050808080516104c0525050602081019050808080516104e05250506020810190508080805161050052505050506000506104a08051825280602001518260200152806040015182604001528060600151826060015250505b611b1b565b6102405161032051808210611bf757808203905090506040518111611bf757610380526102e051610380516103005180820280607f1d8160801d1415611bf7578090509050905080820380607f1d8160801d1415611bf75780905090509050600080821215611a425780611a44565b815b9050905060008112611bf7576103a0526103a051611a6a57610200516101c05111611a6d565b60005b15611a7757611b2c565b60006103a0511115611afe576101e080516103a05160016102405166038d7ea4c68000811015611bf7570260070154808202821582848304141715611bf7578090509050905060016102405166038d7ea4c68000811015611bf7570266038d7ea4c6800b0154808015611bf7578204905090508181830110611bf757808201905090508152505b610240805162093a808181830110611bf757808201905090508152505b5b8151600101808352811415611895575b5050610200516101c0516001808210611bf7578082039050905080821115611b545780611b56565b815b905090506101c0526101c05160056101405160e05260c052604060c020556102405160046101405160e05260c052604060c02055610140517f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e6103608080806101e0518152505060208101905080806101c0518152505060208101905080806102005181525050606090509050610360a26101e0516000526000516101a051565b600080fd5b610119611d1503610119600039610119611d15036000f35b600080fd0000000000000000000000000c462dbb9ec8cd1630f1728b2cfd2769d09f0dd50000000000000000000000000000000000000000000000000000000061e8a6000000000000000000000000009c215206da4bf108ae5aeef9da7cad3352a36dad000000000000000000000000dc4e6dfe07efca50a197df15d9200883ef4eb1c8000000000000000000000000dc4e6dfe07efca50a197df15d9200883ef4eb1c8

Deployed Bytecode

0x600436101561000d57610da0565b600035601c526f7fffffffffffffffffffffffffffffff60405260005134611bf75763811a40fe8114156100965766071afd498d000b54331415610052576001610082565b66071afd498d000d541561007e57600654620151808181830110611bf757808201905090504211610081565b60005b5b5b15611bf75760065801610da6565b600050005b63ace296fb8114156102675760043560a01c611bf75766038d7ea4c6800754610140526020610200602463010ae757610180526004356101a05261019c610140515afa15611bf757601f3d1115611bf7576000506102005161016052610140516101605161018051610140516101a052604060046101c0376101605161020052610200516101e0516101c0516101a05160065801611225565b6102605261018052610160526101405261026051610180526101a060806102c060446328d09d476102205260043561024052610180516102605261023c610140515afa15611bf757607f3d1115611bf7576102c080808080516103405250506020810190508080805161036052505060208101905080808051610380525050602081019050808080516103a052505050506000506103408051825280602001518260200152806040015182604001528060600151826060015250506101a0516101c0516024356101e051808210611bf757808203905090506040518111611bf75780820280607f1d8160801d1415611bf7578090509050905080820380607f1d8160801d1415611bf757809050905090506000808212156102505780610252565b815b9050905060008112611bf75760005260206000f35b63b21ed5028114156102815760065801611396565b600050005b634e71d92d8114156102975733610140526102c2565b631e83409a8114156102bd5760043560a01c611bf75760206004610140376000506102c2565b61046b565b600054611bf757600160005566071afd498d000f54611bf75760035442106102f9576101405160065801611396565b610140526000505b6006546101605266071afd498d000d541561032d5761016051620151808181830110611bf757808201905090504211610330565b60005b1561035757610140516101605160065801610da6565b610160526101405260005042610160525b6101605162093a808082049050905062093a80808202821582848304141715611bf7578090509050905061016052610140516101605161018051610140516101a05266038d7ea4c68007546101c052610160516101e0526101e0516101c0516101a0516006580161160d565b61024052610180526101605261014052610240516101805260006101805118156104595766038d7ea4c68008546101a0526020610260604463a9059cbb6101c052610140516101e05261018051610200526101dc60006101a0515af115611bf757601f3d1115611bf7576000506102605115611bf75766038d7ea4c6800a805461018051808210611bf757808203905090508155505b61018051600052600060005560206000f35b637b935a238114156106d357600154611bf75760016001556000610120525b610120516004013560a01c611bf75760206101205101610120526102806101205110156104b65761048a565b66071afd498d000f54611bf75760035442106104d95760065801611396565b6000505b6006546101405266071afd498d000d541561050d5761014051620151808181830110611bf757808201905090504211610510565b60005b1561052f576101405160065801610da6565b6101405260005042610140525b6101405162093a808082049050905062093a80808202821582848304141715611bf757809050905090506101405266038d7ea4c68007546101605266038d7ea4c68008546101805260006101a0526101e060006014818352015b60206101e05102600401356101c0526101c0516105a557610695565b6101405161016051610180516101a0516101c0516101e051610200516101c05161022052610160516102405261014051610260526102605161024051610220516006580161160d565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c0516102005260006102005118156106845760206102c0604463a9059cbb610220526101c05161024052610200516102605261023c6000610180515af115611bf757601f3d1115611bf7576000506102c05115611bf7576101a08051610200518181830110611bf757808201905090508152505b5b8151600101808352811415610589575b505060006101a05118156106c35766038d7ea4c6800a80546101a051808210611bf757808203905090508155505b6001600052600060015560206000f35b6389afcb448114156107e05760043560a01c611bf75766038d7ea4c68008546004351415611bf75766071afd498d000f54611bf75760206101e060246370a0823161016052336101805261017c6004355afa15611bf757601f3d1115611bf7576000506101e0516101405260006101405118156107d557602061022060646323b872dd610160523361018052306101a052610140516101c05261017c60006004355af115611bf757601f3d1115611bf7576000506102205066071afd498d000d54156107b757600654620151808181830110611bf7578082019050905042116107ba565b60005b156107d4576101405160065801610da6565b610140526000505b5b600160005260206000f35b63b1d3db758114156108575760043560a01c611bf75766071afd498d000b54331415611bf75760006004351815611bf75760043566071afd498d000c557f59a407284ae6e2986675fa1400d6498af928ed01f4fd2dd6be4a2a8b4fc35b3461014080808060043581525050602090509050610140a1005b63e1593b138114156108c35766071afd498d000c546101405261014051331415611bf7576101405166071afd498d000b557f756f845176805c8ebf249854e909627308157f63c96e470e44a9e8549ba6fb1e6101608080806101405181525050602090509050610160a1005b632121bfc38114156109355766071afd498d000b54331415611bf75766071afd498d000d5415610140526101405166071afd498d000d557fdbe6ac1081ebd8e648718341126659456f4009fcadfe1c23f66f5e61522610b26101608080806101405181525050602090509050610160a1005b63e36988538114156109e45766071afd498d000b54331415611bf757600166071afd498d000f5566038d7ea4c68008546101405260206102a0604463a9059cbb6102005266071afd498d000e546102205260206101e060246370a0823161016052306101805261017c610140515afa15611bf757601f3d1115611bf7576000506101e0516102405261021c6000610140515af115611bf757601f3d1115611bf7576000506102a05115611bf757005b63db2f5f79811415610b865760043560a01c611bf75766071afd498d000b54331415611bf75766038d7ea4c68008546004351815611bf75760206101e060246370a0823161016052306101805261017c6004355afa15611bf757601f3d1115611bf7576000506101e05161014052600060046101c0527fa9059cbb000000000000000000000000000000000000000000000000000000006101e0526101c060048060208461022001018260208501600060045af150508051820191505066071afd498d000e5460208261022001015260208101905061014051602082610220010152602081019050806102205261022090508051602001806102c08284600060045af115611bf757505060206103806102c0516102e060006004355af115611bf75760203d80821115610b175780610b19565b815b90509050610360526103608051602001806101608284600060045af115611bf75750506000610160511815610b7b576101608060200151600082518060209013611bf75780919012611bf757806020036101000a820490509050905015611bf7575b600160005260206000f35b63834ee417811415610b9e5760025460005260206000f35b63127dcbd3811415610bb65760035460005260206000f35b632a2a314b811415610be65760043560a01c611bf757600460043560e05260c052604060c0205460005260206000f35b63d5d46e88811415610c165760043560a01c611bf757600560043560e05260c052604060c0205460005260206000f35b637f58e8f8811415610c2e5760065460005260206000f35b63edf59997811415610c5c57600160043566038d7ea4c68000811015611bf757026007015460005260206000f35b63dfe05031811415610c7a5766038d7ea4c680075460005260206000f35b63fc0c546a811415610c985766038d7ea4c680085460005260206000f35b632f0c222e811415610cb65766038d7ea4c680095460005260206000f35b6322b04bfc811415610cd45766038d7ea4c6800a5460005260206000f35b63d4dafba8811415610d0857600160043566038d7ea4c68000811015611bf7570266038d7ea4c6800b015460005260206000f35b63f851a440811415610d265766071afd498d000b5460005260206000f35b6317f7182a811415610d445766071afd498d000c5460005260206000f35b63aeba4737811415610d625766071afd498d000d5460005260206000f35b632c3f531e811415610d805766071afd498d000e5460005260206000f35b639c868ac0811415610d9e5766071afd498d000f5460005260206000f35b505b60006000fd5b61014052602061020060246370a0823161018052306101a05261019c66038d7ea4c68008545afa15611bf757601f3d1115611bf75760005061020051610160526101605166038d7ea4c6800a54808210611bf75780820390509050610180526101605166038d7ea4c6800a556006546101a052426101a051808210611bf757808203905090506101c052426006556101a05162093a808082049050905062093a80808202821582848304141715611bf757809050905090506101e05260006102005261022060006014818352015b6101e05162093a808181830110611bf757808201905090506102005261020051421015610f64576101c051610eae576101a0514214610eb1565b60005b15610eed5760016101e05166038d7ea4c68000811015611bf757026007018054610180518181830110611bf75780820190509050815550610f5b565b60016101e05166038d7ea4c68000811015611bf75702600701805461018051426101a051808210611bf75780820390509050808202821582848304141715611bf757809050905090506101c051808015611bf7578204905090508181830110611bf757808201905090508155505b61104c5661102b565b6101c051610f7a576101a0516102005114610f7d565b60005b15610fb95760016101e05166038d7ea4c68000811015611bf757026007018054610180518181830110611bf7578082019050905081555061102a565b60016101e05166038d7ea4c68000811015611bf75702600701805461018051610200516101a051808210611bf75780820390509050808202821582848304141715611bf757809050905090506101c051808015611bf7578204905090508181830110611bf757808201905090508155505b5b610200516101a052610200516101e0525b8151600101808352811415610e74575b50507fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6610220808080428152505060208101905080806101805181525050604090509050610220a161014051565b61018052610140526101605260006101a0526020610240600463900cf0cf6101e0526101fc610140515afa15611bf757601f3d1115611bf757600050610240516101c0526101e060006080818352015b6101c0516101a051106110fc57611213565b6101a0516101c0518181830110611bf7578082019050905060028181830110611bf75780820190509050600280820490509050610200526102206080610320602463d1febfb96102a052610200516102c0526102bc610140515afa15611bf757607f3d1115611bf75761032080808080516103a0525050602081019050808080516103c0525050602081019050808080516103e05250506020810190508080805161040052505050506000506103a08051825280602001518260200152806040015182604001528060600151826060015250506101605161026051116111e957610200516101a052611202565b610200516001808210611bf757808203905090506101c0525b5b81516001018083528114156110ea575b50506101a05160005260005161018051565b6101c0526101405261016052610180526101a05260006101e0526101a0516102005261022060006080818352015b610200516101e0511061126557611384565b6101e051610200518181830110611bf7578082019050905060028181830110611bf7578082019050905060028082049050905061024052610260608061038060446328d09d476102e052610160516103005261024051610320526102fc610140515afa15611bf757607f3d1115611bf75761038080808080516104005250506020810190508080805161042052505060208101905080808051610440525050602081019050808080516104605250505050600050610400805182528060200151826020015280604001518260400152806060015182606001525050610180516102a0511161135a57610240516101e052611373565b610240516001808210611bf75780820390509050610200525b5b8151600101808352811415611253575b50506101e0516000526000516101c051565b6101405266038d7ea4c680075461016052600354610180524262093a808082049050905062093a80808202821582848304141715611bf757809050905090506101a052610160513b15611bf75760006000600463c2c4c5c16101c0526101dc6000610160515af115611bf7576101c060006014818352015b6101a051610180511115611425576115fe566115d1565b6101405161016051610180516101a0516101c0516101e0516101605161020052610180516102205261022051610200516006580161109a565b610280526101e0526101c0526101a052610180526101605261014052610280516101e0526102006080610300602463d1febfb9610280526101e0516102a05261029c610160515afa15611bf757607f3d1115611bf7576103008080808051610380525050602081019050808080516103a0525050602081019050808080516103c0525050602081019050808080516103e0525050505060005061038080518252806020015182602001528060400151826040015280606001518260600152505060006102805261024051610180511115611556576101805161024051808210611bf757808203905090506040518111611bf757610280525b61020051610220516102805180820280607f1d8160801d1415611bf7578090509050905080820380607f1d8160801d1415611bf757809050905090506000808212156115a257806115a4565b815b9050905060008112611bf75760016101805166038d7ea4c68000811015611bf7570266038d7ea4c6800b01555b610180805162093a808181830110611bf757808201905090508152505b815160010180835281141561140e575b50506101805160035561014051565b6101a0526101405261016052610180526040366101c03760206102a0602463010ae75761022052610140516102405261023c610160515afa15611bf757601f3d1115611bf7576000506102a05161020052600254610220526102005161167b5760006000526000516101a051565b60046101405160e05260c052604060c02054610240526102405161172b576101405161016051610180516101a0516101c0516101e05161020051610220516102405161016051610260526101405161028052610220516102a052610200516102c0526102c0516102a051610280516102605160065801611225565b610320526102405261022052610200526101e0526101c0526101a052610180526101605261014052610320516101c052611742565b60056101405160e05260c052604060c020546101c0525b6101c0516117515760016101c0525b610260608061038060446328d09d476102e05261014051610300526101c051610320526102fc610160515afa15611bf757607f3d1115611bf7576103808080808051610400525050602081019050808080516104205250506020810190508080805161044052505060208101905080808051610460525050505060005061040080518252806020015182602001528060400151826040015280606001518260600152505061024051611850576102a05162093a808181830110611bf757808201905090506001808210611bf7578082039050905062093a808082049050905062093a80808202821582848304141715611bf75780905090509050610240525b61018051610240511061186b5760006000526000516101a051565b610220516102405110156118825761022051610240525b6080366102e03761036060006032818352015b6101805161024051106118a757611b2c565b6102a05161024051106118c357610200516101c05111156118c6565b60005b156119d3576101c0805160018181830110611bf757808201905090508152506102e0610260805182528060200151826020015280604001518260400152806060015182606001525050610200516101c051111561192957608036610260376119ce565b610260608061042060446328d09d4761038052610140516103a0526101c0516103c05261039c610160515afa15611bf757607f3d1115611bf75761042080808080516104a0525050602081019050808080516104c0525050602081019050808080516104e05250506020810190508080805161050052505050506000506104a08051825280602001518260200152806040015182604001528060600151826060015250505b611b1b565b6102405161032051808210611bf757808203905090506040518111611bf757610380526102e051610380516103005180820280607f1d8160801d1415611bf7578090509050905080820380607f1d8160801d1415611bf75780905090509050600080821215611a425780611a44565b815b9050905060008112611bf7576103a0526103a051611a6a57610200516101c05111611a6d565b60005b15611a7757611b2c565b60006103a0511115611afe576101e080516103a05160016102405166038d7ea4c68000811015611bf7570260070154808202821582848304141715611bf7578090509050905060016102405166038d7ea4c68000811015611bf7570266038d7ea4c6800b0154808015611bf7578204905090508181830110611bf757808201905090508152505b610240805162093a808181830110611bf757808201905090508152505b5b8151600101808352811415611895575b5050610200516101c0516001808210611bf7578082039050905080821115611b545780611b56565b815b905090506101c0526101c05160056101405160e05260c052604060c020556102405160046101405160e05260c052604060c02055610140517f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e6103608080806101e0518152505060208101905080806101c0518152505060208101905080806102005181525050606090509050610360a26101e0516000526000516101a051565b600080fd

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000c462dbb9ec8cd1630f1728b2cfd2769d09f0dd50000000000000000000000000000000000000000000000000000000061e8a6000000000000000000000000009c215206da4bf108ae5aeef9da7cad3352a36dad000000000000000000000000dc4e6dfe07efca50a197df15d9200883ef4eb1c8000000000000000000000000dc4e6dfe07efca50a197df15d9200883ef4eb1c8

-----Decoded View---------------
Arg [0] : _voting_escrow (address): 0x0C462Dbb9EC8cD1630f1728B2CFD2769d09f0dd5
Arg [1] : _start_time (uint256): 1642636800
Arg [2] : _token (address): 0x9C215206Da4bf108aE5aEEf9dA7caD3352A36Dad
Arg [3] : _admin (address): 0xdC4e6DFe07EFCa50a197DF15D9200883eF4Eb1c8
Arg [4] : _emergency_return (address): 0xdC4e6DFe07EFCa50a197DF15D9200883eF4Eb1c8

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000c462dbb9ec8cd1630f1728b2cfd2769d09f0dd5
Arg [1] : 0000000000000000000000000000000000000000000000000000000061e8a600
Arg [2] : 0000000000000000000000009c215206da4bf108ae5aeef9da7cad3352a36dad
Arg [3] : 000000000000000000000000dc4e6dfe07efca50a197df15d9200883ef4eb1c8
Arg [4] : 000000000000000000000000dc4e6dfe07efca50a197df15d9200883ef4eb1c8


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.