ETH Price: $2,509.08 (+0.42%)

Token

Curve APY Vault (CAV)
 

Overview

Max Total Supply

2.00878466930741434 CAV

Holders

1

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2.00878466930741434 CAV

Value
$0.00
0x2210dc066aacb03c9676c4f1b36084af14ccd02e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.3

Optimization Enabled:
N/A

Other Settings:
Apache-2.0 license

Contract Source Code (Vyper language format)

# @version 0.3.3

# define swap route
struct SwapRoute:
    swap_pool: address # swap pool to use for swap
    j_token: address # out token from the pool
    i: int128 # in token index
    j: int128 # out token index
    is_underlying: bool # true if exchange underlying coins using exchange_underlying()
    is_crypto_pool: bool # true if token index in uint256

# ERC20 events
event Transfer:
    _from: indexed(address)
    _to: indexed(address)
    _value: uint256

event Approval:
    _owner: indexed(address)
    _spender: indexed(address)
    _value: uint256

# Vault events
event Deposit:
    _token: indexed(address)
    _from: indexed(address)
    token_amount: uint256
    vault_balance: uint256

event Withdraw:
    _token: indexed(address)
    _from: indexed(address)
    token_amount: uint256
    vault_balance: uint256

event Updated:
    old_pool: indexed(address)
    new_pool: indexed(address)
    _timestamp: uint256
    from_amount: uint256
    to_amount: uint256

# ERC20 standard interfaces
name: public(String[64])
symbol: public(String[32])

balanceOf: public(HashMap[address, uint256])
allowance: public(HashMap[address, HashMap[address, uint256]])
totalSupply: public(uint256)

paused: public(bool)
main_pool: public(address) # main curve pool address
main_pool_coin_count: public(uint8) # (undelying) coin count
is_crypto_pool: public(bool) # true if main pool coin index type is uint256

# main deposit address for meta pools
# address(0) for base pools
# addresss(1) for lending pools (add_liquidity function has one more argument)
main_deposit: public(address)
main_lp_token: public(address) # Curve LP address of main pool
validators: public(HashMap[address, bool]) # validators who can update pool
admin: public(address) # admin

zap_deposit: public(address) # ZAP deposit pool address that curve provides
MAX_COINS: constant(uint8) = 8 # MAX_COINS of curve pools
VETH: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE # Virtual address for ETH coin
WETH: constant(address) = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
IS_A_POOL_IN_DEPOSIT: constant(address) = 0x0000000000000000000000000000000000000001 # use address(1) as deposit address for aave pools
INIT_ZAP_DEPOSIT: constant(address) = 0xA79828DF1850E8a3A3064576f380D90aECDD3359 # init ZAP deposit contract address
TRUE_BYTES32: constant(bytes32) = 0x0000000000000000000000000000000000000000000000000000000000000001 # conversion True into bytes32
MAX_SWAP: constant(uint256) = 4 # MAX count of swap steps

interface CrvPool:
    def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256): nonpayable
    def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): payable
    def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256): payable

interface CryptoPool:
    def exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256): payable
    def exchange_underlying(i: uint256, j: uint256, dx: uint256, min_dy: uint256): payable
    def remove_liquidity_one_coin(token_amount: uint256, i: uint256, min_amount: uint256): nonpayable

interface CrvAPool:
    def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256, use_underlying: bool): nonpayable

interface CryptoAPool:
    def remove_liquidity_one_coin(token_amount: uint256, i: uint256, min_amount: uint256, use_underlying: bool): nonpayable

interface CrvZapDeposit:
    def remove_liquidity_one_coin(_pool: address, token_amount: uint256, i: int128, min_amount: uint256): nonpayable

interface CryptoZapDeposit:
    def remove_liquidity_one_coin(_pool: address, token_amount: uint256, i: uint256, min_amount: uint256): nonpayable

interface CrvDeposit:
    def pool() -> address: view

interface LiquidityGauge:
    def deposit(amount: uint256): nonpayable
    def withdraw(amount: uint256): nonpayable
    def balanceOf(addr: address) -> uint256: view

interface ERC20:
    def balanceOf(_to: address) -> uint256: view

interface WrappedEth:
    def deposit(): payable
    def withdraw(amount: uint256): nonpayable

@external
def __init__(_name: String[64], _symbol: String[32], _main_pool: address, _main_deposit: address, _main_pool_coin_count: uint8, _main_lp_token: address, _is_crypto_pool: bool):
    """
    @notice Contract constructor
    @param _name ERC20 standard name
    @param _symbol ERC20 standard symbol
    @param _main_pool main curve pool
    @param _main_deposit main deposit address
    @param _main_pool_coin_count coin count of main pool
    @param _main_lp_token curve LP token address of the main pool
    @param _is_crypto_pool true if main pool coin index type is uint256
    """
    self.name = _name
    self.symbol = _symbol
    self.admin = msg.sender
    self.validators[msg.sender] = True
    assert _main_pool != ZERO_ADDRESS, "Wrong Pool"
    self.main_pool = _main_pool
    self.main_deposit = _main_deposit
    assert _main_pool_coin_count >= 2 and _main_pool_coin_count <= MAX_COINS, "Wrong Pool Coin Count"
    self.main_pool_coin_count = _main_pool_coin_count
    assert _main_lp_token != ZERO_ADDRESS, "Wrong Pool"
    self.main_lp_token = _main_lp_token
    self.zap_deposit = INIT_ZAP_DEPOSIT
    self.is_crypto_pool = _is_crypto_pool

# ERC20 common functions

@internal
def _mint(_to: address, _value: uint256):
    assert _to != ZERO_ADDRESS # dev: zero address
    self.totalSupply += _value
    self.balanceOf[_to] += _value
    log Transfer(ZERO_ADDRESS, _to, _value)

@internal
def _burn(_to: address, _value: uint256):
    assert _to != ZERO_ADDRESS # dev: zero address
    self.totalSupply -= _value
    self.balanceOf[_to] -= _value
    log Transfer(_to, ZERO_ADDRESS, _value)

@internal
def safe_approve(_token: address, _to: address, _value: uint256):
    _response: Bytes[32] = raw_call(
        _token,
        concat(
            method_id("approve(address,uint256)"),
            convert(_to, bytes32),
            convert(_value, bytes32)
        ),
        max_outsize=32
    )  # dev: failed approve
    if len(_response) > 0:
        assert convert(_response, bool) # dev: failed approve

@internal
def safe_transfer(_token: address, _to: address, _value: uint256):
    _response: Bytes[32] = raw_call(
        _token,
        concat(
            method_id("transfer(address,uint256)"),
            convert(_to, bytes32),
            convert(_value, bytes32)
        ),
        max_outsize=32
    )  # dev: failed transfer
    if len(_response) > 0:
        assert convert(_response, bool) # dev: failed transfer

@internal
def safe_transfer_from(_token: address, _from: address, _to: address, _value: uint256):
    _response: Bytes[32] = raw_call(
        _token,
        concat(
            method_id("transferFrom(address,address,uint256)"),
            convert(_from, bytes32),
            convert(_to, bytes32),
            convert(_value, bytes32)
        ),
        max_outsize=32
    )  # dev: failed transfer from
    if len(_response) > 0:
        assert convert(_response, bool) # dev: failed transfer from

@external
@pure
def decimals() -> uint8:
    return 18

@external
def transfer(_to : address, _value : uint256) -> bool:
    assert _to != ZERO_ADDRESS # dev: zero address
    self.balanceOf[msg.sender] -= _value
    self.balanceOf[_to] += _value
    log Transfer(msg.sender, _to, _value)
    return True

@external
def transferFrom(_from : address, _to : address, _value : uint256) -> bool:
    assert _to != ZERO_ADDRESS # dev: zero address
    self.balanceOf[_from] -= _value
    self.balanceOf[_to] += _value
    self.allowance[_from][msg.sender] -= _value
    log Transfer(_from, _to, _value)
    return True

@external
def approve(_spender : address, _value : uint256) -> bool:
    assert _value == 0 or self.allowance[msg.sender][_spender] == 0
    self.allowance[msg.sender][_spender] = _value
    log Approval(msg.sender, _spender, _value)
    return True

@external
def increaseAllowance(_spender: address, _value: uint256) -> bool:
    allowance: uint256 = self.allowance[msg.sender][_spender]
    allowance += _value
    self.allowance[msg.sender][_spender] = allowance
    log Approval(msg.sender, _spender, allowance)
    return True

@external
def decreaseAllowance(_spender: address, _value: uint256) -> bool:
    allowance: uint256 = self.allowance[msg.sender][_spender]
    allowance -= _value
    self.allowance[msg.sender][_spender] = allowance
    log Approval(msg.sender, _spender, allowance)
    return True

@internal
def _deposit(main_pool_: address, _main_deposit: address, _main_pool_coin_count: uint8, i: int128, in_token: address, in_amount: uint256):
    """
    @notice deposit to curve pool using one token only
    @param _main_pool main curve pool to withdraw tokens
    @param _main_deposit
        deposit contract to main pool
        address(0) if we can deposit does not exist
        address(1) if the main pool is lending pool and add_liquidity() function requires boolean argument more
    @param _main_pool_coin_count (underlying) coin count of the main curve pool
    @param i in token index
    @param in_amount token in amount
    """
    _main_pool: address = main_pool_
    payload: Bytes[320] = empty(Bytes[320])
    length: uint256 = len(payload)
    # payload using only one coin
    if i == 0:
        payload = concat(convert(in_amount, bytes32), EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32)
    elif i == 1:
        payload = concat(EMPTY_BYTES32, convert(in_amount, bytes32), EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32)
    elif i == 2:
        payload = concat(EMPTY_BYTES32, EMPTY_BYTES32, convert(in_amount, bytes32), EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32)
    elif i == 3:
        payload = concat(EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, convert(in_amount, bytes32), EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32)
    elif i == 4:
        payload = concat(EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, convert(in_amount, bytes32), EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32)
    elif i == 5:
        payload = concat(EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, convert(in_amount, bytes32), EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32)
    elif i == 6:
        payload = concat(EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, convert(in_amount, bytes32), EMPTY_BYTES32, EMPTY_BYTES32)
    else:
        payload = concat(EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, EMPTY_BYTES32, convert(in_amount, bytes32), EMPTY_BYTES32)

    m_id: Bytes[4] = empty(Bytes[4])
    if _main_deposit == IS_A_POOL_IN_DEPOSIT: # if main_deposit is address(1), mail_pool requires one argument more
        if _main_pool_coin_count == 2:
            m_id = method_id("add_liquidity(uint256[2],uint256,bool)")
            payload = concat(slice(payload, 0, 96), TRUE_BYTES32)
        elif _main_pool_coin_count == 3:
            m_id = method_id("add_liquidity(uint256[3],uint256,bool)")
            payload = concat(slice(payload, 0, 128), TRUE_BYTES32)
        elif _main_pool_coin_count == 4:
            m_id = method_id("add_liquidity(uint256[4],uint256,bool)")
            payload = concat(slice(payload, 0, 160), TRUE_BYTES32)
        elif _main_pool_coin_count == 5:
            m_id = method_id("add_liquidity(uint256[5],uint256,bool)")
            payload = concat(slice(payload, 0, 192), TRUE_BYTES32)
        elif _main_pool_coin_count == 6:
            m_id = method_id("add_liquidity(uint256[6],uint256,bool)")
            payload = concat(slice(payload, 0, 224), TRUE_BYTES32)
        elif _main_pool_coin_count == 7:
            m_id = method_id("add_liquidity(uint256[7],uint256,bool)")
            payload = concat(slice(payload, 0, 256), TRUE_BYTES32)
        else:
            m_id = method_id("add_liquidity(uint256[8],uint256,bool)")
            payload = concat(slice(payload, 0, 288), TRUE_BYTES32)
    elif _main_deposit == self.zap_deposit: # zap deposit has different arguments
        if _main_pool_coin_count == 2:
            m_id = method_id("add_liquidity(address,uint256[2],uint256)")
            payload = concat(convert(_main_pool, bytes32), slice(payload, 0, 96))
        elif _main_pool_coin_count == 3:
            m_id = method_id("add_liquidity(address,uint256[3],uint256)")
            payload = concat(convert(_main_pool, bytes32), slice(payload, 0, 128))
        elif _main_pool_coin_count == 4:
            m_id = method_id("add_liquidity(address,uint256[4],uint256)")
            payload = concat(convert(_main_pool, bytes32), slice(payload, 0, 160))
        elif _main_pool_coin_count == 5:
            m_id = method_id("add_liquidity(address,uint256[5],uint256)")
            payload = concat(convert(_main_pool, bytes32), slice(payload, 0, 192))
        elif _main_pool_coin_count == 6:
            m_id = method_id("add_liquidity(address,uint256[6],uint256)")
            payload = concat(convert(_main_pool, bytes32), slice(payload, 0, 224))
        elif _main_pool_coin_count == 7:
            m_id = method_id("add_liquidity(address,uint256[7],uint256)")
            payload = concat(convert(_main_pool, bytes32), slice(payload, 0, 256))
        else:
            m_id = method_id("add_liquidity(address,uint256[8],uint256)")
            payload = concat(convert(_main_pool, bytes32), slice(payload, 0, 288))
    else: # common pool/deposit add_liquidity function
        if _main_pool_coin_count == 2:
            m_id = method_id("add_liquidity(uint256[2],uint256)")
            payload = slice(payload, 0, 96)
        elif _main_pool_coin_count == 3:
            m_id = method_id("add_liquidity(uint256[3],uint256)")
            payload = slice(payload, 0, 128)
        elif _main_pool_coin_count == 4:
            m_id = method_id("add_liquidity(uint256[4],uint256)")
            payload = slice(payload, 0, 160)
        elif _main_pool_coin_count == 5:
            m_id = method_id("add_liquidity(uint256[5],uint256)")
            payload = slice(payload, 0, 192)
        elif _main_pool_coin_count == 6:
            m_id = method_id("add_liquidity(uint256[6],uint256)")
            payload = slice(payload, 0, 224)
        elif _main_pool_coin_count == 7:
            m_id = method_id("add_liquidity(uint256[7],uint256)")
            payload = slice(payload, 0, 256)
        else:
            m_id = method_id("add_liquidity(uint256[8],uint256)")
            payload = slice(payload, 0, 288)
 
    if _main_deposit != ZERO_ADDRESS and _main_deposit != IS_A_POOL_IN_DEPOSIT:
        _main_pool = _main_deposit
    if in_token == VETH:
        raw_call(
            _main_pool,
            concat(
                m_id,
                payload
            ),
            value=in_amount
        )
    else:
        self.safe_approve(in_token, _main_pool, in_amount)
        raw_call(
            _main_pool,
            concat(
                m_id,
                payload
            )
        )

@internal
def _swap(pool: address, i: int128, j: int128, from_token: address, to_token: address, is_underlying: bool, from_amount: uint256, is_crypto_pool: bool) -> uint256:
    """
    @notice swap function using curve pool
    @param pool swap pool to exchange tokens
    @param i from_token index
    @param j to_token index
    @param from_token token address to put into swap pool
    @param to_token token address to get out from swap pool
    @param is_underlying true for meta pools
    @param from_amount from_token amount
    @param is_crypto_pool true for the pools that use uint256 for indexes
    """
    to_amount: uint256 = 0
    if to_token == VETH: # Wrapping ETH
        if from_token == WETH:
            WrappedEth(WETH).withdraw(from_amount)
            return from_amount
        to_amount = self.balance
    elif from_token == VETH and to_token == WETH: # unwrapping WETH
        WrappedEth(WETH).deposit(value=from_amount)
        return from_amount
    else:
        to_amount = ERC20(to_token).balanceOf(self)
        
    if is_crypto_pool:
        # if the pool requires uint256 type indexes
        if from_token == VETH:
            CryptoPool(pool).exchange(convert(i, uint256), convert(j, uint256), from_amount, 0, value=from_amount)
        else:
            self.safe_approve(from_token, pool, from_amount)
            if is_underlying:
                CryptoPool(pool).exchange_underlying(convert(i, uint256), convert(j, uint256), from_amount, 0)
            else:
                CryptoPool(pool).exchange(convert(i, uint256), convert(j, uint256), from_amount, 0)
    else:
        # if the pool requires int128 type indexes
        if from_token == VETH:
            CrvPool(pool).exchange(i, j, from_amount, 0, value=from_amount)
        else:
            self.safe_approve(from_token, pool, from_amount)
            if is_underlying:
                CrvPool(pool).exchange_underlying(i, j, from_amount, 0)
            else:
                CrvPool(pool).exchange(i, j, from_amount, 0)
    # calculate swapped amount
    if to_token == VETH:
        to_amount = self.balance - to_amount
    else:
        to_amount = ERC20(to_token).balanceOf(self) - to_amount
    return to_amount

@external
@payable
@nonreentrant("lock")
def deposit(token_address: address, amount: uint256, i: int128, swap_route: DynArray[SwapRoute, MAX_SWAP], min_amount: uint256) -> uint256:
    """
    @notice Deposit token
    @param token_address deposit token address
    @param amount deposit token amount
    @param i deposit token index of the main pool (even after swap)
    @param swap_route swap route before deposit
    @param min_amount minimum amount of vault balance after deposit
    @return added balance of vault
    """
    assert not self.paused, "Paused"
    self.safe_transfer_from(token_address, msg.sender, self, amount)
    in_token: address = token_address
    in_amount: uint256 = amount
    for route in swap_route:
        # swap tokens with swap route
        if route.swap_pool != ZERO_ADDRESS:
            in_amount = self._swap(route.swap_pool, route.i, route.j, in_token, route.j_token, route.is_underlying, in_amount, route.is_crypto_pool)
            in_token = route.j_token
    _main_lp_token: address = self.main_lp_token
    old_balance: uint256 = ERC20(_main_lp_token).balanceOf(self)
    self._deposit(self.main_pool, self.main_deposit, self.main_pool_coin_count, i, in_token, in_amount)
    new_balance: uint256 = ERC20(_main_lp_token).balanceOf(self)
    assert new_balance > old_balance, "Deposit failed"
    total_supply: uint256 = self.totalSupply
    # calculate mint amount as increas LP token amount * totalSupply / old LP balance
    if total_supply > 0:
        new_balance = (new_balance - old_balance) * total_supply / old_balance
    assert new_balance >= min_amount, "High Slippage"
    self._mint(msg.sender, new_balance)
    log Deposit(token_address, msg.sender, amount, new_balance)
    return new_balance

@internal
def _withdraw(lp_token: address, _main_pool: address, out_token: address, i: int128, out_amount: uint256) -> uint256:
    """
    @notice withdraw from curve pool using one token only
    @param lp_token main curve LP address
    @param _main_pool main curve pool to withdraw tokens
    @param out_token token address to withdraw from the main curve pool
    @param i out token index
    @param out_amount curve LP token amount to withdraw from curve pool
    @return withdrawn token amount
    """
    _main_deposit: address = self.main_deposit
    old_balance: uint256 = ERC20(out_token).balanceOf(self)
    if self.is_crypto_pool:
    # if the pool requires uint256 type indexes
        if _main_deposit == IS_A_POOL_IN_DEPOSIT:
        # if main_deposit is address(1), mail_pool requires one argument more
            self.safe_approve(lp_token, _main_pool, out_amount)
            CryptoAPool(_main_pool).remove_liquidity_one_coin(out_amount, convert(i, uint256), 1, True)
        elif _main_deposit == ZERO_ADDRESS:
        # we can withdraw from the main pool directly
            self.safe_approve(lp_token, _main_pool, out_amount)
            CryptoPool(_main_pool).remove_liquidity_one_coin(out_amount, convert(i, uint256), 1)
        elif _main_deposit == self.zap_deposit:
        # withdraw using ZAP deposit contract
            self.safe_approve(lp_token, _main_deposit, out_amount)
            CryptoZapDeposit(_main_deposit).remove_liquidity_one_coin(_main_pool, out_amount, convert(i, uint256), 1)
        else:
        # withdraw using deposit contract
            self.safe_approve(lp_token, _main_deposit, out_amount)
            CryptoPool(_main_deposit).remove_liquidity_one_coin(out_amount, convert(i, uint256), 1)
    else:
    # if the pool requires int128 type indexes
        if _main_deposit == IS_A_POOL_IN_DEPOSIT:
        # if main_deposit is address(1), mail_pool requires one argument more
            self.safe_approve(lp_token, _main_pool, out_amount)
            CrvAPool(_main_pool).remove_liquidity_one_coin(out_amount, i, 1, True)
        elif _main_deposit == ZERO_ADDRESS:
        # we can withdraw from the main pool directly
            self.safe_approve(lp_token, _main_pool, out_amount)
            CrvPool(_main_pool).remove_liquidity_one_coin(out_amount, i, 1)
        elif _main_deposit == self.zap_deposit:
        # withdraw using ZAP deposit contract
            self.safe_approve(lp_token, _main_deposit, out_amount)
            CrvZapDeposit(_main_deposit).remove_liquidity_one_coin(_main_pool, out_amount, i, 1)
        else:
        # withdraw using deposit contract
            self.safe_approve(lp_token, _main_deposit, out_amount)
            CrvPool(_main_deposit).remove_liquidity_one_coin(out_amount, i, 1)
    # returns withdrawn token amount
    return ERC20(out_token).balanceOf(self) - old_balance

@external
@nonreentrant("lock")
def withdraw(token_address: address, amount: uint256, i: int128, swap_route: DynArray[SwapRoute, MAX_SWAP], min_amount: uint256) -> uint256:
    """
    @notice Withdraw token
    @param token_address withdraw token address
    @param amount withdraw vault balance amount(not token amount)
    @param i withdraw token index of the main pool
    @param swap_route token swap route after withdraw from curve pool, users will get the final token of the swap route
    @param min_amount minimum amount of withdrawn token from withdraw
    @return withdrawn token amount
    """
    out_token: address = token_address
    lp_token: address = self.main_lp_token
    out_amount: uint256 = amount * ERC20(lp_token).balanceOf(self) / self.totalSupply
    _main_pool: address = self.main_pool
    # withdraw token from the curve pool
    out_amount = self._withdraw(lp_token, _main_pool, out_token, i, out_amount)
    self._burn(msg.sender, amount)
    for route in swap_route:
        # swap token with swap route
        if route.swap_pool != ZERO_ADDRESS:
            out_amount = self._swap(route.swap_pool, route.i, route.j, out_token, route.j_token, route.is_underlying, out_amount, route.is_crypto_pool)
            out_token = route.j_token
    assert out_amount >= min_amount, "High Slippage"
    # transfer token to user
    if out_token == VETH:
        send(msg.sender, out_amount)
    else:
        self.safe_transfer(out_token, msg.sender, out_amount)
    log Withdraw(out_token, msg.sender, out_amount, amount)
    return out_amount

@external
@nonreentrant('lock')
def update_pool(_out_token: address, old_i: int128, swap_route: DynArray[SwapRoute, MAX_SWAP], new_pool: address, new_deposit: address, new_i: int128, new_pool_coin_count: uint8, new_lp_token: address, new_is_crypto_pool: bool, new_lp_min_amount: uint256):
    """
    @notice update pool information
    @param _out_token withdraw token address from the old pool
    @param old_i withdraw token index of the old pool
    @param swap_route token swap route from withdrawing to depositing into the new pool
    @param new_pool new main curve pool
    @param new_deposit new main deposit address
    @param new_i deposit token index of new main pool
    @param new_pool_coin_count coin count of new main pool
    @param new_lp_token curve LP token address of the new main pool
    @param new_is_crypto_pool true if new main pool coin index type is uint256
    @param new_lp_min_amount minimum amount of new curve lp token
    """
    assert self.validators[msg.sender], "Not Validator"
    out_token: address = _out_token
    lp_token: address = self.main_lp_token
    out_amount: uint256 = ERC20(lp_token).balanceOf(self)
    from_amount: uint256 = out_amount
    _main_pool: address = self.main_pool
    # withdraw token from the old pool
    out_amount = self._withdraw(lp_token, _main_pool, out_token, old_i, out_amount)
    for route in swap_route:
        # swap token with swap route
        if route.swap_pool != ZERO_ADDRESS:
            out_amount = self._swap(route.swap_pool, route.i, route.j, out_token, route.j_token, route.is_underlying, out_amount, route.is_crypto_pool)
            out_token = route.j_token
    # deposit token into the new pool
    self._deposit(new_pool, new_deposit, new_pool_coin_count, new_i, out_token, out_amount)
    to_amount: uint256 = ERC20(new_lp_token).balanceOf(self)
    assert to_amount >= new_lp_min_amount, "High Slippage"
    # update states
    self.main_pool = new_pool
    self.main_deposit = new_deposit
    self.main_pool_coin_count = new_pool_coin_count
    self.main_lp_token = new_lp_token
    self.is_crypto_pool = new_is_crypto_pool
    log Updated(_main_pool, new_pool, block.timestamp, from_amount, to_amount)

@external
def make_fee(amount: uint256):
# make admin fee to the admin address
    assert msg.sender == self.admin
    self._mint(msg.sender, amount)

@external
def transfer_admin(_admin: address):
# transfer admin permission
    old_admin: address = self.admin
    assert msg.sender == old_admin and _admin != ZERO_ADDRESS and old_admin != _admin
    self.validators[old_admin] = False
    self.validators[msg.sender] = True
    self.admin = _admin

@external
def set_validator(_validator: address, _value: bool):
# register new validator or remove validator
    assert msg.sender == self.admin
    self.validators[_validator] = _value

@external
@payable
def __default__():
# to make possible to receive ETH
    pass

# emergency functions
@external
def set_main_pool(_new_pool: address):
    assert msg.sender == self.admin
    self.main_pool = _new_pool

@external
def set_main_deposit(_new_deposit: address):
    assert msg.sender == self.admin
    self.main_deposit = _new_deposit

@external
def set_main_pool_coin_count(_new_main_pool_coin_count: uint8):
    assert msg.sender == self.admin
    self.main_pool_coin_count = _new_main_pool_coin_count

@external
def set_is_crypto_pool(_new_is_crypto_pool: bool):
    assert msg.sender == self.admin
    self.is_crypto_pool = _new_is_crypto_pool

@external
def set_main_lp_token(_new_main_lp_token: address):
    assert msg.sender == self.admin
    self.main_lp_token = _new_main_lp_token

@external
def set_zap_deposit(_new_zap_deposit: address):
    assert msg.sender == self.admin
    self.zap_deposit = _new_zap_deposit

@external
def pause(_paused: bool):
    assert msg.sender == self.admin
    self.paused = _paused

Contract Security Audit

Contract ABI

[{"name":"Transfer","inputs":[{"name":"_from","type":"address","indexed":true},{"name":"_to","type":"address","indexed":true},{"name":"_value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"name":"_owner","type":"address","indexed":true},{"name":"_spender","type":"address","indexed":true},{"name":"_value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Deposit","inputs":[{"name":"_token","type":"address","indexed":true},{"name":"_from","type":"address","indexed":true},{"name":"token_amount","type":"uint256","indexed":false},{"name":"vault_balance","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"name":"_token","type":"address","indexed":true},{"name":"_from","type":"address","indexed":true},{"name":"token_amount","type":"uint256","indexed":false},{"name":"vault_balance","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Updated","inputs":[{"name":"old_pool","type":"address","indexed":true},{"name":"new_pool","type":"address","indexed":true},{"name":"_timestamp","type":"uint256","indexed":false},{"name":"from_amount","type":"uint256","indexed":false},{"name":"to_amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_main_pool","type":"address"},{"name":"_main_deposit","type":"address"},{"name":"_main_pool_coin_count","type":"uint8"},{"name":"_main_lp_token","type":"address"},{"name":"_is_crypto_pool","type":"bool"}],"outputs":[]},{"stateMutability":"pure","type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8"}]},{"stateMutability":"nonpayable","type":"function","name":"transfer","inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"transferFrom","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"approve","inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"increaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"decreaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"payable","type":"function","name":"deposit","inputs":[{"name":"token_address","type":"address"},{"name":"amount","type":"uint256"},{"name":"i","type":"int128"},{"name":"swap_route","type":"(address,address,int128,int128,bool,bool)[]"},{"name":"min_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[{"name":"token_address","type":"address"},{"name":"amount","type":"uint256"},{"name":"i","type":"int128"},{"name":"swap_route","type":"(address,address,int128,int128,bool,bool)[]"},{"name":"min_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"update_pool","inputs":[{"name":"_out_token","type":"address"},{"name":"old_i","type":"int128"},{"name":"swap_route","type":"(address,address,int128,int128,bool,bool)[]"},{"name":"new_pool","type":"address"},{"name":"new_deposit","type":"address"},{"name":"new_i","type":"int128"},{"name":"new_pool_coin_count","type":"uint8"},{"name":"new_lp_token","type":"address"},{"name":"new_is_crypto_pool","type":"bool"},{"name":"new_lp_min_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"make_fee","inputs":[{"name":"amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"transfer_admin","inputs":[{"name":"_admin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_validator","inputs":[{"name":"_validator","type":"address"},{"name":"_value","type":"bool"}],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"nonpayable","type":"function","name":"set_main_pool","inputs":[{"name":"_new_pool","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_main_deposit","inputs":[{"name":"_new_deposit","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_main_pool_coin_count","inputs":[{"name":"_new_main_pool_coin_count","type":"uint8"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_is_crypto_pool","inputs":[{"name":"_new_is_crypto_pool","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_main_lp_token","inputs":[{"name":"_new_main_lp_token","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_zap_deposit","inputs":[{"name":"_new_zap_deposit","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"pause","inputs":[{"name":"_paused","type":"bool"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"allowance","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"main_pool","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"main_pool_coin_count","inputs":[],"outputs":[{"name":"","type":"uint8"}]},{"stateMutability":"view","type":"function","name":"is_crypto_pool","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"main_deposit","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"main_lp_token","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"validators","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"zap_deposit","inputs":[],"outputs":[{"name":"","type":"address"}]}]

6020613b896000396000516040602082613b890160003960005111613b8457602081613b890160003960005180604052602082018181613b89016060395050506020613ba96000396000516020602082613b890160003960005111613b8457602081613b89016000396000518060a05260208201602081613b890160003960005160c0525050506020613bc96000396000518060a01c613b845760e0526020613be96000396000518060a01c613b8457610100526020613c096000396000518060081c613b8457610120526020613c296000396000518060a01c613b8457610140526020613c496000396000518060011c613b845761016052604051806001556000602082601f010460028111613b8457801561013057905b60208102606001518160020155600101818118610118575b50505060a0518060045560c05160055550336010556001600f33602052600052604060002055600060e05114156101c757600a610180527f57726f6e6720506f6f6c000000000000000000000000000000000000000000006101a0526101805061018051806101a00181600003601f1636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b60e051600a5561010051600d5560026101205112156101e75760006101f0565b60086101205113155b61025a576015610180527f57726f6e6720506f6f6c20436f696e20436f756e7400000000000000000000006101a0526101805061018051806101a00181600003601f1636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b61012051600b5560006101405114156102d357600a610180527f57726f6e6720506f6f6c000000000000000000000000000000000000000000006101a0526101805061018051806101a00181600003601f1636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b61014051600e5573a79828df1850e8a3a3064576f380d90aecdd335960115561016051600c556138716103126300000000396138716000016300000000f3600436101561000d57611575565b60003560e01c63d291525e81186104ac576004358060a01c61386c576107205260443580600f0b811861386c5761074052606435600401600481351161386c57803580610760526000816004811161386c5780156100ef57905b60c081026107800160c08202602086010180358060a01c61386c57825260208101358060a01c61386c576020830152604081013580600f0b811861386c576040830152606081013580600f0b811861386c57606083015260808101358060011c61386c57608083015260a08101358060011c61386c5760a08301525050600101818118610067575b5050505060005461386c5760016000556009541561016d576006610a80527f5061757365640000000000000000000000000000000000000000000000000000610aa052610a8050610a805180610aa00181600003601f1636823750506308c379a0610a40526020610a6052601f19601f610a80510116604401610a5cfd5b61072051604052336060523060805260243560a05261018a611829565b61072051610a8052602435610aa0526000610760516004811161386c57801561025d57905b60c08102610780018051610ac0526020810151610ae0526040810151610b00526060810151610b20526080810151610b405260a0810151610b6052506000610ac0511461025257610ac0516101e052610b005161020052610b205161022052610a805161024052610ae05161026052610b405161028052610aa0516102a052610b60516102c052610241610b80612efd565b610b8051610aa052610ae051610a80525b6001018181186101af575b5050600e54610ac0526370a08231610b005230610b20526020610b006024610b1c610ac0515afa610293573d600060003e3d6000fd5b60203d1061386c57610b0051610ae052600a546101e052600d5461020052600b54610220526107405161024052610a805161026052610aa051610280526102d8611917565b6370a08231610b205230610b40526020610b206024610b3c610ac0515afa610305573d600060003e3d6000fd5b60203d1061386c57610b2051610b0052610ae051610b00511161038857600e610b20527f4465706f736974206661696c6564000000000000000000000000000000000000610b4052610b2050610b205180610b400181600003601f1636823750506308c379a0610ae0526020610b0052601f19601f610b20510116604401610afcfd5b600854610b20526000610b205111156103df57610b0051610ae05180821061386c5780820390509050610b205180820282158284830414171561386c5790509050610ae05180801561386c57820490509050610b00525b608435610b0051101561045257600d610b40527f4869676820536c69707061676500000000000000000000000000000000000000610b6052610b4050610b405180610b600181600003601f1636823750506308c379a0610b00526020610b2052601f19601f610b40510116604401610b1cfd5b33604052610b0051606052610465611577565b33610720517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7602435610b4052610b0051610b60526040610b40a36020610b006000600055f35b63313ce56781186104c7573461386c57601260405260206040f35b63a9059cbb8118610576576004358060a01c61386c576040523461386c5760006040511461386c576006336020526000526040600020805460243580821061386c5780820390509050815550600660405160205260005260406000208054602435818183011061386c5780820190509050815550604051337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60243560605260206060a3600160605260206060f35b6323b872dd811861066c576004358060a01c61386c576040526024358060a01c61386c576060523461386c5760006060511461386c5760066040516020526000526040600020805460443580821061386c5780820390509050815550600660605160205260005260406000208054604435818183011061386c578082019050905081555060076040516020526000526040600020803360205260005260406000209050805460443580821061386c57808203905090508155506060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60443560805260206080a3600160805260206080f35b63095ea7b3811861071e576004358060a01c61386c576040523461386c57602435156106b8576007336020526000526040600020806040516020526000526040600020905054156106bb565b60015b1561386c576024356007336020526000526040600020806040516020526000526040600020905055604051337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560243560605260206060a3600160605260206060f35b633950935181186107d6576004358060a01c61386c576040523461386c576007336020526000526040600020806040516020526000526040600020905054606052606051602435818183011061386c57808201905090506060526060516007336020526000526040600020806040516020526000526040600020905055604051337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560605160805260206080a3600160805260206080f35b63a457c2d7811861088c576004358060a01c61386c576040523461386c57600733602052600052604060002080604051602052600052604060002090505460605260605160243580821061386c57808203905090506060526060516007336020526000526040600020806040516020526000526040600020905055604051337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560605160805260206080a3600160805260206080f35b63bfd930de8118610c16576004358060a01c61386c576103a05260443580600f0b811861386c576103c052606435600401600481351161386c578035806103e0526000816004811161386c57801561096857905b60c081026104000160c08202602086010180358060a01c61386c57825260208101358060a01c61386c576020830152604081013580600f0b811861386c576040830152606081013580600f0b811861386c57606083015260808101358060011c61386c57608083015260a08101358060011c61386c5760a083015250506001018181186108e0575b505050503461386c5760005461386c5760016000556103a05161070052600e54610720526024356370a082316107605230610780526020610760602461077c610720515afa6109bc573d600060003e3d6000fd5b60203d1061386c576107605180820282158284830414171561386c579050905060085480801561386c5782049050905061074052600a5461076052610720516101e052610760516102005261070051610220526103c051610240526107405161026052610a2a6107806133fd565b610780516107405233604052602435606052610a446115f5565b60006103e0516004811161386c578015610b0857905b60c081026104000180516107805260208101516107a05260408101516107c05260608101516107e05260808101516108005260a0810151610820525060006107805114610afd57610780516101e0526107c051610200526107e0516102205261070051610240526107a051610260526108005161028052610740516102a052610820516102c052610aec610840612efd565b61084051610740526107a051610700525b600101818118610a5a575b5050608435610740511015610b7d57600d610780527f4869676820536c697070616765000000000000000000000000000000000000006107a0526107805061078051806107a00181600003601f1636823750506308c379a061074052602061076052601f19601f61078051011660440161075cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6107005118610bb557600060006000600061074051336000f11561386c57610bcf565b610700516040523360605261074051608052610bcf61174c565b33610700517ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb56761074051610780526024356107a0526040610780a360206107406000600055f35b63ebfff1638118611090576004358060a01c61386c576107205260243580600f0b811861386c5761074052604435600401600481351161386c57803580610760526000816004811161386c578015610cf257905b60c081026107800160c08202602086010180358060a01c61386c57825260208101358060a01c61386c576020830152604081013580600f0b811861386c576040830152606081013580600f0b811861386c57606083015260808101358060011c61386c57608083015260a08101358060011c61386c5760a08301525050600101818118610c6a575b505050506064358060a01c61386c57610a80526084358060a01c61386c57610aa05260a43580600f0b811861386c57610ac05260c4358060081c61386c57610ae05260e4358060a01c61386c57610b0052610104358060011c61386c57610b20523461386c5760005461386c576001600055600f33602052600052604060002054610ddd57600d610b40527f4e6f742056616c696461746f7200000000000000000000000000000000000000610b6052610b4050610b405180610b600181600003601f1636823750506308c379a0610b00526020610b2052601f19601f610b40510116604401610b1cfd5b61072051610b4052600e54610b60526370a08231610ba05230610bc0526020610ba06024610bbc610b60515afa610e19573d600060003e3d6000fd5b60203d1061386c57610ba051610b8052610b8051610ba052600a54610bc052610b60516101e052610bc05161020052610b4051610220526107405161024052610b805161026052610e6b610be06133fd565b610be051610b80526000610760516004811161386c578015610f3757905b60c08102610780018051610be0526020810151610c00526040810151610c20526060810151610c40526080810151610c605260a0810151610c8052506000610be05114610f2c57610be0516101e052610c205161020052610c405161022052610b405161024052610c005161026052610c605161028052610b80516102a052610c80516102c052610f1b610ca0612efd565b610ca051610b8052610c0051610b40525b600101818118610e89575b5050610a80516101e052610aa05161020052610ae05161022052610ac05161024052610b405161026052610b805161028052610f71611917565b6370a08231610c005230610c20526020610c006024610c1c610b00515afa610f9e573d600060003e3d6000fd5b60203d1061386c57610c0051610be05261012435610be051101561102257600d610c00527f4869676820536c69707061676500000000000000000000000000000000000000610c2052610c0050610c005180610c200181600003601f1636823750506308c379a0610bc0526020610be052601f19601f610c00510116604401610bdcfd5b610a8051600a55610aa051600d55610ae051600b55610b0051600e55610b2051600c55610a8051610bc0517fc7608c7cbf6d7ffd24200190c130acda0eed7076060d1e6ec0e8a71a16b9d62742610c0052610ba051610c2052610be051610c40526060610c00a36000600055005b636865a73781186110bd573461386c57601054331861386c57336040526004356060526110bb611577565b005b639ffaf1e9811861113d576004358060a01c61386c576040523461386c57601054606052606051331861110957600060405114156110fc57600061110c565b604051606051141561110c565b60005b1561386c576000600f6060516020526000526040600020556001600f33602052600052604060002055604051601055005b63b5de1ed68118611188576004358060a01c61386c576040526024358060011c61386c576060523461386c57601054331861386c57606051600f604051602052600052604060002055005b63949ab87d81186111b7576004358060a01c61386c576040523461386c57601054331861386c57604051600a55005b6373b265e981186111e6576004358060a01c61386c576040523461386c57601054331861386c57604051600d55005b63553a662b8118611215576004358060081c61386c576040523461386c57601054331861386c57604051600b55005b63820019bf8118611244576004358060011c61386c576040523461386c57601054331861386c57604051600c55005b63cf3e7aca8118611273576004358060a01c61386c576040523461386c57601054331861386c57604051600e55005b63eacbecb981186112a2576004358060a01c61386c576040523461386c57601054331861386c57604051601155005b6302329a2981186112d1576004358060011c61386c576040523461386c57601054331861386c57604051600955005b6306fdde038118611353573461386c5760208060405280604001600154808252602082016000602083601f01046002811161386c57801561132557905b80600201546020820284015260010181811861130e575b50505050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186113a8573461386c57602080604052806040016004548082526020820160055481525050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b6370a0823181186113e0576004358060a01c61386c576040523461386c57600660405160205260005260406000205460605260206060f35b63dd62ed3e8118611437576004358060a01c61386c576040526024358060a01c61386c576060523461386c576007604051602052600052604060002080606051602052600052604060002090505460805260206080f35b6318160ddd8118611453573461386c5760085460405260206040f35b635c975abb811861146f573461386c5760095460405260206040f35b631423fc81811861148b573461386c57600a5460405260206040f35b63b99476e581186114a7573461386c57600b5460405260206040f35b63ee71afd981186114c3573461386c57600c5460405260206040f35b6394c2dd1c81186114df573461386c57600d5460405260206040f35b638cac896181186114fb573461386c57600e5460405260206040f35b63fa52c7d88118611533576004358060a01c61386c576040523461386c57600f60405160205260005260406000205460605260206060f35b63f851a440811861154f573461386c5760105460405260206040f35b63530b33c5811861156b573461386c5760115460405260206040f35b5061157556611575565b005b60006040511461386c57600854606051818183011061386c5780820190509050600855600660405160205260005260406000208054606051818183011061386c578082019050905081555060405160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60605160805260206080a3565b60006040511461386c5760085460605180821061386c578082039050905060085560066040516020526000526040600020805460605180821061386c578082039050905081555060006040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60605160805260206080a3565b6000600460e0527f095ea7b3000000000000000000000000000000000000000000000000000000006101005260e08051602082018361014001815181525050808301925050506060518161014001526020810190506080518161014001526020810190508061012052610120505060206101c06101205161014060006040515af16116ff573d600060003e3d6000fd5b6101a060203d8082116117125781611714565b805b90509050815280518060a05260208201805160c052505050600060a051111561174a5760c05160a0516020036008021c1561386c575b565b6000600460e0527fa9059cbb000000000000000000000000000000000000000000000000000000006101005260e08051602082018361014001815181525050808301925050506060518161014001526020810190506080518161014001526020810190508061012052610120505060206101c06101205161014060006040515af16117dc573d600060003e3d6000fd5b6101a060203d8082116117ef57816117f1565b805b90509050815280518060a05260208201805160c052505050600060a05111156118275760c05160a0516020036008021c1561386c575b565b60006004610100527f23b872dd000000000000000000000000000000000000000000000000000000006101205261010080516020820183610160018151815250508083019250505060605181610160015260208101905060805181610160015260208101905060a0518161016001526020810190508061014052610140505060206102006101405161016060006040515af16118ca573d600060003e3d6000fd5b6101e060203d8082116118dd57816118df565b805b90509050815280518060c05260208201805160e052505050600060c05111156119155760e05160c0516020036008021c1561386c575b565b6101e0516102a05260006102c0526102c051610420526102405115611e2c57600161024051186119ed5760006000816104600152602081019050610280518161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60026102405118611aa45760006000816104600152602081019050600081610460015260208101905061028051816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60036102405118611b5b5760006000816104600152602081019050600081610460015260208101905060008161046001526020810190506102805181610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60046102405118611c125760006000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050610280518161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60056102405118611cc95760006000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905061028051816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60066102405118611d805760006000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506102805181610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60006000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050610280518161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60006102805181610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa9050905050505b6000610440526001610200511861245a5760026102205118611fad576004610480527fee22be23000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160601161386c5760606104a060606102e060045afa5060606104805261048080516020820183610520018281848460045afa90505050808301925050506001816105200152602081019050806105005261050090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60036102205118612075576004610480527f2b6e993a000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160801161386c5760806104a060806102e060045afa5060806104805261048080516020820183610540018281848460045afa90505050808301925050506001816105400152602081019050806105205261052090508051806102c05260208201816102e0838360045afa905090505050612dd2565b6004610220511861213d576004610480527fdc3a2d81000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160a01161386c5760a06104a060a06102e060045afa5060a06104805261048080516020820183610560018281848460045afa90505050808301925050506001816105600152602081019050806105405261054090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60056102205118612205576004610480527fc25fd565000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160c01161386c5760c06104a060c06102e060045afa5060c06104805261048080516020820183610580018281848460045afa90505050808301925050506001816105800152602081019050806105605261056090508051806102c05260208201816102e0838360045afa905090505050612dd2565b600661022051186122cd576004610480527f12b7ef1e000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160e01161386c5760e06104a060e06102e060045afa5060e061048052610480805160208201836105a0018281848460045afa90505050808301925050506001816105a00152602081019050806105805261058090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60076102205118612399576004610480527fd3c347e8000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c0516101001161386c576101006104a06101006102e060045afa5061010061048052610480805160208201836105c0018281848460045afa90505050808301925050506001816105c00152602081019050806105a0526105a090508051806102c05260208201816102e0838360045afa905090505050612dd2565b6004610480527ffca08421000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c0516101201161386c576101206104a06101206102e060045afa5061012061048052610480805160208201836105e0018281848460045afa90505050808301925050506001816105e00152602081019050806105c0526105c090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60115461020051186129e95760026102205118612530576004610480527fd2fb954c000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a0518161052001526020810190506102c05160601161386c5760606104a060606102e060045afa5060606104805261048080516020820183610520018281848460045afa9050505080830192505050806105005261050090508051806102c05260208201816102e0838360045afa905090505050612dd2565b600361022051186125fa576004610480527fa3185179000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a0518161054001526020810190506102c05160801161386c5760806104a060806102e060045afa5060806104805261048080516020820183610540018281848460045afa9050505080830192505050806105205261052090508051806102c05260208201816102e0838360045afa905090505050612dd2565b600461022051186126c4576004610480527f384e03db000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a0518161056001526020810190506102c05160a01161386c5760a06104a060a06102e060045afa5060a06104805261048080516020820183610560018281848460045afa9050505080830192505050806105405261054090508051806102c05260208201816102e0838360045afa905090505050612dd2565b6005610220511861278e576004610480527f1b61222b000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a0518161058001526020810190506102c05160c01161386c5760c06104a060c06102e060045afa5060c06104805261048080516020820183610580018281848460045afa9050505080830192505050806105605261056090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60066102205118612858576004610480527f0dd95c5e000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a051816105a001526020810190506102c05160e01161386c5760e06104a060e06102e060045afa5060e061048052610480805160208201836105a0018281848460045afa9050505080830192505050806105805261058090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60076102205118612926576004610480527f4a028566000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a051816105c001526020810190506102c0516101001161386c576101006104a06101006102e060045afa5061010061048052610480805160208201836105c0018281848460045afa9050505080830192505050806105a0526105a090508051806102c05260208201816102e0838360045afa905090505050612dd2565b6004610480527fe2c87606000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a051816105e001526020810190506102c0516101201161386c576101206104a06101206102e060045afa5061012061048052610480805160208201836105e0018281848460045afa9050505080830192505050806105c0526105c090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60026102205118612a79576004610480527f0b4c7e4d000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160601161386c5760606104a060606102e060045afa506060610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60036102205118612b09576004610480527f4515cef3000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160801161386c5760806104a060806102e060045afa506080610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60046102205118612b99576004610480527f029b2f34000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160a01161386c5760a06104a060a06102e060045afa5060a0610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60056102205118612c29576004610480527f84738499000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160c01161386c5760c06104a060c06102e060045afa5060c0610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60066102205118612cb9576004610480527f3f8a44f3000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160e01161386c5760e06104a060e06102e060045afa5060e0610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60076102205118612d4d576004610480527fa5918ca1000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c0516101001161386c576101006104a06101006102e060045afa50610100610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b6004610480527f52d7f317000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c0516101201161386c576101206104a06101206102e060045afa50610120610480526104808051806102c05260208201816102e0838360045afa9050905050505b6000610200511415612de5576000612dee565b60016102005114155b15612dfc57610200516102a0525b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118612e7f57600061044051816104a001610460518152508082019150506102c051816104a0018181836102e060045afa50508082019150508061048052610480505060006000610480516104a0610280516102a0515af1612efb573d600060003e3d6000fd612efb565b610260516040526102a05160605261028051608052612e9c61166f565b600061044051816104a001610460518152508082019150506102c051816104a0018181836102e060045afa50508082019150508061048052610480505060006000610480516104a060006102a0515af1612efb573d600060003e3d6000fd5b565b60006102e05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118612fb25773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102405118612fa857632e1a7d4d610300526102a0516103205273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23b1561386c5760006000602461031c600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1612f9c573d600060003e3d6000fd5b6102a0518152506133fb565b476102e05261309b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102405118612fef5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102605114612ff2565b60005b613038576370a082316103005230610320526020610300602461031c610260515afa613023573d600060003e3d6000fd5b60203d1061386c57610300516102e05261309b565b63d0e30db06103005273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23b1561386c5760006000600461031c6102a05173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af161308f573d600060003e3d6000fd5b6102a0518152506133fb565b6102c0516131e75773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610240511861311857633df0212461030052610200516103205261022051610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c6102a0516101e0515af1613369573d600060003e3d6000fd613369565b610240516040526101e0516060526102a05160805261313561166f565b6102805161319257633df0212461030052610200516103205261022051610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c60006101e0515af1613369573d600060003e3d6000fd613369565b63a6417ed661030052610200516103205261022051610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c60006101e0515af1613369573d600060003e3d6000fd613369565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610240511861327257635b41b9086103005261020051806000811261386c5790506103205261022051806000811261386c579050610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c6102a0516101e0515af1613369573d600060003e3d6000fd613369565b610240516040526101e0516060526102a05160805261328f61166f565b6102805161330257635b41b9086103005261020051806000811261386c5790506103205261022051806000811261386c579050610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c60006101e0515af1613369573d600060003e3d6000fd613369565b6365b2489b6103005261020051806000811261386c5790506103205261022051806000811261386c579050610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c60006101e0515af1613369573d600060003e3d6000fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61026051186133a357476102e05180821061386c57808203905090506102e0526133f3565b6370a082316103005230610320526020610300602461031c610260515afa6133d0573d600060003e3d6000fd5b60203d1061386c57610300516102e05180821061386c57808203905090506102e0525b6102e0518152505b565b600d54610280526370a082316102c052306102e05260206102c060246102dc610220515afa613431573d600060003e3d6000fd5b60203d1061386c576102c0516102a052600c5461361e57600161028051186134c3576101e051604052610200516060526102605160805261347061166f565b63517a55a36102c052610260516102e0526102405161030052600161032052600161034052610200513b1561386c576000600060846102dc6000610200515af161381c573d600060003e3d6000fd61381c565b61028051156135b457601154610280511861354a576101e05160405261028051606052610260516080526134f561166f565b6329ed28626102c052610200516102e05261026051610300526102405161032052600161034052610280513b1561386c576000600060846102dc6000610280515af161381c573d600060003e3d6000fd61381c565b6101e051604052610280516060526102605160805261356761166f565b631a4d01d26102c052610260516102e0526102405161030052600161032052610280513b1561386c576000600060646102dc6000610280515af161381c573d600060003e3d6000fd61381c565b6101e05160405261020051606052610260516080526135d161166f565b631a4d01d26102c052610260516102e0526102405161030052600161032052610200513b1561386c576000600060646102dc6000610200515af161381c573d600060003e3d6000fd61381c565b600161028051186136a4576101e051604052610200516060526102605160805261364661166f565b638f15b6b56102c052610260516102e05261024051806000811261386c57905061030052600161032052600161034052610200513b1561386c576000600060846102dc6000610200515af161381c573d600060003e3d6000fd61381c565b61028051156137ab576011546102805118613736576101e05160405261028051606052610260516080526136d661166f565b63c5bdcd096102c052610200516102e052610260516103005261024051806000811261386c57905061032052600161034052610280513b1561386c576000600060846102dc6000610280515af161381c573d600060003e3d6000fd61381c565b6101e051604052610280516060526102605160805261375361166f565b63f1dc3cc96102c052610260516102e05261024051806000811261386c57905061030052600161032052610280513b1561386c576000600060646102dc6000610280515af161381c573d600060003e3d6000fd61381c565b6101e05160405261020051606052610260516080526137c861166f565b63f1dc3cc96102c052610260516102e05261024051806000811261386c57905061030052600161032052610200513b1561386c576000600060646102dc6000610200515af161381c573d600060003e3d6000fd5b6370a082316102c052306102e05260206102c060246102dc610220515afa613849573d600060003e3d6000fd5b60203d1061386c576102c0516102a05180821061386c5780820390509050815250565b600080fd005b600080fd00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000005a6a4d54456819380173272a5e8e9b9904bdf41b000000000000000000000000a79828df1850e8a3a3064576f380d90aecdd335900000000000000000000000000000000000000000000000000000000000000040000000000000000000000005a6a4d54456819380173272a5e8e9b9904bdf41b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f437572766520415059205661756c74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034341560000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x600436101561000d57611575565b60003560e01c63d291525e81186104ac576004358060a01c61386c576107205260443580600f0b811861386c5761074052606435600401600481351161386c57803580610760526000816004811161386c5780156100ef57905b60c081026107800160c08202602086010180358060a01c61386c57825260208101358060a01c61386c576020830152604081013580600f0b811861386c576040830152606081013580600f0b811861386c57606083015260808101358060011c61386c57608083015260a08101358060011c61386c5760a08301525050600101818118610067575b5050505060005461386c5760016000556009541561016d576006610a80527f5061757365640000000000000000000000000000000000000000000000000000610aa052610a8050610a805180610aa00181600003601f1636823750506308c379a0610a40526020610a6052601f19601f610a80510116604401610a5cfd5b61072051604052336060523060805260243560a05261018a611829565b61072051610a8052602435610aa0526000610760516004811161386c57801561025d57905b60c08102610780018051610ac0526020810151610ae0526040810151610b00526060810151610b20526080810151610b405260a0810151610b6052506000610ac0511461025257610ac0516101e052610b005161020052610b205161022052610a805161024052610ae05161026052610b405161028052610aa0516102a052610b60516102c052610241610b80612efd565b610b8051610aa052610ae051610a80525b6001018181186101af575b5050600e54610ac0526370a08231610b005230610b20526020610b006024610b1c610ac0515afa610293573d600060003e3d6000fd5b60203d1061386c57610b0051610ae052600a546101e052600d5461020052600b54610220526107405161024052610a805161026052610aa051610280526102d8611917565b6370a08231610b205230610b40526020610b206024610b3c610ac0515afa610305573d600060003e3d6000fd5b60203d1061386c57610b2051610b0052610ae051610b00511161038857600e610b20527f4465706f736974206661696c6564000000000000000000000000000000000000610b4052610b2050610b205180610b400181600003601f1636823750506308c379a0610ae0526020610b0052601f19601f610b20510116604401610afcfd5b600854610b20526000610b205111156103df57610b0051610ae05180821061386c5780820390509050610b205180820282158284830414171561386c5790509050610ae05180801561386c57820490509050610b00525b608435610b0051101561045257600d610b40527f4869676820536c69707061676500000000000000000000000000000000000000610b6052610b4050610b405180610b600181600003601f1636823750506308c379a0610b00526020610b2052601f19601f610b40510116604401610b1cfd5b33604052610b0051606052610465611577565b33610720517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7602435610b4052610b0051610b60526040610b40a36020610b006000600055f35b63313ce56781186104c7573461386c57601260405260206040f35b63a9059cbb8118610576576004358060a01c61386c576040523461386c5760006040511461386c576006336020526000526040600020805460243580821061386c5780820390509050815550600660405160205260005260406000208054602435818183011061386c5780820190509050815550604051337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60243560605260206060a3600160605260206060f35b6323b872dd811861066c576004358060a01c61386c576040526024358060a01c61386c576060523461386c5760006060511461386c5760066040516020526000526040600020805460443580821061386c5780820390509050815550600660605160205260005260406000208054604435818183011061386c578082019050905081555060076040516020526000526040600020803360205260005260406000209050805460443580821061386c57808203905090508155506060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60443560805260206080a3600160805260206080f35b63095ea7b3811861071e576004358060a01c61386c576040523461386c57602435156106b8576007336020526000526040600020806040516020526000526040600020905054156106bb565b60015b1561386c576024356007336020526000526040600020806040516020526000526040600020905055604051337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560243560605260206060a3600160605260206060f35b633950935181186107d6576004358060a01c61386c576040523461386c576007336020526000526040600020806040516020526000526040600020905054606052606051602435818183011061386c57808201905090506060526060516007336020526000526040600020806040516020526000526040600020905055604051337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560605160805260206080a3600160805260206080f35b63a457c2d7811861088c576004358060a01c61386c576040523461386c57600733602052600052604060002080604051602052600052604060002090505460605260605160243580821061386c57808203905090506060526060516007336020526000526040600020806040516020526000526040600020905055604051337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560605160805260206080a3600160805260206080f35b63bfd930de8118610c16576004358060a01c61386c576103a05260443580600f0b811861386c576103c052606435600401600481351161386c578035806103e0526000816004811161386c57801561096857905b60c081026104000160c08202602086010180358060a01c61386c57825260208101358060a01c61386c576020830152604081013580600f0b811861386c576040830152606081013580600f0b811861386c57606083015260808101358060011c61386c57608083015260a08101358060011c61386c5760a083015250506001018181186108e0575b505050503461386c5760005461386c5760016000556103a05161070052600e54610720526024356370a082316107605230610780526020610760602461077c610720515afa6109bc573d600060003e3d6000fd5b60203d1061386c576107605180820282158284830414171561386c579050905060085480801561386c5782049050905061074052600a5461076052610720516101e052610760516102005261070051610220526103c051610240526107405161026052610a2a6107806133fd565b610780516107405233604052602435606052610a446115f5565b60006103e0516004811161386c578015610b0857905b60c081026104000180516107805260208101516107a05260408101516107c05260608101516107e05260808101516108005260a0810151610820525060006107805114610afd57610780516101e0526107c051610200526107e0516102205261070051610240526107a051610260526108005161028052610740516102a052610820516102c052610aec610840612efd565b61084051610740526107a051610700525b600101818118610a5a575b5050608435610740511015610b7d57600d610780527f4869676820536c697070616765000000000000000000000000000000000000006107a0526107805061078051806107a00181600003601f1636823750506308c379a061074052602061076052601f19601f61078051011660440161075cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6107005118610bb557600060006000600061074051336000f11561386c57610bcf565b610700516040523360605261074051608052610bcf61174c565b33610700517ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb56761074051610780526024356107a0526040610780a360206107406000600055f35b63ebfff1638118611090576004358060a01c61386c576107205260243580600f0b811861386c5761074052604435600401600481351161386c57803580610760526000816004811161386c578015610cf257905b60c081026107800160c08202602086010180358060a01c61386c57825260208101358060a01c61386c576020830152604081013580600f0b811861386c576040830152606081013580600f0b811861386c57606083015260808101358060011c61386c57608083015260a08101358060011c61386c5760a08301525050600101818118610c6a575b505050506064358060a01c61386c57610a80526084358060a01c61386c57610aa05260a43580600f0b811861386c57610ac05260c4358060081c61386c57610ae05260e4358060a01c61386c57610b0052610104358060011c61386c57610b20523461386c5760005461386c576001600055600f33602052600052604060002054610ddd57600d610b40527f4e6f742056616c696461746f7200000000000000000000000000000000000000610b6052610b4050610b405180610b600181600003601f1636823750506308c379a0610b00526020610b2052601f19601f610b40510116604401610b1cfd5b61072051610b4052600e54610b60526370a08231610ba05230610bc0526020610ba06024610bbc610b60515afa610e19573d600060003e3d6000fd5b60203d1061386c57610ba051610b8052610b8051610ba052600a54610bc052610b60516101e052610bc05161020052610b4051610220526107405161024052610b805161026052610e6b610be06133fd565b610be051610b80526000610760516004811161386c578015610f3757905b60c08102610780018051610be0526020810151610c00526040810151610c20526060810151610c40526080810151610c605260a0810151610c8052506000610be05114610f2c57610be0516101e052610c205161020052610c405161022052610b405161024052610c005161026052610c605161028052610b80516102a052610c80516102c052610f1b610ca0612efd565b610ca051610b8052610c0051610b40525b600101818118610e89575b5050610a80516101e052610aa05161020052610ae05161022052610ac05161024052610b405161026052610b805161028052610f71611917565b6370a08231610c005230610c20526020610c006024610c1c610b00515afa610f9e573d600060003e3d6000fd5b60203d1061386c57610c0051610be05261012435610be051101561102257600d610c00527f4869676820536c69707061676500000000000000000000000000000000000000610c2052610c0050610c005180610c200181600003601f1636823750506308c379a0610bc0526020610be052601f19601f610c00510116604401610bdcfd5b610a8051600a55610aa051600d55610ae051600b55610b0051600e55610b2051600c55610a8051610bc0517fc7608c7cbf6d7ffd24200190c130acda0eed7076060d1e6ec0e8a71a16b9d62742610c0052610ba051610c2052610be051610c40526060610c00a36000600055005b636865a73781186110bd573461386c57601054331861386c57336040526004356060526110bb611577565b005b639ffaf1e9811861113d576004358060a01c61386c576040523461386c57601054606052606051331861110957600060405114156110fc57600061110c565b604051606051141561110c565b60005b1561386c576000600f6060516020526000526040600020556001600f33602052600052604060002055604051601055005b63b5de1ed68118611188576004358060a01c61386c576040526024358060011c61386c576060523461386c57601054331861386c57606051600f604051602052600052604060002055005b63949ab87d81186111b7576004358060a01c61386c576040523461386c57601054331861386c57604051600a55005b6373b265e981186111e6576004358060a01c61386c576040523461386c57601054331861386c57604051600d55005b63553a662b8118611215576004358060081c61386c576040523461386c57601054331861386c57604051600b55005b63820019bf8118611244576004358060011c61386c576040523461386c57601054331861386c57604051600c55005b63cf3e7aca8118611273576004358060a01c61386c576040523461386c57601054331861386c57604051600e55005b63eacbecb981186112a2576004358060a01c61386c576040523461386c57601054331861386c57604051601155005b6302329a2981186112d1576004358060011c61386c576040523461386c57601054331861386c57604051600955005b6306fdde038118611353573461386c5760208060405280604001600154808252602082016000602083601f01046002811161386c57801561132557905b80600201546020820284015260010181811861130e575b50505050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186113a8573461386c57602080604052806040016004548082526020820160055481525050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b6370a0823181186113e0576004358060a01c61386c576040523461386c57600660405160205260005260406000205460605260206060f35b63dd62ed3e8118611437576004358060a01c61386c576040526024358060a01c61386c576060523461386c576007604051602052600052604060002080606051602052600052604060002090505460805260206080f35b6318160ddd8118611453573461386c5760085460405260206040f35b635c975abb811861146f573461386c5760095460405260206040f35b631423fc81811861148b573461386c57600a5460405260206040f35b63b99476e581186114a7573461386c57600b5460405260206040f35b63ee71afd981186114c3573461386c57600c5460405260206040f35b6394c2dd1c81186114df573461386c57600d5460405260206040f35b638cac896181186114fb573461386c57600e5460405260206040f35b63fa52c7d88118611533576004358060a01c61386c576040523461386c57600f60405160205260005260406000205460605260206060f35b63f851a440811861154f573461386c5760105460405260206040f35b63530b33c5811861156b573461386c5760115460405260206040f35b5061157556611575565b005b60006040511461386c57600854606051818183011061386c5780820190509050600855600660405160205260005260406000208054606051818183011061386c578082019050905081555060405160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60605160805260206080a3565b60006040511461386c5760085460605180821061386c578082039050905060085560066040516020526000526040600020805460605180821061386c578082039050905081555060006040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60605160805260206080a3565b6000600460e0527f095ea7b3000000000000000000000000000000000000000000000000000000006101005260e08051602082018361014001815181525050808301925050506060518161014001526020810190506080518161014001526020810190508061012052610120505060206101c06101205161014060006040515af16116ff573d600060003e3d6000fd5b6101a060203d8082116117125781611714565b805b90509050815280518060a05260208201805160c052505050600060a051111561174a5760c05160a0516020036008021c1561386c575b565b6000600460e0527fa9059cbb000000000000000000000000000000000000000000000000000000006101005260e08051602082018361014001815181525050808301925050506060518161014001526020810190506080518161014001526020810190508061012052610120505060206101c06101205161014060006040515af16117dc573d600060003e3d6000fd5b6101a060203d8082116117ef57816117f1565b805b90509050815280518060a05260208201805160c052505050600060a05111156118275760c05160a0516020036008021c1561386c575b565b60006004610100527f23b872dd000000000000000000000000000000000000000000000000000000006101205261010080516020820183610160018151815250508083019250505060605181610160015260208101905060805181610160015260208101905060a0518161016001526020810190508061014052610140505060206102006101405161016060006040515af16118ca573d600060003e3d6000fd5b6101e060203d8082116118dd57816118df565b805b90509050815280518060c05260208201805160e052505050600060c05111156119155760e05160c0516020036008021c1561386c575b565b6101e0516102a05260006102c0526102c051610420526102405115611e2c57600161024051186119ed5760006000816104600152602081019050610280518161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60026102405118611aa45760006000816104600152602081019050600081610460015260208101905061028051816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60036102405118611b5b5760006000816104600152602081019050600081610460015260208101905060008161046001526020810190506102805181610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60046102405118611c125760006000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050610280518161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60056102405118611cc95760006000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905061028051816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60066102405118611d805760006000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506102805181610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60006000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050610280518161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa905090505050611ed4565b60006102805181610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050600081610460015260208101905060008161046001526020810190506000816104600152602081019050806104405261044090508051806102c05260208201816102e0838360045afa9050905050505b6000610440526001610200511861245a5760026102205118611fad576004610480527fee22be23000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160601161386c5760606104a060606102e060045afa5060606104805261048080516020820183610520018281848460045afa90505050808301925050506001816105200152602081019050806105005261050090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60036102205118612075576004610480527f2b6e993a000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160801161386c5760806104a060806102e060045afa5060806104805261048080516020820183610540018281848460045afa90505050808301925050506001816105400152602081019050806105205261052090508051806102c05260208201816102e0838360045afa905090505050612dd2565b6004610220511861213d576004610480527fdc3a2d81000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160a01161386c5760a06104a060a06102e060045afa5060a06104805261048080516020820183610560018281848460045afa90505050808301925050506001816105600152602081019050806105405261054090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60056102205118612205576004610480527fc25fd565000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160c01161386c5760c06104a060c06102e060045afa5060c06104805261048080516020820183610580018281848460045afa90505050808301925050506001816105800152602081019050806105605261056090508051806102c05260208201816102e0838360045afa905090505050612dd2565b600661022051186122cd576004610480527f12b7ef1e000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c05160e01161386c5760e06104a060e06102e060045afa5060e061048052610480805160208201836105a0018281848460045afa90505050808301925050506001816105a00152602081019050806105805261058090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60076102205118612399576004610480527fd3c347e8000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c0516101001161386c576101006104a06101006102e060045afa5061010061048052610480805160208201836105c0018281848460045afa90505050808301925050506001816105c00152602081019050806105a0526105a090508051806102c05260208201816102e0838360045afa905090505050612dd2565b6004610480527ffca08421000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102c0516101201161386c576101206104a06101206102e060045afa5061012061048052610480805160208201836105e0018281848460045afa90505050808301925050506001816105e00152602081019050806105c0526105c090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60115461020051186129e95760026102205118612530576004610480527fd2fb954c000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a0518161052001526020810190506102c05160601161386c5760606104a060606102e060045afa5060606104805261048080516020820183610520018281848460045afa9050505080830192505050806105005261050090508051806102c05260208201816102e0838360045afa905090505050612dd2565b600361022051186125fa576004610480527fa3185179000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a0518161054001526020810190506102c05160801161386c5760806104a060806102e060045afa5060806104805261048080516020820183610540018281848460045afa9050505080830192505050806105205261052090508051806102c05260208201816102e0838360045afa905090505050612dd2565b600461022051186126c4576004610480527f384e03db000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a0518161056001526020810190506102c05160a01161386c5760a06104a060a06102e060045afa5060a06104805261048080516020820183610560018281848460045afa9050505080830192505050806105405261054090508051806102c05260208201816102e0838360045afa905090505050612dd2565b6005610220511861278e576004610480527f1b61222b000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a0518161058001526020810190506102c05160c01161386c5760c06104a060c06102e060045afa5060c06104805261048080516020820183610580018281848460045afa9050505080830192505050806105605261056090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60066102205118612858576004610480527f0dd95c5e000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a051816105a001526020810190506102c05160e01161386c5760e06104a060e06102e060045afa5060e061048052610480805160208201836105a0018281848460045afa9050505080830192505050806105805261058090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60076102205118612926576004610480527f4a028566000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a051816105c001526020810190506102c0516101001161386c576101006104a06101006102e060045afa5061010061048052610480805160208201836105c0018281848460045afa9050505080830192505050806105a0526105a090508051806102c05260208201816102e0838360045afa905090505050612dd2565b6004610480527fe2c87606000000000000000000000000000000000000000000000000000000006104a052610480805180610440526020820180516104605250505060006102a051816105e001526020810190506102c0516101201161386c576101206104a06101206102e060045afa5061012061048052610480805160208201836105e0018281848460045afa9050505080830192505050806105c0526105c090508051806102c05260208201816102e0838360045afa905090505050612dd2565b60026102205118612a79576004610480527f0b4c7e4d000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160601161386c5760606104a060606102e060045afa506060610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60036102205118612b09576004610480527f4515cef3000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160801161386c5760806104a060806102e060045afa506080610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60046102205118612b99576004610480527f029b2f34000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160a01161386c5760a06104a060a06102e060045afa5060a0610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60056102205118612c29576004610480527f84738499000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160c01161386c5760c06104a060c06102e060045afa5060c0610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60066102205118612cb9576004610480527f3f8a44f3000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c05160e01161386c5760e06104a060e06102e060045afa5060e0610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b60076102205118612d4d576004610480527fa5918ca1000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c0516101001161386c576101006104a06101006102e060045afa50610100610480526104808051806102c05260208201816102e0838360045afa905090505050612dd2565b6004610480527f52d7f317000000000000000000000000000000000000000000000000000000006104a05261048080518061044052602082018051610460525050506102c0516101201161386c576101206104a06101206102e060045afa50610120610480526104808051806102c05260208201816102e0838360045afa9050905050505b6000610200511415612de5576000612dee565b60016102005114155b15612dfc57610200516102a0525b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118612e7f57600061044051816104a001610460518152508082019150506102c051816104a0018181836102e060045afa50508082019150508061048052610480505060006000610480516104a0610280516102a0515af1612efb573d600060003e3d6000fd612efb565b610260516040526102a05160605261028051608052612e9c61166f565b600061044051816104a001610460518152508082019150506102c051816104a0018181836102e060045afa50508082019150508061048052610480505060006000610480516104a060006102a0515af1612efb573d600060003e3d6000fd5b565b60006102e05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118612fb25773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102405118612fa857632e1a7d4d610300526102a0516103205273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23b1561386c5760006000602461031c600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1612f9c573d600060003e3d6000fd5b6102a0518152506133fb565b476102e05261309b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102405118612fef5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102605114612ff2565b60005b613038576370a082316103005230610320526020610300602461031c610260515afa613023573d600060003e3d6000fd5b60203d1061386c57610300516102e05261309b565b63d0e30db06103005273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23b1561386c5760006000600461031c6102a05173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af161308f573d600060003e3d6000fd5b6102a0518152506133fb565b6102c0516131e75773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610240511861311857633df0212461030052610200516103205261022051610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c6102a0516101e0515af1613369573d600060003e3d6000fd613369565b610240516040526101e0516060526102a05160805261313561166f565b6102805161319257633df0212461030052610200516103205261022051610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c60006101e0515af1613369573d600060003e3d6000fd613369565b63a6417ed661030052610200516103205261022051610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c60006101e0515af1613369573d600060003e3d6000fd613369565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610240511861327257635b41b9086103005261020051806000811261386c5790506103205261022051806000811261386c579050610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c6102a0516101e0515af1613369573d600060003e3d6000fd613369565b610240516040526101e0516060526102a05160805261328f61166f565b6102805161330257635b41b9086103005261020051806000811261386c5790506103205261022051806000811261386c579050610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c60006101e0515af1613369573d600060003e3d6000fd613369565b6365b2489b6103005261020051806000811261386c5790506103205261022051806000811261386c579050610340526102a051610360526000610380526101e0513b1561386c5760006000608461031c60006101e0515af1613369573d600060003e3d6000fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61026051186133a357476102e05180821061386c57808203905090506102e0526133f3565b6370a082316103005230610320526020610300602461031c610260515afa6133d0573d600060003e3d6000fd5b60203d1061386c57610300516102e05180821061386c57808203905090506102e0525b6102e0518152505b565b600d54610280526370a082316102c052306102e05260206102c060246102dc610220515afa613431573d600060003e3d6000fd5b60203d1061386c576102c0516102a052600c5461361e57600161028051186134c3576101e051604052610200516060526102605160805261347061166f565b63517a55a36102c052610260516102e0526102405161030052600161032052600161034052610200513b1561386c576000600060846102dc6000610200515af161381c573d600060003e3d6000fd61381c565b61028051156135b457601154610280511861354a576101e05160405261028051606052610260516080526134f561166f565b6329ed28626102c052610200516102e05261026051610300526102405161032052600161034052610280513b1561386c576000600060846102dc6000610280515af161381c573d600060003e3d6000fd61381c565b6101e051604052610280516060526102605160805261356761166f565b631a4d01d26102c052610260516102e0526102405161030052600161032052610280513b1561386c576000600060646102dc6000610280515af161381c573d600060003e3d6000fd61381c565b6101e05160405261020051606052610260516080526135d161166f565b631a4d01d26102c052610260516102e0526102405161030052600161032052610200513b1561386c576000600060646102dc6000610200515af161381c573d600060003e3d6000fd61381c565b600161028051186136a4576101e051604052610200516060526102605160805261364661166f565b638f15b6b56102c052610260516102e05261024051806000811261386c57905061030052600161032052600161034052610200513b1561386c576000600060846102dc6000610200515af161381c573d600060003e3d6000fd61381c565b61028051156137ab576011546102805118613736576101e05160405261028051606052610260516080526136d661166f565b63c5bdcd096102c052610200516102e052610260516103005261024051806000811261386c57905061032052600161034052610280513b1561386c576000600060846102dc6000610280515af161381c573d600060003e3d6000fd61381c565b6101e051604052610280516060526102605160805261375361166f565b63f1dc3cc96102c052610260516102e05261024051806000811261386c57905061030052600161032052610280513b1561386c576000600060646102dc6000610280515af161381c573d600060003e3d6000fd61381c565b6101e05160405261020051606052610260516080526137c861166f565b63f1dc3cc96102c052610260516102e05261024051806000811261386c57905061030052600161032052610200513b1561386c576000600060646102dc6000610200515af161381c573d600060003e3d6000fd5b6370a082316102c052306102e05260206102c060246102dc610220515afa613849573d600060003e3d6000fd5b60203d1061386c576102c0516102a05180821061386c5780820390509050815250565b600080fd

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

00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000005a6a4d54456819380173272a5e8e9b9904bdf41b000000000000000000000000a79828df1850e8a3a3064576f380d90aecdd335900000000000000000000000000000000000000000000000000000000000000040000000000000000000000005a6a4d54456819380173272a5e8e9b9904bdf41b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f437572766520415059205661756c74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034341560000000000000000000000000000000000000000000000000000000000
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000005a6a4d54456819380173272a5e8e9b9904bdf41b
Arg [3] : 000000000000000000000000a79828df1850e8a3a3064576f380d90aecdd3359
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 0000000000000000000000005a6a4d54456819380173272a5e8e9b9904bdf41b
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [8] : 437572766520415059205661756c740000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 4341560000000000000000000000000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.