Contract 0xF16D312d119c13dD27fD0dC814b0bCdcaAa62dfD

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x0008b209c9101be4162d8052a552b9227d978089ef74f1634ead2ea6282a367176017102021-05-21 12:33:2924 days 14 hrs ago0x6b5483d1b2fb80340c6c55d6fb73bcfcce147f05 IN  Belt Finance: StableSwap Contract0 BNB0.02112642
0xa310c1298b131d5fdab6e5522af3d7d2a0f6c890320867c850062393f2d57d4575913382021-05-21 3:52:1324 days 23 hrs ago0x6bd06bc0238f83de7c6028d51f084eb7d6771c54 IN  Belt Finance: StableSwap Contract0 BNB0.02097558
0xf543f578de06863c4a54c9d89e5fd21cd29245dca22d466c2d12de8b8897bade75906772021-05-21 3:18:4524 days 23 hrs ago0x16d088a79d7d36213618263184783fb4d6375e33 IN  Belt Finance: StableSwap Contract0 BNB0.022802745
0x39b286c0a403eddf43dcc1e188a49e6e76895259ecabee1806344ef7c64a36cb75867682021-05-21 0:02:4025 days 3 hrs ago0x2b92f3d5481d5436231f8f120b8b36eac41ea7e5 IN  Belt Finance: StableSwap Contract0 BNB0.02096485
0xb0d72cc0203c50e659f96930def27e79524c96ded646253f1a47b2073ab701ef75853182021-05-20 22:49:1125 days 4 hrs ago0x88e8153459c578e5e858adde14a2692ecf922aac IN  Belt Finance: StableSwap Contract0 BNB0.01897731
0xc9c30200cd672c437db582f35b6b8a7f12a7d97c5d21c60ea7432aa58b33773f75817402021-05-20 19:50:1725 days 7 hrs ago0xb48a4b9ccee3e17bec7bb311ba25154c69445ada IN  Belt Finance: StableSwap Contract0 BNB0.024560675
0x3b1b7fe4b721db4718533a52e4804447f8781033a6427e56578a6b4402fd792875804602021-05-20 18:46:1725 days 8 hrs ago0x91cb747cbc8566d3c1afdef14f1216eced668994 IN  Belt Finance: StableSwap Contract0 BNB0.019572275
0xc33fc40784e69acf69b3c63c972ebc0592795222eefd770f1374f95fa609dc6c75780182021-05-20 16:44:0925 days 10 hrs ago0x19b4c18761ba8a9ca225e8020dc41eab048d2502 IN  Belt Finance: StableSwap Contract0 BNB0.01921318
0x7272ee2e5b249080d32b18234e2d08cb3bfdbbb186d25b198180186580fc7cd775763682021-05-20 15:21:2425 days 11 hrs ago0x5b16a16f684dc15cd591ffaabca0945f0290e115 IN  Belt Finance: StableSwap Contract0 BNB0.021506067
0x4301bf6ef72fafeebe8b9bf0fa2337631d7e8fe55d45411040c8ed8ed8fb036975754792021-05-20 14:36:5625 days 12 hrs ago0x01ca6f9303d3016f636127e2495d7d737bb6bc2c IN  Belt Finance: StableSwap Contract0 BNB0.00088954
0xaa30303199c3b98602e568dd771ac56cb39eaa4bdaf7c6174bb1ad03bed2d22875754572021-05-20 14:35:5025 days 12 hrs ago0x01ca6f9303d3016f636127e2495d7d737bb6bc2c IN  Belt Finance: StableSwap Contract0 BNB0.02287334
0xdeed1d48e7f14c5a9f2a95b53b80f9d8ff8508fe2a982cb722cce0ae0f0f059375754202021-05-20 14:33:5925 days 12 hrs ago0x01ca6f9303d3016f636127e2495d7d737bb6bc2c IN  Belt Finance: StableSwap Contract0 BNB0.01911297
0xea419f72e10a62722ed5ab43a28ae30e22b97b4a2efe919894efb9a8a8fd413475739642021-05-20 13:20:0425 days 13 hrs ago0x02d29459561f355590228e24d1d7da8e9ac013b4 IN  Belt Finance: StableSwap Contract0 BNB0.019543065
0xe82ac5cf14005de0c2c0153f4ef264c4bc0b6b1d07840fa871804b5cb4873ac875725752021-05-20 12:10:2725 days 14 hrs ago0xa95769cb440a938ecd703055027acf4762d8591a IN  Belt Finance: StableSwap Contract0 BNB0.01927837
0x523f2340943b1deec1b2340fca6e3f08cef4553569eef528a9a0391cd442f0d375720072021-05-20 11:41:5725 days 15 hrs ago0x6c5bf504f7d2fedd82bdd1b0d6b8a22f0bf6d303 IN  Belt Finance: StableSwap Contract0 BNB0.023344985
0xf82a2a5345ea6acea802647f1ad2d4569c726e0df83e3dfdce46805be1acf17575719862021-05-20 11:40:5425 days 15 hrs ago0xc366d1638552e77dc1f583c501b8307546d61466 IN  Belt Finance: StableSwap Contract0 BNB0.01953463
0x6bed2a47e44ece59e46176bc0debdf360f8691583c3f20214bb49b4a022db81b75676942021-05-20 8:03:0825 days 19 hrs ago0x6f6d544de5550d44ea5b821abd022fedf5059c1c IN  Belt Finance: StableSwap Contract0 BNB0.019534745
0x0a3e66d4243eb9cea314238bce0a43d5b17c43e47f03986bf72ade65f6af337175662142021-05-20 6:49:0525 days 20 hrs ago0xdc8f856a15894f3c2acec13cf0bf534a3ecf8afe IN  Belt Finance: StableSwap Contract0 BNB0.020266015
0x2f5e87d976d5be71291de91debddeef42d2d8a46e20d568fa96e696b43412b5a75660892021-05-20 6:42:5025 days 20 hrs ago0xdc8f856a15894f3c2acec13cf0bf534a3ecf8afe IN  Belt Finance: StableSwap Contract0 BNB0.02035177
0xa2596f219ecfd3fe1aab0cd405989f87922d5edc232ead879c1990805e768f7d75660742021-05-20 6:42:0525 days 20 hrs ago0xf35dd045420d75d928eb312d015bf9b130251cbf IN  Belt Finance: StableSwap Contract0 BNB0.019534925
0xfef5600639cb7a7ddc78a14282b021cd22b4e4775ca6766afb6bc8879c34123f75660252021-05-20 6:39:3825 days 20 hrs ago0xdc8f856a15894f3c2acec13cf0bf534a3ecf8afe IN  Belt Finance: StableSwap Contract0 BNB0.020843945
0xe4bb2060ab77382cad29b12a0ebd935cf52c6cf1c8fda034c25a0c446558091175647912021-05-20 5:37:5625 days 21 hrs ago0xca8df8d4fbb8b532c0ce5d2669ec74ae2a827a65 IN  Belt Finance: StableSwap Contract0 BNB0.01779747
0x7609fa293e9be6300a9936bfed681ae9ced015e64983ebf8989512cb8ca8542975647792021-05-20 5:37:2025 days 21 hrs ago0xca8df8d4fbb8b532c0ce5d2669ec74ae2a827a65 IN  Belt Finance: StableSwap Contract0 BNB0.020752795
0x3833804def70ccf029b3bb87d985db23a1c0c7a6b22f7c934058328e3adc29f675646052021-05-20 5:28:3825 days 21 hrs ago0x0257e18fd61a17c32c1674bd5544e55d1888e191 IN  Belt Finance: StableSwap Contract0 BNB0.01950503
0x937a8951cc489f72a35309b117b54748de1ddbd2f2be6319abb3992aa2bd385775644002021-05-20 5:17:4625 days 21 hrs ago0xe9cff59d378b2e7f429f63b69403762340aa94cc IN  Belt Finance: StableSwap Contract0 BNB0.058563945
[ Download CSV Export 

OVERVIEW

This is belt.fi - venus pool tokens swap contract.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract DAI Stablecoin0 BNB
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract DAI Stablecoin0 BNB
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract 0xfdb22e3bf935c1c94254f050bbe093563f5335340 BNB
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract 0x7c8dd1e39cd8142414f24f0ba80638b2e2fa52340 BNB
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract Binance: BUSD Stablecoin0 BNB
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract Binance: BUSD Stablecoin0 BNB
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract 0x7c8dd1e39cd8142414f24f0ba80638b2e2fa52340 BNB
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract 0x56a9452024ae2dedb01e1179acb1c152d50c01450 BNB
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract 0x08bed6851cadc4efc91147e3ca63c39406b31a2d0 BNB
0x8dab54646dd77a20cc187fdd52447acfa223726c0e488f914fca0a24e59d4fc854711852021-03-07 11:52:1299 days 15 hrs ago Belt Finance: StableSwap Contract 0xfdb22e3bf935c1c94254f050bbe093563f5335340 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract Binance: BUSD Stablecoin0 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract Binance: BUSD Stablecoin0 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract 0x7c8dd1e39cd8142414f24f0ba80638b2e2fa52340 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract 0x56a9452024ae2dedb01e1179acb1c152d50c01450 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract BUSD-T Stablecoin0 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract BUSD-T Stablecoin0 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract 0x7c8dd1e39cd8142414f24f0ba80638b2e2fa52340 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract 0x56a9452024ae2dedb01e1179acb1c152d50c01450 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract 0x08bed6851cadc4efc91147e3ca63c39406b31a2d0 BNB
0x1d7573ffbf105df31474cdda89e4d39f4defd8f361a4efb295d6d9af3c4f69d854710262021-03-07 11:44:1599 days 15 hrs ago Belt Finance: StableSwap Contract 0xfdb22e3bf935c1c94254f050bbe093563f5335340 BNB
0xdb42b1195fbf52ebd81b24b2614ed551735fe7ca94a56faaccfd8eb05f5f1afa54708672021-03-07 11:36:1899 days 15 hrs ago Belt Finance: StableSwap Contract BUSD-T Stablecoin0 BNB
0xdb42b1195fbf52ebd81b24b2614ed551735fe7ca94a56faaccfd8eb05f5f1afa54708672021-03-07 11:36:1899 days 15 hrs ago Belt Finance: StableSwap Contract BUSD-T Stablecoin0 BNB
0xdb42b1195fbf52ebd81b24b2614ed551735fe7ca94a56faaccfd8eb05f5f1afa54708672021-03-07 11:36:1899 days 15 hrs ago Belt Finance: StableSwap Contract 0x56a9452024ae2dedb01e1179acb1c152d50c01450 BNB
0xdb42b1195fbf52ebd81b24b2614ed551735fe7ca94a56faaccfd8eb05f5f1afa54708672021-03-07 11:36:1899 days 15 hrs ago Belt Finance: StableSwap Contract 0x08bed6851cadc4efc91147e3ca63c39406b31a2d0 BNB
0xdb42b1195fbf52ebd81b24b2614ed551735fe7ca94a56faaccfd8eb05f5f1afa54708672021-03-07 11:36:1899 days 15 hrs ago Belt Finance: StableSwap Contract USD Coin: USDC Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.1.0b17

Optimization Enabled:
N/A

Other Settings:
, None license

Contract Source Code (Vyper language format)

contract ERC20m:
    def totalSupply() -> uint256: constant
    def allowance(_owner: address, _spender: address) -> uint256: constant
    def transfer(_to: address, _value: uint256) -> bool: modifying
    def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying
    def approve(_spender: address, _value: uint256) -> bool: modifying
    def mint(_to: address, _value: uint256): modifying
    def burn(_value: uint256): modifying
    def burnFrom(_to: address, _value: uint256): modifying
    def name() -> string[64]: constant
    def symbol() -> string[32]: constant
    def decimals() -> uint256: constant
    def balanceOf(arg0: address) -> uint256: constant
    def set_minter(_minter: address): modifying

contract bERC20:
    def totalSupply() -> uint256: constant
    def allowance(_owner: address, _spender: address) -> uint256: constant
    def transfer(_to: address, _value: uint256) -> bool: modifying
    def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying
    def approve(_spender: address, _value: uint256) -> bool: modifying
    def name() -> string[64]: constant
    def symbol() -> string[32]: constant
    def decimals() -> uint256: constant
    def balanceOf(arg0: address) -> uint256: constant
    def deposit(depositAmount: uint256): modifying
    def withdraw(withdrawTokens: uint256): modifying
    def getPricePerFullShare() -> uint256: constant


from vyper.interfaces import ERC20

N_COINS: constant(int128) = 4  

ZERO256: constant(uint256) = 0 
ZEROS: constant(uint256[N_COINS]) = [ZERO256, ZERO256, ZERO256, ZERO256] 

TETHERED: constant(bool[N_COINS]) = [False, False, False, False]

FEE_DENOMINATOR: constant(uint256) = 10 ** 10
PRECISION: constant(uint256) = 10 ** 18 
PRECISION_MUL: constant(uint256[N_COINS]) = [convert(1, uint256), convert(1, uint256), convert(1, uint256), convert(1, uint256)]

admin_actions_delay: constant(uint256) = 3 * 86400

# Events
TokenExchange: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256})
TokenExchangeUnderlying: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256})
AddLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256})
RemoveLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], token_supply: uint256})
RemoveLiquidityImbalance: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256})
CommitNewAdmin: event({deadline: indexed(timestamp), admin: indexed(address)})
NewAdmin: event({admin: indexed(address)})
CommitNewParameters: event({deadline: indexed(timestamp), A: uint256, fee: uint256, buyback_fee: uint256, buyback_addr: address})
NewParameters: event({A: uint256, fee: uint256, buyback_fee: uint256, buyback_addr: address})

coins: public(address[N_COINS])
underlying_coins: public(address[N_COINS])
balances: public(uint256[N_COINS])
A: public(uint256)  
fee: public(uint256)  
buyback_fee: public(uint256)  
max_buyback_fee: constant(uint256) = 5 * 10 ** 9

owner: public(address)
buyback_addr: public(address)
token: ERC20m

admin_actions_deadline: public(timestamp)
transfer_ownership_deadline: public(timestamp)
future_A: public(uint256)
future_fee: public(uint256)
future_buyback_fee: public(uint256)
future_owner: public(address)
future_buyback_addr: public(address)

kill_deadline: timestamp
kill_deadline_dt: constant(uint256) = 2 * 30 * 86400
is_killed: bool


@public
def __init__(_coins: address[N_COINS], _underlying_coins: address[N_COINS],
             _pool_token: address,
             _A: uint256, _fee: uint256, _buyback_fee: uint256,_buyback_addr: address):
    for i in range(N_COINS):
        assert _coins[i] != ZERO_ADDRESS
        assert _underlying_coins[i] != ZERO_ADDRESS
        self.balances[i] = 0
    self.coins = _coins
    self.underlying_coins = _underlying_coins
    self.A = _A
    self.fee = _fee
    self.buyback_fee = _buyback_fee
    self.owner = msg.sender
    self.kill_deadline = block.timestamp + kill_deadline_dt
    self.is_killed = False
    self.token = ERC20m(_pool_token)
    self.buyback_addr = _buyback_addr


@public
@constant
def pool_token() -> address:
    return self.token

@private
@constant
def _stored_rates() -> uint256[N_COINS]:
    result: uint256[N_COINS] = PRECISION_MUL
    for i in range(N_COINS):
        result[i] *= bERC20(self.coins[i]).getPricePerFullShare()
    return result


@private
@constant
def _xp(rates: uint256[N_COINS]) -> uint256[N_COINS]:
    result: uint256[N_COINS] = rates
    for i in range(N_COINS):
        result[i] = result[i] * self.balances[i] / PRECISION
    return result


@private
@constant
def _xp_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256[N_COINS]:
    result: uint256[N_COINS] = rates
    for i in range(N_COINS):
        result[i] = result[i] * _balances[i] / PRECISION
    return result


@private
@constant
def get_D(xp: uint256[N_COINS]) -> uint256:
    S: uint256 = 0
    for _x in xp:
        S += _x
    if S == 0:
        return 0

    Dprev: uint256 = 0
    D: uint256 = S
    Ann: uint256 = self.A * N_COINS
    for _i in range(255):
        D_P: uint256 = D
        for _x in xp:
            D_P = D_P * D / (_x * N_COINS + 1)  # +1 is to prevent /0
        Dprev = D
        D = (Ann * S + D_P * N_COINS) * D / ((Ann - 1) * D + (N_COINS + 1) * D_P)

        if D > Dprev:
            if D - Dprev <= 1:
                break
        else:
            if Dprev - D <= 1:
                break
    return D


@private
@constant
def get_D_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256:
    return self.get_D(self._xp_mem(rates, _balances))


@public
@constant
def get_virtual_price() -> uint256:
    D: uint256 = self.get_D(self._xp(self._stored_rates()))
    token_supply: uint256 = self.token.totalSupply()
    return D * PRECISION / token_supply


@public
@constant
def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256:
    _balances: uint256[N_COINS] = self.balances
    rates: uint256[N_COINS] = self._stored_rates()
    D0: uint256 = self.get_D_mem(rates, _balances)
    for i in range(N_COINS):
        if deposit:
            _balances[i] += amounts[i]
        else:
            _balances[i] -= amounts[i]
    D1: uint256 = self.get_D_mem(rates, _balances)
    token_amount: uint256 = self.token.totalSupply()
    diff: uint256 = 0
    if deposit:
        diff = D1 - D0
    else:
        diff = D0 - D1
    return diff * token_amount / D0


@public
@nonreentrant('lock')
def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256):
    assert not self.is_killed

    fees: uint256[N_COINS] = ZEROS
    _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1))
    _buyback_fee: uint256 = self.buyback_fee

    token_supply: uint256 = self.token.totalSupply()
    rates: uint256[N_COINS] = self._stored_rates()

    D0: uint256 = 0
    old_balances: uint256[N_COINS] = self.balances
    if token_supply > 0:
        D0 = self.get_D_mem(rates, old_balances)
    new_balances: uint256[N_COINS] = old_balances

    for i in range(N_COINS):
        if token_supply == 0:
            assert amounts[i] > 0

        new_balances[i] = old_balances[i] + amounts[i]


    D1: uint256 = self.get_D_mem(rates, new_balances)
    assert D1 > D0

    D2: uint256 = D1
    if token_supply > 0:
        for i in range(N_COINS):
            ideal_balance: uint256 = D1 * old_balances[i] / D0
            difference: uint256 = 0
            if ideal_balance > new_balances[i]:
                difference = ideal_balance - new_balances[i]
            else:
                difference = new_balances[i] - ideal_balance
            fees[i] = _fee * difference / FEE_DENOMINATOR
            self.balances[i] = new_balances[i] - fees[i] * _buyback_fee / FEE_DENOMINATOR
            new_balances[i] -= fees[i]
        D2 = self.get_D_mem(rates, new_balances)
    else:
        self.balances = new_balances

    mint_amount: uint256 = 0
    if token_supply == 0:
        mint_amount = D1
    else:
        mint_amount = token_supply * (D2 - D0) / D0

    assert mint_amount >= min_mint_amount, "Slippage screwed you"

    for i in range(N_COINS):
        assert_modifiable(
            bERC20(self.coins[i]).transferFrom(msg.sender, self, amounts[i]))



    self.token.mint(msg.sender, mint_amount)

    log.AddLiquidity(msg.sender, amounts, fees, D1, token_supply + mint_amount)


@private
@constant
def get_y(i: int128, j: int128, x: uint256, _xp: uint256[N_COINS]) -> uint256:

    assert (i != j) and (i >= 0) and (j >= 0) and (i < N_COINS) and (j < N_COINS)

    D: uint256 = self.get_D(_xp)
    c: uint256 = D
    S_: uint256 = 0
    Ann: uint256 = self.A * N_COINS

    _x: uint256 = 0
    for _i in range(N_COINS):
        if _i == i:
            _x = x
        elif _i != j:
            _x = _xp[_i]
        else:
            continue
        S_ += _x
        c = c * D / (_x * N_COINS)
    c = c * D / (Ann * N_COINS)
    b: uint256 = S_ + D / Ann  
    y_prev: uint256 = 0
    y: uint256 = D
    for _i in range(255):
        y_prev = y
        y = (y*y + c) / (2 * y + b - D)
        
        if y > y_prev:
            if y - y_prev <= 1:
                break
        else:
            if y_prev - y <= 1:
                break
    return y


@public
@constant
def get_dy(i: int128, j: int128, dx: uint256) -> uint256:
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)

    x: uint256 = xp[i] + dx * rates[i] / PRECISION
    y: uint256 = self.get_y(i, j, x, xp)
    dy: uint256 = (xp[j] - y) * PRECISION / rates[j]
    _fee: uint256 = self.fee * dy / FEE_DENOMINATOR
    return dy - _fee


@public
@constant
def get_dx(i: int128, j: int128, dy: uint256) -> uint256:
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)

    y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * rates[j] / PRECISION
    x: uint256 = self.get_y(j, i, y, xp)
    dx: uint256 = (x - xp[i]) * PRECISION / rates[i]
    return dx


@public
@constant
def get_dy_underlying(i: int128, j: int128, dx: uint256) -> uint256:
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)
    precisions: uint256[N_COINS] = PRECISION_MUL

    x: uint256 = xp[i] + dx * precisions[i]
    y: uint256 = self.get_y(i, j, x, xp)
    dy: uint256 = (xp[j] - y) / precisions[j]
    _fee: uint256 = self.fee * dy / FEE_DENOMINATOR
    return dy - _fee


@public
@constant
def get_dx_underlying(i: int128, j: int128, dy: uint256) -> uint256:
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)
    precisions: uint256[N_COINS] = PRECISION_MUL

    y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * precisions[j]
    x: uint256 = self.get_y(j, i, y, xp)
    dx: uint256 = (x - xp[i]) / precisions[i]
    return dx


@private
def _exchange(i: int128, j: int128, dx: uint256, rates: uint256[N_COINS]) -> uint256:
    assert not self.is_killed

    xp: uint256[N_COINS] = self._xp(rates)

    x: uint256 = xp[i] + dx * rates[i] / PRECISION
    y: uint256 = self.get_y(i, j, x, xp)
    dy: uint256 = xp[j] - y
    dy_fee: uint256 = dy * self.fee / FEE_DENOMINATOR
    dy_buyback_fee: uint256 = dy_fee * self.buyback_fee / FEE_DENOMINATOR
    self.balances[i] = x * PRECISION / rates[i]
    self.balances[j] = (y + (dy_fee - dy_buyback_fee)) * PRECISION / rates[j]

    _dy: uint256 = (dy - dy_fee) * PRECISION / rates[j]

    return _dy


@public
@nonreentrant('lock')
def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256):
    rates: uint256[N_COINS] = self._stored_rates()
    dy: uint256 = self._exchange(i, j, dx, rates)
    assert dy >= min_dy, "Exchange resulted in fewer coins than expected"

    assert_modifiable(bERC20(self.coins[i]).transferFrom(msg.sender, self, dx))

    assert_modifiable(bERC20(self.coins[j]).transfer(msg.sender, dy))

    log.TokenExchange(msg.sender, i, dx, j, dy)


@public
@nonreentrant('lock')
def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256):
    rates: uint256[N_COINS] = self._stored_rates()
    precisions: uint256[N_COINS] = PRECISION_MUL
    rate_i: uint256 = rates[i] / precisions[i]
    rate_j: uint256 = rates[j] / precisions[j]
    dx_: uint256 = dx * PRECISION / rate_i

    dy_: uint256 = self._exchange(i, j, dx_, rates)
    dy: uint256 = dy_ * rate_j / PRECISION
    assert dy >= min_dy, "Exchange resulted in fewer coins than expected"
    tethered: bool[N_COINS] = TETHERED

    ok: uint256 = 0
    assert_modifiable(ERC20(self.underlying_coins[i])\
        .transferFrom(msg.sender, self, dx))
    ERC20(self.underlying_coins[i]).approve(self.coins[i], dx)
    bERC20(self.coins[i]).deposit(dx)
    bERC20(self.coins[j]).withdraw(dy_)

    dy = ERC20(self.underlying_coins[j]).balanceOf(self)
    assert dy >= min_dy, "Exchange resulted in fewer coins than expected"

    assert_modifiable(ERC20(self.underlying_coins[j])\
        .transfer(msg.sender, dy))


    log.TokenExchangeUnderlying(msg.sender, i, dx, j, dy)


@public
@nonreentrant('lock')
def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]):
    total_supply: uint256 = self.token.totalSupply()
    amounts: uint256[N_COINS] = ZEROS
    fees: uint256[N_COINS] = ZEROS

    for i in range(N_COINS):
        value: uint256 = self.balances[i] * _amount / total_supply
        assert value >= min_amounts[i], "Withdrawal resulted in fewer coins than expected"
        self.balances[i] -= value
        amounts[i] = value
        assert_modifiable(bERC20(self.coins[i]).transfer(
            msg.sender, value))

    self.token.burnFrom(msg.sender, _amount)

    log.RemoveLiquidity(msg.sender, amounts, fees, total_supply - _amount)


@public
@nonreentrant('lock')
def remove_liquidity_imbalance(amounts: uint256[N_COINS], max_burn_amount: uint256):
    assert not self.is_killed

    token_supply: uint256 = self.token.totalSupply()
    assert token_supply > 0
    _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1))
    _buyback_fee: uint256 = self.buyback_fee
    rates: uint256[N_COINS] = self._stored_rates()

    old_balances: uint256[N_COINS] = self.balances
    new_balances: uint256[N_COINS] = old_balances
    D0: uint256 = self.get_D_mem(rates, old_balances)
    for i in range(N_COINS):
        new_balances[i] -= amounts[i]
    D1: uint256 = self.get_D_mem(rates, new_balances)
    fees: uint256[N_COINS] = ZEROS
    for i in range(N_COINS):
        ideal_balance: uint256 = D1 * old_balances[i] / D0
        difference: uint256 = 0
        if ideal_balance > new_balances[i]:
            difference = ideal_balance - new_balances[i]
        else:
            difference = new_balances[i] - ideal_balance
        fees[i] = _fee * difference / FEE_DENOMINATOR
        self.balances[i] = new_balances[i] - fees[i] * _buyback_fee / FEE_DENOMINATOR
        new_balances[i] -= fees[i]
    D2: uint256 = self.get_D_mem(rates, new_balances)

    token_amount: uint256 = (D0 - D2) * token_supply / D0
    assert token_amount > 0
    assert token_amount <= max_burn_amount, "Slippage screwed you"

    for i in range(N_COINS):
        assert_modifiable(bERC20(self.coins[i]).transfer(msg.sender, amounts[i]))
    self.token.burnFrom(msg.sender, token_amount)  

    log.RemoveLiquidityImbalance(msg.sender, amounts, fees, D1, token_supply - token_amount)


@public
def commit_new_parameters(amplification: uint256,
                          new_fee: uint256,
                          new_buyback_fee: uint256,
                          new_buyback_addr: address):
    assert msg.sender == self.owner
    assert self.admin_actions_deadline == 0
    assert new_buyback_fee <= max_buyback_fee

    _deadline: timestamp = block.timestamp + admin_actions_delay
    self.admin_actions_deadline = _deadline
    self.future_A = amplification
    self.future_fee = new_fee
    self.future_buyback_fee = new_buyback_fee
    self.future_buyback_addr = new_buyback_addr


    log.CommitNewParameters(_deadline, amplification, new_fee, new_buyback_fee, new_buyback_addr)


@public
def apply_new_parameters():
    assert msg.sender == self.owner
    assert self.admin_actions_deadline <= block.timestamp\
        and self.admin_actions_deadline > 0

    self.admin_actions_deadline = 0
    _A: uint256 = self.future_A
    _fee: uint256 = self.future_fee
    _buyback_fee: uint256 = self.future_buyback_fee
    _buyback_addr: address = self.future_buyback_addr
    self.A = _A
    self.fee = _fee
    self.buyback_fee = _buyback_fee
    self.buyback_addr = _buyback_addr

    log.NewParameters(_A, _fee, _buyback_fee,_buyback_addr)


@public
def revert_new_parameters():
    assert msg.sender == self.owner

    self.admin_actions_deadline = 0


@public
def commit_transfer_ownership(_owner: address):
    assert msg.sender == self.owner
    assert self.transfer_ownership_deadline == 0

    _deadline: timestamp = block.timestamp + admin_actions_delay
    self.transfer_ownership_deadline = _deadline
    self.future_owner = _owner

    log.CommitNewAdmin(_deadline, _owner)


@public
def apply_transfer_ownership():
    assert msg.sender == self.owner
    assert block.timestamp >= self.transfer_ownership_deadline\
        and self.transfer_ownership_deadline > 0

    self.transfer_ownership_deadline = 0
    _owner: address = self.future_owner
    self.owner = _owner

    log.NewAdmin(_owner)


@public
def revert_transfer_ownership():
    assert msg.sender == self.owner

    self.transfer_ownership_deadline = 0



@public
def withdraw_buyback_fees():
    _precisions: uint256[N_COINS] = PRECISION_MUL

    for i in range(N_COINS):
        c: address = self.coins[i]
        value: uint256 = bERC20(c).balanceOf(self) - self.balances[i]
        if value > 0:
            assert_modifiable(bERC20(c).transfer(self.buyback_addr, value))

@public
def kill_me():
    assert msg.sender == self.owner
    assert self.kill_deadline > block.timestamp
    self.is_killed = True


@public
def unkill_me():
    assert msg.sender == self.owner
    self.is_killed = False

Contract ABI

[{"name":"TokenExchange","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"TokenExchangeUnderlying","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewParameters","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"buyback_fee","indexed":false},{"type":"address","name":"buyback_addr","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewParameters","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"buyback_fee","indexed":false},{"type":"address","name":"buyback_addr","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[4]","name":"_coins"},{"type":"address[4]","name":"_underlying_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"},{"type":"uint256","name":"_buyback_fee"},{"type":"address","name":"_buyback_addr"}],"constant":false,"payable":false,"type":"constructor"},{"name":"pool_token","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1151},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1535305},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":6068241},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":9327593},{"name":"get_dy","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3454407},{"name":"get_dx","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":3454412},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3454267},{"name":"get_dx_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":3454273},{"name":"exchange","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":7030538},{"name":"exchange_underlying","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":7050314},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":240439},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":9326820},{"name":"commit_new_parameters","outputs":[],"inputs":[{"type":"uint256","name":"amplification"},{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_buyback_fee"},{"type":"address","name":"new_buyback_addr"}],"constant":false,"payable":false,"type":"function","gas":181536},{"name":"apply_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":169924},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21835},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74512},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60568},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21925},{"name":"withdraw_buyback_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":25008},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37878},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22015},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2190},{"name":"underlying_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2220},{"name":"balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2250},{"name":"A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2081},{"name":"fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2111},{"name":"buyback_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2141},{"name":"owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"buyback_addr","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2261},{"name":"future_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2291},{"name":"future_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2321},{"name":"future_buyback_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2351},{"name":"future_owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2381},{"name":"future_buyback_addr","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2411}]

740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526101a061564c6101403934156100a257600080fd5b602061564c60c03960c05160205181106100bb57600080fd5b506020602061564c0160c03960c05160205181106100d857600080fd5b506020604061564c0160c03960c05160205181106100f557600080fd5b506020606061564c0160c03960c051602051811061011257600080fd5b506020608061564c0160c03960c051602051811061012f57600080fd5b50602060a061564c0160c03960c051602051811061014c57600080fd5b50602060c061564c0160c03960c051602051811061016957600080fd5b50602060e061564c0160c03960c051602051811061018657600080fd5b50602061010061564c0160c03960c05160205181106101a457600080fd5b50602061018061564c0160c03960c05160205181106101c257600080fd5b506102e060006004818352015b60006101406102e051600481106101e557600080fd5b6020020151186101f457600080fd5b60006101c06102e0516004811061020a57600080fd5b60200201511861021957600080fd5b60006102e0516004811061022c57600080fd5b600260c052602060c02001555b81516001018083528114156101cf575b5050600060c052602060c020610140805182558060200151600183015580604001516002830155806060015160038301555050600160c052602060c0206101c080518255806020015160018301558060400151600283015580606001516003830155505061026051600355610280516004556102a0516005553360065542624f1a008181830110156102da57600080fd5b808201905090506010556000601155610240516008556102c05160075561563456600436101561000d57615332565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05263c3b9fe5960005114156100c85734156100ba57600080fd5b60085460005260206000f350005b600015610215575b6101405261016060018152600181602001526001816040015260018160600152506101e060006004818352015b6101606101e0516004811061011157600080fd5b6020020180516101e0516004811061012857600080fd5b600060c052602060c02001543b61013e57600080fd5b6101e0516004811061014f57600080fd5b600060c052602060c0200154301861016657600080fd5b602061026060046377c7b8fc6102005261021c6101e0516004811061018a57600080fd5b600060c052602060c02001545afa6101a157600080fd5b6000506102605180820282158284830414176101bc57600080fd5b809050905090508152505b81516001018083528114156100fd575b50506080610280525b6000610280511115156101f25761020e565b60206102805103610160015160206102805103610280526101e0565b6101405156005b60001561033a575b6101c0526101405261016052610180526101a0526101e061014080518252806020015182602001528060400151826040015280606001518260600152505061026060006004818352015b6101e0610260516004811061027b57600080fd5b6020020151610260516004811061029157600080fd5b600260c052602060c020015480820282158284830414176102b157600080fd5b80905090509050670de0b6b3a764000080806102cc57600080fd5b8204905090506101e061026051600481106102e657600080fd5b60200201525b8151600101808352811415610267575b50506080610280525b60006102805111151561031757610333565b602061028051036101e001516020610280510361028052610305565b6101c05156005b60001561046b575b610240526101405261016052610180526101a0526101c0526101e05261020052610220526102606101408051825280602001518260200152806040015182604001528060600151826060015250506102e060006004818352015b6102606102e051600481106103b057600080fd5b60200201516101c06102e051600481106103c957600080fd5b602002015180820282158284830414176103e257600080fd5b80905090509050670de0b6b3a764000080806103fd57600080fd5b8204905090506102606102e0516004811061041757600080fd5b60200201525b815160010180835281141561039c575b50506080610300525b60006103005111151561044857610464565b6020610300510361026001516020610300510361030052610436565b6102405156005b600015610770575b6101c0526101405261016052610180526101a05260006101e05261022060006004818352015b602061022051026101400151610200526101e08051610200518181830110156104c157600080fd5b808201905090508152505b8151600101808352811415610499575b50506101e05115156104f75760006000526000516101c05156505b6000610260526101e051610280526003546004808202821582848304141761051e57600080fd5b809050905090506102a0526102c0600060ff818352015b610280516102e05261032060006004818352015b602061032051026101400151610300526102e05161028051808202821582848304141761057557600080fd5b80905090509050610300516004808202821582848304141761059657600080fd5b8090509050905060018181830110156105ae57600080fd5b8082019050905080806105c057600080fd5b8204905090506102e0525b8151600101808352811415610549575b505061028051610260526102a0516101e051808202821582848304141761060157600080fd5b809050905090506102e0516004808202821582848304141761062257600080fd5b8090509050905081818301101561063857600080fd5b8082019050905061028051808202821582848304141761065757600080fd5b809050905090506102a05160018082101561067157600080fd5b8082039050905061028051808202821582848304141761069057600080fd5b8090509050905060056102e05180820282158284830414176106b157600080fd5b809050905090508181830110156106c757600080fd5b8082019050905080806106d957600080fd5b820490509050610280526102605161028051111561072057600161028051610260518082101561070857600080fd5b8082039050905011151561071b5761075c565b61074b565b600161026051610280518082101561073757600080fd5b8082039050905011151561074a5761075c565b5b5b8151600101808352811415610535575b5050610280516000526000516101c0515650005b60001561093e575b610240526101405261016052610180526101a0526101c0526101e0526102005261022052610140610660525b610660515160206106605101610660526106606106605110156107c6576107a4565b6305eb8fa6610680526106a0610140610460525b610460515160206104605101610460526104606104605110156107fc576107da565b6342d3b3c3610480526104a06101408051825280602001518260200152806040015182604001528060600151826060015250506105206101c080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610342565b6105e052610600526106205261064052610440610460525b61046051526020610460510361046052610140610460511015156108bd5761089a565b6105e0805182528060200151826020015280604001518260400152806060015182606001525050610700516106e0516106c0516106a05160065801610473565b61076052610640610660525b610660515260206106605103610660526101406106605110151561092c57610909565b61076051600052600051610240515650005b63bb7b8b806000511415610bb257341561095757600080fd5b6101406106e0525b6106e0515160206106e051016106e0526106e06106e05110156109815761095f565b6305eb8fa661070052610720610140610560525b610560515160206105605101610560526105606105605110156109b757610995565b631db7662b610580526105a06101406104c0525b6104c0515160206104c051016104c0526104c06104c05110156109ed576109cb565b600658016100d0565b6104e0526105005261052052610540526104a06104c0525b6104c0515260206104c051036104c0526101406104c051101515610a3157610a0e565b6104e0805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a0516006580161021d565b61066052610680526106a0526106c052610540610560525b6105605152602061056051036105605261014061056051101515610aac57610a89565b6106608051825280602001518260200152806040015182604001528060600151826060015250506107805161076051610740516107205160065801610473565b6107e0526106c06106e0525b6106e0515260206106e051036106e0526101406106e051101515610b1b57610af8565b6107e051610140526008543b610b3057600080fd5b6008543018610b3e57600080fd5b602061088060046318160ddd6108205261083c6008545afa610b5f57600080fd5b600050610880516108005261014051670de0b6b3a76400008082028215828483041417610b8b57600080fd5b80905090509050610800518080610ba157600080fd5b82049050905060005260206000f350005b63cf701ff76000511415611015573415610bcb57600080fd5b60843560028110610bdb57600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101c06101405161016051610180516101a0516101c0516101e0516102005161022051600658016100d0565b61026052610280526102a0526102c05261022052610200526101e0526101c0526101a052610180526101605261014052610260805182528060200151826020015280604001518260400152806060015182606001525050610140610300525b61030051516020610300510161030052610300610300511015610cd257610cb0565b631f30ab74610320526103406101c08051825280602001518260200152806040015182604001528060600151826060015250506103c061014080518252806020015182602001528060400151826040015280606001518260600152505061042051610400516103e0516103c0516103a05161038051610360516103405160065801610778565b610480526102e0610300525b6103005152602061030051036103005261014061030051101515610d8757610d64565b610480516102e0526104a060006004818352015b60843515610df3576101406104a05160048110610db757600080fd5b60200201805160046104a05160048110610dd057600080fd5b6020020135818183011015610de457600080fd5b80820190509050815250610e3d565b6101406104a05160048110610e0757600080fd5b60200201805160046104a05160048110610e2057600080fd5b602002013580821015610e3257600080fd5b808203905090508152505b5b8151600101808352811415610d9b575b50506101406104e0525b6104e0515160206104e051016104e0526104e06104e0511015610e7a57610e58565b631f30ab74610500526105206101c08051825280602001518260200152806040015182604001528060600151826060015250506105a0610140805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a0516105805161056051610540516105205160065801610778565b610660526104c06104e0525b6104e0515260206104e051036104e0526101406104e051101515610f2f57610f0c565b610660516104c0526008543b610f4457600080fd5b6008543018610f5257600080fd5b602061070060046318160ddd6106a0526106bc6008545afa610f7357600080fd5b600050610700516106805260006107205260843515610fb1576104c0516102e05180821015610fa157600080fd5b8082039050905061072052610fd2565b6102e0516104c05180821015610fc657600080fd5b80820390509050610720525b61072051610680518082028215828483041417610fee57600080fd5b809050905090506102e051808061100457600080fd5b82049050905060005260206000f350005b63029b2f346000511415611a975762ffffff541561103257600080fd5b600162ffffff55341561104457600080fd5b6011541561105157600080fd5b61014060008152600081602001526000816040015260008160600152506004546004808202821582848304141761108757600080fd5b80905090509050600c808061109b57600080fd5b8204905090506101c0526005546101e0526008543b6110b957600080fd5b60085430186110c757600080fd5b602061028060046318160ddd6102205261023c6008545afa6110e857600080fd5b60005061028051610200526102a0610140610320525b61032051516020610320510161032052610320610320511015611120576110fe565b600658016100d0565b6103405261036052610380526103a052610300610320525b610320515260206103205103610320526101406103205110151561116457611141565b61034080518252806020015182602001528060400151826040015280606001518260600152505060006103c0526103e060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006102005111156112ce57610140610460525b61046051516020610460510161046052610460610460511015611210576111ee565b631f30ab74610480526104a06102a08051825280602001518260200152806040015182604001528060600151826060015250506105206103e080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610778565b6105e052610440610460525b61046051526020610460510361046052610140610460511015156112c5576112a2565b6105e0516103c0525b6106006103e080518252806020015182602001528060400151826040015280606001518260600152505061068060006004818352015b6102005115156113335760006004610680516004811061132357600080fd5b60200201351161133257600080fd5b5b6103e0610680516004811061134757600080fd5b60200201516004610680516004811061135f57600080fd5b602002013581818301101561137357600080fd5b80820190509050610600610680516004811061138e57600080fd5b60200201525b8151600101808352811415611304575b50506101406106c0525b6106c0515160206106c051016106c0526106c06106c05110156113d0576113ae565b631f30ab746106e0526107006102a08051825280602001518260200152806040015182604001528060600151826060015250506107806106008051825280602001518260200152806040015182604001528060600151826060015250506107e0516107c0516107a051610780516107605161074051610720516107005160065801610778565b610840526106a06106c0525b6106c0515260206106c051036106c0526101406106c05110151561148557611462565b610840516106a0526103c0516106a0511161149f57600080fd5b6106a0516108605260006102005111156117de5761088060006004818352015b6106a0516103e061088051600481106114d757600080fd5b602002015180820282158284830414176114f057600080fd5b809050905090506103c051808061150657600080fd5b8204905090506108a05260006108c052610600610880516004811061152a57600080fd5b60200201516108a0511115611573576108a051610600610880516004811061155157600080fd5b60200201518082101561156357600080fd5b808203905090506108c0526115a9565b610600610880516004811061158757600080fd5b60200201516108a0518082101561159d57600080fd5b808203905090506108c0525b6101c0516108c05180820282158284830414176115c557600080fd5b809050905090506402540be40080806115dd57600080fd5b82049050905061014061088051600481106115f757600080fd5b6020020152610600610880516004811061161057600080fd5b6020020151610140610880516004811061162957600080fd5b60200201516101e051808202821582848304141761164657600080fd5b809050905090506402540be400808061165e57600080fd5b8204905090508082101561167157600080fd5b80820390509050610880516004811061168957600080fd5b600260c052602060c020015561060061088051600481106116a957600080fd5b60200201805161014061088051600481106116c357600080fd5b6020020151808210156116d557600080fd5b808203905090508152505b81516001018083528114156114bf575b50506101406108e0525b6108e0515160206108e051016108e0526108806108e051101561171c576116fa565b631f30ab74610900526109206102a08051825280602001518260200152806040015182604001528060600151826060015250506109a0610600805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610778565b610a60526108606108e0525b6108e0515260206108e051036108e0526101406108e0511015156117d1576117ae565b610a605161086052611810565b600260c052602060c0206106008051825580602001516001830155806040015160028301558060600151600383015550505b6000610a805261020051151561182d576106a051610a8052611882565b61020051610860516103c0518082101561184657600080fd5b80820390509050808202821582848304141761186157600080fd5b809050905090506103c051808061187757600080fd5b820490509050610a80525b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a805110156118d4576084610abcfd5b610b4060006004818352015b610b4051600481106118f157600080fd5b600060c052602060c02001543b61190757600080fd5b610b40516004811061191857600080fd5b600060c052602060c0200154301861192f57600080fd5b6020610c2060646323b872dd610b605233610b805230610ba0526004610b40516004811061195c57600080fd5b6020020135610bc052610b7c6000610b40516004811061197b57600080fd5b600060c052602060c02001545af161199257600080fd5b600050610c20516119a257600080fd5b5b81516001018083528114156118e0575b50506008543b6119c257600080fd5b60085430186119d057600080fd5b6000600060446340c10f19610c405233610c6052610a8051610c8052610c5c60006008545af16119ff57600080fd5b600435610ce052602435610d0052604435610d2052606435610d405261014051610d605261016051610d805261018051610da0526101a051610dc0526106a051610de05261020051610a8051818183011015611a5a57600080fd5b80820190509050610e0052337f3f1915775e0c9a38a57a7bb7f1f9005f486fb904e1f84aa215364d567319a58d610140610ce0a2600062ffffff55005b600015611e9b575b610220526101405261016052610180526101a0526101c0526101e052610200526000610140511215610160516101405114151660006101605112151660046101405112166004610160511216611af457600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051610240516305eb8fa6610280526102a06101a0805182528060200151826020015280604001518260400152806060015182606001525050610300516102e0516102c0516102a05160065801610473565b610360526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103605161024052610240516103805260006103a05260035460048082028215828483041417611bbb57600080fd5b809050905090506103c05260006103e05261040060006004818352015b61014051610400511415611bf357610180516103e052611c29565b61016051610400511815611c23576101a06104005160048110611c1557600080fd5b60200201516103e052611c28565b611ca5565b5b6103a080516103e051818183011015611c4157600080fd5b8082019050905081525061038051610240518082028215828483041417611c6757600080fd5b809050905090506103e05160048082028215828483041417611c8857600080fd5b809050905090508080611c9a57600080fd5b820490509050610380525b8151600101808352811415611bd8575b505061038051610240518082028215828483041417611cd357600080fd5b809050905090506103c05160048082028215828483041417611cf457600080fd5b809050905090508080611d0657600080fd5b820490509050610380526103a051610240516103c0518080611d2757600080fd5b820490509050818183011015611d3c57600080fd5b80820190509050610420526000610440526102405161046052610480600060ff818352015b610460516104405261046051610460518082028215828483041417611d8557600080fd5b8090509050905061038051818183011015611d9f57600080fd5b808201905090506002610460518082028215828483041417611dc057600080fd5b8090509050905061042051818183011015611dda57600080fd5b808201905090506102405180821015611df257600080fd5b808203905090508080611e0457600080fd5b8204905090506104605261044051610460511115611e4b576001610460516104405180821015611e3357600080fd5b80820390509050111515611e4657611e87565b611e76565b6001610440516104605180821015611e6257600080fd5b80820390509050111515611e7557611e87565b5b5b8151600101808352811415611d61575b505061046051600052600051610220515650005b635e0d443f6000511415612272573415611eb457600080fd5b60605160043580604051901315611eca57600080fd5b8091901215611ed857600080fd5b5060605160243580604051901315611eef57600080fd5b8091901215611efd57600080fd5b506101406101405161016051610180516101a051600658016100d0565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015611f8e57611f6c565b631db7662b61030052610320610140805182528060200151826020015280604001518260400152806060015182606001525050610380516103605161034051610320516006580161021d565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e05110151561201557611ff2565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606004356004811061204f57600080fd5b60200201516044356101406004356004811061206a57600080fd5b6020020151808202821582848304141761208357600080fd5b80905090509050670de0b6b3a7640000808061209e57600080fd5b8204905090508181830110156120b357600080fd5b80820190509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156120e8576120c6565b631e8c3fd36104c0526004356104e0526024356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a9f565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561218557612162565b6106005161048052610260602435600481106121a057600080fd5b602002015161048051808210156121b657600080fd5b80820390509050670de0b6b3a764000080820282158284830414176121da57600080fd5b80905090509050610140602435600481106121f457600080fd5b6020020151808061220457600080fd5b8204905090506106205260045461062051808202821582848304141761222957600080fd5b809050905090506402540be400808061224157600080fd5b8204905090506106405261062051610640518082101561226057600080fd5b8082039050905060005260206000f350005b6367df02ca600051141561264157341561228b57600080fd5b606051600435806040519013156122a157600080fd5b80919012156122af57600080fd5b50606051602435806040519013156122c657600080fd5b80919012156122d457600080fd5b506101406101405161016051610180516101a051600658016100d0565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561236557612343565b631db7662b61030052610320610140805182528060200151826020015280604001518260400152806060015182606001525050610380516103605161034051610320516006580161021d565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156123ec576123c9565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606024356004811061242657600080fd5b60200201516044356402540be400808202821582848304141761244857600080fd5b809050905090506402540be4006004548082101561246557600080fd5b80820390509050808061247757600080fd5b8204905090506101406024356004811061249057600080fd5b602002015180820282158284830414176124a957600080fd5b80905090509050670de0b6b3a764000080806124c457600080fd5b820490509050808210156124d757600080fd5b80820390509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a051101561250c576124ea565b631e8c3fd36104c0526024356104e0526004356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a9f565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a0511015156125a957612586565b610600516104805261048051610260600435600481106125c857600080fd5b6020020151808210156125da57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176125fe57600080fd5b809050905090506101406004356004811061261857600080fd5b6020020151808061262857600080fd5b820490509050610620526106205160005260206000f350005b6307211ef760005114156129f757341561265a57600080fd5b6060516004358060405190131561267057600080fd5b809190121561267e57600080fd5b506060516024358060405190131561269557600080fd5b80919012156126a357600080fd5b506101406101405161016051610180516101a051600658016100d0565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561273457612712565b631db7662b61030052610320610140805182528060200151826020015280604001518260400152806060015182606001525050610380516103605161034051610320516006580161021d565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156127bb57612798565b6103e080518252806020015182602001528060400151826040015280606001518260600152505061046060018152600181602001526001816040015260018160600152506102606004356004811061281257600080fd5b60200201516044356104606004356004811061282d57600080fd5b6020020151808202821582848304141761284657600080fd5b8090509050905081818301101561285c57600080fd5b808201905090506104e052610140610520525b610520515160206105205101610520526105206105205110156128915761286f565b631e8c3fd36105405260043561056052602435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a9f565b61068052610500610520525b610520515260206105205103610520526101406105205110151561292e5761290b565b61068051610500526102606024356004811061294957600080fd5b6020020151610500518082101561295f57600080fd5b808203905090506104606024356004811061297957600080fd5b6020020151808061298957600080fd5b8204905090506106a0526004546106a05180820282158284830414176129ae57600080fd5b809050905090506402540be40080806129c657600080fd5b8204905090506106c0526106a0516106c051808210156129e557600080fd5b8082039050905060005260206000f350005b630e71d1b96000511415612da5573415612a1057600080fd5b60605160043580604051901315612a2657600080fd5b8091901215612a3457600080fd5b5060605160243580604051901315612a4b57600080fd5b8091901215612a5957600080fd5b506101406101405161016051610180516101a051600658016100d0565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015612aea57612ac8565b631db7662b61030052610320610140805182528060200151826020015280604001518260400152806060015182606001525050610380516103605161034051610320516006580161021d565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515612b7157612b4e565b6103e0805182528060200151826020015280604001518260400152806060015182606001525050610460600181526001816020015260018160400152600181606001525061026060243560048110612bc857600080fd5b60200201516044356402540be4008082028215828483041417612bea57600080fd5b809050905090506402540be40060045480821015612c0757600080fd5b808203905090508080612c1957600080fd5b82049050905061046060243560048110612c3257600080fd5b60200201518082028215828483041417612c4b57600080fd5b8090509050905080821015612c5f57600080fd5b808203905090506104e052610140610520525b61052051516020610520510161052052610520610520511015612c9457612c72565b631e8c3fd36105405260243561056052600435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a9f565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612d3157612d0e565b61068051610500526105005161026060043560048110612d5057600080fd5b602002015180821015612d6257600080fd5b8082039050905061046060043560048110612d7c57600080fd5b60200201518080612d8c57600080fd5b8204905090506106a0526106a05160005260206000f350005b60001561324a575b610220526101405261016052610180526101a0526101c0526101e0526102005260115415612dda57600080fd5b6102406101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015612e0757612de5565b631db7662b6102e0526103006101a0805182528060200151826020015280604001518260400152806060015182606001525050610360516103405161032051610300516006580161021d565b6103c0526103e05261040052610420526102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515612e8e57612e6b565b6103c08051825280602001518260200152806040015182604001528060600151826060015250506102406101405160048110612ec957600080fd5b6020020151610180516101a06101405160048110612ee657600080fd5b60200201518082028215828483041417612eff57600080fd5b80905090509050670de0b6b3a76400008080612f1a57600080fd5b820490509050818183011015612f2f57600080fd5b8082019050905061044052610140610480525b61048051516020610480510161048052610480610480511015612f6457612f42565b631e8c3fd36104a052610140516104c052610160516104e052610440516105005261052061024080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c05160065801611a9f565b6105e052610460610480525b610480515260206104805103610480526101406104805110151561300357612fe0565b6105e05161046052610240610160516004811061301f57600080fd5b6020020151610460518082101561303557600080fd5b808203905090506106005261060051600454808202821582848304141761305b57600080fd5b809050905090506402540be400808061307357600080fd5b8204905090506106205261062051600554808202821582848304141761309857600080fd5b809050905090506402540be40080806130b057600080fd5b8204905090506106405261044051670de0b6b3a764000080820282158284830414176130db57600080fd5b809050905090506101a061014051600481106130f657600080fd5b6020020151808061310657600080fd5b820490509050610140516004811061311d57600080fd5b600260c052602060c02001556104605161062051610640518082101561314257600080fd5b8082039050905081818301101561315857600080fd5b80820190509050670de0b6b3a7640000808202821582848304141761317c57600080fd5b809050905090506101a0610160516004811061319757600080fd5b602002015180806131a757600080fd5b82049050905061016051600481106131be57600080fd5b600260c052602060c02001556106005161062051808210156131df57600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761320357600080fd5b809050905090506101a0610160516004811061321e57600080fd5b6020020151808061322e57600080fd5b8204905090506106605261066051600052600051610220515650005b633df0212460005114156136045762ffffff541561326757600080fd5b600162ffffff55341561327957600080fd5b6060516004358060405190131561328f57600080fd5b809190121561329d57600080fd5b50606051602435806040519013156132b457600080fd5b80919012156132c257600080fd5b506101406101405161016051610180516101a051600658016100d0565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051632ce785a36102a0526004356102c0526024356102e0526044356103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051610300516102e0516102c05160065801612dad565b6103e052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103e051610260526308c379a061040052602061042052602e610440527f45786368616e676520726573756c74656420696e20666577657220636f696e73610460527f207468616e20657870656374656400000000000000000000000000000000000061048052610440506064356102605110156134665760a461041cfd5b6004356004811061347657600080fd5b600060c052602060c02001543b61348c57600080fd5b6004356004811061349c57600080fd5b600060c052602060c020015430186134b357600080fd5b602061058060646323b872dd6104c052336104e0523061050052604435610520526104dc6000600435600481106134e957600080fd5b600060c052602060c02001545af161350057600080fd5b6000506105805161351057600080fd5b6024356004811061352057600080fd5b600060c052602060c02001543b61353657600080fd5b6024356004811061354657600080fd5b600060c052602060c0200154301861355d57600080fd5b6020610640604463a9059cbb6105a052336105c052610260516105e0526105bc60006024356004811061358f57600080fd5b600060c052602060c02001545af16135a657600080fd5b600050610640516135b657600080fd5b60043561066052604435610680526024356106a052610260516106c052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610660a2600062ffffff55005b63a6417ed66000511415613df35762ffffff541561362157600080fd5b600162ffffff55341561363357600080fd5b6060516004358060405190131561364957600080fd5b809190121561365757600080fd5b506060516024358060405190131561366e57600080fd5b809190121561367c57600080fd5b506101406101405161016051610180516101a051600658016100d0565b6101e0526102005261022052610240526101a0526101805261016052610140526101e080518252806020015182602001528060400151826040015280606001518260600152505061026060018152600181602001526001816040015260018160600152506101406004356004811061371057600080fd5b60200201516102606004356004811061372857600080fd5b6020020151808061373857600080fd5b8204905090506102e0526101406024356004811061375557600080fd5b60200201516102606024356004811061376d57600080fd5b6020020151808061377d57600080fd5b82049050905061030052604435670de0b6b3a764000080820282158284830414176137a757600080fd5b809050905090506102e05180806137bd57600080fd5b82049050905061032052610140610360525b610360515160206103605101610360526103606103605110156137f1576137cf565b632ce785a3610380526004356103a0526024356103c052610320516103e052610400610140805182528060200151826020015280604001518260400152806060015182606001525050610460516104405161042051610400516103e0516103c0516103a05160065801612dad565b6104c052610340610360525b610360515260206103605103610360526101406103605110151561388e5761386b565b6104c05161034052610340516103005180820282158284830414176138b257600080fd5b80905090509050670de0b6b3a764000080806138cd57600080fd5b8204905090506104e0526308c379a061050052602061052052602e610540527f45786368616e676520726573756c74656420696e20666577657220636f696e73610560527f207468616e20657870656374656400000000000000000000000000000000000061058052610540506064356104e051101561394e5760a461051cfd5b6105c060008152600081602001526000816040015260008160600152506000610640526004356004811061398157600080fd5b600160c052602060c02001543b61399757600080fd5b600435600481106139a757600080fd5b600160c052602060c020015430186139be57600080fd5b602061072060646323b872dd610660523361068052306106a0526044356106c05261067c6000600435600481106139f457600080fd5b600160c052602060c02001545af1613a0b57600080fd5b60005061072051613a1b57600080fd5b60043560048110613a2b57600080fd5b600160c052602060c02001543b613a4157600080fd5b60043560048110613a5157600080fd5b600160c052602060c02001543018613a6857600080fd5b60206107e0604463095ea7b36107405260043560048110613a8857600080fd5b600060c052602060c0200154610760526044356107805261075c600060043560048110613ab457600080fd5b600160c052602060c02001545af1613acb57600080fd5b6000506107e05060043560048110613ae257600080fd5b600060c052602060c02001543b613af857600080fd5b60043560048110613b0857600080fd5b600060c052602060c02001543018613b1f57600080fd5b60006000602463b6b55f25610800526044356108205261081c600060043560048110613b4a57600080fd5b600060c052602060c02001545af1613b6157600080fd5b60243560048110613b7157600080fd5b600060c052602060c02001543b613b8757600080fd5b60243560048110613b9757600080fd5b600060c052602060c02001543018613bae57600080fd5b600060006024632e1a7d4d61088052610340516108a05261089c600060243560048110613bda57600080fd5b600060c052602060c02001545af1613bf157600080fd5b60243560048110613c0157600080fd5b600160c052602060c02001543b613c1757600080fd5b60243560048110613c2757600080fd5b600160c052602060c02001543018613c3e57600080fd5b602061098060246370a0823161090052306109205261091c60243560048110613c6657600080fd5b600160c052602060c02001545afa613c7d57600080fd5b600050610980516104e0526308c379a06109a05260206109c052602e6109e0527f45786368616e676520726573756c74656420696e20666577657220636f696e73610a00527f207468616e206578706563746564000000000000000000000000000000000000610a20526109e0506064356104e0511015613cff5760a46109bcfd5b60243560048110613d0f57600080fd5b600160c052602060c02001543b613d2557600080fd5b60243560048110613d3557600080fd5b600160c052602060c02001543018613d4c57600080fd5b6020610b00604463a9059cbb610a605233610a80526104e051610aa052610a7c600060243560048110613d7e57600080fd5b600160c052602060c02001545af1613d9557600080fd5b600050610b0051613da557600080fd5b600435610b2052604435610b4052602435610b60526104e051610b8052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610b20a2600062ffffff55005b637d49d875600051141561417b5762ffffff5415613e1057600080fd5b600162ffffff553415613e2257600080fd5b6008543b613e2f57600080fd5b6008543018613e3d57600080fd5b60206101c060046318160ddd6101605261017c6008545afa613e5e57600080fd5b6000506101c051610140526101e0600081526000816020015260008160400152600081606001525061026060008152600081602001526000816040015260008160600152506102e060006004818352015b6102e05160048110613ec057600080fd5b600260c052602060c02001546004358082028215828483041417613ee357600080fd5b80905090509050610140518080613ef957600080fd5b820490509050610300526308c379a0610320526020610340526030610360527f5769746864726177616c20726573756c74656420696e20666577657220636f69610380527f6e73207468616e206578706563746564000000000000000000000000000000006103a0526103605060246102e05160048110613f7957600080fd5b6020020135610300511015613f8f5760a461033cfd5b6102e05160048110613fa057600080fd5b600260c052602060c0200180546103005180821015613fbe57600080fd5b80820390509050815550610300516101e06102e05160048110613fe057600080fd5b60200201526102e05160048110613ff657600080fd5b600060c052602060c02001543b61400c57600080fd5b6102e0516004811061401d57600080fd5b600060c052602060c0200154301861403457600080fd5b6020610480604463a9059cbb6103e052336104005261030051610420526103fc60006102e0516004811061406757600080fd5b600060c052602060c02001545af161407e57600080fd5b6000506104805161408e57600080fd5b5b8151600101808352811415613eaf575b50506008543b6140ae57600080fd5b60085430186140bc57600080fd5b6000600060446379cc67906104a052336104c0526004356104e0526104bc60006008545af16140ea57600080fd5b6101e0516105405261020051610560526102205161058052610240516105a052610260516105c052610280516105e0526102a051610600526102c05161062052610140516004358082101561413e57600080fd5b8082039050905061064052337f9878ca375e106f2a43c3b599fc624568131c4c9a4ba66a14563715763be9d59d610120610540a2600062ffffff55005b6318a7bd766000511415614b425762ffffff541561419857600080fd5b600162ffffff5534156141aa57600080fd5b601154156141b757600080fd5b6008543b6141c457600080fd5b60085430186141d257600080fd5b60206101c060046318160ddd6101605261017c6008545afa6141f357600080fd5b6000506101c051610140526000610140511161420e57600080fd5b6004546004808202821582848304141761422757600080fd5b80905090509050600c808061423b57600080fd5b8204905090506101e052600554610200526102206101406102a0525b6102a0515160206102a051016102a0526102a06102a051101561427957614257565b600658016100d0565b6102c0526102e05261030052610320526102806102a0525b6102a0515260206102a051036102a0526101406102a0511015156142bd5761429a565b6102c080518252806020015182602001528060400151826040015280606001518260600152505061034060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506103c0610340805182528060200151826020015280604001518260400152806060015182606001525050610140610460525b610460515160206104605101610460526104606104605110156143815761435f565b631f30ab74610480526104a061022080518252806020015182602001528060400151826040015280606001518260600152505061052061034080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610778565b6105e052610440610460525b610460515260206104605103610460526101406104605110151561443657614413565b6105e0516104405261060060006004818352015b6103c0610600516004811061445e57600080fd5b6020020180516004610600516004811061447757600080fd5b60200201358082101561448957600080fd5b808203905090508152505b815160010180835281141561444a575b5050610140610640525b610640515160206106405101610640526106406106405110156144d0576144ae565b631f30ab74610660526106806102208051825280602001518260200152806040015182604001528060600151826060015250506107006103c0805182528060200151826020015280604001518260400152806060015182606001525050610760516107405161072051610700516106e0516106c0516106a0516106805160065801610778565b6107c052610620610640525b610640515260206106405103610640526101406106405110151561458557614562565b6107c051610620526107e0600081526000816020015260008160400152600081606001525061086060006004818352015b6106205161034061086051600481106145ce57600080fd5b602002015180820282158284830414176145e757600080fd5b809050905090506104405180806145fd57600080fd5b8204905090506108805260006108a0526103c0610860516004811061462157600080fd5b602002015161088051111561466a57610880516103c0610860516004811061464857600080fd5b60200201518082101561465a57600080fd5b808203905090506108a0526146a0565b6103c0610860516004811061467e57600080fd5b6020020151610880518082101561469457600080fd5b808203905090506108a0525b6101e0516108a05180820282158284830414176146bc57600080fd5b809050905090506402540be40080806146d457600080fd5b8204905090506107e061086051600481106146ee57600080fd5b60200201526103c0610860516004811061470757600080fd5b60200201516107e0610860516004811061472057600080fd5b602002015161020051808202821582848304141761473d57600080fd5b809050905090506402540be400808061475557600080fd5b8204905090508082101561476857600080fd5b80820390509050610860516004811061478057600080fd5b600260c052602060c02001556103c061086051600481106147a057600080fd5b6020020180516107e061086051600481106147ba57600080fd5b6020020151808210156147cc57600080fd5b808203905090508152505b81516001018083528114156145b6575b50506101406108e0525b6108e0515160206108e051016108e0526108e06108e0511015614813576147f1565b631f30ab74610900526109206102208051825280602001518260200152806040015182604001528060600151826060015250506109a06103c0805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610778565b610a60526108c06108e0525b6108e0515260206108e051036108e0526101406108e0511015156148c8576148a5565b610a60516108c052610440516108c051808210156148e557600080fd5b8082039050905061014051808202821582848304141761490457600080fd5b8090509050905061044051808061491a57600080fd5b820490509050610a80526000610a80511161493457600080fd5b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a80511115614986576084610abcfd5b610b4060006004818352015b610b4051600481106149a357600080fd5b600060c052602060c02001543b6149b957600080fd5b610b4051600481106149ca57600080fd5b600060c052602060c020015430186149e157600080fd5b6020610c00604463a9059cbb610b605233610b80526004610b405160048110614a0957600080fd5b6020020135610ba052610b7c6000610b405160048110614a2857600080fd5b600060c052602060c02001545af1614a3f57600080fd5b600050610c0051614a4f57600080fd5b5b8151600101808352811415614992575b50506008543b614a6f57600080fd5b6008543018614a7d57600080fd5b6000600060446379cc6790610c205233610c4052610a8051610c6052610c3c60006008545af1614aac57600080fd5b600435610cc052602435610ce052604435610d0052606435610d20526107e051610d405261080051610d605261082051610d805261084051610da05261062051610dc05261014051610a805180821015614b0557600080fd5b80820390509050610de052337fb964b72f73f5ef5bf0fdc559b2fab9a7b12a39e47817a547f1f0aee47febd602610140610cc0a2600062ffffff55005b639d6b51c46000511415614c23573415614b5b57600080fd5b6064356020518110614b6c57600080fd5b506006543314614b7b57600080fd5b60095415614b8857600080fd5b64012a05f2006044351115614b9c57600080fd5b426203f480818183011015614bb057600080fd5b808201905090506101405261014051600955600435600b55602435600c55604435600d55606435600f5560043561016052602435610180526044356101a0526064356101c052610140517f1a375ce0ce3f550e291d47bc05f93057ed8e1c975cd780c89692bfc2cebe38cf6080610160a2005b632a7dd7cd6000511415614ce6573415614c3c57600080fd5b6006543314614c4a57600080fd5b60006009541142600954111516614c6057600080fd5b6000600955600b5461014052600c5461016052600d5461018052600f546101a0526101405160035561016051600455610180516005556101a051600755610140516101c052610160516101e05261018051610200526101a051610220527f31cd427bd5e7a297fe28319fa83bebe6d4686d8979d3cf4a89a4eec568cde6fb60806101c0a1005b63226840fb6000511415614d14573415614cff57600080fd5b6006543314614d0d57600080fd5b6000600955005b636b441a406000511415614db5573415614d2d57600080fd5b6004356020518110614d3e57600080fd5b506006543314614d4d57600080fd5b600a5415614d5a57600080fd5b426203f480818183011015614d6e57600080fd5b808201905090506101405261014051600a55600435600e55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae6000511415614e31573415614dce57600080fd5b6006543314614ddc57600080fd5b6000600a5411600a5442101516614df257600080fd5b6000600a55600e546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf1936000511415614e5f573415614e4a57600080fd5b6006543314614e5857600080fd5b6000600a55005b6389ead1116000511415614fc4573415614e7857600080fd5b61014060018152600181602001526001816040015260018160600152506101c060006004818352015b6101c05160048110614eb257600080fd5b600060c052602060c02001546101e0526101e0513b614ed057600080fd5b6101e0513018614edf57600080fd5b60206102a060246370a0823161022052306102405261023c6101e0515afa614f0657600080fd5b6000506102a0516101c05160048110614f1e57600080fd5b600260c052602060c020015480821015614f3757600080fd5b80820390509050610200526000610200511115614faf576101e0513b614f5c57600080fd5b6101e0513018614f6b57600080fd5b6020610360604463a9059cbb6102c0526007546102e05261020051610300526102dc60006101e0515af1614f9e57600080fd5b60005061036051614fae57600080fd5b5b5b8151600101808352811415614ea1575b5050005b63e36988536000511415615000573415614fdd57600080fd5b6006543314614feb57600080fd5b4260105411614ff957600080fd5b6001601155005b633046f972600051141561502e57341561501957600080fd5b600654331461502757600080fd5b6000601155005b6323746eb8600051141561509357341561504757600080fd5b6060516004358060405190131561505d57600080fd5b809190121561506b57600080fd5b506004356004811061507c57600080fd5b600060c052602060c020015460005260206000f350005b63b739953e60005114156150f85734156150ac57600080fd5b606051600435806040519013156150c257600080fd5b80919012156150d057600080fd5b50600435600481106150e157600080fd5b600160c052602060c020015460005260206000f350005b63065a80d8600051141561515d57341561511157600080fd5b6060516004358060405190131561512757600080fd5b809190121561513557600080fd5b506004356004811061514657600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d0600051141561518457341561517657600080fd5b60035460005260206000f350005b63ddca3f4360005114156151ab57341561519d57600080fd5b60045460005260206000f350005b63101197c760005114156151d25734156151c457600080fd5b60055460005260206000f350005b638da5cb5b60005114156151f95734156151eb57600080fd5b60065460005260206000f350005b6375a3397a600051141561522057341561521257600080fd5b60075460005260206000f350005b63405e28f8600051141561524757341561523957600080fd5b60095460005260206000f350005b63e0a0b586600051141561526e57341561526057600080fd5b600a5460005260206000f350005b63b4b577ad600051141561529557341561528757600080fd5b600b5460005260206000f350005b6358680d0b60005114156152bc5734156152ae57600080fd5b600c5460005260206000f350005b638981f67c60005114156152e35734156152d557600080fd5b600d5460005260206000f350005b631ec0cdc1600051141561530a5734156152fc57600080fd5b600e5460005260206000f350005b634644b1d6600051141561533157341561532357600080fd5b600f5460005260206000f350005b5b60006000fd5b6102fc615634036102fc6000396102fc615634036000f3000000000000000000000000fdb22e3bf935c1c94254f050bbe093563f53353400000000000000000000000008bed6851cadc4efc91147e3ca63c39406b31a2d00000000000000000000000056a9452024ae2dedb01e1179acb1c152d50c01450000000000000000000000007c8dd1e39cd8142414f24f0ba80638b2e2fa52340000000000000000000000001af3f329e8be154074d8769d1ffa4ee058b1dbc30000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d00000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d5600000000000000000000000086afa7ff694ab8c985b79733745662760e45416900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000989680000000000000000000000000000000000000000000000000000000012a05f2000000000000000000000000005a63602c6a4c67984ef4acf5a0bcc41197d4b534

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

000000000000000000000000fdb22e3bf935c1c94254f050bbe093563f53353400000000000000000000000008bed6851cadc4efc91147e3ca63c39406b31a2d00000000000000000000000056a9452024ae2dedb01e1179acb1c152d50c01450000000000000000000000007c8dd1e39cd8142414f24f0ba80638b2e2fa52340000000000000000000000001af3f329e8be154074d8769d1ffa4ee058b1dbc30000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d00000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d5600000000000000000000000086afa7ff694ab8c985b79733745662760e45416900000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000989680000000000000000000000000000000000000000000000000000000012a05f2000000000000000000000000005a63602c6a4c67984ef4acf5a0bcc41197d4b534

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 000000000000000000000000fdb22e3bf935c1c94254f050bbe093563f533534
Arg [1] : 00000000000000000000000008bed6851cadc4efc91147e3ca63c39406b31a2d
Arg [2] : 00000000000000000000000056a9452024ae2dedb01e1179acb1c152d50c0145
Arg [3] : 0000000000000000000000007c8dd1e39cd8142414f24f0ba80638b2e2fa5234
Arg [4] : 0000000000000000000000001af3f329e8be154074d8769d1ffa4ee058b1dbc3
Arg [5] : 0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d
Arg [6] : 00000000000000000000000055d398326f99059ff775485246999027b3197955
Arg [7] : 000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56
Arg [8] : 00000000000000000000000086afa7ff694ab8c985b79733745662760e454169
Arg [9] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [10] : 0000000000000000000000000000000000000000000000000000000000989680
Arg [11] : 000000000000000000000000000000000000000000000000000000012a05f200
Arg [12] : 0000000000000000000000005a63602c6a4c67984ef4acf5a0bcc41197d4b534


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.