Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
Latest 25 from a total of 20,700 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove_liquidity | 21215496 | 4 days ago | IN | 0 ETH | 0.00187787 | ||||
Remove_liquidity | 21211855 | 5 days ago | IN | 0 ETH | 0.00111703 | ||||
Remove_liquidity... | 21176209 | 10 days ago | IN | 0 ETH | 0.00502572 | ||||
Remove_liquidity | 21176114 | 10 days ago | IN | 0 ETH | 0.00314711 | ||||
Remove_liquidity... | 21045849 | 28 days ago | IN | 0 ETH | 0.00196258 | ||||
Remove_liquidity... | 21006736 | 33 days ago | IN | 0 ETH | 0.00151621 | ||||
Remove_liquidity... | 21003891 | 34 days ago | IN | 0 ETH | 0.00087566 | ||||
Remove_liquidity... | 21002553 | 34 days ago | IN | 0 ETH | 0.00106502 | ||||
Remove_liquidity... | 20829281 | 58 days ago | IN | 0 ETH | 0.00315523 | ||||
Remove_liquidity... | 20795848 | 63 days ago | IN | 0 ETH | 0.00131933 | ||||
Remove_liquidity... | 20795730 | 63 days ago | IN | 0 ETH | 0.00163637 | ||||
Remove_liquidity... | 20546792 | 98 days ago | IN | 0 ETH | 0.00011485 | ||||
Remove_liquidity... | 20546644 | 98 days ago | IN | 0 ETH | 0.00012044 | ||||
Remove_liquidity... | 20543041 | 98 days ago | IN | 0 ETH | 0.00021695 | ||||
Remove_liquidity... | 20472498 | 108 days ago | IN | 0 ETH | 0.00035385 | ||||
Remove_liquidity... | 20402833 | 118 days ago | IN | 0 ETH | 0.00019044 | ||||
Remove_liquidity... | 20353351 | 125 days ago | IN | 0 ETH | 0.00037294 | ||||
Remove_liquidity... | 20351831 | 125 days ago | IN | 0 ETH | 0.00038854 | ||||
Remove_liquidity... | 20310320 | 131 days ago | IN | 0 ETH | 0.00047097 | ||||
Remove_liquidity... | 20300569 | 132 days ago | IN | 0 ETH | 0.00024584 | ||||
Remove_liquidity... | 20267571 | 137 days ago | IN | 0 ETH | 0.00030007 | ||||
Remove_liquidity... | 20252772 | 139 days ago | IN | 0 ETH | 0.00024521 | ||||
Exchange | 20216756 | 144 days ago | IN | 0 ETH | 0.0003005 | ||||
Remove_liquidity... | 20216745 | 144 days ago | IN | 0 ETH | 0.00030284 | ||||
Remove_liquidity... | 20157047 | 152 days ago | IN | 0 ETH | 0.00041928 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.1.0b17
Contract Source Code (Vyper language format)
# (c) Curve.Fi, 2020 # Pools for renBTC/wBTC. Ren can potentially change amount of underlying bitcoins # External Contracts 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 # External Contracts contract cERC20: 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 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 mint(mintAmount: uint256) -> uint256: modifying def redeem(redeemTokens: uint256) -> uint256: modifying def redeemUnderlying(redeemAmount: uint256) -> uint256: modifying def exchangeRateStored() -> uint256: constant def exchangeRateCurrent() -> uint256: constant def supplyRatePerBlock() -> uint256: constant def accrualBlockNumber() -> uint256: constant from vyper.interfaces import ERC20 # This can (and needs to) be changed at compile time N_COINS: constant(int128) = 2 # <- change ZERO256: constant(uint256) = 0 # This hack is really bad XXX ZEROS: constant(uint256[N_COINS]) = [ZERO256, ZERO256] # <- change USE_LENDING: constant(bool[N_COINS]) = [True, False] FEE_DENOMINATOR: constant(uint256) = 10 ** 10 LENDING_PRECISION: constant(uint256) = 10 ** 18 PRECISION: constant(uint256) = 10 ** 18 # The precision to convert to PRECISION_MUL: constant(uint256[N_COINS]) = [convert(10000000000, uint256), convert(10000000000, uint256)] # PRECISION_MUL: constant(uint256[N_COINS]) = [ # PRECISION / convert(PRECISION, uint256), # DAI # PRECISION / convert(10 ** 6, uint256), # USDC # PRECISION / convert(10 ** 6, uint256)] # USDT admin_actions_delay: constant(uint256) = 3 * 86400 min_ramp_time: constant(uint256) = 86400 # Events TokenExchange: 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}) RemoveLiquidityOne: event({provider: indexed(address), token_amount: uint256, coin_amount: 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)}) CommitNewFee: event({deadline: indexed(timestamp), fee: uint256, admin_fee: uint256}) NewFee: event({fee: uint256, admin_fee: uint256}) RampA: event({old_A: uint256, new_A: uint256, initial_time: timestamp, future_time: timestamp}) StopRampA: event({A: uint256, t: timestamp}) coins: public(address[N_COINS]) balances: public(uint256[N_COINS]) fee: public(uint256) # fee * 1e10 admin_fee: public(uint256) # admin_fee * 1e10 max_admin_fee: constant(uint256) = 5 * 10 ** 9 max_fee: constant(uint256) = 5 * 10 ** 9 max_A: constant(uint256) = 10 ** 6 max_A_change: constant(uint256) = 10 owner: public(address) token: ERC20m initial_A: public(uint256) future_A: public(uint256) initial_A_time: public(timestamp) future_A_time: public(timestamp) admin_actions_deadline: public(timestamp) transfer_ownership_deadline: public(timestamp) future_fee: public(uint256) future_admin_fee: public(uint256) future_owner: public(address) kill_deadline: timestamp kill_deadline_dt: constant(uint256) = 2 * 30 * 86400 is_killed: bool @public def __init__(_coins: address[N_COINS], _pool_token: address, _A: uint256, _fee: uint256): """ _coins: Addresses of ERC20 conracts of coins _pool_token: Address of the token representing LP share _A: Amplification coefficient multiplied by n * (n - 1) _fee: Fee to charge for exchanges """ for i in range(N_COINS): assert _coins[i] != ZERO_ADDRESS self.balances[i] = 0 self.coins = _coins self.initial_A = _A self.future_A = _A self.fee = _fee self.owner = msg.sender self.kill_deadline = block.timestamp + kill_deadline_dt self.is_killed = False self.token = ERC20m(_pool_token) @constant @private def _A() -> uint256: """ Handle ramping A up or down """ t1: timestamp = self.future_A_time A1: uint256 = self.future_A if block.timestamp < t1: A0: uint256 = self.initial_A t0: timestamp = self.initial_A_time # Expressions in uint256 cannot have negative numbers, thus "if" if A1 > A0: return A0 + (A1 - A0) * (block.timestamp - t0) / (t1 - t0) else: return A0 - (A0 - A1) * (block.timestamp - t0) / (t1 - t0) else: # when t1 == 0 or block.timestamp >= t1 return A1 @constant @public def A() -> uint256: return self._A() @private @constant def _rates() -> uint256[N_COINS]: result: uint256[N_COINS] = PRECISION_MUL use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): rate: uint256 = LENDING_PRECISION # Used with no lending if use_lending[i]: rate = cERC20(self.coins[i]).exchangeRateCurrent() result[i] *= rate 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] / LENDING_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], amp: uint256) -> uint256: S: uint256 = 0 for _x in xp: S += _x if S == 0: return 0 Dprev: uint256 = 0 D: uint256 = S Ann: uint256 = amp * N_COINS for _i in range(255): D_P: uint256 = D for _x in xp: D_P = D_P * D / (_x * N_COINS) # If division by 0, this will be borked: only withdrawal will work. And that is good Dprev = D D = (Ann * S + D_P * N_COINS) * D / ((Ann - 1) * D + (N_COINS + 1) * D_P) # Equality with the precision of 1 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], amp: uint256) -> uint256: return self.get_D(self._xp_mem(rates, _balances), amp) @public @constant def get_virtual_price() -> uint256: """ Returns portfolio virtual price (for calculating profit) scaled up by 1e18 """ D: uint256 = self.get_D(self._xp(self._rates()), self._A()) # D is in the units similar to DAI (e.g. converted to precision 1e18) # When balanced, D = n * x_u - total virtual value of the portfolio token_supply: uint256 = self.token.totalSupply() return D * PRECISION / token_supply @public @constant def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256: """ Simplified method to calculate addition or reduction in token supply at deposit or withdrawal without taking fees into account (but looking at slippage). Needed to prevent front-running, not for precise calculations! """ _balances: uint256[N_COINS] = self.balances rates: uint256[N_COINS] = self._rates() amp: uint256 = self._A() D0: uint256 = self.get_D_mem(rates, _balances, amp) 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, amp) 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): # Amounts is amounts of c-tokens assert not self.is_killed use_lending: bool[N_COINS] = USE_LENDING fees: uint256[N_COINS] = ZEROS _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) _admin_fee: uint256 = self.admin_fee amp: uint256 = self._A() token_supply: uint256 = self.token.totalSupply() rates: uint256[N_COINS] = self._rates() # Initial invariant D0: uint256 = 0 old_balances: uint256[N_COINS] = self.balances if token_supply > 0: D0 = self.get_D_mem(rates, old_balances, amp) new_balances: uint256[N_COINS] = old_balances for i in range(N_COINS): if token_supply == 0: assert amounts[i] > 0 # balances store amounts of c-tokens new_balances[i] = old_balances[i] + amounts[i] # Invariant after change D1: uint256 = self.get_D_mem(rates, new_balances, amp) assert D1 > D0 # We need to recalculate the invariant accounting for fees # to calculate fair user's share D2: uint256 = D1 if token_supply > 0: # Only account for fees if we are not the first to deposit 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] * _admin_fee / FEE_DENOMINATOR) new_balances[i] -= fees[i] D2 = self.get_D_mem(rates, new_balances, amp) else: self.balances = new_balances # Calculate, how much pool tokens to mint mint_amount: uint256 = 0 if token_supply == 0: mint_amount = D1 # Take the dust if there was any else: mint_amount = token_supply * (D2 - D0) / D0 assert mint_amount >= min_mint_amount, "Slippage screwed you" # Take coins from the sender for i in range(N_COINS): if amounts[i] > 0: assert_modifiable( cERC20(self.coins[i]).transferFrom(msg.sender, self, amounts[i])) # Mint pool tokens 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: # x in the input is converted to the same price/precision assert (i != j) and (i >= 0) and (j >= 0) and (i < N_COINS) and (j < N_COINS) amp: uint256 = self._A() D: uint256 = self.get_D(_xp, amp) c: uint256 = D S_: uint256 = 0 Ann: uint256 = amp * 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 # - D y_prev: uint256 = 0 y: uint256 = D for _i in range(255): y_prev = y y = (y*y + c) / (2 * y + b - D) # Equality with the precision of 1 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: # dx and dy in c-units rates: uint256[N_COINS] = self._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 - 1) * PRECISION / rates[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @public @constant def get_dy_underlying(i: int128, j: int128, dx: uint256) -> uint256: # dx and dy in underlying units rates: uint256[N_COINS] = self._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 - 1) / precisions[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @private def _exchange(i: int128, j: int128, dx: uint256, rates: uint256[N_COINS]) -> uint256: assert not self.is_killed # dx and dy are in c-tokens old_balances: uint256[N_COINS] = self.balances xp: uint256[N_COINS] = self._xp_mem(rates, old_balances) x: uint256 = xp[i] + dx * rates[i] / PRECISION y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = xp[j] - y - 1 # -1 just in case there were some rounding errors dy_fee: uint256 = dy * self.fee / FEE_DENOMINATOR dy_admin_fee: uint256 = dy_fee * self.admin_fee / FEE_DENOMINATOR # Convert all to real units dy = (dy - dy_fee) * PRECISION / rates[j] dy_admin_fee = dy_admin_fee * PRECISION / rates[j] # Change balances exactly in same way as we change actual ERC20 coin amounts self.balances[i] = old_balances[i] + dx # When rounding errors happen, we undercharge admin fee in favor of LP self.balances[j] = old_balances[j] - dy - dy_admin_fee return dy @public @nonreentrant('lock') def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): rates: uint256[N_COINS] = self._rates() dy: uint256 = self._exchange(i, j, dx, rates) assert dy >= min_dy, "Exchange resulted in fewer coins than expected" use_lending: bool[N_COINS] = USE_LENDING assert_modifiable(cERC20(self.coins[i]).transferFrom(msg.sender, self, dx)) assert_modifiable(cERC20(self.coins[j]).transfer(msg.sender, dy)) log.TokenExchange(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 # Fees are unused but we've got them historically in event use_lending: bool[N_COINS] = USE_LENDING 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(cERC20(self.coins[i]).transfer(msg.sender, value)) self.token.burnFrom(msg.sender, _amount) # Will raise if not enough 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 use_lending: bool[N_COINS] = USE_LENDING token_supply: uint256 = self.token.totalSupply() assert token_supply > 0 _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) _admin_fee: uint256 = self.admin_fee rates: uint256[N_COINS] = self._rates() amp: uint256 = self._A() old_balances: uint256[N_COINS] = self.balances new_balances: uint256[N_COINS] = old_balances D0: uint256 = self.get_D_mem(rates, old_balances, amp) for i in range(N_COINS): new_balances[i] -= amounts[i] D1: uint256 = self.get_D_mem(rates, new_balances, amp) 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] * _admin_fee / FEE_DENOMINATOR) new_balances[i] -= fees[i] D2: uint256 = self.get_D_mem(rates, new_balances, amp) token_amount: uint256 = (D0 - D2) * token_supply / D0 + 1 assert token_amount <= max_burn_amount, "Slippage screwed you" for i in range(N_COINS): if amounts[i] > 0: assert_modifiable(cERC20(self.coins[i]).transfer(msg.sender, amounts[i])) self.token.burnFrom(msg.sender, token_amount) # Will raise if not enough log.RemoveLiquidityImbalance(msg.sender, amounts, fees, D1, token_supply - token_amount) @private @constant def get_y_D(A: uint256, i: int128, xp: uint256[N_COINS], D: uint256) -> uint256: """ Calculate x[i] if one reduces D from being calculated for xp to D Done by solving quadratic equation iteratively. x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A) x_1**2 + b*x_1 = c x_1 = (x_1**2 + c) / (2*x_1 + b) """ # x in the input is converted to the same price/precision assert (i >= 0) and (i < N_COINS) c: uint256 = D S_: uint256 = 0 Ann: uint256 = A * N_COINS _x: uint256 = 0 for _i in range(N_COINS): if _i != i: _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) # Equality with the precision of 1 if y > y_prev: if y - y_prev <= 1: break else: if y_prev - y <= 1: break return y @private @constant def _calc_withdraw_one_coin(_token_amount: uint256, i: int128, rates: uint256[N_COINS]) -> (uint256, uint256): # First, need to calculate # * Get current D # * Solve Eqn against y_i for D - _token_amount amp: uint256 = self._A() _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1)) precisions: uint256[N_COINS] = PRECISION_MUL total_supply: uint256 = self.token.totalSupply() xp: uint256[N_COINS] = self._xp(rates) D0: uint256 = self.get_D(xp, amp) D1: uint256 = D0 - _token_amount * D0 / total_supply xp_reduced: uint256[N_COINS] = xp new_y: uint256 = self.get_y_D(amp, i, xp, D1) dy_0: uint256 = (xp[i] - new_y) / precisions[i] # w/o fees for j in range(N_COINS): dx_expected: uint256 = 0 if j == i: dx_expected = xp[j] * D1 / D0 - new_y else: dx_expected = xp[j] - xp[j] * D1 / D0 xp_reduced[j] -= _fee * dx_expected / FEE_DENOMINATOR dy: uint256 = xp_reduced[i] - self.get_y_D(amp, i, xp_reduced, D1) dy = (dy - 1) / precisions[i] # Withdraw less to account for rounding errors return dy, dy_0 - dy @public @constant def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: rates: uint256[N_COINS] = self._rates() return self._calc_withdraw_one_coin(_token_amount, i, rates)[0] @public @nonreentrant('lock') def remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256): """ Remove _amount of liquidity all in a form of coin i """ dy: uint256 = 0 dy_fee: uint256 = 0 rates: uint256[N_COINS] = self._rates() dy, dy_fee = self._calc_withdraw_one_coin(_token_amount, i, rates) assert dy >= min_amount, "Not enough coins removed" self.balances[i] -= (dy + dy_fee * self.admin_fee / FEE_DENOMINATOR) self.token.burnFrom(msg.sender, _token_amount) assert_modifiable(ERC20(self.coins[i]).transfer(msg.sender, dy)) log.RemoveLiquidityOne(msg.sender, _token_amount, dy) ### Admin functions ### @public def ramp_A(_future_A: uint256, _future_time: timestamp): assert msg.sender == self.owner assert block.timestamp >= self.initial_A_time + min_ramp_time assert _future_time >= block.timestamp + min_ramp_time _initial_A: uint256 = self._A() assert (_future_A > 0) and (_future_A < max_A) assert ((_future_A >= _initial_A) and (_future_A <= _initial_A * max_A_change)) or\ ((_future_A < _initial_A) and (_future_A * max_A_change >= _initial_A)) self.initial_A = _initial_A self.future_A = _future_A self.initial_A_time = block.timestamp self.future_A_time = _future_time log.RampA(_initial_A, _future_A, block.timestamp, _future_time) @public def stop_ramp_A(): assert msg.sender == self.owner current_A: uint256 = self._A() self.initial_A = current_A self.future_A = current_A self.initial_A_time = block.timestamp self.future_A_time = block.timestamp # now (block.timestamp < t1) is always False, so we return saved A log.StopRampA(current_A, block.timestamp) @public def commit_new_fee(new_fee: uint256, new_admin_fee: uint256): assert msg.sender == self.owner assert self.admin_actions_deadline == 0 assert new_admin_fee <= max_admin_fee assert new_fee <= max_fee _deadline: timestamp = block.timestamp + admin_actions_delay self.admin_actions_deadline = _deadline self.future_fee = new_fee self.future_admin_fee = new_admin_fee log.CommitNewFee(_deadline, new_fee, new_admin_fee) @public def apply_new_fee(): assert msg.sender == self.owner assert self.admin_actions_deadline <= block.timestamp\ and self.admin_actions_deadline > 0 self.admin_actions_deadline = 0 _fee: uint256 = self.future_fee _admin_fee: uint256 = self.future_admin_fee self.fee = _fee self.admin_fee = _admin_fee log.NewFee(_fee, _admin_fee) @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_admin_fees(): assert msg.sender == self.owner for i in range(N_COINS): c: address = self.coins[i] value: uint256 = cERC20(c).balanceOf(self) - self.balances[i] if value > 0: assert_modifiable(cERC20(c).transfer(msg.sender, 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 Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","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[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityOne","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"token_amount","indexed":false},{"type":"uint256","name":"coin_amount","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","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":"CommitNewFee","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewFee","inputs":[{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"RampA","inputs":[{"type":"uint256","name":"old_A","indexed":false},{"type":"uint256","name":"new_A","indexed":false},{"type":"uint256","name":"initial_time","indexed":false,"unit":"sec"},{"type":"uint256","name":"future_time","indexed":false,"unit":"sec"}],"anonymous":false,"type":"event"},{"name":"StopRampA","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"t","indexed":false,"unit":"sec"}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[2]","name":"_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"}],"constant":false,"payable":false,"type":"constructor"},{"name":"A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":5227},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":967716},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":3810860},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":5858197},{"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":2327087},{"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":2326882},{"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":4782610},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[2]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":153460},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":5857985},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":10920},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_amount"}],"constant":false,"payable":false,"type":"function","gas":3677379},{"name":"ramp_A","outputs":[],"inputs":[{"type":"uint256","name":"_future_A"},{"type":"uint256","unit":"sec","name":"_future_time"}],"constant":false,"payable":false,"type":"function","gas":151937},{"name":"stop_ramp_A","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":148697},{"name":"commit_new_fee","outputs":[],"inputs":[{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"constant":false,"payable":false,"type":"function","gas":110521},{"name":"apply_new_fee","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":97220},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21955},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74632},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60688},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22045},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":12424},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37998},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22135},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2310},{"name":"balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2340},{"name":"fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"initial_A","outputs":[{"type":"uint256","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":"initial_A_time","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2321},{"name":"future_A_time","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2351},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2381},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2411},{"name":"future_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2441},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2471},{"name":"future_owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2501}]
Contract Creation Code
740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05260a06153c86101403934156100a157600080fd5b60206153c860c03960c05160205181106100ba57600080fd5b50602060206153c80160c03960c05160205181106100d757600080fd5b50602060406153c80160c03960c05160205181106100f457600080fd5b506101e060006002818352015b60006101406101e0516002811061011757600080fd5b60200201511861012657600080fd5b60006101e0516002811061013957600080fd5b600160c052602060c02001555b8151600101808352811415610101575b5050600060c052602060c020610140805182558060200151600183015550506101a0516006556101a0516007556101c0516002553360045542624f1a008181830110156101a257600080fd5b80820190509050600f556000601055610180516005556153b056600436101561000d576151ed565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052600015610244575b61014052600954610160526007546101805261016051421015610231576006546101c0526008546101e0526101c05161018051111561018a576101c051610180516101c051808210156100fb57600080fd5b80820390509050426101e0518082101561011457600080fd5b80820390509050808202821582848304141761012f57600080fd5b80905090509050610160516101e0518082101561014b57600080fd5b80820390509050808061015d57600080fd5b82049050905081818301101561017257600080fd5b8082019050905060005260005161014051565061022c565b6101c0516101c05161018051808210156101a357600080fd5b80820390509050426101e051808210156101bc57600080fd5b8082039050905080820282158284830414176101d757600080fd5b80905090509050610160516101e051808210156101f357600080fd5b80820390509050808061020557600080fd5b8204905090508082101561021857600080fd5b808203905090506000526000516101405156505b610242565b610180516000526000516101405156505b005b63f446c1d0600051141561027957341561025d57600080fd5b600658016100a9565b610140526101405160005260206000f350005b600015610403575b610140526101606402540be40081526402540be4008160200152506101a06001815260008160200152506101e060006002818352015b670de0b6b3a7640000610200526101a06101e051600281106102d857600080fd5b602002015115610378576101e051600281106102f357600080fd5b600060c052602060c02001543b61030957600080fd5b6101e0516002811061031a57600080fd5b600060c052602060c0200154301861033157600080fd5b6020610280600463bd6d894d6102205261023c6101e0516002811061035557600080fd5b600060c052602060c02001545afa61036c57600080fd5b60005061028051610200525b6101606101e0516002811061038c57600080fd5b6020020180516102005180820282158284830414176103aa57600080fd5b809050905090508152505b81516001018083528114156102b7575b505060406102a0525b60006102a0511115156103e0576103fc565b60206102a05103610160015160206102a051036102a0526103ce565b6101405156005b60001561050c575b6101805261014052610160526101a0610140805182528060200151826020015250506101e060006002818352015b6101a06101e0516002811061044d57600080fd5b60200201516101e0516002811061046357600080fd5b600160c052602060c0200154808202821582848304141761048357600080fd5b80905090509050670de0b6b3a7640000808061049e57600080fd5b8204905090506101a06101e051600281106104b857600080fd5b60200201525b8151600101808352811415610439575b50506040610200525b6000610200511115156104e957610505565b602061020051036101a0015160206102005103610200526104d7565b6101805156005b600015610619575b6101c0526101405261016052610180526101a0526101e06101408051825280602001518260200152505061022060006002818352015b6101e0610220516002811061055e57600080fd5b6020020151610180610220516002811061057757600080fd5b6020020151808202821582848304141761059057600080fd5b80905090509050670de0b6b3a764000080806105ab57600080fd5b8204905090506101e061022051600281106105c557600080fd5b60200201525b815160010180835281141561054a575b50506040610240525b6000610240511115156105f657610612565b602061024051036101e0015160206102405103610240526105e4565b6101c05156005b600015610903575b6101a05261014052610160526101805260006101c05261020060006002818352015b6020610200510261014001516101e0526101c080516101e05181818301101561066b57600080fd5b808201905090508152505b8151600101808352811415610643575b50506101c05115156106a15760006000526000516101a05156505b6000610240526101c0516102605261018051600280820282158284830414176106c957600080fd5b80905090509050610280526102a0600060ff818352015b610260516102c05261030060006002818352015b6020610300510261014001516102e0526102c05161026051808202821582848304141761072057600080fd5b809050905090506102e0516002808202821582848304141761074157600080fd5b80905090509050808061075357600080fd5b8204905090506102c0525b81516001018083528114156106f4575b50506102605161024052610280516101c051808202821582848304141761079457600080fd5b809050905090506102c051600280820282158284830414176107b557600080fd5b809050905090508181830110156107cb57600080fd5b808201905090506102605180820282158284830414176107ea57600080fd5b809050905090506102805160018082101561080457600080fd5b8082039050905061026051808202821582848304141761082357600080fd5b8090509050905060036102c051808202821582848304141761084457600080fd5b8090509050905081818301101561085a57600080fd5b80820190509050808061086c57600080fd5b82049050905061026052610240516102605111156108b357600161026051610240518082101561089b57600080fd5b808203905090501115156108ae576108ef565b6108de565b60016102405161026051808210156108ca57600080fd5b808203905090501115156108dd576108ef565b5b5b81516001018083528114156106e0575b5050610260516000526000516101a0515650005b600015610a75575b6101e0526101405261016052610180526101a0526101c052610140610480525b6104805151602061048051016104805261048061048051101561094d5761092b565b633842f7766104a0526104c0610140610340525b6103405151602061034051016103405261034061034051101561098357610961565b63575e285f61036052610380610140805182528060200151826020015250506103c0610180805182528060200151826020015250506103e0516103c0516103a0516103805160065801610514565b6104405261046052610320610340525b6103405152602061034051036103405261014061034051101515610a04576109e1565b610440805182528060200151826020015250506101c05161050052610500516104e0516104c05160065801610621565b61056052610460610480525b6104805152602061048051036104805261014061048051101515610a6357610a40565b610560516000526000516101e0515650005b63bb7b8b806000511415610d0f573415610a8e57600080fd5b610140610560525b61056051516020610560510161056052610560610560511015610ab857610a96565b633842f776610580526105a0610140610420525b61042051516020610420510161042052610420610420511015610aee57610acc565b6396b414ec610440526104606101406103c0525b6103c0515160206103c051016103c0526103c06103c0511015610b2457610b02565b60065801610281565b6103e052610400526103a06103c0525b6103c0515260206103c051036103c0526101406103c051101515610b6057610b3d565b6103e08051825280602001518260200152505061048051610460516006580161040b565b6104e05261050052610400610420525b6104205152602061042051036104205261014061042051101515610bb757610b94565b6104e080518252806020015182602001525050610140610520525b61052051516020610520510161052052610520610520511015610bf457610bd2565b600658016100a9565b61054052610500610520525b6105205152602061052051036105205261014061052051101515610c2c57610c09565b610540516105e0526105e0516105c0516105a05160065801610621565b61064052610540610560525b6105605152602061056051036105605261014061056051101515610c7857610c55565b61064051610140526005543b610c8d57600080fd5b6005543018610c9b57600080fd5b60206106e060046318160ddd6106805261069c6005545afa610cbc57600080fd5b6000506106e0516106605261014051670de0b6b3a76400008082028215828483041417610ce857600080fd5b80905090509050610660518080610cfe57600080fd5b82049050905060005260206000f350005b63ed8e84f3600051141561110f573415610d2857600080fd5b60443560028110610d3857600080fd5b5061014060018060c052602060c02054825260018160c052602060c0200154826020015250506101806101405161016051610180516101a05160065801610281565b6101e052610200526101a0526101805261016052610140526101e0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b6102605261022052610200526101e0526101c0526101a05261018052610160526101405261026051610220526101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015610e2457610e02565b636b7dd0846102c0526102e061018080518252806020015182602001525050610320610140805182528060200151826020015250506102205161036052610360516103405161032051610300516102e0516006580161090b565b6103c0526102806102a0525b6102a0515260206102a051036102a0526101406102a051101515610ead57610e8a565b6103c051610280526103e060006002818352015b60443515610f19576101406103e05160028110610edd57600080fd5b60200201805160046103e05160028110610ef657600080fd5b6020020135818183011015610f0a57600080fd5b80820190509050815250610f63565b6101406103e05160028110610f2d57600080fd5b60200201805160046103e05160028110610f4657600080fd5b602002013580821015610f5857600080fd5b808203905090508152505b5b8151600101808352811415610ec1575b5050610140610420525b61042051516020610420510161042052610420610420511015610fa057610f7e565b636b7dd08461044052610460610180805182528060200151826020015250506104a061014080518252806020015182602001525050610220516104e0526104e0516104c0516104a05161048051610460516006580161090b565b61054052610400610420525b610420515260206104205103610420526101406104205110151561102957611006565b61054051610400526005543b61103e57600080fd5b600554301861104c57600080fd5b60206105e060046318160ddd6105805261059c6005545afa61106d57600080fd5b6000506105e05161056052600061060052604435156110ab5761040051610280518082101561109b57600080fd5b80820390509050610600526110cc565b6102805161040051808210156110c057600080fd5b80820390509050610600525b610600516105605180820282158284830414176110e857600080fd5b809050905090506102805180806110fe57600080fd5b82049050905060005260206000f350005b630b4c7e4d6000511415611af55762ffffff541561112c57600080fd5b600162ffffff55341561113e57600080fd5b6010541561114b57600080fd5b6101406001815260008160200152506101806000815260008160200152506002546002808202821582848304141761118257600080fd5b809050905090506004808061119657600080fd5b8204905090506101c0526003546101e0526101405161016051610180516101a0516101c0516101e05161020051600658016100a9565b61024052610200526101e0526101c0526101a05261018052610160526101405261024051610200526005543b61120157600080fd5b600554301861120f57600080fd5b60206102e060046318160ddd6102805261029c6005545afa61123057600080fd5b6000506102e05161026052610300610140610340525b6103405151602061034051016103405261034061034051101561126857611246565b60065801610281565b6103605261038052610320610340525b61034051526020610340510361034052610140610340511015156112a457611281565b6103608051825280602001518260200152505060006103a0526103c060018060c052602060c02054825260018160c052602060c02001548260200152505060006102605111156113aa57610140610400525b61040051516020610400510161040052610400610400511015611318576112f6565b636b7dd08461042052610440610300805182528060200151826020015250506104806103c080518252806020015182602001525050610200516104c0526104c0516104a0516104805161046051610440516006580161090b565b610520526103e0610400525b61040051526020610400510361040052610140610400511015156113a15761137e565b610520516103a0525b6105406103c08051825280602001518260200152505061058060006002818352015b6102605115156113fb576000600461058051600281106113eb57600080fd5b6020020135116113fa57600080fd5b5b6103c0610580516002811061140f57600080fd5b60200201516004610580516002811061142757600080fd5b602002013581818301101561143b57600080fd5b80820190509050610540610580516002811061145657600080fd5b60200201525b81516001018083528114156113cc575b50506101406105c0525b6105c0515160206105c051016105c0526105c06105c051101561149857611476565b636b7dd0846105e0526106006103008051825280602001518260200152505061064061054080518252806020015182602001525050610200516106805261068051610660516106405161062051610600516006580161090b565b6106e0526105a06105c0525b6105c0515260206105c051036105c0526101406105c051101515611521576114fe565b6106e0516105a0526103a0516105a0511161153b57600080fd5b6105a05161070052600061026051111561184e5761072060006002818352015b6105a0516103c0610720516002811061157357600080fd5b6020020151808202821582848304141761158c57600080fd5b809050905090506103a05180806115a257600080fd5b8204905090506107405260006107605261054061072051600281106115c657600080fd5b602002015161074051111561160f576107405161054061072051600281106115ed57600080fd5b6020020151808210156115ff57600080fd5b8082039050905061076052611645565b610540610720516002811061162357600080fd5b6020020151610740518082101561163957600080fd5b80820390509050610760525b6101c05161076051808202821582848304141761166157600080fd5b809050905090506402540be400808061167957600080fd5b820490509050610180610720516002811061169357600080fd5b602002015261054061072051600281106116ac57600080fd5b602002015161018061072051600281106116c557600080fd5b60200201516101e05180820282158284830414176116e257600080fd5b809050905090506402540be40080806116fa57600080fd5b8204905090508082101561170d57600080fd5b80820390509050610720516002811061172557600080fd5b600160c052602060c0200155610540610720516002811061174557600080fd5b602002018051610180610720516002811061175f57600080fd5b60200201518082101561177157600080fd5b808203905090508152505b815160010180835281141561155b575b5050610140610780525b610780515160206107805101610780526107206107805110156117b857611796565b636b7dd0846107a0526107c0610300805182528060200151826020015250506108006105408051825280602001518260200152505061020051610840526108405161082051610800516107e0516107c0516006580161090b565b6108a052610700610780525b61078051526020610780510361078052610140610780511015156118415761181e565b6108a0516107005261186c565b600160c052602060c020610540805182558060200151600183015550505b60006108c052610260511515611889576105a0516108c0526118de565b61026051610700516103a051808210156118a257600080fd5b8082039050905080820282158284830414176118bd57600080fd5b809050905090506103a05180806118d357600080fd5b8204905090506108c0525b6308c379a06108e0526020610900526014610920527f536c697070616765207363726577656420796f7500000000000000000000000061094052610920506044356108c05110156119305760846108fcfd5b61098060006002818352015b60006004610980516002811061195157600080fd5b60200201351115611a1f57610980516002811061196d57600080fd5b600060c052602060c02001543b61198357600080fd5b610980516002811061199457600080fd5b600060c052602060c020015430186119ab57600080fd5b6020610a6060646323b872dd6109a052336109c052306109e052600461098051600281106119d857600080fd5b6020020135610a00526109bc600061098051600281106119f757600080fd5b600060c052602060c02001545af1611a0e57600080fd5b600050610a6051611a1e57600080fd5b5b5b815160010180835281141561193c575b50506005543b611a3f57600080fd5b6005543018611a4d57600080fd5b6000600060446340c10f19610a805233610aa0526108c051610ac052610a9c60006005545af1611a7c57600080fd5b600435610b2052602435610b405261018051610b60526101a051610b80526105a051610ba052610260516108c051818183011015611ab957600080fd5b80820190509050610bc052337f26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a76860c0610b20a2600062ffffff55005b600015611f37575b6101e0526101405261016052610180526101a0526101c0526000610140511215610160516101405114151660006101605112151660026101405112166002610160511216611b4a57600080fd5b6101405161016051610180516101a0516101c0516101e05161020051600658016100a9565b61024052610200526101e0526101c0526101a05261018052610160526101405261024051610200526101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051633842f7766102a0526102c06101a0805182528060200151826020015250506102005161030052610300516102e0516102c05160065801610621565b61036052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103605161026052610260516103805260006103a0526102005160028082028215828483041417611c5757600080fd5b809050905090506103c05260006103e05261040060006002818352015b61014051610400511415611c8f57610180516103e052611cc5565b61016051610400511815611cbf576101a06104005160028110611cb157600080fd5b60200201516103e052611cc4565b611d41565b5b6103a080516103e051818183011015611cdd57600080fd5b8082019050905081525061038051610260518082028215828483041417611d0357600080fd5b809050905090506103e05160028082028215828483041417611d2457600080fd5b809050905090508080611d3657600080fd5b820490509050610380525b8151600101808352811415611c74575b505061038051610260518082028215828483041417611d6f57600080fd5b809050905090506103c05160028082028215828483041417611d9057600080fd5b809050905090508080611da257600080fd5b820490509050610380526103a051610260516103c0518080611dc357600080fd5b820490509050818183011015611dd857600080fd5b80820190509050610420526000610440526102605161046052610480600060ff818352015b610460516104405261046051610460518082028215828483041417611e2157600080fd5b8090509050905061038051818183011015611e3b57600080fd5b808201905090506002610460518082028215828483041417611e5c57600080fd5b8090509050905061042051818183011015611e7657600080fd5b808201905090506102605180821015611e8e57600080fd5b808203905090508080611ea057600080fd5b8204905090506104605261044051610460511115611ee7576001610460516104405180821015611ecf57600080fd5b80820390509050111515611ee257611f23565b611f12565b6001610440516104605180821015611efe57600080fd5b80820390509050111515611f1157611f23565b5b5b8151600101808352811415611dfd575b5050610460516000526000516101e0515650005b635e0d443f6000511415612287573415611f5057600080fd5b60605160043580604051901315611f6657600080fd5b8091901215611f7457600080fd5b5060605160243580604051901315611f8b57600080fd5b8091901215611f9957600080fd5b50610140610140516101605160065801610281565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec610240526102606101408051825280602001518260200152505061028051610260516006580161040b565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506101e06004356002811061206a57600080fd5b60200201516044356101406004356002811061208557600080fd5b6020020151808202821582848304141761209e57600080fd5b80905090509050670de0b6b3a764000080806120b957600080fd5b8204905090508181830110156120ce57600080fd5b8082019050905061032052610140610360525b61036051516020610360510161036052610360610360511015612103576120e1565b63232dd1c9610380526004356103a0526024356103c052610320516103e0526104006101e08051825280602001518260200152505061042051610400516103e0516103c0516103a05160065801611afd565b61048052610340610360525b610360515260206103605103610360526101406103605110151561218457612161565b61048051610340526101e06024356002811061219f57600080fd5b602002015161034051808210156121b557600080fd5b808203905090506001808210156121cb57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176121ef57600080fd5b809050905090506101406024356002811061220957600080fd5b6020020151808061221957600080fd5b8204905090506104a0526002546104a051808202821582848304141761223e57600080fd5b809050905090506402540be400808061225657600080fd5b8204905090506104c0526104a0516104c0518082101561227557600080fd5b8082039050905060005260206000f350005b6307211ef760005114156125b05734156122a057600080fd5b606051600435806040519013156122b657600080fd5b80919012156122c457600080fd5b50606051602435806040519013156122db57600080fd5b80919012156122e957600080fd5b50610140610140516101605160065801610281565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec610240526102606101408051825280602001518260200152505061028051610260516006580161040b565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506103206402540be40081526402540be4008160200152506101e0600435600281106123d157600080fd5b6020020151604435610320600435600281106123ec57600080fd5b6020020151808202821582848304141761240557600080fd5b8090509050905081818301101561241b57600080fd5b80820190509050610360526101406103a0525b6103a0515160206103a051016103a0526103a06103a05110156124505761242e565b63232dd1c96103c0526004356103e0526024356104005261036051610420526104406101e080518252806020015182602001525050610460516104405161042051610400516103e05160065801611afd565b6104c0526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156124d1576124ae565b6104c051610380526101e0602435600281106124ec57600080fd5b6020020151610380518082101561250257600080fd5b8082039050905060018082101561251857600080fd5b808203905090506103206024356002811061253257600080fd5b6020020151808061254257600080fd5b8204905090506104e0526002546104e051808202821582848304141761256757600080fd5b809050905090506402540be400808061257f57600080fd5b820490509050610500526104e051610500518082101561259e57600080fd5b8082039050905060005260206000f350005b600015612a49575b6101e0526101405261016052610180526101a0526101c052601054156125dd57600080fd5b61020060018060c052602060c02054825260018160c052602060c0200154826020015250506102406101405161016051610180516101a0516101c0516101e0516102005161022051610240516102605163575e285f6102a0526102c06101a0805182528060200151826020015250506103006102008051825280602001518260200152505061032051610300516102e0516102c05160065801610514565b610380526103a052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103808051825280602001518260200152505061024061014051600281106126d257600080fd5b6020020151610180516101a061014051600281106126ef57600080fd5b6020020151808202821582848304141761270857600080fd5b80905090509050670de0b6b3a7640000808061272357600080fd5b82049050905081818301101561273857600080fd5b808201905090506103c052610140610400525b6104005151602061040051016104005261040061040051101561276d5761274b565b63232dd1c961042052610140516104405261016051610460526103c051610480526104a0610240805182528060200151826020015250506104c0516104a05161048051610460516104405160065801611afd565b610520526103e0610400525b61040051526020610400510361040052610140610400511015156127f0576127cd565b610520516103e052610240610160516002811061280c57600080fd5b60200201516103e0518082101561282257600080fd5b8082039050905060018082101561283857600080fd5b808203905090506105405261054051600254808202821582848304141761285e57600080fd5b809050905090506402540be400808061287657600080fd5b8204905090506105605261056051600354808202821582848304141761289b57600080fd5b809050905090506402540be40080806128b357600080fd5b820490509050610580526105405161056051808210156128d257600080fd5b80820390509050670de0b6b3a764000080820282158284830414176128f657600080fd5b809050905090506101a0610160516002811061291157600080fd5b6020020151808061292157600080fd5b8204905090506105405261058051670de0b6b3a7640000808202821582848304141761294c57600080fd5b809050905090506101a0610160516002811061296757600080fd5b6020020151808061297757600080fd5b82049050905061058052610200610140516002811061299557600080fd5b6020020151610180518181830110156129ad57600080fd5b8082019050905061014051600281106129c557600080fd5b600160c052602060c020015561020061016051600281106129e557600080fd5b602002015161054051808210156129fb57600080fd5b808203905090506105805180821015612a1357600080fd5b808203905090506101605160028110612a2b57600080fd5b600160c052602060c0200155610540516000526000516101e0515650005b633df021246000511415612daa5762ffffff5415612a6657600080fd5b600162ffffff553415612a7857600080fd5b60605160043580604051901315612a8e57600080fd5b8091901215612a9c57600080fd5b5060605160243580604051901315612ab357600080fd5b8091901215612ac157600080fd5b50610140610140516101605160065801610281565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e0516399a788e4610220526004356102405260243561026052604435610280526102a0610140805182528060200151826020015250506102c0516102a051610280516102605161024051600658016125b8565b610320526101e0526101c0526101a052610180526101605261014052610320516101e0526308c379a061034052602061036052602e610380527f45786368616e676520726573756c74656420696e20666577657220636f696e736103a0527f207468616e2065787065637465640000000000000000000000000000000000006103c052610380506064356101e0511015612bfd5760a461035cfd5b61040060018152600081602001525060043560028110612c1c57600080fd5b600060c052602060c02001543b612c3257600080fd5b60043560028110612c4257600080fd5b600060c052602060c02001543018612c5957600080fd5b602061050060646323b872dd61044052336104605230610480526044356104a05261045c600060043560028110612c8f57600080fd5b600060c052602060c02001545af1612ca657600080fd5b60005061050051612cb657600080fd5b60243560028110612cc657600080fd5b600060c052602060c02001543b612cdc57600080fd5b60243560028110612cec57600080fd5b600060c052602060c02001543018612d0357600080fd5b60206105c0604463a9059cbb6105205233610540526101e0516105605261053c600060243560028110612d3557600080fd5b600060c052602060c02001545af1612d4c57600080fd5b6000506105c051612d5c57600080fd5b6004356105e05260443561060052602435610620526101e05161064052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd9714060806105e0a2600062ffffff55005b635b36389c60005114156131045762ffffff5415612dc757600080fd5b600162ffffff553415612dd957600080fd5b6005543b612de657600080fd5b6005543018612df457600080fd5b60206101c060046318160ddd6101605261017c6005545afa612e1557600080fd5b6000506101c051610140526101e06000815260008160200152506102206000815260008160200152506102606001815260008160200152506102a060006002818352015b6102a05160028110612e6a57600080fd5b600160c052602060c02001546004358082028215828483041417612e8d57600080fd5b80905090509050610140518080612ea357600080fd5b8204905090506102c0526308c379a06102e0526020610300526030610320527f5769746864726177616c20726573756c74656420696e20666577657220636f69610340527f6e73207468616e20657870656374656400000000000000000000000000000000610360526103205060246102a05160028110612f2357600080fd5b60200201356102c0511015612f395760a46102fcfd5b6102a05160028110612f4a57600080fd5b600160c052602060c0200180546102c05180821015612f6857600080fd5b808203905090508155506102c0516101e06102a05160028110612f8a57600080fd5b60200201526102a05160028110612fa057600080fd5b600060c052602060c02001543b612fb657600080fd5b6102a05160028110612fc757600080fd5b600060c052602060c02001543018612fde57600080fd5b6020610440604463a9059cbb6103a052336103c0526102c0516103e0526103bc60006102a0516002811061301157600080fd5b600060c052602060c02001545af161302857600080fd5b6000506104405161303857600080fd5b5b8151600101808352811415612e59575b50506005543b61305857600080fd5b600554301861306657600080fd5b6000600060446379cc67906104605233610480526004356104a05261047c60006005545af161309457600080fd5b6101e0516105005261020051610520526102205161054052610240516105605261014051600435808210156130c857600080fd5b8082039050905061058052337f7c363854ccf79623411f8995b362bce5eddff18c927edc6f5dbbb5e05819a82c60a0610500a2600062ffffff55005b63e31032736000511415613a685762ffffff541561312157600080fd5b600162ffffff55341561313357600080fd5b6010541561314057600080fd5b6101406001815260008160200152506005543b61315c57600080fd5b600554301861316a57600080fd5b602061020060046318160ddd6101a0526101bc6005545afa61318b57600080fd5b6000506102005161018052600061018051116131a657600080fd5b600254600280820282158284830414176131bf57600080fd5b80905090509050600480806131d357600080fd5b82049050905061022052600354610240526102606101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015613211576131ef565b60065801610281565b6102c0526102e0526102806102a0525b6102a0515260206102a051036102a0526101406102a05110151561324d5761322a565b6102c080518252806020015182602001525050610140610320525b6103205151602061032051016103205261032061032051101561328a57613268565b600658016100a9565b61034052610300610320525b61032051526020610320510361032052610140610320511015156132c25761329f565b610340516103005261036060018060c052602060c02054825260018160c052602060c0200154826020015250506103a061036080518252806020015182602001525050610140610400525b6104005151602061040051016104005261040061040051101561332f5761330d565b636b7dd084610420526104406102608051825280602001518260200152505061048061036080518252806020015182602001525050610300516104c0526104c0516104a0516104805161046051610440516006580161090b565b610520526103e0610400525b61040051526020610400510361040052610140610400511015156133b857613395565b610520516103e05261054060006002818352015b6103a061054051600281106133e057600080fd5b602002018051600461054051600281106133f957600080fd5b60200201358082101561340b57600080fd5b808203905090508152505b81516001018083528114156133cc575b5050610140610580525b6105805151602061058051016105805261058061058051101561345257613430565b636b7dd0846105a0526105c0610260805182528060200151826020015250506106006103a08051825280602001518260200152505061030051610640526106405161062051610600516105e0516105c0516006580161090b565b6106a052610560610580525b61058051526020610580510361058052610140610580511015156134db576134b8565b6106a051610560526106c060008152600081602001525061070060006002818352015b61056051610360610700516002811061351657600080fd5b6020020151808202821582848304141761352f57600080fd5b809050905090506103e051808061354557600080fd5b820490509050610720526000610740526103a0610700516002811061356957600080fd5b60200201516107205111156135b257610720516103a0610700516002811061359057600080fd5b6020020151808210156135a257600080fd5b80820390509050610740526135e8565b6103a061070051600281106135c657600080fd5b602002015161072051808210156135dc57600080fd5b80820390509050610740525b6102205161074051808202821582848304141761360457600080fd5b809050905090506402540be400808061361c57600080fd5b8204905090506106c0610700516002811061363657600080fd5b60200201526103a0610700516002811061364f57600080fd5b60200201516106c0610700516002811061366857600080fd5b602002015161024051808202821582848304141761368557600080fd5b809050905090506402540be400808061369d57600080fd5b820490509050808210156136b057600080fd5b8082039050905061070051600281106136c857600080fd5b600160c052602060c02001556103a061070051600281106136e857600080fd5b6020020180516106c0610700516002811061370257600080fd5b60200201518082101561371457600080fd5b808203905090508152505b81516001018083528114156134fe575b5050610140610780525b6107805151602061078051016107805261078061078051101561375b57613739565b636b7dd0846107a0526107c0610260805182528060200151826020015250506108006103a08051825280602001518260200152505061030051610840526108405161082051610800516107e0516107c0516006580161090b565b6108a052610760610780525b61078051526020610780510361078052610140610780511015156137e4576137c1565b6108a051610760526103e051610760518082101561380157600080fd5b8082039050905061018051808202821582848304141761382057600080fd5b809050905090506103e051808061383657600080fd5b820490509050600181818301101561384d57600080fd5b808201905090506108c0526308c379a06108e0526020610900526014610920527f536c697070616765207363726577656420796f7500000000000000000000000061094052610920506044356108c05111156138aa5760846108fcfd5b61098060006002818352015b6000600461098051600281106138cb57600080fd5b602002013511156139945761098051600281106138e757600080fd5b600060c052602060c02001543b6138fd57600080fd5b610980516002811061390e57600080fd5b600060c052602060c0200154301861392557600080fd5b6020610a40604463a9059cbb6109a052336109c0526004610980516002811061394d57600080fd5b60200201356109e0526109bc6000610980516002811061396c57600080fd5b600060c052602060c02001545af161398357600080fd5b600050610a405161399357600080fd5b5b5b81516001018083528114156138b6575b50506005543b6139b457600080fd5b60055430186139c257600080fd5b6000600060446379cc6790610a605233610a80526108c051610aa052610a7c60006005545af16139f157600080fd5b600435610b0052602435610b20526106c051610b40526106e051610b605261056051610b8052610180516108c05180821015613a2c57600080fd5b80820390509050610ba052337f2b5508378d7e19e0d5fa338419034731416c4f5b219a10379956f764317fd47e60c0610b00a2600062ffffff55005b600015613d8d575b6101e0526101405261016052610180526101a0526101c05260026101605112600061016051121516613aa157600080fd5b6101c051610200526000610220526101405160028082028215828483041417613ac957600080fd5b809050905090506102405260006102605261028060006002818352015b61016051610280511815613b16576101806102805160028110613b0857600080fd5b602002015161026052613b1b565b613b97565b610220805161026051818183011015613b3357600080fd5b80820190509050815250610200516101c0518082028215828483041417613b5957600080fd5b809050905090506102605160028082028215828483041417613b7a57600080fd5b809050905090508080613b8c57600080fd5b820490509050610200525b8151600101808352811415613ae6575b5050610200516101c0518082028215828483041417613bc557600080fd5b809050905090506102405160028082028215828483041417613be657600080fd5b809050905090508080613bf857600080fd5b82049050905061020052610220516101c051610240518080613c1957600080fd5b820490509050818183011015613c2e57600080fd5b808201905090506102a05260006102c0526101c0516102e052610300600060ff818352015b6102e0516102c0526102e0516102e0518082028215828483041417613c7757600080fd5b8090509050905061020051818183011015613c9157600080fd5b8082019050905060026102e0518082028215828483041417613cb257600080fd5b809050905090506102a051818183011015613ccc57600080fd5b808201905090506101c05180821015613ce457600080fd5b808203905090508080613cf657600080fd5b8204905090506102e0526102c0516102e0511115613d3d5760016102e0516102c05180821015613d2557600080fd5b80820390509050111515613d3857613d79565b613d68565b60016102c0516102e05180821015613d5457600080fd5b80820390509050111515613d6757613d79565b5b5b8151600101808352811415613c53575b50506102e0516000526000516101e0515650005b600015614473575b6101c0526101405261016052610180526101a0526101405161016051610180516101a0516101c0516101e051600658016100a9565b610220526101e0526101c0526101a052610180526101605261014052610220516101e05260025460028082028215828483041417613e0757600080fd5b8090509050905060048080613e1b57600080fd5b820490509050610240526102606402540be40081526402540be4008160200152506005543b613e4957600080fd5b6005543018613e5757600080fd5b602061032060046318160ddd6102c0526102dc6005545afa613e7857600080fd5b600050610320516102a052610340610140610380525b61038051516020610380510161038052610380610380511015613eb057613e8e565b6396b414ec6103a0526103c0610180805182528060200151826020015250506103e0516103c0516006580161040b565b6104405261046052610360610380525b6103805152602061038051036103805261014061038051101515613f1357613ef0565b610440805182528060200151826020015250506101406104a0525b6104a0515160206104a051016104a0526104a06104a0511015613f5057613f2e565b633842f7766104c0526104e0610340805182528060200151826020015250506101e0516105205261052051610500516104e05160065801610621565b610580526104806104a0525b6104a0515260206104a051036104a0526101406104a051101515613fbb57613f98565b61058051610480526104805161014051610480518082028215828483041417613fe357600080fd5b809050905090506102a0518080613ff957600080fd5b8204905090508082101561400c57600080fd5b808203905090506105a0526105c061034080518252806020015182602001525050610140610620525b6106205151602061062051016106205261062061062051101561405757614035565b63e98e35b0610640526101e0516106605261016051610680526106a0610340805182528060200151826020015250506105a0516106e0526106e0516106c0516106a051610680516106605160065801613a70565b61074052610600610620525b61062051526020610620510361062052610140610620511015156140da576140b7565b610740516106005261034061016051600281106140f657600080fd5b6020020151610600518082101561410c57600080fd5b80820390509050610260610160516002811061412757600080fd5b6020020151808061413757600080fd5b8204905090506107605261078060006002818352015b60006107a052610160516107805114156141cf57610340610780516002811061417557600080fd5b60200201516105a051808202821582848304141761419257600080fd5b809050905090506104805180806141a857600080fd5b82049050905061060051808210156141bf57600080fd5b808203905090506107a05261424e565b61034061078051600281106141e357600080fd5b602002015161034061078051600281106141fc57600080fd5b60200201516105a051808202821582848304141761421957600080fd5b8090509050905061048051808061422f57600080fd5b8204905090508082101561424257600080fd5b808203905090506107a0525b6105c0610780516002811061426257600080fd5b602002018051610240516107a051808202821582848304141761428457600080fd5b809050905090506402540be400808061429c57600080fd5b820490509050808210156142af57600080fd5b808203905090508152505b815160010180835281141561414d575b50506105c061016051600281106142e057600080fd5b60200201516101406107e0525b6107e0515160206107e051016107e0526107e06107e051101561430f576142ed565b63e98e35b0610800526101e0516108205261016051610840526108606105c0805182528060200151826020015250506105a0516108a0526108a0516108805161086051610840516108205160065801613a70565b610900526107c06107e0525b6107e0515260206107e051036107e0526101406107e0511015156143925761436f565b61090051808210156143a357600080fd5b808203905090506107c0526107c0516001808210156143c157600080fd5b8082039050905061026061016051600281106143dc57600080fd5b602002015180806143ec57600080fd5b8204905090506107c0526109208080806107c051815250506020810190508080610760516107c0518082101561442157600080fd5b808203905090508152505060409050905060c05260c051610960525b60006109605111151561444f5761446b565b602061096051036109200151602061096051036109605261443d565b6101c0515650005b63cc2b27d7600051141561456d57341561448c57600080fd5b606051602435806040519013156144a257600080fd5b80919012156144b057600080fd5b50610140610140516101605160065801610281565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101405161016051610180516101a0516101c051638594ca16610200526004356102205260243561024052610260610140805182528060200151826020015250506102805161026051610240516102205160065801613d95565b6102e052610300526101c0526101a0526101805261016052610140526102e05160005260206000f350005b631a4d01d260005114156148b55762ffffff541561458a57600080fd5b600162ffffff55341561459c57600080fd5b606051602435806040519013156145b257600080fd5b80919012156145c057600080fd5b506000610140526000610160526101806101405161016051610180516101a05160065801610281565b6101e052610200526101a0526101805261016052610140526101e0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e05161020051638594ca166102405260043561026052602435610280526102a0610180805182528060200151826020015250506102c0516102a051610280516102605160065801613d95565b6103205261034052610200526101e0526101c0526101a052610180526101605261014052610320805161014052602081015161016052506308c379a06103605260206103805260186103a0527f4e6f7420656e6f75676820636f696e732072656d6f76656400000000000000006103c0526103a0506044356101405110156146ff57608461037cfd5b6024356002811061470f57600080fd5b600160c052602060c0200180546101405161016051600354808202821582848304141761473b57600080fd5b809050905090506402540be400808061475357600080fd5b82049050905081818301101561476857600080fd5b808201905090508082101561477c57600080fd5b808203905090508155506005543b61479357600080fd5b60055430186147a157600080fd5b6000600060446379cc67906104005233610420526004356104405261041c60006005545af16147cf57600080fd5b602435600281106147df57600080fd5b600060c052602060c02001543b6147f557600080fd5b6024356002811061480557600080fd5b600060c052602060c0200154301861481c57600080fd5b6020610540604463a9059cbb6104a052336104c052610140516104e0526104bc60006024356002811061484e57600080fd5b600060c052602060c02001545af161486557600080fd5b6000506105405161487557600080fd5b600435610560526101405161058052337f9e96dd3b997a2a257eec4df9bb6eaf626e206df5f543bd963682d143300be3106040610560a2600062ffffff55005b633c157e646000511415614a275734156148ce57600080fd5b60045433146148dc57600080fd5b600854620151808181830110156148f257600080fd5b8082019050905042101561490557600080fd5b426201518081818301101561491957600080fd5b80820190509050602435101561492e57600080fd5b61014051600658016100a9565b61018052610140526101805161014052620f4240600435106000600435111661496357600080fd5b61014051600435600a808202821582848304141761498057600080fd5b80905090509050101561014051600435101661014051600a80820282158284830414176149ac57600080fd5b80905090509050600435111561014051600435101516176149cc57600080fd5b6101405160065560043560075542600855602435600955610140516101a0526004356101c052426101e052602435610200527fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c25460806101a0a1005b63551a65886000511415614ab7573415614a4057600080fd5b6004543314614a4e57600080fd5b61014051600658016100a9565b6101805261014052610180516101405261014051600655610140516007554260085542600955610140516101a052426101c0527f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc20193860406101a0a1005b635b5a14676000511415614b80573415614ad057600080fd5b6004543314614ade57600080fd5b600a5415614aeb57600080fd5b64012a05f2006024351115614aff57600080fd5b64012a05f2006004351115614b1357600080fd5b426203f480818183011015614b2757600080fd5b808201905090506101405261014051600a55600435600c55602435600d556004356101605260243561018052610140517f351fc5da2fbf480f2225debf3664a4bc90fa9923743aad58b4603f648e931fe06040610160a2005b634f12fe976000511415614c17573415614b9957600080fd5b6004543314614ba757600080fd5b6000600a541142600a54111516614bbd57600080fd5b6000600a55600c5461014052600d546101605261014051600255610160516003556101405161018052610160516101a0527fbe12859b636aed607d5230b2cc2711f68d70e51060e6cca1f575ef5d2fcc95d16040610180a1005b63226840fb6000511415614c45573415614c3057600080fd5b6004543314614c3e57600080fd5b6000600a55005b636b441a406000511415614ce6573415614c5e57600080fd5b6004356020518110614c6f57600080fd5b506004543314614c7e57600080fd5b600b5415614c8b57600080fd5b426203f480818183011015614c9f57600080fd5b808201905090506101405261014051600b55600435600e55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae6000511415614d62573415614cff57600080fd5b6004543314614d0d57600080fd5b6000600b5411600b5442101516614d2357600080fd5b6000600b55600e546101405261014051600455610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf1936000511415614d90573415614d7b57600080fd5b6004543314614d8957600080fd5b6000600b55005b6330c540856000511415614ee4573415614da957600080fd5b6004543314614db757600080fd5b61014060006002818352015b6101405160028110614dd457600080fd5b600060c052602060c020015461016052610160513b614df257600080fd5b610160513018614e0157600080fd5b602061022060246370a082316101a052306101c0526101bc610160515afa614e2857600080fd5b600050610220516101405160028110614e4057600080fd5b600160c052602060c020015480821015614e5957600080fd5b80820390509050610180526000610180511115614ecf57610160513b614e7e57600080fd5b610160513018614e8d57600080fd5b60206102e0604463a9059cbb610240523361026052610180516102805261025c6000610160515af1614ebe57600080fd5b6000506102e051614ece57600080fd5b5b5b8151600101808352811415614dc3575b5050005b63e36988536000511415614f20573415614efd57600080fd5b6004543314614f0b57600080fd5b42600f5411614f1957600080fd5b6001601055005b633046f9726000511415614f4e573415614f3957600080fd5b6004543314614f4757600080fd5b6000601055005b6323746eb86000511415614fb3573415614f6757600080fd5b60605160043580604051901315614f7d57600080fd5b8091901215614f8b57600080fd5b5060043560028110614f9c57600080fd5b600060c052602060c020015460005260206000f350005b63065a80d86000511415615018573415614fcc57600080fd5b60605160043580604051901315614fe257600080fd5b8091901215614ff057600080fd5b506004356002811061500157600080fd5b600160c052602060c020015460005260206000f350005b63ddca3f43600051141561503f57341561503157600080fd5b60025460005260206000f350005b63fee3f7f9600051141561506657341561505857600080fd5b60035460005260206000f350005b638da5cb5b600051141561508d57341561507f57600080fd5b60045460005260206000f350005b635409491a60005114156150b45734156150a657600080fd5b60065460005260206000f350005b63b4b577ad60005114156150db5734156150cd57600080fd5b60075460005260206000f350005b632081066c60005114156151025734156150f457600080fd5b60085460005260206000f350005b6314052288600051141561512957341561511b57600080fd5b60095460005260206000f350005b63405e28f8600051141561515057341561514257600080fd5b600a5460005260206000f350005b63e0a0b586600051141561517757341561516957600080fd5b600b5460005260206000f350005b6358680d0b600051141561519e57341561519057600080fd5b600c5460005260206000f350005b63e382446260005114156151c55734156151b757600080fd5b600d5460005260206000f350005b631ec0cdc160005114156151ec5734156151de57600080fd5b600e5460005260206000f350005b5b60006000fd5b6101bd6153b0036101bd6000396101bd6153b0036000f3000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000049849c98ae39fff122806c06791fa73784fb3675000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000003d0900
Deployed Bytecode
0x600436101561000d576151ed565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a052600015610244575b61014052600954610160526007546101805261016051421015610231576006546101c0526008546101e0526101c05161018051111561018a576101c051610180516101c051808210156100fb57600080fd5b80820390509050426101e0518082101561011457600080fd5b80820390509050808202821582848304141761012f57600080fd5b80905090509050610160516101e0518082101561014b57600080fd5b80820390509050808061015d57600080fd5b82049050905081818301101561017257600080fd5b8082019050905060005260005161014051565061022c565b6101c0516101c05161018051808210156101a357600080fd5b80820390509050426101e051808210156101bc57600080fd5b8082039050905080820282158284830414176101d757600080fd5b80905090509050610160516101e051808210156101f357600080fd5b80820390509050808061020557600080fd5b8204905090508082101561021857600080fd5b808203905090506000526000516101405156505b610242565b610180516000526000516101405156505b005b63f446c1d0600051141561027957341561025d57600080fd5b600658016100a9565b610140526101405160005260206000f350005b600015610403575b610140526101606402540be40081526402540be4008160200152506101a06001815260008160200152506101e060006002818352015b670de0b6b3a7640000610200526101a06101e051600281106102d857600080fd5b602002015115610378576101e051600281106102f357600080fd5b600060c052602060c02001543b61030957600080fd5b6101e0516002811061031a57600080fd5b600060c052602060c0200154301861033157600080fd5b6020610280600463bd6d894d6102205261023c6101e0516002811061035557600080fd5b600060c052602060c02001545afa61036c57600080fd5b60005061028051610200525b6101606101e0516002811061038c57600080fd5b6020020180516102005180820282158284830414176103aa57600080fd5b809050905090508152505b81516001018083528114156102b7575b505060406102a0525b60006102a0511115156103e0576103fc565b60206102a05103610160015160206102a051036102a0526103ce565b6101405156005b60001561050c575b6101805261014052610160526101a0610140805182528060200151826020015250506101e060006002818352015b6101a06101e0516002811061044d57600080fd5b60200201516101e0516002811061046357600080fd5b600160c052602060c0200154808202821582848304141761048357600080fd5b80905090509050670de0b6b3a7640000808061049e57600080fd5b8204905090506101a06101e051600281106104b857600080fd5b60200201525b8151600101808352811415610439575b50506040610200525b6000610200511115156104e957610505565b602061020051036101a0015160206102005103610200526104d7565b6101805156005b600015610619575b6101c0526101405261016052610180526101a0526101e06101408051825280602001518260200152505061022060006002818352015b6101e0610220516002811061055e57600080fd5b6020020151610180610220516002811061057757600080fd5b6020020151808202821582848304141761059057600080fd5b80905090509050670de0b6b3a764000080806105ab57600080fd5b8204905090506101e061022051600281106105c557600080fd5b60200201525b815160010180835281141561054a575b50506040610240525b6000610240511115156105f657610612565b602061024051036101e0015160206102405103610240526105e4565b6101c05156005b600015610903575b6101a05261014052610160526101805260006101c05261020060006002818352015b6020610200510261014001516101e0526101c080516101e05181818301101561066b57600080fd5b808201905090508152505b8151600101808352811415610643575b50506101c05115156106a15760006000526000516101a05156505b6000610240526101c0516102605261018051600280820282158284830414176106c957600080fd5b80905090509050610280526102a0600060ff818352015b610260516102c05261030060006002818352015b6020610300510261014001516102e0526102c05161026051808202821582848304141761072057600080fd5b809050905090506102e0516002808202821582848304141761074157600080fd5b80905090509050808061075357600080fd5b8204905090506102c0525b81516001018083528114156106f4575b50506102605161024052610280516101c051808202821582848304141761079457600080fd5b809050905090506102c051600280820282158284830414176107b557600080fd5b809050905090508181830110156107cb57600080fd5b808201905090506102605180820282158284830414176107ea57600080fd5b809050905090506102805160018082101561080457600080fd5b8082039050905061026051808202821582848304141761082357600080fd5b8090509050905060036102c051808202821582848304141761084457600080fd5b8090509050905081818301101561085a57600080fd5b80820190509050808061086c57600080fd5b82049050905061026052610240516102605111156108b357600161026051610240518082101561089b57600080fd5b808203905090501115156108ae576108ef565b6108de565b60016102405161026051808210156108ca57600080fd5b808203905090501115156108dd576108ef565b5b5b81516001018083528114156106e0575b5050610260516000526000516101a0515650005b600015610a75575b6101e0526101405261016052610180526101a0526101c052610140610480525b6104805151602061048051016104805261048061048051101561094d5761092b565b633842f7766104a0526104c0610140610340525b6103405151602061034051016103405261034061034051101561098357610961565b63575e285f61036052610380610140805182528060200151826020015250506103c0610180805182528060200151826020015250506103e0516103c0516103a0516103805160065801610514565b6104405261046052610320610340525b6103405152602061034051036103405261014061034051101515610a04576109e1565b610440805182528060200151826020015250506101c05161050052610500516104e0516104c05160065801610621565b61056052610460610480525b6104805152602061048051036104805261014061048051101515610a6357610a40565b610560516000526000516101e0515650005b63bb7b8b806000511415610d0f573415610a8e57600080fd5b610140610560525b61056051516020610560510161056052610560610560511015610ab857610a96565b633842f776610580526105a0610140610420525b61042051516020610420510161042052610420610420511015610aee57610acc565b6396b414ec610440526104606101406103c0525b6103c0515160206103c051016103c0526103c06103c0511015610b2457610b02565b60065801610281565b6103e052610400526103a06103c0525b6103c0515260206103c051036103c0526101406103c051101515610b6057610b3d565b6103e08051825280602001518260200152505061048051610460516006580161040b565b6104e05261050052610400610420525b6104205152602061042051036104205261014061042051101515610bb757610b94565b6104e080518252806020015182602001525050610140610520525b61052051516020610520510161052052610520610520511015610bf457610bd2565b600658016100a9565b61054052610500610520525b6105205152602061052051036105205261014061052051101515610c2c57610c09565b610540516105e0526105e0516105c0516105a05160065801610621565b61064052610540610560525b6105605152602061056051036105605261014061056051101515610c7857610c55565b61064051610140526005543b610c8d57600080fd5b6005543018610c9b57600080fd5b60206106e060046318160ddd6106805261069c6005545afa610cbc57600080fd5b6000506106e0516106605261014051670de0b6b3a76400008082028215828483041417610ce857600080fd5b80905090509050610660518080610cfe57600080fd5b82049050905060005260206000f350005b63ed8e84f3600051141561110f573415610d2857600080fd5b60443560028110610d3857600080fd5b5061014060018060c052602060c02054825260018160c052602060c0200154826020015250506101806101405161016051610180516101a05160065801610281565b6101e052610200526101a0526101805261016052610140526101e0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b6102605261022052610200526101e0526101c0526101a05261018052610160526101405261026051610220526101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015610e2457610e02565b636b7dd0846102c0526102e061018080518252806020015182602001525050610320610140805182528060200151826020015250506102205161036052610360516103405161032051610300516102e0516006580161090b565b6103c0526102806102a0525b6102a0515260206102a051036102a0526101406102a051101515610ead57610e8a565b6103c051610280526103e060006002818352015b60443515610f19576101406103e05160028110610edd57600080fd5b60200201805160046103e05160028110610ef657600080fd5b6020020135818183011015610f0a57600080fd5b80820190509050815250610f63565b6101406103e05160028110610f2d57600080fd5b60200201805160046103e05160028110610f4657600080fd5b602002013580821015610f5857600080fd5b808203905090508152505b5b8151600101808352811415610ec1575b5050610140610420525b61042051516020610420510161042052610420610420511015610fa057610f7e565b636b7dd08461044052610460610180805182528060200151826020015250506104a061014080518252806020015182602001525050610220516104e0526104e0516104c0516104a05161048051610460516006580161090b565b61054052610400610420525b610420515260206104205103610420526101406104205110151561102957611006565b61054051610400526005543b61103e57600080fd5b600554301861104c57600080fd5b60206105e060046318160ddd6105805261059c6005545afa61106d57600080fd5b6000506105e05161056052600061060052604435156110ab5761040051610280518082101561109b57600080fd5b80820390509050610600526110cc565b6102805161040051808210156110c057600080fd5b80820390509050610600525b610600516105605180820282158284830414176110e857600080fd5b809050905090506102805180806110fe57600080fd5b82049050905060005260206000f350005b630b4c7e4d6000511415611af55762ffffff541561112c57600080fd5b600162ffffff55341561113e57600080fd5b6010541561114b57600080fd5b6101406001815260008160200152506101806000815260008160200152506002546002808202821582848304141761118257600080fd5b809050905090506004808061119657600080fd5b8204905090506101c0526003546101e0526101405161016051610180516101a0516101c0516101e05161020051600658016100a9565b61024052610200526101e0526101c0526101a05261018052610160526101405261024051610200526005543b61120157600080fd5b600554301861120f57600080fd5b60206102e060046318160ddd6102805261029c6005545afa61123057600080fd5b6000506102e05161026052610300610140610340525b6103405151602061034051016103405261034061034051101561126857611246565b60065801610281565b6103605261038052610320610340525b61034051526020610340510361034052610140610340511015156112a457611281565b6103608051825280602001518260200152505060006103a0526103c060018060c052602060c02054825260018160c052602060c02001548260200152505060006102605111156113aa57610140610400525b61040051516020610400510161040052610400610400511015611318576112f6565b636b7dd08461042052610440610300805182528060200151826020015250506104806103c080518252806020015182602001525050610200516104c0526104c0516104a0516104805161046051610440516006580161090b565b610520526103e0610400525b61040051526020610400510361040052610140610400511015156113a15761137e565b610520516103a0525b6105406103c08051825280602001518260200152505061058060006002818352015b6102605115156113fb576000600461058051600281106113eb57600080fd5b6020020135116113fa57600080fd5b5b6103c0610580516002811061140f57600080fd5b60200201516004610580516002811061142757600080fd5b602002013581818301101561143b57600080fd5b80820190509050610540610580516002811061145657600080fd5b60200201525b81516001018083528114156113cc575b50506101406105c0525b6105c0515160206105c051016105c0526105c06105c051101561149857611476565b636b7dd0846105e0526106006103008051825280602001518260200152505061064061054080518252806020015182602001525050610200516106805261068051610660516106405161062051610600516006580161090b565b6106e0526105a06105c0525b6105c0515260206105c051036105c0526101406105c051101515611521576114fe565b6106e0516105a0526103a0516105a0511161153b57600080fd5b6105a05161070052600061026051111561184e5761072060006002818352015b6105a0516103c0610720516002811061157357600080fd5b6020020151808202821582848304141761158c57600080fd5b809050905090506103a05180806115a257600080fd5b8204905090506107405260006107605261054061072051600281106115c657600080fd5b602002015161074051111561160f576107405161054061072051600281106115ed57600080fd5b6020020151808210156115ff57600080fd5b8082039050905061076052611645565b610540610720516002811061162357600080fd5b6020020151610740518082101561163957600080fd5b80820390509050610760525b6101c05161076051808202821582848304141761166157600080fd5b809050905090506402540be400808061167957600080fd5b820490509050610180610720516002811061169357600080fd5b602002015261054061072051600281106116ac57600080fd5b602002015161018061072051600281106116c557600080fd5b60200201516101e05180820282158284830414176116e257600080fd5b809050905090506402540be40080806116fa57600080fd5b8204905090508082101561170d57600080fd5b80820390509050610720516002811061172557600080fd5b600160c052602060c0200155610540610720516002811061174557600080fd5b602002018051610180610720516002811061175f57600080fd5b60200201518082101561177157600080fd5b808203905090508152505b815160010180835281141561155b575b5050610140610780525b610780515160206107805101610780526107206107805110156117b857611796565b636b7dd0846107a0526107c0610300805182528060200151826020015250506108006105408051825280602001518260200152505061020051610840526108405161082051610800516107e0516107c0516006580161090b565b6108a052610700610780525b61078051526020610780510361078052610140610780511015156118415761181e565b6108a0516107005261186c565b600160c052602060c020610540805182558060200151600183015550505b60006108c052610260511515611889576105a0516108c0526118de565b61026051610700516103a051808210156118a257600080fd5b8082039050905080820282158284830414176118bd57600080fd5b809050905090506103a05180806118d357600080fd5b8204905090506108c0525b6308c379a06108e0526020610900526014610920527f536c697070616765207363726577656420796f7500000000000000000000000061094052610920506044356108c05110156119305760846108fcfd5b61098060006002818352015b60006004610980516002811061195157600080fd5b60200201351115611a1f57610980516002811061196d57600080fd5b600060c052602060c02001543b61198357600080fd5b610980516002811061199457600080fd5b600060c052602060c020015430186119ab57600080fd5b6020610a6060646323b872dd6109a052336109c052306109e052600461098051600281106119d857600080fd5b6020020135610a00526109bc600061098051600281106119f757600080fd5b600060c052602060c02001545af1611a0e57600080fd5b600050610a6051611a1e57600080fd5b5b5b815160010180835281141561193c575b50506005543b611a3f57600080fd5b6005543018611a4d57600080fd5b6000600060446340c10f19610a805233610aa0526108c051610ac052610a9c60006005545af1611a7c57600080fd5b600435610b2052602435610b405261018051610b60526101a051610b80526105a051610ba052610260516108c051818183011015611ab957600080fd5b80820190509050610bc052337f26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a76860c0610b20a2600062ffffff55005b600015611f37575b6101e0526101405261016052610180526101a0526101c0526000610140511215610160516101405114151660006101605112151660026101405112166002610160511216611b4a57600080fd5b6101405161016051610180516101a0516101c0516101e05161020051600658016100a9565b61024052610200526101e0526101c0526101a05261018052610160526101405261024051610200526101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051633842f7766102a0526102c06101a0805182528060200151826020015250506102005161030052610300516102e0516102c05160065801610621565b61036052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103605161026052610260516103805260006103a0526102005160028082028215828483041417611c5757600080fd5b809050905090506103c05260006103e05261040060006002818352015b61014051610400511415611c8f57610180516103e052611cc5565b61016051610400511815611cbf576101a06104005160028110611cb157600080fd5b60200201516103e052611cc4565b611d41565b5b6103a080516103e051818183011015611cdd57600080fd5b8082019050905081525061038051610260518082028215828483041417611d0357600080fd5b809050905090506103e05160028082028215828483041417611d2457600080fd5b809050905090508080611d3657600080fd5b820490509050610380525b8151600101808352811415611c74575b505061038051610260518082028215828483041417611d6f57600080fd5b809050905090506103c05160028082028215828483041417611d9057600080fd5b809050905090508080611da257600080fd5b820490509050610380526103a051610260516103c0518080611dc357600080fd5b820490509050818183011015611dd857600080fd5b80820190509050610420526000610440526102605161046052610480600060ff818352015b610460516104405261046051610460518082028215828483041417611e2157600080fd5b8090509050905061038051818183011015611e3b57600080fd5b808201905090506002610460518082028215828483041417611e5c57600080fd5b8090509050905061042051818183011015611e7657600080fd5b808201905090506102605180821015611e8e57600080fd5b808203905090508080611ea057600080fd5b8204905090506104605261044051610460511115611ee7576001610460516104405180821015611ecf57600080fd5b80820390509050111515611ee257611f23565b611f12565b6001610440516104605180821015611efe57600080fd5b80820390509050111515611f1157611f23565b5b5b8151600101808352811415611dfd575b5050610460516000526000516101e0515650005b635e0d443f6000511415612287573415611f5057600080fd5b60605160043580604051901315611f6657600080fd5b8091901215611f7457600080fd5b5060605160243580604051901315611f8b57600080fd5b8091901215611f9957600080fd5b50610140610140516101605160065801610281565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec610240526102606101408051825280602001518260200152505061028051610260516006580161040b565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506101e06004356002811061206a57600080fd5b60200201516044356101406004356002811061208557600080fd5b6020020151808202821582848304141761209e57600080fd5b80905090509050670de0b6b3a764000080806120b957600080fd5b8204905090508181830110156120ce57600080fd5b8082019050905061032052610140610360525b61036051516020610360510161036052610360610360511015612103576120e1565b63232dd1c9610380526004356103a0526024356103c052610320516103e0526104006101e08051825280602001518260200152505061042051610400516103e0516103c0516103a05160065801611afd565b61048052610340610360525b610360515260206103605103610360526101406103605110151561218457612161565b61048051610340526101e06024356002811061219f57600080fd5b602002015161034051808210156121b557600080fd5b808203905090506001808210156121cb57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176121ef57600080fd5b809050905090506101406024356002811061220957600080fd5b6020020151808061221957600080fd5b8204905090506104a0526002546104a051808202821582848304141761223e57600080fd5b809050905090506402540be400808061225657600080fd5b8204905090506104c0526104a0516104c0518082101561227557600080fd5b8082039050905060005260206000f350005b6307211ef760005114156125b05734156122a057600080fd5b606051600435806040519013156122b657600080fd5b80919012156122c457600080fd5b50606051602435806040519013156122db57600080fd5b80919012156122e957600080fd5b50610140610140516101605160065801610281565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec610240526102606101408051825280602001518260200152505061028051610260516006580161040b565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506103206402540be40081526402540be4008160200152506101e0600435600281106123d157600080fd5b6020020151604435610320600435600281106123ec57600080fd5b6020020151808202821582848304141761240557600080fd5b8090509050905081818301101561241b57600080fd5b80820190509050610360526101406103a0525b6103a0515160206103a051016103a0526103a06103a05110156124505761242e565b63232dd1c96103c0526004356103e0526024356104005261036051610420526104406101e080518252806020015182602001525050610460516104405161042051610400516103e05160065801611afd565b6104c0526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156124d1576124ae565b6104c051610380526101e0602435600281106124ec57600080fd5b6020020151610380518082101561250257600080fd5b8082039050905060018082101561251857600080fd5b808203905090506103206024356002811061253257600080fd5b6020020151808061254257600080fd5b8204905090506104e0526002546104e051808202821582848304141761256757600080fd5b809050905090506402540be400808061257f57600080fd5b820490509050610500526104e051610500518082101561259e57600080fd5b8082039050905060005260206000f350005b600015612a49575b6101e0526101405261016052610180526101a0526101c052601054156125dd57600080fd5b61020060018060c052602060c02054825260018160c052602060c0200154826020015250506102406101405161016051610180516101a0516101c0516101e0516102005161022051610240516102605163575e285f6102a0526102c06101a0805182528060200151826020015250506103006102008051825280602001518260200152505061032051610300516102e0516102c05160065801610514565b610380526103a052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103808051825280602001518260200152505061024061014051600281106126d257600080fd5b6020020151610180516101a061014051600281106126ef57600080fd5b6020020151808202821582848304141761270857600080fd5b80905090509050670de0b6b3a7640000808061272357600080fd5b82049050905081818301101561273857600080fd5b808201905090506103c052610140610400525b6104005151602061040051016104005261040061040051101561276d5761274b565b63232dd1c961042052610140516104405261016051610460526103c051610480526104a0610240805182528060200151826020015250506104c0516104a05161048051610460516104405160065801611afd565b610520526103e0610400525b61040051526020610400510361040052610140610400511015156127f0576127cd565b610520516103e052610240610160516002811061280c57600080fd5b60200201516103e0518082101561282257600080fd5b8082039050905060018082101561283857600080fd5b808203905090506105405261054051600254808202821582848304141761285e57600080fd5b809050905090506402540be400808061287657600080fd5b8204905090506105605261056051600354808202821582848304141761289b57600080fd5b809050905090506402540be40080806128b357600080fd5b820490509050610580526105405161056051808210156128d257600080fd5b80820390509050670de0b6b3a764000080820282158284830414176128f657600080fd5b809050905090506101a0610160516002811061291157600080fd5b6020020151808061292157600080fd5b8204905090506105405261058051670de0b6b3a7640000808202821582848304141761294c57600080fd5b809050905090506101a0610160516002811061296757600080fd5b6020020151808061297757600080fd5b82049050905061058052610200610140516002811061299557600080fd5b6020020151610180518181830110156129ad57600080fd5b8082019050905061014051600281106129c557600080fd5b600160c052602060c020015561020061016051600281106129e557600080fd5b602002015161054051808210156129fb57600080fd5b808203905090506105805180821015612a1357600080fd5b808203905090506101605160028110612a2b57600080fd5b600160c052602060c0200155610540516000526000516101e0515650005b633df021246000511415612daa5762ffffff5415612a6657600080fd5b600162ffffff553415612a7857600080fd5b60605160043580604051901315612a8e57600080fd5b8091901215612a9c57600080fd5b5060605160243580604051901315612ab357600080fd5b8091901215612ac157600080fd5b50610140610140516101605160065801610281565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e0516399a788e4610220526004356102405260243561026052604435610280526102a0610140805182528060200151826020015250506102c0516102a051610280516102605161024051600658016125b8565b610320526101e0526101c0526101a052610180526101605261014052610320516101e0526308c379a061034052602061036052602e610380527f45786368616e676520726573756c74656420696e20666577657220636f696e736103a0527f207468616e2065787065637465640000000000000000000000000000000000006103c052610380506064356101e0511015612bfd5760a461035cfd5b61040060018152600081602001525060043560028110612c1c57600080fd5b600060c052602060c02001543b612c3257600080fd5b60043560028110612c4257600080fd5b600060c052602060c02001543018612c5957600080fd5b602061050060646323b872dd61044052336104605230610480526044356104a05261045c600060043560028110612c8f57600080fd5b600060c052602060c02001545af1612ca657600080fd5b60005061050051612cb657600080fd5b60243560028110612cc657600080fd5b600060c052602060c02001543b612cdc57600080fd5b60243560028110612cec57600080fd5b600060c052602060c02001543018612d0357600080fd5b60206105c0604463a9059cbb6105205233610540526101e0516105605261053c600060243560028110612d3557600080fd5b600060c052602060c02001545af1612d4c57600080fd5b6000506105c051612d5c57600080fd5b6004356105e05260443561060052602435610620526101e05161064052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd9714060806105e0a2600062ffffff55005b635b36389c60005114156131045762ffffff5415612dc757600080fd5b600162ffffff553415612dd957600080fd5b6005543b612de657600080fd5b6005543018612df457600080fd5b60206101c060046318160ddd6101605261017c6005545afa612e1557600080fd5b6000506101c051610140526101e06000815260008160200152506102206000815260008160200152506102606001815260008160200152506102a060006002818352015b6102a05160028110612e6a57600080fd5b600160c052602060c02001546004358082028215828483041417612e8d57600080fd5b80905090509050610140518080612ea357600080fd5b8204905090506102c0526308c379a06102e0526020610300526030610320527f5769746864726177616c20726573756c74656420696e20666577657220636f69610340527f6e73207468616e20657870656374656400000000000000000000000000000000610360526103205060246102a05160028110612f2357600080fd5b60200201356102c0511015612f395760a46102fcfd5b6102a05160028110612f4a57600080fd5b600160c052602060c0200180546102c05180821015612f6857600080fd5b808203905090508155506102c0516101e06102a05160028110612f8a57600080fd5b60200201526102a05160028110612fa057600080fd5b600060c052602060c02001543b612fb657600080fd5b6102a05160028110612fc757600080fd5b600060c052602060c02001543018612fde57600080fd5b6020610440604463a9059cbb6103a052336103c0526102c0516103e0526103bc60006102a0516002811061301157600080fd5b600060c052602060c02001545af161302857600080fd5b6000506104405161303857600080fd5b5b8151600101808352811415612e59575b50506005543b61305857600080fd5b600554301861306657600080fd5b6000600060446379cc67906104605233610480526004356104a05261047c60006005545af161309457600080fd5b6101e0516105005261020051610520526102205161054052610240516105605261014051600435808210156130c857600080fd5b8082039050905061058052337f7c363854ccf79623411f8995b362bce5eddff18c927edc6f5dbbb5e05819a82c60a0610500a2600062ffffff55005b63e31032736000511415613a685762ffffff541561312157600080fd5b600162ffffff55341561313357600080fd5b6010541561314057600080fd5b6101406001815260008160200152506005543b61315c57600080fd5b600554301861316a57600080fd5b602061020060046318160ddd6101a0526101bc6005545afa61318b57600080fd5b6000506102005161018052600061018051116131a657600080fd5b600254600280820282158284830414176131bf57600080fd5b80905090509050600480806131d357600080fd5b82049050905061022052600354610240526102606101406102a0525b6102a0515160206102a051016102a0526102a06102a0511015613211576131ef565b60065801610281565b6102c0526102e0526102806102a0525b6102a0515260206102a051036102a0526101406102a05110151561324d5761322a565b6102c080518252806020015182602001525050610140610320525b6103205151602061032051016103205261032061032051101561328a57613268565b600658016100a9565b61034052610300610320525b61032051526020610320510361032052610140610320511015156132c25761329f565b610340516103005261036060018060c052602060c02054825260018160c052602060c0200154826020015250506103a061036080518252806020015182602001525050610140610400525b6104005151602061040051016104005261040061040051101561332f5761330d565b636b7dd084610420526104406102608051825280602001518260200152505061048061036080518252806020015182602001525050610300516104c0526104c0516104a0516104805161046051610440516006580161090b565b610520526103e0610400525b61040051526020610400510361040052610140610400511015156133b857613395565b610520516103e05261054060006002818352015b6103a061054051600281106133e057600080fd5b602002018051600461054051600281106133f957600080fd5b60200201358082101561340b57600080fd5b808203905090508152505b81516001018083528114156133cc575b5050610140610580525b6105805151602061058051016105805261058061058051101561345257613430565b636b7dd0846105a0526105c0610260805182528060200151826020015250506106006103a08051825280602001518260200152505061030051610640526106405161062051610600516105e0516105c0516006580161090b565b6106a052610560610580525b61058051526020610580510361058052610140610580511015156134db576134b8565b6106a051610560526106c060008152600081602001525061070060006002818352015b61056051610360610700516002811061351657600080fd5b6020020151808202821582848304141761352f57600080fd5b809050905090506103e051808061354557600080fd5b820490509050610720526000610740526103a0610700516002811061356957600080fd5b60200201516107205111156135b257610720516103a0610700516002811061359057600080fd5b6020020151808210156135a257600080fd5b80820390509050610740526135e8565b6103a061070051600281106135c657600080fd5b602002015161072051808210156135dc57600080fd5b80820390509050610740525b6102205161074051808202821582848304141761360457600080fd5b809050905090506402540be400808061361c57600080fd5b8204905090506106c0610700516002811061363657600080fd5b60200201526103a0610700516002811061364f57600080fd5b60200201516106c0610700516002811061366857600080fd5b602002015161024051808202821582848304141761368557600080fd5b809050905090506402540be400808061369d57600080fd5b820490509050808210156136b057600080fd5b8082039050905061070051600281106136c857600080fd5b600160c052602060c02001556103a061070051600281106136e857600080fd5b6020020180516106c0610700516002811061370257600080fd5b60200201518082101561371457600080fd5b808203905090508152505b81516001018083528114156134fe575b5050610140610780525b6107805151602061078051016107805261078061078051101561375b57613739565b636b7dd0846107a0526107c0610260805182528060200151826020015250506108006103a08051825280602001518260200152505061030051610840526108405161082051610800516107e0516107c0516006580161090b565b6108a052610760610780525b61078051526020610780510361078052610140610780511015156137e4576137c1565b6108a051610760526103e051610760518082101561380157600080fd5b8082039050905061018051808202821582848304141761382057600080fd5b809050905090506103e051808061383657600080fd5b820490509050600181818301101561384d57600080fd5b808201905090506108c0526308c379a06108e0526020610900526014610920527f536c697070616765207363726577656420796f7500000000000000000000000061094052610920506044356108c05111156138aa5760846108fcfd5b61098060006002818352015b6000600461098051600281106138cb57600080fd5b602002013511156139945761098051600281106138e757600080fd5b600060c052602060c02001543b6138fd57600080fd5b610980516002811061390e57600080fd5b600060c052602060c0200154301861392557600080fd5b6020610a40604463a9059cbb6109a052336109c0526004610980516002811061394d57600080fd5b60200201356109e0526109bc6000610980516002811061396c57600080fd5b600060c052602060c02001545af161398357600080fd5b600050610a405161399357600080fd5b5b5b81516001018083528114156138b6575b50506005543b6139b457600080fd5b60055430186139c257600080fd5b6000600060446379cc6790610a605233610a80526108c051610aa052610a7c60006005545af16139f157600080fd5b600435610b0052602435610b20526106c051610b40526106e051610b605261056051610b8052610180516108c05180821015613a2c57600080fd5b80820390509050610ba052337f2b5508378d7e19e0d5fa338419034731416c4f5b219a10379956f764317fd47e60c0610b00a2600062ffffff55005b600015613d8d575b6101e0526101405261016052610180526101a0526101c05260026101605112600061016051121516613aa157600080fd5b6101c051610200526000610220526101405160028082028215828483041417613ac957600080fd5b809050905090506102405260006102605261028060006002818352015b61016051610280511815613b16576101806102805160028110613b0857600080fd5b602002015161026052613b1b565b613b97565b610220805161026051818183011015613b3357600080fd5b80820190509050815250610200516101c0518082028215828483041417613b5957600080fd5b809050905090506102605160028082028215828483041417613b7a57600080fd5b809050905090508080613b8c57600080fd5b820490509050610200525b8151600101808352811415613ae6575b5050610200516101c0518082028215828483041417613bc557600080fd5b809050905090506102405160028082028215828483041417613be657600080fd5b809050905090508080613bf857600080fd5b82049050905061020052610220516101c051610240518080613c1957600080fd5b820490509050818183011015613c2e57600080fd5b808201905090506102a05260006102c0526101c0516102e052610300600060ff818352015b6102e0516102c0526102e0516102e0518082028215828483041417613c7757600080fd5b8090509050905061020051818183011015613c9157600080fd5b8082019050905060026102e0518082028215828483041417613cb257600080fd5b809050905090506102a051818183011015613ccc57600080fd5b808201905090506101c05180821015613ce457600080fd5b808203905090508080613cf657600080fd5b8204905090506102e0526102c0516102e0511115613d3d5760016102e0516102c05180821015613d2557600080fd5b80820390509050111515613d3857613d79565b613d68565b60016102c0516102e05180821015613d5457600080fd5b80820390509050111515613d6757613d79565b5b5b8151600101808352811415613c53575b50506102e0516000526000516101e0515650005b600015614473575b6101c0526101405261016052610180526101a0526101405161016051610180516101a0516101c0516101e051600658016100a9565b610220526101e0526101c0526101a052610180526101605261014052610220516101e05260025460028082028215828483041417613e0757600080fd5b8090509050905060048080613e1b57600080fd5b820490509050610240526102606402540be40081526402540be4008160200152506005543b613e4957600080fd5b6005543018613e5757600080fd5b602061032060046318160ddd6102c0526102dc6005545afa613e7857600080fd5b600050610320516102a052610340610140610380525b61038051516020610380510161038052610380610380511015613eb057613e8e565b6396b414ec6103a0526103c0610180805182528060200151826020015250506103e0516103c0516006580161040b565b6104405261046052610360610380525b6103805152602061038051036103805261014061038051101515613f1357613ef0565b610440805182528060200151826020015250506101406104a0525b6104a0515160206104a051016104a0526104a06104a0511015613f5057613f2e565b633842f7766104c0526104e0610340805182528060200151826020015250506101e0516105205261052051610500516104e05160065801610621565b610580526104806104a0525b6104a0515260206104a051036104a0526101406104a051101515613fbb57613f98565b61058051610480526104805161014051610480518082028215828483041417613fe357600080fd5b809050905090506102a0518080613ff957600080fd5b8204905090508082101561400c57600080fd5b808203905090506105a0526105c061034080518252806020015182602001525050610140610620525b6106205151602061062051016106205261062061062051101561405757614035565b63e98e35b0610640526101e0516106605261016051610680526106a0610340805182528060200151826020015250506105a0516106e0526106e0516106c0516106a051610680516106605160065801613a70565b61074052610600610620525b61062051526020610620510361062052610140610620511015156140da576140b7565b610740516106005261034061016051600281106140f657600080fd5b6020020151610600518082101561410c57600080fd5b80820390509050610260610160516002811061412757600080fd5b6020020151808061413757600080fd5b8204905090506107605261078060006002818352015b60006107a052610160516107805114156141cf57610340610780516002811061417557600080fd5b60200201516105a051808202821582848304141761419257600080fd5b809050905090506104805180806141a857600080fd5b82049050905061060051808210156141bf57600080fd5b808203905090506107a05261424e565b61034061078051600281106141e357600080fd5b602002015161034061078051600281106141fc57600080fd5b60200201516105a051808202821582848304141761421957600080fd5b8090509050905061048051808061422f57600080fd5b8204905090508082101561424257600080fd5b808203905090506107a0525b6105c0610780516002811061426257600080fd5b602002018051610240516107a051808202821582848304141761428457600080fd5b809050905090506402540be400808061429c57600080fd5b820490509050808210156142af57600080fd5b808203905090508152505b815160010180835281141561414d575b50506105c061016051600281106142e057600080fd5b60200201516101406107e0525b6107e0515160206107e051016107e0526107e06107e051101561430f576142ed565b63e98e35b0610800526101e0516108205261016051610840526108606105c0805182528060200151826020015250506105a0516108a0526108a0516108805161086051610840516108205160065801613a70565b610900526107c06107e0525b6107e0515260206107e051036107e0526101406107e0511015156143925761436f565b61090051808210156143a357600080fd5b808203905090506107c0526107c0516001808210156143c157600080fd5b8082039050905061026061016051600281106143dc57600080fd5b602002015180806143ec57600080fd5b8204905090506107c0526109208080806107c051815250506020810190508080610760516107c0518082101561442157600080fd5b808203905090508152505060409050905060c05260c051610960525b60006109605111151561444f5761446b565b602061096051036109200151602061096051036109605261443d565b6101c0515650005b63cc2b27d7600051141561456d57341561448c57600080fd5b606051602435806040519013156144a257600080fd5b80919012156144b057600080fd5b50610140610140516101605160065801610281565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101405161016051610180516101a0516101c051638594ca16610200526004356102205260243561024052610260610140805182528060200151826020015250506102805161026051610240516102205160065801613d95565b6102e052610300526101c0526101a0526101805261016052610140526102e05160005260206000f350005b631a4d01d260005114156148b55762ffffff541561458a57600080fd5b600162ffffff55341561459c57600080fd5b606051602435806040519013156145b257600080fd5b80919012156145c057600080fd5b506000610140526000610160526101806101405161016051610180516101a05160065801610281565b6101e052610200526101a0526101805261016052610140526101e0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e05161020051638594ca166102405260043561026052602435610280526102a0610180805182528060200151826020015250506102c0516102a051610280516102605160065801613d95565b6103205261034052610200526101e0526101c0526101a052610180526101605261014052610320805161014052602081015161016052506308c379a06103605260206103805260186103a0527f4e6f7420656e6f75676820636f696e732072656d6f76656400000000000000006103c0526103a0506044356101405110156146ff57608461037cfd5b6024356002811061470f57600080fd5b600160c052602060c0200180546101405161016051600354808202821582848304141761473b57600080fd5b809050905090506402540be400808061475357600080fd5b82049050905081818301101561476857600080fd5b808201905090508082101561477c57600080fd5b808203905090508155506005543b61479357600080fd5b60055430186147a157600080fd5b6000600060446379cc67906104005233610420526004356104405261041c60006005545af16147cf57600080fd5b602435600281106147df57600080fd5b600060c052602060c02001543b6147f557600080fd5b6024356002811061480557600080fd5b600060c052602060c0200154301861481c57600080fd5b6020610540604463a9059cbb6104a052336104c052610140516104e0526104bc60006024356002811061484e57600080fd5b600060c052602060c02001545af161486557600080fd5b6000506105405161487557600080fd5b600435610560526101405161058052337f9e96dd3b997a2a257eec4df9bb6eaf626e206df5f543bd963682d143300be3106040610560a2600062ffffff55005b633c157e646000511415614a275734156148ce57600080fd5b60045433146148dc57600080fd5b600854620151808181830110156148f257600080fd5b8082019050905042101561490557600080fd5b426201518081818301101561491957600080fd5b80820190509050602435101561492e57600080fd5b61014051600658016100a9565b61018052610140526101805161014052620f4240600435106000600435111661496357600080fd5b61014051600435600a808202821582848304141761498057600080fd5b80905090509050101561014051600435101661014051600a80820282158284830414176149ac57600080fd5b80905090509050600435111561014051600435101516176149cc57600080fd5b6101405160065560043560075542600855602435600955610140516101a0526004356101c052426101e052602435610200527fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c25460806101a0a1005b63551a65886000511415614ab7573415614a4057600080fd5b6004543314614a4e57600080fd5b61014051600658016100a9565b6101805261014052610180516101405261014051600655610140516007554260085542600955610140516101a052426101c0527f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc20193860406101a0a1005b635b5a14676000511415614b80573415614ad057600080fd5b6004543314614ade57600080fd5b600a5415614aeb57600080fd5b64012a05f2006024351115614aff57600080fd5b64012a05f2006004351115614b1357600080fd5b426203f480818183011015614b2757600080fd5b808201905090506101405261014051600a55600435600c55602435600d556004356101605260243561018052610140517f351fc5da2fbf480f2225debf3664a4bc90fa9923743aad58b4603f648e931fe06040610160a2005b634f12fe976000511415614c17573415614b9957600080fd5b6004543314614ba757600080fd5b6000600a541142600a54111516614bbd57600080fd5b6000600a55600c5461014052600d546101605261014051600255610160516003556101405161018052610160516101a0527fbe12859b636aed607d5230b2cc2711f68d70e51060e6cca1f575ef5d2fcc95d16040610180a1005b63226840fb6000511415614c45573415614c3057600080fd5b6004543314614c3e57600080fd5b6000600a55005b636b441a406000511415614ce6573415614c5e57600080fd5b6004356020518110614c6f57600080fd5b506004543314614c7e57600080fd5b600b5415614c8b57600080fd5b426203f480818183011015614c9f57600080fd5b808201905090506101405261014051600b55600435600e55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae6000511415614d62573415614cff57600080fd5b6004543314614d0d57600080fd5b6000600b5411600b5442101516614d2357600080fd5b6000600b55600e546101405261014051600455610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf1936000511415614d90573415614d7b57600080fd5b6004543314614d8957600080fd5b6000600b55005b6330c540856000511415614ee4573415614da957600080fd5b6004543314614db757600080fd5b61014060006002818352015b6101405160028110614dd457600080fd5b600060c052602060c020015461016052610160513b614df257600080fd5b610160513018614e0157600080fd5b602061022060246370a082316101a052306101c0526101bc610160515afa614e2857600080fd5b600050610220516101405160028110614e4057600080fd5b600160c052602060c020015480821015614e5957600080fd5b80820390509050610180526000610180511115614ecf57610160513b614e7e57600080fd5b610160513018614e8d57600080fd5b60206102e0604463a9059cbb610240523361026052610180516102805261025c6000610160515af1614ebe57600080fd5b6000506102e051614ece57600080fd5b5b5b8151600101808352811415614dc3575b5050005b63e36988536000511415614f20573415614efd57600080fd5b6004543314614f0b57600080fd5b42600f5411614f1957600080fd5b6001601055005b633046f9726000511415614f4e573415614f3957600080fd5b6004543314614f4757600080fd5b6000601055005b6323746eb86000511415614fb3573415614f6757600080fd5b60605160043580604051901315614f7d57600080fd5b8091901215614f8b57600080fd5b5060043560028110614f9c57600080fd5b600060c052602060c020015460005260206000f350005b63065a80d86000511415615018573415614fcc57600080fd5b60605160043580604051901315614fe257600080fd5b8091901215614ff057600080fd5b506004356002811061500157600080fd5b600160c052602060c020015460005260206000f350005b63ddca3f43600051141561503f57341561503157600080fd5b60025460005260206000f350005b63fee3f7f9600051141561506657341561505857600080fd5b60035460005260206000f350005b638da5cb5b600051141561508d57341561507f57600080fd5b60045460005260206000f350005b635409491a60005114156150b45734156150a657600080fd5b60065460005260206000f350005b63b4b577ad60005114156150db5734156150cd57600080fd5b60075460005260206000f350005b632081066c60005114156151025734156150f457600080fd5b60085460005260206000f350005b6314052288600051141561512957341561511b57600080fd5b60095460005260206000f350005b63405e28f8600051141561515057341561514257600080fd5b600a5460005260206000f350005b63e0a0b586600051141561517757341561516957600080fd5b600b5460005260206000f350005b6358680d0b600051141561519e57341561519057600080fd5b600c5460005260206000f350005b63e382446260005114156151c55734156151b757600080fd5b600d5460005260206000f350005b631ec0cdc160005114156151ec5734156151de57600080fd5b600e5460005260206000f350005b5b60006000fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000049849c98ae39fff122806c06791fa73784fb3675000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000003d0900
-----Decoded View---------------
Arg [0] : _coins (address[2]): 0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D,0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
Arg [1] : _pool_token (address): 0x49849C98ae39Fff122806C06791Fa73784FB3675
Arg [2] : _A (uint256): 100
Arg [3] : _fee (uint256): 4000000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d
Arg [1] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [2] : 00000000000000000000000049849c98ae39fff122806c06791fa73784fb3675
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 00000000000000000000000000000000000000000000000000000000003d0900
Loading...
Loading
Loading...
Loading
OVERVIEW
Curve.fi's REN swap address.Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.