More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,590 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove_liquidity | 21456435 | 57 days ago | IN | 0 ETH | 0.00127388 | ||||
Remove_liquidity | 21008562 | 119 days ago | IN | 0 ETH | 0.00200772 | ||||
Add_liquidity | 19006818 | 399 days ago | IN | 0 ETH | 0.0086066 | ||||
Add_liquidity | 18985325 | 402 days ago | IN | 0 ETH | 0.01190747 | ||||
Exchange_underly... | 17906739 | 554 days ago | IN | 0 ETH | 0.01056285 | ||||
Exchange_underly... | 16843784 | 703 days ago | IN | 0 ETH | 0.00509402 | ||||
Exchange | 16809189 | 708 days ago | IN | 0 ETH | 0.00809463 | ||||
Exchange | 16809109 | 708 days ago | IN | 0 ETH | 0.00574604 | ||||
Exchange | 16809103 | 708 days ago | IN | 0 ETH | 0.00658936 | ||||
Exchange | 16809082 | 708 days ago | IN | 0 ETH | 0.00690975 | ||||
Exchange_underly... | 16805184 | 709 days ago | IN | 0 ETH | 0.0162585 | ||||
Exchange_underly... | 16804895 | 709 days ago | IN | 0 ETH | 0.0161346 | ||||
Add_liquidity | 16502024 | 751 days ago | IN | 0 ETH | 0.01246253 | ||||
Add_liquidity | 16501750 | 751 days ago | IN | 0 ETH | 0.01440187 | ||||
Remove_liquidity | 16295039 | 780 days ago | IN | 0 ETH | 0.00344889 | ||||
Add_liquidity | 16269751 | 784 days ago | IN | 0 ETH | 0.00594437 | ||||
Exchange_underly... | 15993272 | 822 days ago | IN | 0 ETH | 0.00544206 | ||||
Exchange_underly... | 15952126 | 828 days ago | IN | 0 ETH | 0.01243091 | ||||
Exchange_underly... | 15900187 | 835 days ago | IN | 0 ETH | 0.00690531 | ||||
Exchange_underly... | 15898773 | 835 days ago | IN | 0 ETH | 0.00618439 | ||||
Add_liquidity | 15686581 | 865 days ago | IN | 0 ETH | 0.00216236 | ||||
Exchange_underly... | 15564234 | 882 days ago | IN | 0 ETH | 0.00286576 | ||||
Add_liquidity | 15435855 | 902 days ago | IN | 0 ETH | 0.01301924 | ||||
Add_liquidity | 15435855 | 902 days ago | IN | 0 ETH | 0.01619654 | ||||
Exchange | 15322091 | 920 days ago | IN | 0 ETH | 0.01178819 |
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.0b16
Contract Source Code (Vyper language format)
# (c) Curve.Fi, 2020 # 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: modifying def supplyRatePerBlock() -> uint256: constant def accrualBlockNumber() -> uint256: constant from vyper.interfaces import ERC20 # Tether transfer-only ABI contract USDT: def transfer(_to: address, _value: uint256): modifying def transferFrom(_from: address, _to: address, _value: uint256): modifying # 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, True] # Flag "ERC20s" which don't return from transfer() and transferFrom() TETHERED: constant(bool[N_COINS]) = [False, 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(1, uint256), convert(1000000000000, 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 # Events TokenExchange: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256}) TokenExchangeUnderlying: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256}) AddLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256}) RemoveLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], token_supply: uint256}) RemoveLiquidityImbalance: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256}) CommitNewAdmin: event({deadline: indexed(timestamp), admin: indexed(address)}) NewAdmin: event({admin: indexed(address)}) CommitNewParameters: event({deadline: indexed(timestamp), A: uint256, fee: uint256, admin_fee: uint256}) NewParameters: event({A: uint256, fee: uint256, admin_fee: uint256}) coins: public(address[N_COINS]) underlying_coins: public(address[N_COINS]) balances: public(uint256[N_COINS]) A: public(uint256) # 2 x amplification coefficient 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 owner: public(address) token: ERC20m admin_actions_deadline: public(timestamp) transfer_ownership_deadline: public(timestamp) future_A: public(uint256) 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], _underlying_coins: address[N_COINS], _pool_token: address, _A: uint256, _fee: uint256): """ _coins: Addresses of ERC20 conracts of coins (c-tokens) involved _underlying_coins: Addresses of plain coins (ERC20) _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 assert _underlying_coins[i] != ZERO_ADDRESS self.balances[i] = 0 self.coins = _coins self.underlying_coins = _underlying_coins self.A = _A self.fee = _fee self.admin_fee = 0 self.owner = msg.sender self.kill_deadline = block.timestamp + kill_deadline_dt self.is_killed = False self.token = ERC20m(_pool_token) @private @constant def _stored_rates() -> uint256[N_COINS]: # exchangeRateStored * (1 + supplyRatePerBlock * (getBlockNumber - accrualBlockNumber) / 1e18) 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]).exchangeRateStored() supply_rate: uint256 = cERC20(self.coins[i]).supplyRatePerBlock() old_block: uint256 = cERC20(self.coins[i]).accrualBlockNumber() rate += rate * supply_rate * (block.number - old_block) / LENDING_PRECISION result[i] *= rate return result @private def _current_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] / PRECISION return result @private @constant def _xp_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256[N_COINS]: result: uint256[N_COINS] = rates for i in range(N_COINS): result[i] = result[i] * _balances[i] / PRECISION return result @private @constant def get_D(xp: uint256[N_COINS]) -> uint256: S: uint256 = 0 for _x in xp: S += _x if S == 0: return 0 Dprev: uint256 = 0 D: uint256 = S Ann: uint256 = self.A * N_COINS for _i in range(255): D_P: uint256 = D for _x in xp: D_P = D_P * D / (_x * N_COINS + 1) # +1 is to prevent /0 Dprev = D D = (Ann * S + D_P * N_COINS) * D / ((Ann - 1) * D + (N_COINS + 1) * D_P) # 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]) -> uint256: return self.get_D(self._xp_mem(rates, _balances)) @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._stored_rates())) # 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._stored_rates() D0: uint256 = self.get_D_mem(rates, _balances) for i in range(N_COINS): if deposit: _balances[i] += amounts[i] else: _balances[i] -= amounts[i] D1: uint256 = self.get_D_mem(rates, _balances) token_amount: uint256 = self.token.totalSupply() diff: uint256 = 0 if deposit: diff = D1 - D0 else: diff = D0 - D1 return diff * token_amount / D0 @public @nonreentrant('lock') def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256): # Amounts is amounts of c-tokens assert not self.is_killed tethered: bool[N_COINS] = TETHERED 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 token_supply: uint256 = self.token.totalSupply() rates: uint256[N_COINS] = self._current_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) 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) 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) 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 tethered[i] and not use_lending[i]: USDT(self.coins[i]).transferFrom(msg.sender, self, amounts[i]) else: 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) D: uint256 = self.get_D(_xp) c: uint256 = D S_: uint256 = 0 Ann: uint256 = self.A * N_COINS _x: uint256 = 0 for _i in range(N_COINS): if _i == i: _x = x elif _i != j: _x = _xp[_i] else: continue S_ += _x c = c * D / (_x * N_COINS) c = c * D / (Ann * N_COINS) b: uint256 = S_ + D / Ann # - 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._stored_rates() xp: uint256[N_COINS] = self._xp(rates) x: uint256 = xp[i] + (dx * rates[i] / PRECISION) y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = (xp[j] - y) * PRECISION / rates[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @public @constant def get_dx(i: int128, j: int128, dy: uint256) -> uint256: # dx and dy in c-units rates: uint256[N_COINS] = self._stored_rates() xp: uint256[N_COINS] = self._xp(rates) y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * rates[j] / PRECISION x: uint256 = self.get_y(j, i, y, xp) dx: uint256 = (x - xp[i]) * PRECISION / rates[i] return dx @public @constant def get_dy_underlying(i: int128, j: int128, dx: uint256) -> uint256: # dx and dy in underlying units rates: uint256[N_COINS] = self._stored_rates() xp: uint256[N_COINS] = self._xp(rates) precisions: uint256[N_COINS] = PRECISION_MUL x: uint256 = xp[i] + dx * precisions[i] y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = (xp[j] - y) / precisions[j] _fee: uint256 = self.fee * dy / FEE_DENOMINATOR return dy - _fee @public @constant def get_dx_underlying(i: int128, j: int128, dy: uint256) -> uint256: # dx and dy in underlying units rates: uint256[N_COINS] = self._stored_rates() xp: uint256[N_COINS] = self._xp(rates) precisions: uint256[N_COINS] = PRECISION_MUL y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * precisions[j] x: uint256 = self.get_y(j, i, y, xp) dx: uint256 = (x - xp[i]) / precisions[i] return dx @private def _exchange(i: int128, j: int128, dx: uint256, rates: uint256[N_COINS]) -> uint256: assert not self.is_killed # dx and dy are in c-tokens xp: uint256[N_COINS] = self._xp(rates) x: uint256 = xp[i] + dx * rates[i] / PRECISION y: uint256 = self.get_y(i, j, x, xp) dy: uint256 = xp[j] - y dy_fee: uint256 = dy * self.fee / FEE_DENOMINATOR dy_admin_fee: uint256 = dy_fee * self.admin_fee / FEE_DENOMINATOR self.balances[i] = x * PRECISION / rates[i] self.balances[j] = (y + (dy_fee - dy_admin_fee)) * PRECISION / rates[j] _dy: uint256 = (dy - dy_fee) * PRECISION / rates[j] return _dy @public @nonreentrant('lock') def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): rates: uint256[N_COINS] = self._current_rates() dy: uint256 = self._exchange(i, j, dx, rates) assert dy >= min_dy, "Exchange resulted in fewer coins than expected" tethered: bool[N_COINS] = TETHERED use_lending: bool[N_COINS] = USE_LENDING if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transferFrom(msg.sender, self, dx) else: assert_modifiable(cERC20(self.coins[i]).transferFrom(msg.sender, self, dx)) if tethered[j] and not use_lending[j]: USDT(self.coins[j]).transfer(msg.sender, dy) else: assert_modifiable(cERC20(self.coins[j]).transfer(msg.sender, dy)) log.TokenExchange(msg.sender, i, dx, j, dy) @public @nonreentrant('lock') def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256): rates: uint256[N_COINS] = self._current_rates() precisions: uint256[N_COINS] = PRECISION_MUL rate_i: uint256 = rates[i] / precisions[i] rate_j: uint256 = rates[j] / precisions[j] dx_: uint256 = dx * PRECISION / rate_i dy_: uint256 = self._exchange(i, j, dx_, rates) dy: uint256 = dy_ * rate_j / PRECISION assert dy >= min_dy, "Exchange resulted in fewer coins than expected" use_lending: bool[N_COINS] = USE_LENDING tethered: bool[N_COINS] = TETHERED ok: uint256 = 0 if tethered[i]: USDT(self.underlying_coins[i]).transferFrom(msg.sender, self, dx) else: assert_modifiable(ERC20(self.underlying_coins[i])\ .transferFrom(msg.sender, self, dx)) if use_lending[i]: ERC20(self.underlying_coins[i]).approve(self.coins[i], dx) ok = cERC20(self.coins[i]).mint(dx) if ok > 0: raise "Could not mint coin" if use_lending[j]: ok = cERC20(self.coins[j]).redeem(dy_) if ok > 0: raise "Could not redeem coin" if tethered[j]: USDT(self.underlying_coins[j]).transfer(msg.sender, dy) else: assert_modifiable(ERC20(self.underlying_coins[j])\ .transfer(msg.sender, dy)) log.TokenExchangeUnderlying(msg.sender, i, dx, j, dy) @public @nonreentrant('lock') def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]): total_supply: uint256 = self.token.totalSupply() amounts: uint256[N_COINS] = ZEROS fees: uint256[N_COINS] = ZEROS tethered: bool[N_COINS] = TETHERED 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 if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transfer(msg.sender, value) else: 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 tethered: bool[N_COINS] = TETHERED 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._current_rates() old_balances: uint256[N_COINS] = self.balances new_balances: uint256[N_COINS] = old_balances D0: uint256 = self.get_D_mem(rates, old_balances) for i in range(N_COINS): new_balances[i] -= amounts[i] D1: uint256 = self.get_D_mem(rates, new_balances) fees: uint256[N_COINS] = ZEROS for i in range(N_COINS): ideal_balance: uint256 = D1 * old_balances[i] / D0 difference: uint256 = 0 if ideal_balance > new_balances[i]: difference = ideal_balance - new_balances[i] else: difference = new_balances[i] - ideal_balance fees[i] = _fee * difference / FEE_DENOMINATOR self.balances[i] = new_balances[i] - (fees[i] * _admin_fee / FEE_DENOMINATOR) new_balances[i] -= fees[i] D2: uint256 = self.get_D_mem(rates, new_balances) token_amount: uint256 = (D0 - D2) * token_supply / D0 assert token_amount > 0 assert token_amount <= max_burn_amount, "Slippage screwed you" for i in range(N_COINS): if tethered[i] and not use_lending[i]: USDT(self.coins[i]).transfer(msg.sender, amounts[i]) else: 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) ### Admin functions ### @public def commit_new_parameters(amplification: uint256, 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 assert amplification <= max_A _deadline: timestamp = block.timestamp + admin_actions_delay self.admin_actions_deadline = _deadline self.future_A = amplification self.future_fee = new_fee self.future_admin_fee = new_admin_fee log.CommitNewParameters(_deadline, amplification, new_fee, new_admin_fee) @public def apply_new_parameters(): assert msg.sender == self.owner assert self.admin_actions_deadline <= block.timestamp\ and self.admin_actions_deadline > 0 self.admin_actions_deadline = 0 _A: uint256 = self.future_A _fee: uint256 = self.future_fee _admin_fee: uint256 = self.future_admin_fee self.A = _A self.fee = _fee self.admin_fee = _admin_fee log.NewParameters(_A, _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 _precisions: uint256[N_COINS] = PRECISION_MUL tethered: bool[N_COINS] = TETHERED use_lending: bool[N_COINS] = USE_LENDING for i in range(N_COINS): c: address = self.coins[i] value: uint256 = cERC20(c).balanceOf(self) - self.balances[i] if value > 0: if tethered[i] and not use_lending[i]: USDT(c).transfer(msg.sender, value) else: 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":"TokenExchangeUnderlying","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[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":"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":"CommitNewParameters","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewParameters","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[2]","name":"_coins"},{"type":"address[2]","name":"_underlying_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"}],"constant":false,"payable":false,"type":"constructor"},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1084167},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":4239939},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":6479997},{"name":"get_dy","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":2543681},{"name":"get_dx","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":2543687},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":2543506},{"name":"get_dx_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":2543512},{"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":5184573},{"name":"exchange_underlying","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":5200817},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[2]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":153898},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":6479708},{"name":"commit_new_parameters","outputs":[],"inputs":[{"type":"uint256","name":"amplification"},{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"constant":false,"payable":false,"type":"function","gas":146105},{"name":"apply_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":133512},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21835},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74512},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60568},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21925},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":12831},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37878},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22015},{"name":"coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2190},{"name":"underlying_coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2220},{"name":"balances","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2250},{"name":"A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2081},{"name":"fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2111},{"name":"admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2141},{"name":"owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"future_A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2261},{"name":"future_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2291},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2321},{"name":"future_owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2351}]
Contract Creation Code
740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05260e06156fb6101403934156100a157600080fd5b60206156fb60c03960c05160205181106100ba57600080fd5b50602060206156fb0160c03960c05160205181106100d757600080fd5b50602060406156fb0160c03960c05160205181106100f457600080fd5b50602060606156fb0160c03960c051602051811061011157600080fd5b50602060806156fb0160c03960c051602051811061012e57600080fd5b5061022060006002818352015b6000610140610220516002811061015157600080fd5b60200201511861016057600080fd5b6000610180610220516002811061017657600080fd5b60200201511861018557600080fd5b6000610220516002811061019857600080fd5b600260c052602060c02001555b815160010180835281141561013b575b5050600060c052602060c02061014080518255806020015160018301555050600160c052602060c020610180805182558060200151600183015550506101e0516003556102005160045560006005553360065542624f1a0081818301101561021c57600080fd5b80820190509050600e556000600f556101c0516007556156e356600436101561000d576154a6565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526000156103e0575b610140526101606001815264e8d4a510008160200152506101a06001815260018160200152506101e060006002818352015b670de0b6b3a7640000610200526101a06101e051600281106100fc57600080fd5b602002015115610355576101e0516002811061011757600080fd5b600060c052602060c02001543b61012d57600080fd5b6101e0516002811061013e57600080fd5b600060c052602060c0200154301861015557600080fd5b6020610280600463182df0f56102205261023c6101e0516002811061017957600080fd5b600060c052602060c02001545afa61019057600080fd5b60005061028051610200526101e051600281106101ac57600080fd5b600060c052602060c02001543b6101c257600080fd5b6101e051600281106101d357600080fd5b600060c052602060c020015430186101ea57600080fd5b6020610320600463ae9d70b06102c0526102dc6101e0516002811061020e57600080fd5b600060c052602060c02001545afa61022557600080fd5b600050610320516102a0526101e0516002811061024157600080fd5b600060c052602060c02001543b61025757600080fd5b6101e0516002811061026857600080fd5b600060c052602060c0200154301861027f57600080fd5b60206103c06004636c540baf6103605261037c6101e051600281106102a357600080fd5b600060c052602060c02001545afa6102ba57600080fd5b6000506103c051610340526102008051610200516102a05180820282158284830414176102e657600080fd5b809050905090504361034051808210156102ff57600080fd5b80820390509050808202821582848304141761031a57600080fd5b80905090509050670de0b6b3a7640000808061033557600080fd5b82049050905081818301101561034a57600080fd5b808201905090508152505b6101606101e0516002811061036957600080fd5b60200201805161020051808202821582848304141761038757600080fd5b809050905090508152505b81516001018083528114156100db575b505060406103e0525b60006103e0511115156103bd576103d9565b60206103e05103610160015160206103e051036103e0526103ab565b6101405156005b600015610568575b610140526101606001815264e8d4a510008160200152506101a06001815260018160200152506101e060006002818352015b670de0b6b3a7640000610200526101a06101e0516002811061043b57600080fd5b6020020151156104dd576101e0516002811061045657600080fd5b600060c052602060c02001543b61046c57600080fd5b6101e0516002811061047d57600080fd5b600060c052602060c0200154301861049457600080fd5b6020610280600463bd6d894d6102205261023c60006101e051600281106104ba57600080fd5b600060c052602060c02001545af16104d157600080fd5b60005061028051610200525b6101606101e051600281106104f157600080fd5b60200201805161020051808202821582848304141761050f57600080fd5b809050905090508152505b815160010180835281141561041a575b505060406102a0525b60006102a05111151561054557610561565b60206102a05103610160015160206102a051036102a052610533565b6101405156005b600015610671575b6101805261014052610160526101a0610140805182528060200151826020015250506101e060006002818352015b6101a06101e051600281106105b257600080fd5b60200201516101e051600281106105c857600080fd5b600260c052602060c020015480820282158284830414176105e857600080fd5b80905090509050670de0b6b3a7640000808061060357600080fd5b8204905090506101a06101e0516002811061061d57600080fd5b60200201525b815160010180835281141561059e575b50506040610200525b60006102005111151561064e5761066a565b602061020051036101a00151602061020051036102005261063c565b6101805156005b60001561077e575b6101c0526101405261016052610180526101a0526101e06101408051825280602001518260200152505061022060006002818352015b6101e061022051600281106106c357600080fd5b602002015161018061022051600281106106dc57600080fd5b602002015180820282158284830414176106f557600080fd5b80905090509050670de0b6b3a7640000808061071057600080fd5b8204905090506101e0610220516002811061072a57600080fd5b60200201525b81516001018083528114156106af575b50506040610240525b60006102405111151561075b57610777565b602061024051036101e001516020610240510361024052610749565b6101c05156005b600015610a7b575b61018052610140526101605260006101a0526101e060006002818352015b60206101e0510261014001516101c0526101a080516101c0518181830110156107cc57600080fd5b808201905090508152505b81516001018083528114156107a4575b50506101a05115156108025760006000526000516101805156505b6000610220526101a051610240526003546002808202821582848304141761082957600080fd5b8090509050905061026052610280600060ff818352015b610240516102a0526102e060006002818352015b60206102e0510261014001516102c0526102a05161024051808202821582848304141761088057600080fd5b809050905090506102c051600280820282158284830414176108a157600080fd5b8090509050905060018181830110156108b957600080fd5b8082019050905080806108cb57600080fd5b8204905090506102a0525b8151600101808352811415610854575b50506102405161022052610260516101a051808202821582848304141761090c57600080fd5b809050905090506102a0516002808202821582848304141761092d57600080fd5b8090509050905081818301101561094357600080fd5b8082019050905061024051808202821582848304141761096257600080fd5b809050905090506102605160018082101561097c57600080fd5b8082039050905061024051808202821582848304141761099b57600080fd5b8090509050905060036102a05180820282158284830414176109bc57600080fd5b809050905090508181830110156109d257600080fd5b8082019050905080806109e457600080fd5b8204905090506102405261022051610240511115610a2b576001610240516102205180821015610a1357600080fd5b80820390509050111515610a2657610a67565b610a56565b6001610220516102405180821015610a4257600080fd5b80820390509050111515610a5557610a67565b5b5b8151600101808352811415610840575b505061024051600052600051610180515650005b600015610bdd575b6101c0526101405261016052610180526101a052610140610460525b61046051516020610460510161046052610460610460511015610ac157610a9f565b637b08bb90610480526104a0610140610320525b61032051516020610320510161032052610320610320511015610af757610ad5565b63575e285f61034052610360610140805182528060200151826020015250506103a0610180805182528060200151826020015250506103c0516103a051610380516103605160065801610679565b6104205261044052610300610320525b6103205152602061032051036103205261014061032051101515610b7857610b55565b610420805182528060200151826020015250506104c0516104a05160065801610786565b61052052610440610460525b6104605152602061046051036104605261014061046051101515610bcb57610ba8565b610520516000526000516101c0515650005b63bb7b8b806000511415610e09573415610bf657600080fd5b6101406104e0525b6104e0515160206104e051016104e0526104e06104e0511015610c2057610bfe565b637b08bb90610500526105206101406103e0525b6103e0515160206103e051016103e0526103e06103e0511015610c5657610c34565b6396b414ec61040052610420610140610380525b61038051516020610380510161038052610380610380511015610c8c57610c6a565b600658016100a9565b6103a0526103c052610360610380525b6103805152602061038051036103805261014061038051101515610cc857610ca5565b6103a080518252806020015182602001525050610440516104205160065801610570565b6104a0526104c0526103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515610d1f57610cfc565b6104a080518252806020015182602001525050610540516105205160065801610786565b6105a0526104c06104e0525b6104e0515260206104e051036104e0526101406104e051101515610d7257610d4f565b6105a051610140526007543b610d8757600080fd5b6007543018610d9557600080fd5b602061064060046318160ddd6105e0526105fc6007545afa610db657600080fd5b600050610640516105c05261014051670de0b6b3a76400008082028215828483041417610de257600080fd5b809050905090506105c0518080610df857600080fd5b82049050905060005260206000f350005b63ed8e84f36000511415611187573415610e2257600080fd5b60443560028110610e3257600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015250506101806101405161016051610180516101a051600658016100a9565b6101e052610200526101a0526101805261016052610140526101e0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e0516102005161022051633927649861026052610280610180805182528060200151826020015250506102c0610140805182528060200151826020015250506102e0516102c0516102a0516102805160065801610a83565b6103405261022052610200526101e0526101c0526101a052610180526101605261014052610340516102205261036060006002818352015b60443515610f9d576101406103605160028110610f6157600080fd5b60200201805160046103605160028110610f7a57600080fd5b6020020135818183011015610f8e57600080fd5b80820190509050815250610fe7565b6101406103605160028110610fb157600080fd5b60200201805160046103605160028110610fca57600080fd5b602002013580821015610fdc57600080fd5b808203905090508152505b5b8151600101808352811415610f45575b50506101406103a0525b6103a0515160206103a051016103a0526103a06103a051101561102457611002565b63392764986103c0526103e061018080518252806020015182602001525050610420610140805182528060200151826020015250506104405161042051610400516103e05160065801610a83565b6104a0526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156110a15761107e565b6104a051610380526007543b6110b657600080fd5b60075430186110c457600080fd5b602061054060046318160ddd6104e0526104fc6007545afa6110e557600080fd5b600050610540516104c052600061056052604435156111235761038051610220518082101561111357600080fd5b8082039050905061056052611144565b61022051610380518082101561113857600080fd5b80820390509050610560525b610560516104c051808202821582848304141761116057600080fd5b8090509050905061022051808061117657600080fd5b82049050905060005260206000f350005b630b4c7e4d6000511415611bda5762ffffff54156111a457600080fd5b600162ffffff5534156111b657600080fd5b600f54156111c357600080fd5b6101406000815260008160200152506101806001815260018160200152506101c06000815260008160200152506004546002808202821582848304141761120957600080fd5b809050905090506004808061121d57600080fd5b82049050905061020052600554610220526007543b61123b57600080fd5b600754301861124957600080fd5b60206102c060046318160ddd6102605261027c6007545afa61126a57600080fd5b6000506102c051610240526102e0610140610320525b610320515160206103205101610320526103206103205110156112a257611280565b600658016103e8565b6103405261036052610300610320525b61032051526020610320510361032052610140610320511015156112de576112bb565b610340805182528060200151826020015250506000610380526103a060028060c052602060c02054825260018160c052602060c02001548260200152505060006102405111156113d8576101406103e0525b6103e0515160206103e051016103e0526103e06103e051101561135257611330565b6339276498610400526104206102e0805182528060200151826020015250506104606103a0805182528060200151826020015250506104805161046051610440516104205160065801610a83565b6104e0526103c06103e0525b6103e0515260206103e051036103e0526101406103e0511015156113cf576113ac565b6104e051610380525b6105006103a08051825280602001518260200152505061054060006002818352015b6102405115156114295760006004610540516002811061141957600080fd5b60200201351161142857600080fd5b5b6103a0610540516002811061143d57600080fd5b60200201516004610540516002811061145557600080fd5b602002013581818301101561146957600080fd5b80820190509050610500610540516002811061148457600080fd5b60200201525b81516001018083528114156113fa575b5050610140610580525b610580515160206105805101610580526105806105805110156114c6576114a4565b63392764986105a0526105c06102e0805182528060200151826020015250506106006105008051825280602001518260200152505061062051610600516105e0516105c05160065801610a83565b61068052610560610580525b610580515260206105805103610580526101406105805110151561154357611520565b610680516105605261038051610560511161155d57600080fd5b610560516106a0526000610240511115611864576106c060006002818352015b610560516103a06106c0516002811061159557600080fd5b602002015180820282158284830414176115ae57600080fd5b809050905090506103805180806115c457600080fd5b8204905090506106e0526000610700526105006106c051600281106115e857600080fd5b60200201516106e0511115611631576106e0516105006106c0516002811061160f57600080fd5b60200201518082101561162157600080fd5b8082039050905061070052611667565b6105006106c0516002811061164557600080fd5b60200201516106e0518082101561165b57600080fd5b80820390509050610700525b6102005161070051808202821582848304141761168357600080fd5b809050905090506402540be400808061169b57600080fd5b8204905090506101c06106c051600281106116b557600080fd5b60200201526105006106c051600281106116ce57600080fd5b60200201516101c06106c051600281106116e757600080fd5b602002015161022051808202821582848304141761170457600080fd5b809050905090506402540be400808061171c57600080fd5b8204905090508082101561172f57600080fd5b808203905090506106c0516002811061174757600080fd5b600260c052602060c02001556105006106c0516002811061176757600080fd5b6020020180516101c06106c0516002811061178157600080fd5b60200201518082101561179357600080fd5b808203905090508152505b815160010180835281141561157d575b5050610140610720525b610720515160206107205101610720526106c06107205110156117da576117b8565b6339276498610740526107606102e0805182528060200151826020015250506107a0610500805182528060200151826020015250506107c0516107a051610780516107605160065801610a83565b610820526106a0610720525b610720515260206107205103610720526101406107205110151561185757611834565b610820516106a052611882565b600260c052602060c020610500805182558060200151600183015550505b60006108405261024051151561189f5761056051610840526118f4565b610240516106a05161038051808210156118b857600080fd5b8082039050905080820282158284830414176118d357600080fd5b809050905090506103805180806118e957600080fd5b820490509050610840525b6308c379a06108605260206108805260146108a0527f536c697070616765207363726577656420796f750000000000000000000000006108c0526108a05060443561084051101561194657608461087cfd5b61090060006002818352015b610180610900516002811061196657600080fd5b602002015115610140610900516002811061198057600080fd5b60200201511615611a4157610900516002811061199c57600080fd5b600060c052602060c02001543b6119b257600080fd5b61090051600281106119c357600080fd5b600060c052602060c020015430186119da57600080fd5b6000600060646323b872dd610a005233610a205230610a405260046109005160028110611a0657600080fd5b6020020135610a6052610a1c60006109005160028110611a2557600080fd5b600060c052602060c02001545af1611a3c57600080fd5b611b04565b6109005160028110611a5257600080fd5b600060c052602060c02001543b611a6857600080fd5b6109005160028110611a7957600080fd5b600060c052602060c02001543018611a9057600080fd5b60206109e060646323b872dd610920523361094052306109605260046109005160028110611abd57600080fd5b60200201356109805261093c60006109005160028110611adc57600080fd5b600060c052602060c02001545af1611af357600080fd5b6000506109e051611b0357600080fd5b5b5b8151600101808352811415611952575b50506007543b611b2457600080fd5b6007543018611b3257600080fd5b6000600060446340c10f19610ac05233610ae05261084051610b0052610adc60006007545af1611b6157600080fd5b600435610b6052602435610b80526101c051610ba0526101e051610bc05261056051610be0526102405161084051818183011015611b9e57600080fd5b80820190509050610c0052337f26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a76860c0610b60a2600062ffffff55005b600015611faa575b6101e0526101405261016052610180526101a0526101c0526000610140511215610160516101405114151660006101605112151660026101405112166002610160511216611c2f57600080fd5b6101405161016051610180516101a0516101c0516101e05161020051637b08bb90610240526102606101a080518252806020015182602001525050610280516102605160065801610786565b6102e052610200526101e0526101c0526101a0526101805261016052610140526102e05161020052610200516103005260006103205260035460028082028215828483041417611cca57600080fd5b809050905090506103405260006103605261038060006002818352015b61014051610380511415611d02576101805161036052611d38565b61016051610380511815611d32576101a06103805160028110611d2457600080fd5b602002015161036052611d37565b611db4565b5b610320805161036051818183011015611d5057600080fd5b8082019050905081525061030051610200518082028215828483041417611d7657600080fd5b809050905090506103605160028082028215828483041417611d9757600080fd5b809050905090508080611da957600080fd5b820490509050610300525b8151600101808352811415611ce7575b505061030051610200518082028215828483041417611de257600080fd5b809050905090506103405160028082028215828483041417611e0357600080fd5b809050905090508080611e1557600080fd5b820490509050610300526103205161020051610340518080611e3657600080fd5b820490509050818183011015611e4b57600080fd5b808201905090506103a05260006103c052610200516103e052610400600060ff818352015b6103e0516103c0526103e0516103e0518082028215828483041417611e9457600080fd5b8090509050905061030051818183011015611eae57600080fd5b8082019050905060026103e0518082028215828483041417611ecf57600080fd5b809050905090506103a051818183011015611ee957600080fd5b808201905090506102005180821015611f0157600080fd5b808203905090508080611f1357600080fd5b8204905090506103e0526103c0516103e0511115611f5a5760016103e0516103c05180821015611f4257600080fd5b80820390509050111515611f5557611f96565b611f85565b60016103c0516103e05180821015611f7157600080fd5b80820390509050111515611f8457611f96565b5b5b8151600101808352811415611e70575b50506103e0516000526000516101e0515650005b635e0d443f60005114156122e4573415611fc357600080fd5b60605160043580604051901315611fd957600080fd5b8091901215611fe757600080fd5b5060605160243580604051901315611ffe57600080fd5b809190121561200c57600080fd5b506101406101405161016051600658016100a9565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec6102405261026061014080518252806020015182602001525050610280516102605160065801610570565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506101e0600435600281106120dd57600080fd5b6020020151604435610140600435600281106120f857600080fd5b6020020151808202821582848304141761211157600080fd5b80905090509050670de0b6b3a7640000808061212c57600080fd5b82049050905081818301101561214157600080fd5b8082019050905061032052610140610360525b6103605151602061036051016103605261036061036051101561217657612154565b63232dd1c9610380526004356103a0526024356103c052610320516103e0526104006101e08051825280602001518260200152505061042051610400516103e0516103c0516103a05160065801611be2565b61048052610340610360525b61036051526020610360510361036052610140610360511015156121f7576121d4565b61048051610340526101e06024356002811061221257600080fd5b6020020151610340518082101561222857600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761224c57600080fd5b809050905090506101406024356002811061226657600080fd5b6020020151808061227657600080fd5b8204905090506104a0526004546104a051808202821582848304141761229b57600080fd5b809050905090506402540be40080806122b357600080fd5b8204905090506104c0526104a0516104c051808210156122d257600080fd5b8082039050905060005260206000f350005b6367df02ca60005114156126165734156122fd57600080fd5b6060516004358060405190131561231357600080fd5b809190121561232157600080fd5b506060516024358060405190131561233857600080fd5b809190121561234657600080fd5b506101406101405161016051600658016100a9565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec6102405261026061014080518252806020015182602001525050610280516102605160065801610570565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506101e06024356002811061241757600080fd5b60200201516044356402540be400808202821582848304141761243957600080fd5b809050905090506402540be4006004548082101561245657600080fd5b80820390509050808061246857600080fd5b8204905090506101406024356002811061248157600080fd5b6020020151808202821582848304141761249a57600080fd5b80905090509050670de0b6b3a764000080806124b557600080fd5b820490509050808210156124c857600080fd5b8082039050905061032052610140610360525b610360515160206103605101610360526103606103605110156124fd576124db565b63232dd1c9610380526024356103a0526004356103c052610320516103e0526104006101e08051825280602001518260200152505061042051610400516103e0516103c0516103a05160065801611be2565b61048052610340610360525b610360515260206103605103610360526101406103605110151561257e5761255b565b6104805161034052610340516101e06004356002811061259d57600080fd5b6020020151808210156125af57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176125d357600080fd5b80905090509050610140600435600281106125ed57600080fd5b602002015180806125fd57600080fd5b8204905090506104a0526104a05160005260206000f350005b6307211ef7600051141561292557341561262f57600080fd5b6060516004358060405190131561264557600080fd5b809190121561265357600080fd5b506060516024358060405190131561266a57600080fd5b809190121561267857600080fd5b506101406101405161016051600658016100a9565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec6102405261026061014080518252806020015182602001525050610280516102605160065801610570565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506103206001815264e8d4a510008160200152506101e06004356002811061275c57600080fd5b60200201516044356103206004356002811061277757600080fd5b6020020151808202821582848304141761279057600080fd5b809050905090508181830110156127a657600080fd5b80820190509050610360526101406103a0525b6103a0515160206103a051016103a0526103a06103a05110156127db576127b9565b63232dd1c96103c0526004356103e0526024356104005261036051610420526104406101e080518252806020015182602001525050610460516104405161042051610400516103e05160065801611be2565b6104c0526103806103a0525b6103a0515260206103a051036103a0526101406103a05110151561285c57612839565b6104c051610380526101e06024356002811061287757600080fd5b6020020151610380518082101561288d57600080fd5b80820390509050610320602435600281106128a757600080fd5b602002015180806128b757600080fd5b8204905090506104e0526004546104e05180820282158284830414176128dc57600080fd5b809050905090506402540be40080806128f457600080fd5b820490509050610500526104e051610500518082101561291357600080fd5b8082039050905060005260206000f350005b630e71d1b96000511415612c2c57341561293e57600080fd5b6060516004358060405190131561295457600080fd5b809190121561296257600080fd5b506060516024358060405190131561297957600080fd5b809190121561298757600080fd5b506101406101405161016051600658016100a9565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec6102405261026061014080518252806020015182602001525050610280516102605160065801610570565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506103206001815264e8d4a510008160200152506101e060243560028110612a6b57600080fd5b60200201516044356402540be4008082028215828483041417612a8d57600080fd5b809050905090506402540be40060045480821015612aaa57600080fd5b808203905090508080612abc57600080fd5b82049050905061032060243560028110612ad557600080fd5b60200201518082028215828483041417612aee57600080fd5b8090509050905080821015612b0257600080fd5b80820390509050610360526101406103a0525b6103a0515160206103a051016103a0526103a06103a0511015612b3757612b15565b63232dd1c96103c0526024356103e0526004356104005261036051610420526104406101e080518252806020015182602001525050610460516104405161042051610400516103e05160065801611be2565b6104c0526103806103a0525b6103a0515260206103a051036103a0526101406103a051101515612bb857612b95565b6104c05161038052610380516101e060043560028110612bd757600080fd5b602002015180821015612be957600080fd5b8082039050905061032060043560028110612c0357600080fd5b60200201518080612c1357600080fd5b8204905090506104e0526104e05160005260206000f350005b600015613060575b6101e0526101405261016052610180526101a0526101c052600f5415612c5957600080fd5b6102006101405161016051610180516101a0516101c0516101e05161020051610220516396b414ec610260526102806101a0805182528060200151826020015250506102a0516102805160065801610570565b610300526103205261022052610200526101e0526101c0526101a052610180526101605261014052610300805182528060200151826020015250506102006101405160028110612cfb57600080fd5b6020020151610180516101a06101405160028110612d1857600080fd5b60200201518082028215828483041417612d3157600080fd5b80905090509050670de0b6b3a76400008080612d4c57600080fd5b820490509050818183011015612d6157600080fd5b8082019050905061034052610140610380525b61038051516020610380510161038052610380610380511015612d9657612d74565b63232dd1c96103a052610140516103c052610160516103e0526103405161040052610420610200805182528060200151826020015250506104405161042051610400516103e0516103c05160065801611be2565b6104a052610360610380525b6103805152602061038051036103805261014061038051101515612e1957612df6565b6104a051610360526102006101605160028110612e3557600080fd5b60200201516103605180821015612e4b57600080fd5b808203905090506104c0526104c0516004548082028215828483041417612e7157600080fd5b809050905090506402540be4008080612e8957600080fd5b8204905090506104e0526104e0516005548082028215828483041417612eae57600080fd5b809050905090506402540be4008080612ec657600080fd5b8204905090506105005261034051670de0b6b3a76400008082028215828483041417612ef157600080fd5b809050905090506101a06101405160028110612f0c57600080fd5b60200201518080612f1c57600080fd5b8204905090506101405160028110612f3357600080fd5b600260c052602060c0200155610360516104e0516105005180821015612f5857600080fd5b80820390509050818183011015612f6e57600080fd5b80820190509050670de0b6b3a76400008082028215828483041417612f9257600080fd5b809050905090506101a06101605160028110612fad57600080fd5b60200201518080612fbd57600080fd5b8204905090506101605160028110612fd457600080fd5b600260c052602060c02001556104c0516104e05180821015612ff557600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761301957600080fd5b809050905090506101a0610160516002811061303457600080fd5b6020020151808061304457600080fd5b82049050905061052052610520516000526000516101e0515650005b633df0212460005114156135785762ffffff541561307d57600080fd5b600162ffffff55341561308f57600080fd5b606051600435806040519013156130a557600080fd5b80919012156130b357600080fd5b50606051602435806040519013156130ca57600080fd5b80919012156130d857600080fd5b506101406101405161016051600658016103e8565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e0516399a788e4610220526004356102405260243561026052604435610280526102a0610140805182528060200151826020015250506102c0516102a05161028051610260516102405160065801612c34565b610320526101e0526101c0526101a052610180526101605261014052610320516101e0526308c379a061034052602061036052602e610380527f45786368616e676520726573756c74656420696e20666577657220636f696e736103a0527f207468616e2065787065637465640000000000000000000000000000000000006103c052610380506064356101e05110156132145760a461035cfd5b6104006000815260008160200152506104406001815260018160200152506104406004356002811061324557600080fd5b6020020151156104006004356002811061325e57600080fd5b60200201511615613307576004356002811061327957600080fd5b600060c052602060c02001543b61328f57600080fd5b6004356002811061329f57600080fd5b600060c052602060c020015430186132b657600080fd5b6000600060646323b872dd610560523361058052306105a0526044356105c05261057c6000600435600281106132eb57600080fd5b600060c052602060c02001545af161330257600080fd5b6133b2565b6004356002811061331757600080fd5b600060c052602060c02001543b61332d57600080fd5b6004356002811061333d57600080fd5b600060c052602060c0200154301861335457600080fd5b602061054060646323b872dd61048052336104a052306104c0526044356104e05261049c60006004356002811061338a57600080fd5b600060c052602060c02001545af16133a157600080fd5b600050610540516133b157600080fd5b5b610440602435600281106133c557600080fd5b602002015115610400602435600281106133de57600080fd5b6020020151161561348357602435600281106133f957600080fd5b600060c052602060c02001543b61340f57600080fd5b6024356002811061341f57600080fd5b600060c052602060c0200154301861343657600080fd5b60006000604463a9059cbb6106e05233610700526101e051610720526106fc60006024356002811061346757600080fd5b600060c052602060c02001545af161347e57600080fd5b61352a565b6024356002811061349357600080fd5b600060c052602060c02001543b6134a957600080fd5b602435600281106134b957600080fd5b600060c052602060c020015430186134d057600080fd5b60206106c0604463a9059cbb6106205233610640526101e0516106605261063c60006024356002811061350257600080fd5b600060c052602060c02001545af161351957600080fd5b6000506106c05161352957600080fd5b5b600435610780526044356107a0526024356107c0526101e0516107e052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610780a2600062ffffff55005b63a6417ed66000511415613e805762ffffff541561359557600080fd5b600162ffffff5534156135a757600080fd5b606051600435806040519013156135bd57600080fd5b80919012156135cb57600080fd5b50606051602435806040519013156135e257600080fd5b80919012156135f057600080fd5b506101406101405161016051600658016103e8565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06001815264e8d4a510008160200152506101406004356002811061364e57600080fd5b60200201516101e06004356002811061366657600080fd5b6020020151808061367657600080fd5b820490509050610220526101406024356002811061369357600080fd5b60200201516101e0602435600281106136ab57600080fd5b602002015180806136bb57600080fd5b82049050905061024052604435670de0b6b3a764000080820282158284830414176136e557600080fd5b809050905090506102205180806136fb57600080fd5b820490509050610260526101406102a0525b6102a0515160206102a051016102a0526102a06102a051101561372f5761370d565b6399a788e46102c0526004356102e05260243561030052610260516103205261034061014080518252806020015182602001525050610360516103405161032051610300516102e05160065801612c34565b6103c0526102806102a0525b6102a0515260206102a051036102a0526101406102a0511015156137b05761378d565b6103c05161028052610280516102405180820282158284830414176137d457600080fd5b80905090509050670de0b6b3a764000080806137ef57600080fd5b8204905090506103e0526308c379a061040052602061042052602e610440527f45786368616e676520726573756c74656420696e20666577657220636f696e73610460527f207468616e20657870656374656400000000000000000000000000000000000061048052610440506064356103e05110156138705760a461041cfd5b6104c0600181526001816020015250610500600081526000816020015250600061054052610500600435600281106138a757600080fd5b60200201511561394f57600435600281106138c157600080fd5b600160c052602060c02001543b6138d757600080fd5b600435600281106138e757600080fd5b600160c052602060c020015430186138fe57600080fd5b6000600060646323b872dd61064052336106605230610680526044356106a05261065c60006004356002811061393357600080fd5b600160c052602060c02001545af161394a57600080fd5b6139fa565b6004356002811061395f57600080fd5b600160c052602060c02001543b61397557600080fd5b6004356002811061398557600080fd5b600160c052602060c0200154301861399c57600080fd5b602061062060646323b872dd610560523361058052306105a0526044356105c05261057c6000600435600281106139d257600080fd5b600160c052602060c02001545af16139e957600080fd5b600050610620516139f957600080fd5b5b6104c060043560028110613a0d57600080fd5b602002015115613bc25760043560028110613a2757600080fd5b600160c052602060c02001543b613a3d57600080fd5b60043560028110613a4d57600080fd5b600160c052602060c02001543018613a6457600080fd5b60206107a0604463095ea7b36107005260043560028110613a8457600080fd5b600060c052602060c0200154610720526044356107405261071c600060043560028110613ab057600080fd5b600160c052602060c02001545af1613ac757600080fd5b6000506107a05060043560028110613ade57600080fd5b600060c052602060c02001543b613af457600080fd5b60043560028110613b0457600080fd5b600060c052602060c02001543018613b1b57600080fd5b6020610840602463a0712d686107c0526044356107e0526107dc600060043560028110613b4757600080fd5b600060c052602060c02001545af1613b5e57600080fd5b60005061084051610540526000610540511115613bc1576308c379a06108605260206108805260136108a0527f436f756c64206e6f74206d696e7420636f696e000000000000000000000000006108c0526108a0506000613bc057608461087cfd5b5b5b6104c060243560028110613bd557600080fd5b602002015115613cd45760243560028110613bef57600080fd5b600060c052602060c02001543b613c0557600080fd5b60243560028110613c1557600080fd5b600060c052602060c02001543018613c2c57600080fd5b6020610980602463db006a7561090052610280516109205261091c600060243560028110613c5957600080fd5b600060c052602060c02001545af1613c7057600080fd5b60005061098051610540526000610540511115613cd3576308c379a06109a05260206109c05260156109e0527f436f756c64206e6f742072656465656d20636f696e0000000000000000000000610a00526109e0506000613cd25760846109bcfd5b5b5b61050060243560028110613ce757600080fd5b602002015115613d8b5760243560028110613d0157600080fd5b600160c052602060c02001543b613d1757600080fd5b60243560028110613d2757600080fd5b600160c052602060c02001543018613d3e57600080fd5b60006000604463a9059cbb610b005233610b20526103e051610b4052610b1c600060243560028110613d6f57600080fd5b600160c052602060c02001545af1613d8657600080fd5b613e32565b60243560028110613d9b57600080fd5b600160c052602060c02001543b613db157600080fd5b60243560028110613dc157600080fd5b600160c052602060c02001543018613dd857600080fd5b6020610ae0604463a9059cbb610a405233610a60526103e051610a8052610a5c600060243560028110613e0a57600080fd5b600160c052602060c02001545af1613e2157600080fd5b600050610ae051613e3157600080fd5b5b600435610ba052604435610bc052602435610be0526103e051610c0052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610ba0a2600062ffffff55005b635b36389c60005114156142c05762ffffff5415613e9d57600080fd5b600162ffffff553415613eaf57600080fd5b6007543b613ebc57600080fd5b6007543018613eca57600080fd5b60206101c060046318160ddd6101605261017c6007545afa613eeb57600080fd5b6000506101c051610140526101e06000815260008160200152506102206000815260008160200152506102606000815260008160200152506102a06001815260018160200152506102e060006002818352015b6102e05160028110613f4f57600080fd5b600260c052602060c02001546004358082028215828483041417613f7257600080fd5b80905090509050610140518080613f8857600080fd5b820490509050610300526308c379a0610320526020610340526030610360527f5769746864726177616c20726573756c74656420696e20666577657220636f69610380527f6e73207468616e206578706563746564000000000000000000000000000000006103a0526103605060246102e0516002811061400857600080fd5b602002013561030051101561401e5760a461033cfd5b6102e0516002811061402f57600080fd5b600260c052602060c020018054610300518082101561404d57600080fd5b80820390509050815550610300516101e06102e0516002811061406f57600080fd5b60200201526102a06102e0516002811061408857600080fd5b6020020151156102606102e051600281106140a257600080fd5b6020020151161561414a576102e051600281106140be57600080fd5b600060c052602060c02001543b6140d457600080fd5b6102e051600281106140e557600080fd5b600060c052602060c020015430186140fc57600080fd5b60006000604463a9059cbb6104a052336104c052610300516104e0526104bc60006102e0516002811061412e57600080fd5b600060c052602060c02001545af161414557600080fd5b6141f4565b6102e0516002811061415b57600080fd5b600060c052602060c02001543b61417157600080fd5b6102e0516002811061418257600080fd5b600060c052602060c0200154301861419957600080fd5b6020610480604463a9059cbb6103e052336104005261030051610420526103fc60006102e051600281106141cc57600080fd5b600060c052602060c02001545af16141e357600080fd5b600050610480516141f357600080fd5b5b5b8151600101808352811415613f3e575b50506007543b61421457600080fd5b600754301861422257600080fd5b6000600060446379cc67906105405233610560526004356105805261055c60006007545af161425057600080fd5b6101e0516105e052610200516106005261022051610620526102405161064052610140516004358082101561428457600080fd5b8082039050905061066052337f7c363854ccf79623411f8995b362bce5eddff18c927edc6f5dbbb5e05819a82c60a06105e0a2600062ffffff55005b63e31032736000511415614c675762ffffff54156142dd57600080fd5b600162ffffff5534156142ef57600080fd5b600f54156142fc57600080fd5b6101406000815260008160200152506101806001815260018160200152506007543b61432757600080fd5b600754301861433557600080fd5b602061024060046318160ddd6101e0526101fc6007545afa61435657600080fd5b600050610240516101c05260006101c0511161437157600080fd5b6004546002808202821582848304141761438a57600080fd5b809050905090506004808061439e57600080fd5b82049050905061026052600554610280526102a06101406102e0525b6102e0515160206102e051016102e0526102e06102e05110156143dc576143ba565b600658016103e8565b61030052610320526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515614418576143f5565b6103008051825280602001518260200152505061034060028060c052602060c02054825260018160c052602060c020015482602001525050610380610340805182528060200151826020015250506101406103e0525b6103e0515160206103e051016103e0526103e06103e05110156144905761446e565b6339276498610400526104206102a080518252806020015182602001525050610460610340805182528060200151826020015250506104805161046051610440516104205160065801610a83565b6104e0526103c06103e0525b6103e0515260206103e051036103e0526101406103e05110151561450d576144ea565b6104e0516103c05261050060006002818352015b610380610500516002811061453557600080fd5b6020020180516004610500516002811061454e57600080fd5b60200201358082101561456057600080fd5b808203905090508152505b8151600101808352811415614521575b5050610140610540525b610540515160206105405101610540526105406105405110156145a757614585565b6339276498610560526105806102a0805182528060200151826020015250506105c0610380805182528060200151826020015250506105e0516105c0516105a0516105805160065801610a83565b61064052610520610540525b610540515260206105405103610540526101406105405110151561462457614601565b61064051610520526106606000815260008160200152506106a060006002818352015b610520516103406106a0516002811061465f57600080fd5b6020020151808202821582848304141761467857600080fd5b809050905090506103c051808061468e57600080fd5b8204905090506106c05260006106e0526103806106a051600281106146b257600080fd5b60200201516106c05111156146fb576106c0516103806106a051600281106146d957600080fd5b6020020151808210156146eb57600080fd5b808203905090506106e052614731565b6103806106a0516002811061470f57600080fd5b60200201516106c0518082101561472557600080fd5b808203905090506106e0525b610260516106e051808202821582848304141761474d57600080fd5b809050905090506402540be400808061476557600080fd5b8204905090506106606106a0516002811061477f57600080fd5b60200201526103806106a0516002811061479857600080fd5b60200201516106606106a051600281106147b157600080fd5b60200201516102805180820282158284830414176147ce57600080fd5b809050905090506402540be40080806147e657600080fd5b820490509050808210156147f957600080fd5b808203905090506106a0516002811061481157600080fd5b600260c052602060c02001556103806106a0516002811061483157600080fd5b6020020180516106606106a0516002811061484b57600080fd5b60200201518082101561485d57600080fd5b808203905090508152505b8151600101808352811415614647575b5050610140610720525b610720515160206107205101610720526107206107205110156148a457614882565b6339276498610740526107606102a0805182528060200151826020015250506107a0610380805182528060200151826020015250506107c0516107a051610780516107605160065801610a83565b61082052610700610720525b6107205152602061072051036107205261014061072051101515614921576148fe565b61082051610700526103c051610700518082101561493e57600080fd5b808203905090506101c051808202821582848304141761495d57600080fd5b809050905090506103c051808061497357600080fd5b820490509050610840526000610840511161498d57600080fd5b6308c379a06108605260206108805260146108a0527f536c697070616765207363726577656420796f750000000000000000000000006108c0526108a0506044356108405111156149df57608461087cfd5b61090060006002818352015b61018061090051600281106149ff57600080fd5b6020020151156101406109005160028110614a1957600080fd5b60200201511615614ad5576109005160028110614a3557600080fd5b600060c052602060c02001543b614a4b57600080fd5b6109005160028110614a5c57600080fd5b600060c052602060c02001543018614a7357600080fd5b60006000604463a9059cbb6109e05233610a005260046109005160028110614a9a57600080fd5b6020020135610a20526109fc60006109005160028110614ab957600080fd5b600060c052602060c02001545af1614ad057600080fd5b614b93565b6109005160028110614ae657600080fd5b600060c052602060c02001543b614afc57600080fd5b6109005160028110614b0d57600080fd5b600060c052602060c02001543018614b2457600080fd5b60206109c0604463a9059cbb61092052336109405260046109005160028110614b4c57600080fd5b60200201356109605261093c60006109005160028110614b6b57600080fd5b600060c052602060c02001545af1614b8257600080fd5b6000506109c051614b9257600080fd5b5b5b81516001018083528114156149eb575b50506007543b614bb357600080fd5b6007543018614bc157600080fd5b6000600060446379cc6790610a805233610aa05261084051610ac052610a9c60006007545af1614bf057600080fd5b600435610b2052602435610b405261066051610b605261068051610b805261052051610ba0526101c0516108405180821015614c2b57600080fd5b80820390509050610bc052337f2b5508378d7e19e0d5fa338419034731416c4f5b219a10379956f764317fd47e60c0610b20a2600062ffffff55005b63ee11f5b66000511415614d4f573415614c8057600080fd5b6006543314614c8e57600080fd5b60085415614c9b57600080fd5b64012a05f2006044351115614caf57600080fd5b64012a05f2006024351115614cc357600080fd5b620f42406004351115614cd557600080fd5b426203f480818183011015614ce957600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd6000511415614dfc573415614d6857600080fd5b6006543314614d7657600080fd5b60006008541142600854111516614d8c57600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb6000511415614e2a573415614e1557600080fd5b6006543314614e2357600080fd5b6000600855005b636b441a406000511415614ecb573415614e4357600080fd5b6004356020518110614e5457600080fd5b506006543314614e6357600080fd5b60095415614e7057600080fd5b426203f480818183011015614e8457600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae6000511415614f47573415614ee457600080fd5b6006543314614ef257600080fd5b60006009541160095442101516614f0857600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf1936000511415614f75573415614f6057600080fd5b6006543314614f6e57600080fd5b6000600955005b6330c540856000511415615186573415614f8e57600080fd5b6006543314614f9c57600080fd5b6101406001815264e8d4a510008160200152506101806000815260008160200152506101c060018152600181602001525061020060006002818352015b6102005160028110614fea57600080fd5b600060c052602060c020015461022052610220513b61500857600080fd5b61022051301861501757600080fd5b60206102e060246370a0823161026052306102805261027c610220515afa61503e57600080fd5b6000506102e051610200516002811061505657600080fd5b600260c052602060c02001548082101561506f57600080fd5b80820390509050610240526000610240511115615171576101c0610200516002811061509a57600080fd5b60200201511561018061020051600281106150b457600080fd5b6020020151161561511157610220513b6150cd57600080fd5b6102205130186150dc57600080fd5b60006000604463a9059cbb6103c052336103e05261024051610400526103dc6000610220515af161510c57600080fd5b615170565b610220513b61511f57600080fd5b61022051301861512e57600080fd5b60206103a0604463a9059cbb610300523361032052610240516103405261031c6000610220515af161515f57600080fd5b6000506103a05161516f57600080fd5b5b5b5b8151600101808352811415614fd9575b5050005b63e369885360005114156151c257341561519f57600080fd5b60065433146151ad57600080fd5b42600e54116151bb57600080fd5b6001600f55005b633046f97260005114156151f05734156151db57600080fd5b60065433146151e957600080fd5b6000600f55005b6323746eb8600051141561525557341561520957600080fd5b6060516004358060405190131561521f57600080fd5b809190121561522d57600080fd5b506004356002811061523e57600080fd5b600060c052602060c020015460005260206000f350005b63b739953e60005114156152ba57341561526e57600080fd5b6060516004358060405190131561528457600080fd5b809190121561529257600080fd5b50600435600281106152a357600080fd5b600160c052602060c020015460005260206000f350005b63065a80d8600051141561531f5734156152d357600080fd5b606051600435806040519013156152e957600080fd5b80919012156152f757600080fd5b506004356002811061530857600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d0600051141561534657341561533857600080fd5b60035460005260206000f350005b63ddca3f43600051141561536d57341561535f57600080fd5b60045460005260206000f350005b63fee3f7f9600051141561539457341561538657600080fd5b60055460005260206000f350005b638da5cb5b60005114156153bb5734156153ad57600080fd5b60065460005260206000f350005b63405e28f860005114156153e25734156153d457600080fd5b60085460005260206000f350005b63e0a0b58660005114156154095734156153fb57600080fd5b60095460005260206000f350005b63b4b577ad600051141561543057341561542257600080fd5b600a5460005260206000f350005b6358680d0b600051141561545757341561544957600080fd5b600b5460005260206000f350005b63e3824462600051141561547e57341561547057600080fd5b600c5460005260206000f350005b631ec0cdc160005114156154a557341561549757600080fd5b600d5460005260206000f350005b5b60006000fd5b6102376156e3036102376000396102376156e3036000f30000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e75630000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000845838df265dcd2c412a1dc9e959c7d08537f8a2000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000003d0900
Deployed Bytecode
0x600436101561000d576154a6565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526000156103e0575b610140526101606001815264e8d4a510008160200152506101a06001815260018160200152506101e060006002818352015b670de0b6b3a7640000610200526101a06101e051600281106100fc57600080fd5b602002015115610355576101e0516002811061011757600080fd5b600060c052602060c02001543b61012d57600080fd5b6101e0516002811061013e57600080fd5b600060c052602060c0200154301861015557600080fd5b6020610280600463182df0f56102205261023c6101e0516002811061017957600080fd5b600060c052602060c02001545afa61019057600080fd5b60005061028051610200526101e051600281106101ac57600080fd5b600060c052602060c02001543b6101c257600080fd5b6101e051600281106101d357600080fd5b600060c052602060c020015430186101ea57600080fd5b6020610320600463ae9d70b06102c0526102dc6101e0516002811061020e57600080fd5b600060c052602060c02001545afa61022557600080fd5b600050610320516102a0526101e0516002811061024157600080fd5b600060c052602060c02001543b61025757600080fd5b6101e0516002811061026857600080fd5b600060c052602060c0200154301861027f57600080fd5b60206103c06004636c540baf6103605261037c6101e051600281106102a357600080fd5b600060c052602060c02001545afa6102ba57600080fd5b6000506103c051610340526102008051610200516102a05180820282158284830414176102e657600080fd5b809050905090504361034051808210156102ff57600080fd5b80820390509050808202821582848304141761031a57600080fd5b80905090509050670de0b6b3a7640000808061033557600080fd5b82049050905081818301101561034a57600080fd5b808201905090508152505b6101606101e0516002811061036957600080fd5b60200201805161020051808202821582848304141761038757600080fd5b809050905090508152505b81516001018083528114156100db575b505060406103e0525b60006103e0511115156103bd576103d9565b60206103e05103610160015160206103e051036103e0526103ab565b6101405156005b600015610568575b610140526101606001815264e8d4a510008160200152506101a06001815260018160200152506101e060006002818352015b670de0b6b3a7640000610200526101a06101e0516002811061043b57600080fd5b6020020151156104dd576101e0516002811061045657600080fd5b600060c052602060c02001543b61046c57600080fd5b6101e0516002811061047d57600080fd5b600060c052602060c0200154301861049457600080fd5b6020610280600463bd6d894d6102205261023c60006101e051600281106104ba57600080fd5b600060c052602060c02001545af16104d157600080fd5b60005061028051610200525b6101606101e051600281106104f157600080fd5b60200201805161020051808202821582848304141761050f57600080fd5b809050905090508152505b815160010180835281141561041a575b505060406102a0525b60006102a05111151561054557610561565b60206102a05103610160015160206102a051036102a052610533565b6101405156005b600015610671575b6101805261014052610160526101a0610140805182528060200151826020015250506101e060006002818352015b6101a06101e051600281106105b257600080fd5b60200201516101e051600281106105c857600080fd5b600260c052602060c020015480820282158284830414176105e857600080fd5b80905090509050670de0b6b3a7640000808061060357600080fd5b8204905090506101a06101e0516002811061061d57600080fd5b60200201525b815160010180835281141561059e575b50506040610200525b60006102005111151561064e5761066a565b602061020051036101a00151602061020051036102005261063c565b6101805156005b60001561077e575b6101c0526101405261016052610180526101a0526101e06101408051825280602001518260200152505061022060006002818352015b6101e061022051600281106106c357600080fd5b602002015161018061022051600281106106dc57600080fd5b602002015180820282158284830414176106f557600080fd5b80905090509050670de0b6b3a7640000808061071057600080fd5b8204905090506101e0610220516002811061072a57600080fd5b60200201525b81516001018083528114156106af575b50506040610240525b60006102405111151561075b57610777565b602061024051036101e001516020610240510361024052610749565b6101c05156005b600015610a7b575b61018052610140526101605260006101a0526101e060006002818352015b60206101e0510261014001516101c0526101a080516101c0518181830110156107cc57600080fd5b808201905090508152505b81516001018083528114156107a4575b50506101a05115156108025760006000526000516101805156505b6000610220526101a051610240526003546002808202821582848304141761082957600080fd5b8090509050905061026052610280600060ff818352015b610240516102a0526102e060006002818352015b60206102e0510261014001516102c0526102a05161024051808202821582848304141761088057600080fd5b809050905090506102c051600280820282158284830414176108a157600080fd5b8090509050905060018181830110156108b957600080fd5b8082019050905080806108cb57600080fd5b8204905090506102a0525b8151600101808352811415610854575b50506102405161022052610260516101a051808202821582848304141761090c57600080fd5b809050905090506102a0516002808202821582848304141761092d57600080fd5b8090509050905081818301101561094357600080fd5b8082019050905061024051808202821582848304141761096257600080fd5b809050905090506102605160018082101561097c57600080fd5b8082039050905061024051808202821582848304141761099b57600080fd5b8090509050905060036102a05180820282158284830414176109bc57600080fd5b809050905090508181830110156109d257600080fd5b8082019050905080806109e457600080fd5b8204905090506102405261022051610240511115610a2b576001610240516102205180821015610a1357600080fd5b80820390509050111515610a2657610a67565b610a56565b6001610220516102405180821015610a4257600080fd5b80820390509050111515610a5557610a67565b5b5b8151600101808352811415610840575b505061024051600052600051610180515650005b600015610bdd575b6101c0526101405261016052610180526101a052610140610460525b61046051516020610460510161046052610460610460511015610ac157610a9f565b637b08bb90610480526104a0610140610320525b61032051516020610320510161032052610320610320511015610af757610ad5565b63575e285f61034052610360610140805182528060200151826020015250506103a0610180805182528060200151826020015250506103c0516103a051610380516103605160065801610679565b6104205261044052610300610320525b6103205152602061032051036103205261014061032051101515610b7857610b55565b610420805182528060200151826020015250506104c0516104a05160065801610786565b61052052610440610460525b6104605152602061046051036104605261014061046051101515610bcb57610ba8565b610520516000526000516101c0515650005b63bb7b8b806000511415610e09573415610bf657600080fd5b6101406104e0525b6104e0515160206104e051016104e0526104e06104e0511015610c2057610bfe565b637b08bb90610500526105206101406103e0525b6103e0515160206103e051016103e0526103e06103e0511015610c5657610c34565b6396b414ec61040052610420610140610380525b61038051516020610380510161038052610380610380511015610c8c57610c6a565b600658016100a9565b6103a0526103c052610360610380525b6103805152602061038051036103805261014061038051101515610cc857610ca5565b6103a080518252806020015182602001525050610440516104205160065801610570565b6104a0526104c0526103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515610d1f57610cfc565b6104a080518252806020015182602001525050610540516105205160065801610786565b6105a0526104c06104e0525b6104e0515260206104e051036104e0526101406104e051101515610d7257610d4f565b6105a051610140526007543b610d8757600080fd5b6007543018610d9557600080fd5b602061064060046318160ddd6105e0526105fc6007545afa610db657600080fd5b600050610640516105c05261014051670de0b6b3a76400008082028215828483041417610de257600080fd5b809050905090506105c0518080610df857600080fd5b82049050905060005260206000f350005b63ed8e84f36000511415611187573415610e2257600080fd5b60443560028110610e3257600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015250506101806101405161016051610180516101a051600658016100a9565b6101e052610200526101a0526101805261016052610140526101e0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e0516102005161022051633927649861026052610280610180805182528060200151826020015250506102c0610140805182528060200151826020015250506102e0516102c0516102a0516102805160065801610a83565b6103405261022052610200526101e0526101c0526101a052610180526101605261014052610340516102205261036060006002818352015b60443515610f9d576101406103605160028110610f6157600080fd5b60200201805160046103605160028110610f7a57600080fd5b6020020135818183011015610f8e57600080fd5b80820190509050815250610fe7565b6101406103605160028110610fb157600080fd5b60200201805160046103605160028110610fca57600080fd5b602002013580821015610fdc57600080fd5b808203905090508152505b5b8151600101808352811415610f45575b50506101406103a0525b6103a0515160206103a051016103a0526103a06103a051101561102457611002565b63392764986103c0526103e061018080518252806020015182602001525050610420610140805182528060200151826020015250506104405161042051610400516103e05160065801610a83565b6104a0526103806103a0525b6103a0515260206103a051036103a0526101406103a0511015156110a15761107e565b6104a051610380526007543b6110b657600080fd5b60075430186110c457600080fd5b602061054060046318160ddd6104e0526104fc6007545afa6110e557600080fd5b600050610540516104c052600061056052604435156111235761038051610220518082101561111357600080fd5b8082039050905061056052611144565b61022051610380518082101561113857600080fd5b80820390509050610560525b610560516104c051808202821582848304141761116057600080fd5b8090509050905061022051808061117657600080fd5b82049050905060005260206000f350005b630b4c7e4d6000511415611bda5762ffffff54156111a457600080fd5b600162ffffff5534156111b657600080fd5b600f54156111c357600080fd5b6101406000815260008160200152506101806001815260018160200152506101c06000815260008160200152506004546002808202821582848304141761120957600080fd5b809050905090506004808061121d57600080fd5b82049050905061020052600554610220526007543b61123b57600080fd5b600754301861124957600080fd5b60206102c060046318160ddd6102605261027c6007545afa61126a57600080fd5b6000506102c051610240526102e0610140610320525b610320515160206103205101610320526103206103205110156112a257611280565b600658016103e8565b6103405261036052610300610320525b61032051526020610320510361032052610140610320511015156112de576112bb565b610340805182528060200151826020015250506000610380526103a060028060c052602060c02054825260018160c052602060c02001548260200152505060006102405111156113d8576101406103e0525b6103e0515160206103e051016103e0526103e06103e051101561135257611330565b6339276498610400526104206102e0805182528060200151826020015250506104606103a0805182528060200151826020015250506104805161046051610440516104205160065801610a83565b6104e0526103c06103e0525b6103e0515260206103e051036103e0526101406103e0511015156113cf576113ac565b6104e051610380525b6105006103a08051825280602001518260200152505061054060006002818352015b6102405115156114295760006004610540516002811061141957600080fd5b60200201351161142857600080fd5b5b6103a0610540516002811061143d57600080fd5b60200201516004610540516002811061145557600080fd5b602002013581818301101561146957600080fd5b80820190509050610500610540516002811061148457600080fd5b60200201525b81516001018083528114156113fa575b5050610140610580525b610580515160206105805101610580526105806105805110156114c6576114a4565b63392764986105a0526105c06102e0805182528060200151826020015250506106006105008051825280602001518260200152505061062051610600516105e0516105c05160065801610a83565b61068052610560610580525b610580515260206105805103610580526101406105805110151561154357611520565b610680516105605261038051610560511161155d57600080fd5b610560516106a0526000610240511115611864576106c060006002818352015b610560516103a06106c0516002811061159557600080fd5b602002015180820282158284830414176115ae57600080fd5b809050905090506103805180806115c457600080fd5b8204905090506106e0526000610700526105006106c051600281106115e857600080fd5b60200201516106e0511115611631576106e0516105006106c0516002811061160f57600080fd5b60200201518082101561162157600080fd5b8082039050905061070052611667565b6105006106c0516002811061164557600080fd5b60200201516106e0518082101561165b57600080fd5b80820390509050610700525b6102005161070051808202821582848304141761168357600080fd5b809050905090506402540be400808061169b57600080fd5b8204905090506101c06106c051600281106116b557600080fd5b60200201526105006106c051600281106116ce57600080fd5b60200201516101c06106c051600281106116e757600080fd5b602002015161022051808202821582848304141761170457600080fd5b809050905090506402540be400808061171c57600080fd5b8204905090508082101561172f57600080fd5b808203905090506106c0516002811061174757600080fd5b600260c052602060c02001556105006106c0516002811061176757600080fd5b6020020180516101c06106c0516002811061178157600080fd5b60200201518082101561179357600080fd5b808203905090508152505b815160010180835281141561157d575b5050610140610720525b610720515160206107205101610720526106c06107205110156117da576117b8565b6339276498610740526107606102e0805182528060200151826020015250506107a0610500805182528060200151826020015250506107c0516107a051610780516107605160065801610a83565b610820526106a0610720525b610720515260206107205103610720526101406107205110151561185757611834565b610820516106a052611882565b600260c052602060c020610500805182558060200151600183015550505b60006108405261024051151561189f5761056051610840526118f4565b610240516106a05161038051808210156118b857600080fd5b8082039050905080820282158284830414176118d357600080fd5b809050905090506103805180806118e957600080fd5b820490509050610840525b6308c379a06108605260206108805260146108a0527f536c697070616765207363726577656420796f750000000000000000000000006108c0526108a05060443561084051101561194657608461087cfd5b61090060006002818352015b610180610900516002811061196657600080fd5b602002015115610140610900516002811061198057600080fd5b60200201511615611a4157610900516002811061199c57600080fd5b600060c052602060c02001543b6119b257600080fd5b61090051600281106119c357600080fd5b600060c052602060c020015430186119da57600080fd5b6000600060646323b872dd610a005233610a205230610a405260046109005160028110611a0657600080fd5b6020020135610a6052610a1c60006109005160028110611a2557600080fd5b600060c052602060c02001545af1611a3c57600080fd5b611b04565b6109005160028110611a5257600080fd5b600060c052602060c02001543b611a6857600080fd5b6109005160028110611a7957600080fd5b600060c052602060c02001543018611a9057600080fd5b60206109e060646323b872dd610920523361094052306109605260046109005160028110611abd57600080fd5b60200201356109805261093c60006109005160028110611adc57600080fd5b600060c052602060c02001545af1611af357600080fd5b6000506109e051611b0357600080fd5b5b5b8151600101808352811415611952575b50506007543b611b2457600080fd5b6007543018611b3257600080fd5b6000600060446340c10f19610ac05233610ae05261084051610b0052610adc60006007545af1611b6157600080fd5b600435610b6052602435610b80526101c051610ba0526101e051610bc05261056051610be0526102405161084051818183011015611b9e57600080fd5b80820190509050610c0052337f26f55a85081d24974e85c6c00045d0f0453991e95873f52bff0d21af4079a76860c0610b60a2600062ffffff55005b600015611faa575b6101e0526101405261016052610180526101a0526101c0526000610140511215610160516101405114151660006101605112151660026101405112166002610160511216611c2f57600080fd5b6101405161016051610180516101a0516101c0516101e05161020051637b08bb90610240526102606101a080518252806020015182602001525050610280516102605160065801610786565b6102e052610200526101e0526101c0526101a0526101805261016052610140526102e05161020052610200516103005260006103205260035460028082028215828483041417611cca57600080fd5b809050905090506103405260006103605261038060006002818352015b61014051610380511415611d02576101805161036052611d38565b61016051610380511815611d32576101a06103805160028110611d2457600080fd5b602002015161036052611d37565b611db4565b5b610320805161036051818183011015611d5057600080fd5b8082019050905081525061030051610200518082028215828483041417611d7657600080fd5b809050905090506103605160028082028215828483041417611d9757600080fd5b809050905090508080611da957600080fd5b820490509050610300525b8151600101808352811415611ce7575b505061030051610200518082028215828483041417611de257600080fd5b809050905090506103405160028082028215828483041417611e0357600080fd5b809050905090508080611e1557600080fd5b820490509050610300526103205161020051610340518080611e3657600080fd5b820490509050818183011015611e4b57600080fd5b808201905090506103a05260006103c052610200516103e052610400600060ff818352015b6103e0516103c0526103e0516103e0518082028215828483041417611e9457600080fd5b8090509050905061030051818183011015611eae57600080fd5b8082019050905060026103e0518082028215828483041417611ecf57600080fd5b809050905090506103a051818183011015611ee957600080fd5b808201905090506102005180821015611f0157600080fd5b808203905090508080611f1357600080fd5b8204905090506103e0526103c0516103e0511115611f5a5760016103e0516103c05180821015611f4257600080fd5b80820390509050111515611f5557611f96565b611f85565b60016103c0516103e05180821015611f7157600080fd5b80820390509050111515611f8457611f96565b5b5b8151600101808352811415611e70575b50506103e0516000526000516101e0515650005b635e0d443f60005114156122e4573415611fc357600080fd5b60605160043580604051901315611fd957600080fd5b8091901215611fe757600080fd5b5060605160243580604051901315611ffe57600080fd5b809190121561200c57600080fd5b506101406101405161016051600658016100a9565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec6102405261026061014080518252806020015182602001525050610280516102605160065801610570565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506101e0600435600281106120dd57600080fd5b6020020151604435610140600435600281106120f857600080fd5b6020020151808202821582848304141761211157600080fd5b80905090509050670de0b6b3a7640000808061212c57600080fd5b82049050905081818301101561214157600080fd5b8082019050905061032052610140610360525b6103605151602061036051016103605261036061036051101561217657612154565b63232dd1c9610380526004356103a0526024356103c052610320516103e0526104006101e08051825280602001518260200152505061042051610400516103e0516103c0516103a05160065801611be2565b61048052610340610360525b61036051526020610360510361036052610140610360511015156121f7576121d4565b61048051610340526101e06024356002811061221257600080fd5b6020020151610340518082101561222857600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761224c57600080fd5b809050905090506101406024356002811061226657600080fd5b6020020151808061227657600080fd5b8204905090506104a0526004546104a051808202821582848304141761229b57600080fd5b809050905090506402540be40080806122b357600080fd5b8204905090506104c0526104a0516104c051808210156122d257600080fd5b8082039050905060005260206000f350005b6367df02ca60005114156126165734156122fd57600080fd5b6060516004358060405190131561231357600080fd5b809190121561232157600080fd5b506060516024358060405190131561233857600080fd5b809190121561234657600080fd5b506101406101405161016051600658016100a9565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec6102405261026061014080518252806020015182602001525050610280516102605160065801610570565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506101e06024356002811061241757600080fd5b60200201516044356402540be400808202821582848304141761243957600080fd5b809050905090506402540be4006004548082101561245657600080fd5b80820390509050808061246857600080fd5b8204905090506101406024356002811061248157600080fd5b6020020151808202821582848304141761249a57600080fd5b80905090509050670de0b6b3a764000080806124b557600080fd5b820490509050808210156124c857600080fd5b8082039050905061032052610140610360525b610360515160206103605101610360526103606103605110156124fd576124db565b63232dd1c9610380526024356103a0526004356103c052610320516103e0526104006101e08051825280602001518260200152505061042051610400516103e0516103c0516103a05160065801611be2565b61048052610340610360525b610360515260206103605103610360526101406103605110151561257e5761255b565b6104805161034052610340516101e06004356002811061259d57600080fd5b6020020151808210156125af57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176125d357600080fd5b80905090509050610140600435600281106125ed57600080fd5b602002015180806125fd57600080fd5b8204905090506104a0526104a05160005260206000f350005b6307211ef7600051141561292557341561262f57600080fd5b6060516004358060405190131561264557600080fd5b809190121561265357600080fd5b506060516024358060405190131561266a57600080fd5b809190121561267857600080fd5b506101406101405161016051600658016100a9565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec6102405261026061014080518252806020015182602001525050610280516102605160065801610570565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506103206001815264e8d4a510008160200152506101e06004356002811061275c57600080fd5b60200201516044356103206004356002811061277757600080fd5b6020020151808202821582848304141761279057600080fd5b809050905090508181830110156127a657600080fd5b80820190509050610360526101406103a0525b6103a0515160206103a051016103a0526103a06103a05110156127db576127b9565b63232dd1c96103c0526004356103e0526024356104005261036051610420526104406101e080518252806020015182602001525050610460516104405161042051610400516103e05160065801611be2565b6104c0526103806103a0525b6103a0515260206103a051036103a0526101406103a05110151561285c57612839565b6104c051610380526101e06024356002811061287757600080fd5b6020020151610380518082101561288d57600080fd5b80820390509050610320602435600281106128a757600080fd5b602002015180806128b757600080fd5b8204905090506104e0526004546104e05180820282158284830414176128dc57600080fd5b809050905090506402540be40080806128f457600080fd5b820490509050610500526104e051610500518082101561291357600080fd5b8082039050905060005260206000f350005b630e71d1b96000511415612c2c57341561293e57600080fd5b6060516004358060405190131561295457600080fd5b809190121561296257600080fd5b506060516024358060405190131561297957600080fd5b809190121561298757600080fd5b506101406101405161016051600658016100a9565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06101405161016051610180516101a0516101c0516101e051610200516396b414ec6102405261026061014080518252806020015182602001525050610280516102605160065801610570565b6102e05261030052610200526101e0526101c0526101a0526101805261016052610140526102e0805182528060200151826020015250506103206001815264e8d4a510008160200152506101e060243560028110612a6b57600080fd5b60200201516044356402540be4008082028215828483041417612a8d57600080fd5b809050905090506402540be40060045480821015612aaa57600080fd5b808203905090508080612abc57600080fd5b82049050905061032060243560028110612ad557600080fd5b60200201518082028215828483041417612aee57600080fd5b8090509050905080821015612b0257600080fd5b80820390509050610360526101406103a0525b6103a0515160206103a051016103a0526103a06103a0511015612b3757612b15565b63232dd1c96103c0526024356103e0526004356104005261036051610420526104406101e080518252806020015182602001525050610460516104405161042051610400516103e05160065801611be2565b6104c0526103806103a0525b6103a0515260206103a051036103a0526101406103a051101515612bb857612b95565b6104c05161038052610380516101e060043560028110612bd757600080fd5b602002015180821015612be957600080fd5b8082039050905061032060043560028110612c0357600080fd5b60200201518080612c1357600080fd5b8204905090506104e0526104e05160005260206000f350005b600015613060575b6101e0526101405261016052610180526101a0526101c052600f5415612c5957600080fd5b6102006101405161016051610180516101a0516101c0516101e05161020051610220516396b414ec610260526102806101a0805182528060200151826020015250506102a0516102805160065801610570565b610300526103205261022052610200526101e0526101c0526101a052610180526101605261014052610300805182528060200151826020015250506102006101405160028110612cfb57600080fd5b6020020151610180516101a06101405160028110612d1857600080fd5b60200201518082028215828483041417612d3157600080fd5b80905090509050670de0b6b3a76400008080612d4c57600080fd5b820490509050818183011015612d6157600080fd5b8082019050905061034052610140610380525b61038051516020610380510161038052610380610380511015612d9657612d74565b63232dd1c96103a052610140516103c052610160516103e0526103405161040052610420610200805182528060200151826020015250506104405161042051610400516103e0516103c05160065801611be2565b6104a052610360610380525b6103805152602061038051036103805261014061038051101515612e1957612df6565b6104a051610360526102006101605160028110612e3557600080fd5b60200201516103605180821015612e4b57600080fd5b808203905090506104c0526104c0516004548082028215828483041417612e7157600080fd5b809050905090506402540be4008080612e8957600080fd5b8204905090506104e0526104e0516005548082028215828483041417612eae57600080fd5b809050905090506402540be4008080612ec657600080fd5b8204905090506105005261034051670de0b6b3a76400008082028215828483041417612ef157600080fd5b809050905090506101a06101405160028110612f0c57600080fd5b60200201518080612f1c57600080fd5b8204905090506101405160028110612f3357600080fd5b600260c052602060c0200155610360516104e0516105005180821015612f5857600080fd5b80820390509050818183011015612f6e57600080fd5b80820190509050670de0b6b3a76400008082028215828483041417612f9257600080fd5b809050905090506101a06101605160028110612fad57600080fd5b60200201518080612fbd57600080fd5b8204905090506101605160028110612fd457600080fd5b600260c052602060c02001556104c0516104e05180821015612ff557600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761301957600080fd5b809050905090506101a0610160516002811061303457600080fd5b6020020151808061304457600080fd5b82049050905061052052610520516000526000516101e0515650005b633df0212460005114156135785762ffffff541561307d57600080fd5b600162ffffff55341561308f57600080fd5b606051600435806040519013156130a557600080fd5b80919012156130b357600080fd5b50606051602435806040519013156130ca57600080fd5b80919012156130d857600080fd5b506101406101405161016051600658016103e8565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101405161016051610180516101a0516101c0516101e0516399a788e4610220526004356102405260243561026052604435610280526102a0610140805182528060200151826020015250506102c0516102a05161028051610260516102405160065801612c34565b610320526101e0526101c0526101a052610180526101605261014052610320516101e0526308c379a061034052602061036052602e610380527f45786368616e676520726573756c74656420696e20666577657220636f696e736103a0527f207468616e2065787065637465640000000000000000000000000000000000006103c052610380506064356101e05110156132145760a461035cfd5b6104006000815260008160200152506104406001815260018160200152506104406004356002811061324557600080fd5b6020020151156104006004356002811061325e57600080fd5b60200201511615613307576004356002811061327957600080fd5b600060c052602060c02001543b61328f57600080fd5b6004356002811061329f57600080fd5b600060c052602060c020015430186132b657600080fd5b6000600060646323b872dd610560523361058052306105a0526044356105c05261057c6000600435600281106132eb57600080fd5b600060c052602060c02001545af161330257600080fd5b6133b2565b6004356002811061331757600080fd5b600060c052602060c02001543b61332d57600080fd5b6004356002811061333d57600080fd5b600060c052602060c0200154301861335457600080fd5b602061054060646323b872dd61048052336104a052306104c0526044356104e05261049c60006004356002811061338a57600080fd5b600060c052602060c02001545af16133a157600080fd5b600050610540516133b157600080fd5b5b610440602435600281106133c557600080fd5b602002015115610400602435600281106133de57600080fd5b6020020151161561348357602435600281106133f957600080fd5b600060c052602060c02001543b61340f57600080fd5b6024356002811061341f57600080fd5b600060c052602060c0200154301861343657600080fd5b60006000604463a9059cbb6106e05233610700526101e051610720526106fc60006024356002811061346757600080fd5b600060c052602060c02001545af161347e57600080fd5b61352a565b6024356002811061349357600080fd5b600060c052602060c02001543b6134a957600080fd5b602435600281106134b957600080fd5b600060c052602060c020015430186134d057600080fd5b60206106c0604463a9059cbb6106205233610640526101e0516106605261063c60006024356002811061350257600080fd5b600060c052602060c02001545af161351957600080fd5b6000506106c05161352957600080fd5b5b600435610780526044356107a0526024356107c0526101e0516107e052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610780a2600062ffffff55005b63a6417ed66000511415613e805762ffffff541561359557600080fd5b600162ffffff5534156135a757600080fd5b606051600435806040519013156135bd57600080fd5b80919012156135cb57600080fd5b50606051602435806040519013156135e257600080fd5b80919012156135f057600080fd5b506101406101405161016051600658016103e8565b6101a0526101c05261016052610140526101a0805182528060200151826020015250506101e06001815264e8d4a510008160200152506101406004356002811061364e57600080fd5b60200201516101e06004356002811061366657600080fd5b6020020151808061367657600080fd5b820490509050610220526101406024356002811061369357600080fd5b60200201516101e0602435600281106136ab57600080fd5b602002015180806136bb57600080fd5b82049050905061024052604435670de0b6b3a764000080820282158284830414176136e557600080fd5b809050905090506102205180806136fb57600080fd5b820490509050610260526101406102a0525b6102a0515160206102a051016102a0526102a06102a051101561372f5761370d565b6399a788e46102c0526004356102e05260243561030052610260516103205261034061014080518252806020015182602001525050610360516103405161032051610300516102e05160065801612c34565b6103c0526102806102a0525b6102a0515260206102a051036102a0526101406102a0511015156137b05761378d565b6103c05161028052610280516102405180820282158284830414176137d457600080fd5b80905090509050670de0b6b3a764000080806137ef57600080fd5b8204905090506103e0526308c379a061040052602061042052602e610440527f45786368616e676520726573756c74656420696e20666577657220636f696e73610460527f207468616e20657870656374656400000000000000000000000000000000000061048052610440506064356103e05110156138705760a461041cfd5b6104c0600181526001816020015250610500600081526000816020015250600061054052610500600435600281106138a757600080fd5b60200201511561394f57600435600281106138c157600080fd5b600160c052602060c02001543b6138d757600080fd5b600435600281106138e757600080fd5b600160c052602060c020015430186138fe57600080fd5b6000600060646323b872dd61064052336106605230610680526044356106a05261065c60006004356002811061393357600080fd5b600160c052602060c02001545af161394a57600080fd5b6139fa565b6004356002811061395f57600080fd5b600160c052602060c02001543b61397557600080fd5b6004356002811061398557600080fd5b600160c052602060c0200154301861399c57600080fd5b602061062060646323b872dd610560523361058052306105a0526044356105c05261057c6000600435600281106139d257600080fd5b600160c052602060c02001545af16139e957600080fd5b600050610620516139f957600080fd5b5b6104c060043560028110613a0d57600080fd5b602002015115613bc25760043560028110613a2757600080fd5b600160c052602060c02001543b613a3d57600080fd5b60043560028110613a4d57600080fd5b600160c052602060c02001543018613a6457600080fd5b60206107a0604463095ea7b36107005260043560028110613a8457600080fd5b600060c052602060c0200154610720526044356107405261071c600060043560028110613ab057600080fd5b600160c052602060c02001545af1613ac757600080fd5b6000506107a05060043560028110613ade57600080fd5b600060c052602060c02001543b613af457600080fd5b60043560028110613b0457600080fd5b600060c052602060c02001543018613b1b57600080fd5b6020610840602463a0712d686107c0526044356107e0526107dc600060043560028110613b4757600080fd5b600060c052602060c02001545af1613b5e57600080fd5b60005061084051610540526000610540511115613bc1576308c379a06108605260206108805260136108a0527f436f756c64206e6f74206d696e7420636f696e000000000000000000000000006108c0526108a0506000613bc057608461087cfd5b5b5b6104c060243560028110613bd557600080fd5b602002015115613cd45760243560028110613bef57600080fd5b600060c052602060c02001543b613c0557600080fd5b60243560028110613c1557600080fd5b600060c052602060c02001543018613c2c57600080fd5b6020610980602463db006a7561090052610280516109205261091c600060243560028110613c5957600080fd5b600060c052602060c02001545af1613c7057600080fd5b60005061098051610540526000610540511115613cd3576308c379a06109a05260206109c05260156109e0527f436f756c64206e6f742072656465656d20636f696e0000000000000000000000610a00526109e0506000613cd25760846109bcfd5b5b5b61050060243560028110613ce757600080fd5b602002015115613d8b5760243560028110613d0157600080fd5b600160c052602060c02001543b613d1757600080fd5b60243560028110613d2757600080fd5b600160c052602060c02001543018613d3e57600080fd5b60006000604463a9059cbb610b005233610b20526103e051610b4052610b1c600060243560028110613d6f57600080fd5b600160c052602060c02001545af1613d8657600080fd5b613e32565b60243560028110613d9b57600080fd5b600160c052602060c02001543b613db157600080fd5b60243560028110613dc157600080fd5b600160c052602060c02001543018613dd857600080fd5b6020610ae0604463a9059cbb610a405233610a60526103e051610a8052610a5c600060243560028110613e0a57600080fd5b600160c052602060c02001545af1613e2157600080fd5b600050610ae051613e3157600080fd5b5b600435610ba052604435610bc052602435610be0526103e051610c0052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610ba0a2600062ffffff55005b635b36389c60005114156142c05762ffffff5415613e9d57600080fd5b600162ffffff553415613eaf57600080fd5b6007543b613ebc57600080fd5b6007543018613eca57600080fd5b60206101c060046318160ddd6101605261017c6007545afa613eeb57600080fd5b6000506101c051610140526101e06000815260008160200152506102206000815260008160200152506102606000815260008160200152506102a06001815260018160200152506102e060006002818352015b6102e05160028110613f4f57600080fd5b600260c052602060c02001546004358082028215828483041417613f7257600080fd5b80905090509050610140518080613f8857600080fd5b820490509050610300526308c379a0610320526020610340526030610360527f5769746864726177616c20726573756c74656420696e20666577657220636f69610380527f6e73207468616e206578706563746564000000000000000000000000000000006103a0526103605060246102e0516002811061400857600080fd5b602002013561030051101561401e5760a461033cfd5b6102e0516002811061402f57600080fd5b600260c052602060c020018054610300518082101561404d57600080fd5b80820390509050815550610300516101e06102e0516002811061406f57600080fd5b60200201526102a06102e0516002811061408857600080fd5b6020020151156102606102e051600281106140a257600080fd5b6020020151161561414a576102e051600281106140be57600080fd5b600060c052602060c02001543b6140d457600080fd5b6102e051600281106140e557600080fd5b600060c052602060c020015430186140fc57600080fd5b60006000604463a9059cbb6104a052336104c052610300516104e0526104bc60006102e0516002811061412e57600080fd5b600060c052602060c02001545af161414557600080fd5b6141f4565b6102e0516002811061415b57600080fd5b600060c052602060c02001543b61417157600080fd5b6102e0516002811061418257600080fd5b600060c052602060c0200154301861419957600080fd5b6020610480604463a9059cbb6103e052336104005261030051610420526103fc60006102e051600281106141cc57600080fd5b600060c052602060c02001545af16141e357600080fd5b600050610480516141f357600080fd5b5b5b8151600101808352811415613f3e575b50506007543b61421457600080fd5b600754301861422257600080fd5b6000600060446379cc67906105405233610560526004356105805261055c60006007545af161425057600080fd5b6101e0516105e052610200516106005261022051610620526102405161064052610140516004358082101561428457600080fd5b8082039050905061066052337f7c363854ccf79623411f8995b362bce5eddff18c927edc6f5dbbb5e05819a82c60a06105e0a2600062ffffff55005b63e31032736000511415614c675762ffffff54156142dd57600080fd5b600162ffffff5534156142ef57600080fd5b600f54156142fc57600080fd5b6101406000815260008160200152506101806001815260018160200152506007543b61432757600080fd5b600754301861433557600080fd5b602061024060046318160ddd6101e0526101fc6007545afa61435657600080fd5b600050610240516101c05260006101c0511161437157600080fd5b6004546002808202821582848304141761438a57600080fd5b809050905090506004808061439e57600080fd5b82049050905061026052600554610280526102a06101406102e0525b6102e0515160206102e051016102e0526102e06102e05110156143dc576143ba565b600658016103e8565b61030052610320526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515614418576143f5565b6103008051825280602001518260200152505061034060028060c052602060c02054825260018160c052602060c020015482602001525050610380610340805182528060200151826020015250506101406103e0525b6103e0515160206103e051016103e0526103e06103e05110156144905761446e565b6339276498610400526104206102a080518252806020015182602001525050610460610340805182528060200151826020015250506104805161046051610440516104205160065801610a83565b6104e0526103c06103e0525b6103e0515260206103e051036103e0526101406103e05110151561450d576144ea565b6104e0516103c05261050060006002818352015b610380610500516002811061453557600080fd5b6020020180516004610500516002811061454e57600080fd5b60200201358082101561456057600080fd5b808203905090508152505b8151600101808352811415614521575b5050610140610540525b610540515160206105405101610540526105406105405110156145a757614585565b6339276498610560526105806102a0805182528060200151826020015250506105c0610380805182528060200151826020015250506105e0516105c0516105a0516105805160065801610a83565b61064052610520610540525b610540515260206105405103610540526101406105405110151561462457614601565b61064051610520526106606000815260008160200152506106a060006002818352015b610520516103406106a0516002811061465f57600080fd5b6020020151808202821582848304141761467857600080fd5b809050905090506103c051808061468e57600080fd5b8204905090506106c05260006106e0526103806106a051600281106146b257600080fd5b60200201516106c05111156146fb576106c0516103806106a051600281106146d957600080fd5b6020020151808210156146eb57600080fd5b808203905090506106e052614731565b6103806106a0516002811061470f57600080fd5b60200201516106c0518082101561472557600080fd5b808203905090506106e0525b610260516106e051808202821582848304141761474d57600080fd5b809050905090506402540be400808061476557600080fd5b8204905090506106606106a0516002811061477f57600080fd5b60200201526103806106a0516002811061479857600080fd5b60200201516106606106a051600281106147b157600080fd5b60200201516102805180820282158284830414176147ce57600080fd5b809050905090506402540be40080806147e657600080fd5b820490509050808210156147f957600080fd5b808203905090506106a0516002811061481157600080fd5b600260c052602060c02001556103806106a0516002811061483157600080fd5b6020020180516106606106a0516002811061484b57600080fd5b60200201518082101561485d57600080fd5b808203905090508152505b8151600101808352811415614647575b5050610140610720525b610720515160206107205101610720526107206107205110156148a457614882565b6339276498610740526107606102a0805182528060200151826020015250506107a0610380805182528060200151826020015250506107c0516107a051610780516107605160065801610a83565b61082052610700610720525b6107205152602061072051036107205261014061072051101515614921576148fe565b61082051610700526103c051610700518082101561493e57600080fd5b808203905090506101c051808202821582848304141761495d57600080fd5b809050905090506103c051808061497357600080fd5b820490509050610840526000610840511161498d57600080fd5b6308c379a06108605260206108805260146108a0527f536c697070616765207363726577656420796f750000000000000000000000006108c0526108a0506044356108405111156149df57608461087cfd5b61090060006002818352015b61018061090051600281106149ff57600080fd5b6020020151156101406109005160028110614a1957600080fd5b60200201511615614ad5576109005160028110614a3557600080fd5b600060c052602060c02001543b614a4b57600080fd5b6109005160028110614a5c57600080fd5b600060c052602060c02001543018614a7357600080fd5b60006000604463a9059cbb6109e05233610a005260046109005160028110614a9a57600080fd5b6020020135610a20526109fc60006109005160028110614ab957600080fd5b600060c052602060c02001545af1614ad057600080fd5b614b93565b6109005160028110614ae657600080fd5b600060c052602060c02001543b614afc57600080fd5b6109005160028110614b0d57600080fd5b600060c052602060c02001543018614b2457600080fd5b60206109c0604463a9059cbb61092052336109405260046109005160028110614b4c57600080fd5b60200201356109605261093c60006109005160028110614b6b57600080fd5b600060c052602060c02001545af1614b8257600080fd5b6000506109c051614b9257600080fd5b5b5b81516001018083528114156149eb575b50506007543b614bb357600080fd5b6007543018614bc157600080fd5b6000600060446379cc6790610a805233610aa05261084051610ac052610a9c60006007545af1614bf057600080fd5b600435610b2052602435610b405261066051610b605261068051610b805261052051610ba0526101c0516108405180821015614c2b57600080fd5b80820390509050610bc052337f2b5508378d7e19e0d5fa338419034731416c4f5b219a10379956f764317fd47e60c0610b20a2600062ffffff55005b63ee11f5b66000511415614d4f573415614c8057600080fd5b6006543314614c8e57600080fd5b60085415614c9b57600080fd5b64012a05f2006044351115614caf57600080fd5b64012a05f2006024351115614cc357600080fd5b620f42406004351115614cd557600080fd5b426203f480818183011015614ce957600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd6000511415614dfc573415614d6857600080fd5b6006543314614d7657600080fd5b60006008541142600854111516614d8c57600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb6000511415614e2a573415614e1557600080fd5b6006543314614e2357600080fd5b6000600855005b636b441a406000511415614ecb573415614e4357600080fd5b6004356020518110614e5457600080fd5b506006543314614e6357600080fd5b60095415614e7057600080fd5b426203f480818183011015614e8457600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae6000511415614f47573415614ee457600080fd5b6006543314614ef257600080fd5b60006009541160095442101516614f0857600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf1936000511415614f75573415614f6057600080fd5b6006543314614f6e57600080fd5b6000600955005b6330c540856000511415615186573415614f8e57600080fd5b6006543314614f9c57600080fd5b6101406001815264e8d4a510008160200152506101806000815260008160200152506101c060018152600181602001525061020060006002818352015b6102005160028110614fea57600080fd5b600060c052602060c020015461022052610220513b61500857600080fd5b61022051301861501757600080fd5b60206102e060246370a0823161026052306102805261027c610220515afa61503e57600080fd5b6000506102e051610200516002811061505657600080fd5b600260c052602060c02001548082101561506f57600080fd5b80820390509050610240526000610240511115615171576101c0610200516002811061509a57600080fd5b60200201511561018061020051600281106150b457600080fd5b6020020151161561511157610220513b6150cd57600080fd5b6102205130186150dc57600080fd5b60006000604463a9059cbb6103c052336103e05261024051610400526103dc6000610220515af161510c57600080fd5b615170565b610220513b61511f57600080fd5b61022051301861512e57600080fd5b60206103a0604463a9059cbb610300523361032052610240516103405261031c6000610220515af161515f57600080fd5b6000506103a05161516f57600080fd5b5b5b5b8151600101808352811415614fd9575b5050005b63e369885360005114156151c257341561519f57600080fd5b60065433146151ad57600080fd5b42600e54116151bb57600080fd5b6001600f55005b633046f97260005114156151f05734156151db57600080fd5b60065433146151e957600080fd5b6000600f55005b6323746eb8600051141561525557341561520957600080fd5b6060516004358060405190131561521f57600080fd5b809190121561522d57600080fd5b506004356002811061523e57600080fd5b600060c052602060c020015460005260206000f350005b63b739953e60005114156152ba57341561526e57600080fd5b6060516004358060405190131561528457600080fd5b809190121561529257600080fd5b50600435600281106152a357600080fd5b600160c052602060c020015460005260206000f350005b63065a80d8600051141561531f5734156152d357600080fd5b606051600435806040519013156152e957600080fd5b80919012156152f757600080fd5b506004356002811061530857600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d0600051141561534657341561533857600080fd5b60035460005260206000f350005b63ddca3f43600051141561536d57341561535f57600080fd5b60045460005260206000f350005b63fee3f7f9600051141561539457341561538657600080fd5b60055460005260206000f350005b638da5cb5b60005114156153bb5734156153ad57600080fd5b60065460005260206000f350005b63405e28f860005114156153e25734156153d457600080fd5b60085460005260206000f350005b63e0a0b58660005114156154095734156153fb57600080fd5b60095460005260206000f350005b63b4b577ad600051141561543057341561542257600080fd5b600a5460005260206000f350005b6358680d0b600051141561545757341561544957600080fd5b600b5460005260206000f350005b63e3824462600051141561547e57341561547057600080fd5b600c5460005260206000f350005b631ec0cdc160005114156154a557341561549757600080fd5b600d5460005260206000f350005b5b60006000fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e75630000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000845838df265dcd2c412a1dc9e959c7d08537f8a2000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000003d0900
-----Decoded View---------------
Arg [0] : _coins (address[2]): 0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643,0x39AA39c021dfbaE8faC545936693aC917d5E7563
Arg [1] : _underlying_coins (address[2]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [2] : _pool_token (address): 0x845838DF265Dcd2c412A1Dc9e959c7d08537f8a2
Arg [3] : _A (uint256): 900
Arg [4] : _fee (uint256): 4000000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [1] : 00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563
Arg [2] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [3] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [4] : 000000000000000000000000845838df265dcd2c412a1dc9e959c7d08537f8a2
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000384
Arg [6] : 00000000000000000000000000000000000000000000000000000000003d0900
Loading...
Loading
Loading...
Loading
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.