![ads](/images/gen/moonpay_20.png)
15M+ users trust MoonPay. Checkout with your preferred payment method.
![ads](/images/gen/cons_20.png)
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
![ads](/images/gen/nexo.png)
Collect points for eligible actions and use multipliers to win big.
![ads](/images/gen/cons_20.png)
Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
Opt-in, make your first trade on Exchange Plus & receive random crypto rewards from 10,000 SHIB, to 0.01 BTC.
![ads](/images/gen/zeedex_20.png?v2)
You will earn $Zdex as rewards by any trade or stake on ZeeDex exchange.
![ads](/images/gen/coinsgame_20a.png)
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
![ads](/images/gen/megadice_20.png)
Play all your favorite Slots & Live Games, including Plinko, Aviator and Crash! Truly anonymous casino.
![ads](/images/gen/bcgames_20.png)
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
![ads](/images/gen/bcgames_20.png)
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
![ads](/images/gen/cw_20.png)
Play 100s of games anonymously with all major cryptos. Join CryptoWins & start winning!
![ads](/images/gen/cryptoslots.png)
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
Overview
ETH Balance
Eth Value
Less Than $0.01 (@ $3,365.49/ETH)Token Holdings
Could not find any matches!
- ERC-20 Tokens (>100)0 alETHAlchemix ETH (alETH)$0.00@3,019.010.000001 USDLRUSDLR by Sta... (USDLR)0 CAWA Hunters Dr... (CAW)$0.00@0.000 ALDAladdin Toke... (ALD)$0.00@0.03980 ALCXAlchemix (ALCX)$0.00@18.150 ANGLEANGLE (ANGLE)$0.00@0.0860.000001 BEANBean (BEAN)$0.00@0.85060.000001 TRYbBiLira (TRYb)$0.00@0.02990.00000001 BBTCBinance Wrap... (BBTC)0 BPTBlackPool To... (BPT)$0.00@0.05440 FLIPChainflip (FLIP)$0.00@1.250 cbETHCoinbase Wra... (cbETH)$0.00@3,612.650 CVXConvex Token (CVX)$0.00@2.99060 CDCETHCrypto.com W... (CDCETH)0 DUSDDavos.xyz US... (DUSD)$0.00@0.99780 USDDDecentralize... (USDD)$0.00@0.99670 DCHFDefi Franc (DCHF)$0.00@1.140 eETHether.fi ETH (eETH)$0.00@3,328.560 ETHFIether.fi gov... (ETHFI)$0.00@3.170.000001 EURTEuro Tether (EURT)$0.00@1.0440 IQEveripedia I... (IQ)$0.00@0.00620 Renzo Restaked ETHezETH (Renzo ...)$0.00@3,388.280 FPISFrax Price I... (FPIS)$0.00@0.91170 FXSFrax Share (FXS)$0.00@3.240 GEARGearbox (GEAR)$0.00@0.01210 GHOGho Token (GHO)$0.00@0.99950 GRAIGravita Debt... (GRAI)$0.00@0.9830 HBTCHuobi BTC (HBTC)$0.00@18,124.190 INVInverse DAO (INV)$0.00@30.130 ibAUDIron Bank AU... (ibAUD)0 KP3RKeep3rV1 (KP3R)$0.00@58.630 xETHLeveraged ET... (xETH)$0.00@2.760 MIMMagic Intern... (MIM)$0.00@0.99520 MAIMai Stableco... (MAI)$0.00@0.99290 EUReMonerium EUR... (EURe)$0.00@1.0650 mUSDmStable USD (mUSD)$0.00@0.96760 USDNNeutrino USD (USDN)$0.00@0.01280 OHMOlympus (OHM)$0.00@12.240 rUSDYOndo U.S. Do... (rUSDY)0 OUSDOrigin Dolla... (OUSD)$0.00@0.99770 ULTRAPrisma ULTRA... (ULTRA)$0.00@1.0210 pufETHpufETH (pufETH)$0.00@3,374.770 RAIRai Reflex I... (RAI)$0.00@2.830 RSRReserve Righ... (RSR)$0.00@0.00570 rETHRocket Pool ... (rETH)$0.00@3,735.400 rsETHrsETH (rsETH)$0.00@3,383.390 SiloSilo Governa... (Silo)$0.00@0.04490 XSTUSDSORA Synthet... (XSTUSD)$0.00@0.46070 SPELLSpell Token (SPELL)$0.00@0.00070 SDTStake DAO To... (SDT)$0.00@0.210 osETHStaked ETH (osETH)$0.00@3,434.510 sFRAXStaked FRAX (sFRAX)0 sfrxETHStaked Frax ... (sfrxET...)$0.00@3,660.040 sUSDeStaked USDe (sUSDe)$0.00@1.0010 stUSDTStaked USDT (stUSDT)$0.00@1.0040 STGStargateToke... (STG)$0.00@0.38330 swETHswETH (swETH)$0.00@3,553.7420 sETHSynth sETH (sETH)$0.00@3,322.800 sUSDSynth sUSD (sUSD)$0.00@0.99770 tBTCtBTC v2 (tBTC)$0.00@61,031.000 TThreshold Ne... (T)$0.00@0.02310 TOKETokemak (TOKE)$0.00@0.55820 uniETHUniversal ET... (uniETH)$0.00@3,570.790 USDPUSDP Stablec... (USDP)$0.00@0.99990.000001 USDVUSDV (USDV)$0.00@0.99750 weETHWrapped eETH (weETH)$0.00@3,500.140 wTAOWrapped TAO (wTAO)$0.00@278.880 yCRVYearn CRV (yCRV)0.00000001 cyDAIYearn Dai St... (cyDAI)0 yETHYearn Ether (yETH)$0.00@3,386.040.00000001 cyUSDTYearn Tether... (cyUSDT)0.00000001 cyUSDCYearn USD Co... (cyUSDC)0 YFIyearn.financ... (YFI)$0.00@5,761.380 ZETAZeta (ZETA)$0.00@0.8230 BUSDBUSD (BUSD)$0.00@1.0010 LINKChainLink To... (LINK)$0.00@13.980.00000001 cUSDCCompound USD... (cUSDC)$0.00@0.0240 DAIDai Stableco... (DAI)$0.00@0.99980.000001 EURCEURC (EURC)$0.00@1.0680 LDOLido DAO Tok... (LDO)$0.00@2.340 USDPPax Dollar (USDP)$0.00@1.0010 PENDLEPendle (PENDLE)$0.00@5.380 stETHstETH (stETH)$0.00@3,362.050.000001 USDTTether USD (USDT)$0.00@0.99970 TUSDTrueUSD (TUSD)$0.00@0.99880.000001 USDCUSDC (USDC)$0.00@1.000 wBETHWrapped Bina... (wBETH)$0.00@3,501.650.00000001 WBTCWrapped BTC (WBTC)$0.00@61,164.000 WETHWrapped Ethe... (WETH)$0.00@3,366.97860 ZUNZunami Token (ZUN)$0.00@0.16210 aCRVAladdin cvxCRV0 APWAPWine Token$0.00@0.8830 bentCVXBent CVX (bentCV...)0 BSGGBetswap.gg$0.00@0.00080 BSNBlockswap Ne... (BSN)0 bLUSDbLUSD$0.00@1.240 BOTBotcoin (BOT)0 BTRFLYBTRFLY$0.00@310.730 BTRFLYBTRFLY0 OChildhoods E... (O)NFT Tokens (18)Event+ $50 000 FOR FREE (ETH-AirdropsEvent.com)ERC-1155Airdropfraxnetwork.comERC-1155AirdropLiquidETH.networkERC-1155originethers.comoriginethers.comERC-1155Let's Go!🎁ERC-1155Let's Go!🎁ERC-1155
ERC-1155 TOKEN*
[Suspicious]ERC-1155 TOKEN*
[Suspicious]ERC-1155 TOKEN*
[Suspicious]ERC-1155 TOKEN*
[Suspicious]More Info
Private Name Tags
ContractCreator
- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Transaction Hash MethodBlockFromToValue 0x3656b7bdf287cf094e1f6e51d94c65b184a82d95f0a422eb5ccb6d5f8e5bb63c Exchange (pending) 2024-06-26 12:14:39 6 hrs ago 1719404079 IN 0.00074 ETH (Pending) (Pending) 0xd4ac7d0d7457e6e66c6055ef729f00d8ecec41fa6694357e839423b89e7079c5 Exchange (pending) 2024-06-23 3:20:19 3 days ago 1719112819 IN 0 ETH (Pending) (Pending) 0x1bdd39f1f89adbe51e3a6e272ce8367f98faa8db545c36f1dc4ebdde223b7f0d Exchange (pending) 2024-06-23 1:37:30 3 days ago 1719106650 IN 0.002089253 ETH (Pending) (Pending) Exchange 20177670 2024-06-26 18:31:59 3 mins ago 1719426719 IN 1 ETH 0.00120783 7.72760365 Exchange 20177624 2024-06-26 18:22:35 12 mins ago 1719426155 IN 0 ETH 0.00212693 6.31082127 Exchange 20177600 2024-06-26 18:17:47 17 mins ago 1719425867 IN 0.48 ETH 0.00170451 6.2733037 Exchange 20177590 2024-06-26 18:15:47 19 mins ago 1719425747 IN 0 ETH 0.00230237 7.32520093 Exchange 20177552 2024-06-26 18:08:11 26 mins ago 1719425291 IN 0.32 ETH 0.00244108 8.94751363 Exchange 20177494 2024-06-26 17:56:35 38 mins ago 1719424595 IN 0 ETH 0.00195281 9.77578895 Exchange 20177411 2024-06-26 17:39:47 55 mins ago 1719423587 IN 0 ETH 0.00238905 12.60207695 Exchange 20177383 2024-06-26 17:34:11 1 hr ago 1719423251 IN 0 ETH 0.0025918 14.92160893 Exchange 20177351 2024-06-26 17:27:47 1 hr ago 1719422867 IN 0 ETH 0.00461336 15.33184032 Exchange 20177313 2024-06-26 17:19:59 1 hr ago 1719422399 IN 0 ETH 0.00303501 17.09249593 Exchange 20177239 2024-06-26 17:05:11 1 hr ago 1719421511 IN 0 ETH 0.00440325 9.90687815 Exchange 20177102 2024-06-26 16:37:35 1 hr ago 1719419855 IN 0.9 ETH 0.00246083 9.54739812 Exchange 20177102 2024-06-26 16:37:35 1 hr ago 1719419855 IN 0 ETH 0.00300064 10.46414643 Exchange 20177098 2024-06-26 16:36:47 1 hr ago 1719419807 IN 0.9 ETH 0.00107543 10.08134795 Exchange 20177023 2024-06-26 16:21:23 2 hrs ago 1719418883 IN 0 ETH 0.00479464 12.14468388 Exchange 20176965 2024-06-26 16:09:47 2 hrs ago 1719418187 IN 0 ETH 0.0018482 9.64886366 Exchange 20176915 2024-06-26 15:59:35 2 hrs ago 1719417575 IN 0 ETH 0.00189938 9.34438669 Exchange 20176915 2024-06-26 15:59:35 2 hrs ago 1719417575 IN 0.9 ETH 0.00187755 10.48259751 Exchange 20176842 2024-06-26 15:44:47 2 hrs ago 1719416687 IN 0 ETH 0.00227434 12.13792704 Exchange 20176827 2024-06-26 15:41:35 2 hrs ago 1719416495 IN 0 ETH 0.00211951 11.70409161 Exchange 20176799 2024-06-26 15:35:59 2 hrs ago 1719416159 IN 0 ETH 0.00437368 10.52331076 Exchange 20176792 2024-06-26 15:34:35 3 hrs ago 1719416075 IN 0 ETH 0.00501433 11.79269345 Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block From To Value 20177670 2024-06-26 18:31:59 3 mins ago 1719426719 1 ETH 20177600 2024-06-26 18:17:47 17 mins ago 1719425867 0.48 ETH 20177552 2024-06-26 18:08:11 26 mins ago 1719425291 0.32 ETH 20177351 2024-06-26 17:27:47 1 hr ago 1719422867 1.04194027 ETH 20177351 2024-06-26 17:27:47 1 hr ago 1719422867 1.04194027 ETH 20177102 2024-06-26 16:37:35 1 hr ago 1719419855 0.9 ETH 20177102 2024-06-26 16:37:35 1 hr ago 1719419855 19.22964108 ETH 20177102 2024-06-26 16:37:35 1 hr ago 1719419855 19.22964108 ETH 20177098 2024-06-26 16:36:47 1 hr ago 1719419807 0.9 ETH 20176915 2024-06-26 15:59:35 2 hrs ago 1719417575 0.9 ETH 20176827 2024-06-26 15:41:35 2 hrs ago 1719416495 57.9289331 ETH 20176827 2024-06-26 15:41:35 2 hrs ago 1719416495 57.9289331 ETH 20176783 2024-06-26 15:32:47 3 hrs ago 1719415967 0.15106072 ETH 20176783 2024-06-26 15:32:47 3 hrs ago 1719415967 0.15106072 ETH 20176771 2024-06-26 15:30:23 3 hrs ago 1719415823 1.80922496 ETH 20176771 2024-06-26 15:30:23 3 hrs ago 1719415823 1.80922496 ETH 20176767 2024-06-26 15:29:35 3 hrs ago 1719415775 1.80806894 ETH 20176767 2024-06-26 15:29:35 3 hrs ago 1719415775 1.80806894 ETH 20176625 2024-06-26 15:01:11 3 hrs ago 1719414071 10.01459254 ETH 20176625 2024-06-26 15:01:11 3 hrs ago 1719414071 10.01459254 ETH 20176564 2024-06-26 14:48:47 3 hrs ago 1719413327 0.66961768 ETH 20176564 2024-06-26 14:48:47 3 hrs ago 1719413327 0.66961768 ETH 20176540 2024-06-26 14:43:59 3 hrs ago 1719413039 84.93668758 ETH 20176540 2024-06-26 14:43:59 3 hrs ago 1719413039 84.93668758 ETH 20176522 2024-06-26 14:40:23 3 hrs ago 1719412823 0.01166058 ETH Loading...LoadingContract Source Code Verified (Exact Match)
Contract Name:CurveRouter v1.0
Compiler Versionvyper:0.3.7
Contract Source Code (Vyper language format)
# @version 0.3.7 """ @title CurveRouter v1.0 @author Curve.Fi @license Copyright (c) Curve.Fi, 2020-2023 - all rights reserved @notice Performs up to 5 swaps in a single transaction, can do estimations with get_dy and get_dx """ from vyper.interfaces import ERC20 interface StablePool: def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): payable def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256): payable def get_dy(i: int128, j: int128, amount: uint256) -> uint256: view def get_dy_underlying(i: int128, j: int128, amount: uint256) -> uint256: view def coins(i: uint256) -> address: view def calc_withdraw_one_coin(token_amount: uint256, i: int128) -> uint256: view def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256): nonpayable interface CryptoPool: def exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256): payable def exchange_underlying(i: uint256, j: uint256, dx: uint256, min_dy: uint256): payable def get_dy(i: uint256, j: uint256, amount: uint256) -> uint256: view def get_dy_underlying(i: uint256, j: uint256, amount: uint256) -> uint256: view def calc_withdraw_one_coin(token_amount: uint256, i: uint256) -> uint256: view def remove_liquidity_one_coin(token_amount: uint256, i: uint256, min_amount: uint256): nonpayable interface CryptoPoolETH: def exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256, use_eth: bool): payable interface LendingBasePoolMetaZap: def exchange_underlying(pool: address, i: int128, j: int128, dx: uint256, min_dy: uint256): nonpayable interface CryptoMetaZap: def get_dy(pool: address, i: uint256, j: uint256, dx: uint256) -> uint256: view def exchange(pool: address, i: uint256, j: uint256, dx: uint256, min_dy: uint256, use_eth: bool): payable interface StablePool2Coins: def add_liquidity(amounts: uint256[2], min_mint_amount: uint256): payable def calc_token_amount(amounts: uint256[2], is_deposit: bool) -> uint256: view interface CryptoPool2Coins: def calc_token_amount(amounts: uint256[2]) -> uint256: view interface StablePool3Coins: def add_liquidity(amounts: uint256[3], min_mint_amount: uint256): payable def calc_token_amount(amounts: uint256[3], is_deposit: bool) -> uint256: view interface CryptoPool3Coins: def calc_token_amount(amounts: uint256[3]) -> uint256: view interface StablePool4Coins: def add_liquidity(amounts: uint256[4], min_mint_amount: uint256): payable def calc_token_amount(amounts: uint256[4], is_deposit: bool) -> uint256: view interface CryptoPool4Coins: def calc_token_amount(amounts: uint256[4]) -> uint256: view interface StablePool5Coins: def add_liquidity(amounts: uint256[5], min_mint_amount: uint256): payable def calc_token_amount(amounts: uint256[5], is_deposit: bool) -> uint256: view interface CryptoPool5Coins: def calc_token_amount(amounts: uint256[5]) -> uint256: view interface LendingStablePool3Coins: def add_liquidity(amounts: uint256[3], min_mint_amount: uint256, use_underlying: bool): payable def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256, use_underlying: bool) -> uint256: nonpayable interface Llamma: def get_dx(i: uint256, j: uint256, out_amount: uint256) -> uint256: view interface WETH: def deposit(): payable def withdraw(_amount: uint256): nonpayable interface stETH: def submit(_refferer: address): payable interface frxETHMinter: def submit(): payable interface wstETH: def getWstETHByStETH(_stETHAmount: uint256) -> uint256: view def getStETHByWstETH(_wstETHAmount: uint256) -> uint256: view def wrap(_stETHAmount: uint256) -> uint256: nonpayable def unwrap(_wstETHAmount: uint256) -> uint256: nonpayable interface sfrxETH: def convertToShares(assets: uint256) -> uint256: view def convertToAssets(shares: uint256) -> uint256: view def deposit(assets: uint256, receiver: address) -> uint256: nonpayable def redeem(shares: uint256, receiver: address, owner: address) -> uint256: nonpayable interface wBETH: def deposit(referral: address): payable def exchangeRate() -> uint256: view # SNX interface SnxCoin: def currencyKey() -> bytes32: nonpayable interface Synthetix: def exchangeAtomically(sourceCurrencyKey: bytes32, sourceAmount: uint256, destinationCurrencyKey: bytes32, trackingCode: bytes32, minAmount: uint256) -> uint256: nonpayable interface SynthetixExchanger: def getAmountsForAtomicExchange(sourceAmount: uint256, sourceCurrencyKey: bytes32, destinationCurrencyKey: bytes32) -> AtomicAmountAndFee: view interface SynthetixAddressResolver: def getAddress(name: bytes32) -> address: view # Calc zaps interface StableCalc: def calc_token_amount(pool: address, token: address, amounts: uint256[10], n_coins: uint256, deposit: bool, use_underlying: bool) -> uint256: view def get_dx(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256) -> uint256: view def get_dx_underlying(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256) -> uint256: view def get_dx_meta(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256, base_pool: address) -> uint256: view def get_dx_meta_underlying(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256: view interface CryptoCalc: def get_dx(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256) -> uint256: view def get_dx_meta_underlying(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256: view struct AtomicAmountAndFee: amountReceived: uint256 fee: uint256 exchangeFeeRate: uint256 event Exchange: sender: indexed(address) receiver: indexed(address) route: address[11] swap_params: uint256[5][5] pools: address[5] in_amount: uint256 out_amount: uint256 ETH_ADDRESS: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE STETH_ADDRESS: constant(address) = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84 WSTETH_ADDRESS: constant(address) = 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0 FRXETH_ADDRESS: constant(address) = 0x5E8422345238F34275888049021821E8E08CAa1f SFRXETH_ADDRESS: constant(address) = 0xac3E018457B222d93114458476f3E3416Abbe38F WBETH_ADDRESS: constant(address) = 0xa2E3356610840701BDf5611a53974510Ae27E2e1 WETH_ADDRESS: immutable(address) # SNX # https://github.com/Synthetixio/synthetix-docs/blob/master/content/addresses.md SNX_ADDRESS_RESOLVER: constant(address) = 0x823bE81bbF96BEc0e25CA13170F5AaCb5B79ba83 SNX_TRACKING_CODE: constant(bytes32) = 0x4355525645000000000000000000000000000000000000000000000000000000 # CURVE SNX_EXCHANGER_NAME: constant(bytes32) = 0x45786368616E6765720000000000000000000000000000000000000000000000 # Exchanger snx_currency_keys: HashMap[address, bytes32] # Calc zaps STABLE_CALC: immutable(StableCalc) CRYPTO_CALC: immutable(CryptoCalc) is_approved: HashMap[address, HashMap[address, bool]] @external @payable def __default__(): pass @external def __init__( _weth: address, _stable_calc: address, _crypto_calc: address, _snx_coins: address[4]): self.is_approved[WSTETH_ADDRESS][WSTETH_ADDRESS] = True self.is_approved[SFRXETH_ADDRESS][SFRXETH_ADDRESS] = True WETH_ADDRESS = _weth STABLE_CALC = StableCalc(_stable_calc) CRYPTO_CALC = CryptoCalc(_crypto_calc) for _snx_coin in _snx_coins: self.is_approved[_snx_coin][0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F] = True self.snx_currency_keys[_snx_coin] = SnxCoin(_snx_coin).currencyKey() @external @payable @nonreentrant('lock') def exchange( _route: address[11], _swap_params: uint256[5][5], _amount: uint256, _expected: uint256, _pools: address[5]=empty(address[5]), _receiver: address=msg.sender ) -> uint256: """ @notice Performs up to 5 swaps in a single transaction. @dev Routing and swap params must be determined off-chain. This functionality is designed for gas efficiency over ease-of-use. @param _route Array of [initial token, pool or zap, token, pool or zap, token, ...] The array is iterated until a pool address of 0x00, then the last given token is transferred to `_receiver` @param _swap_params Multidimensional array of [i, j, swap type, pool_type, n_coins] where i is the index of input token j is the index of output token The swap_type should be: 1. for `exchange`, 2. for `exchange_underlying`, 3. for underlying exchange via zap: factory stable metapools with lending base pool `exchange_underlying` and factory crypto-meta pools underlying exchange (`exchange` method in zap) 4. for coin -> LP token "exchange" (actually `add_liquidity`), 5. for lending pool underlying coin -> LP token "exchange" (actually `add_liquidity`), 6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`) 7. for LP token -> lending or fake pool underlying coin "exchange" (actually `remove_liquidity_one_coin`) 8. for ETH <-> WETH, ETH -> stETH or ETH -> frxETH, stETH <-> wstETH, frxETH <-> sfrxETH, ETH -> wBETH 9. for SNX swaps (sUSD, sEUR, sETH, sBTC) pool_type: 1 - stable, 2 - crypto, 3 - tricrypto, 4 - llamma n_coins is the number of coins in pool @param _amount The amount of input token (`_route[0]`) to be sent. @param _expected The minimum amount received after the final swap. @param _pools Array of pools for swaps via zap contracts. This parameter is only needed for swap_type = 3. @param _receiver Address to transfer the final output token to. @return Received amount of the final output token. """ input_token: address = _route[0] output_token: address = empty(address) amount: uint256 = _amount # validate / transfer initial token if input_token == ETH_ADDRESS: assert msg.value == amount else: assert msg.value == 0 assert ERC20(input_token).transferFrom(msg.sender, self, amount, default_return_value=True) for i in range(1, 6): # 5 rounds of iteration to perform up to 5 swaps swap: address = _route[i*2-1] pool: address = _pools[i-1] # Only for Polygon meta-factories underlying swap (swap_type == 6) output_token = _route[i*2] params: uint256[5] = _swap_params[i-1] # i, j, swap_type, pool_type, n_coins if not self.is_approved[input_token][swap]: assert ERC20(input_token).approve(swap, max_value(uint256), default_return_value=True, skip_contract_check=True) self.is_approved[input_token][swap] = True eth_amount: uint256 = 0 if input_token == ETH_ADDRESS: eth_amount = amount # perform the swap according to the swap type if params[2] == 1: if params[3] == 1: # stable StablePool(swap).exchange(convert(params[0], int128), convert(params[1], int128), amount, 0, value=eth_amount) else: # crypto, tricrypto or llamma if input_token == ETH_ADDRESS or output_token == ETH_ADDRESS: CryptoPoolETH(swap).exchange(params[0], params[1], amount, 0, True, value=eth_amount) else: CryptoPool(swap).exchange(params[0], params[1], amount, 0) elif params[2] == 2: if params[3] == 1: # stable StablePool(swap).exchange_underlying(convert(params[0], int128), convert(params[1], int128), amount, 0, value=eth_amount) else: # crypto or tricrypto CryptoPool(swap).exchange_underlying(params[0], params[1], amount, 0, value=eth_amount) elif params[2] == 3: # SWAP IS ZAP HERE !!! if params[3] == 1: # stable LendingBasePoolMetaZap(swap).exchange_underlying(pool, convert(params[0], int128), convert(params[1], int128), amount, 0) else: # crypto or tricrypto use_eth: bool = input_token == ETH_ADDRESS or output_token == ETH_ADDRESS CryptoMetaZap(swap).exchange(pool, params[0], params[1], amount, 0, use_eth, value=eth_amount) elif params[2] == 4: if params[4] == 2: amounts: uint256[2] = [0, 0] amounts[params[0]] = amount StablePool2Coins(swap).add_liquidity(amounts, 0, value=eth_amount) elif params[4] == 3: amounts: uint256[3] = [0, 0, 0] amounts[params[0]] = amount StablePool3Coins(swap).add_liquidity(amounts, 0, value=eth_amount) elif params[4] == 4: amounts: uint256[4] = [0, 0, 0, 0] amounts[params[0]] = amount StablePool4Coins(swap).add_liquidity(amounts, 0, value=eth_amount) elif params[4] == 5: amounts: uint256[5] = [0, 0, 0, 0, 0] amounts[params[0]] = amount StablePool5Coins(swap).add_liquidity(amounts, 0, value=eth_amount) elif params[2] == 5: amounts: uint256[3] = [0, 0, 0] amounts[params[0]] = amount LendingStablePool3Coins(swap).add_liquidity(amounts, 0, True, value=eth_amount) # example: aave on Polygon elif params[2] == 6: if params[3] == 1: # stable StablePool(swap).remove_liquidity_one_coin(amount, convert(params[1], int128), 0) else: # crypto or tricrypto CryptoPool(swap).remove_liquidity_one_coin(amount, params[1], 0) # example: atricrypto3 on Polygon elif params[2] == 7: LendingStablePool3Coins(swap).remove_liquidity_one_coin(amount, convert(params[1], int128), 0, True) # example: aave on Polygon elif params[2] == 8: if input_token == ETH_ADDRESS and output_token == WETH_ADDRESS: WETH(swap).deposit(value=amount) elif input_token == WETH_ADDRESS and output_token == ETH_ADDRESS: WETH(swap).withdraw(amount) elif input_token == ETH_ADDRESS and output_token == STETH_ADDRESS: stETH(swap).submit(0x0000000000000000000000000000000000000000, value=amount) elif input_token == ETH_ADDRESS and output_token == FRXETH_ADDRESS: frxETHMinter(swap).submit(value=amount) elif input_token == STETH_ADDRESS and output_token == WSTETH_ADDRESS: wstETH(swap).wrap(amount) elif input_token == WSTETH_ADDRESS and output_token == STETH_ADDRESS: wstETH(swap).unwrap(amount) elif input_token == FRXETH_ADDRESS and output_token == SFRXETH_ADDRESS: sfrxETH(swap).deposit(amount, self) elif input_token == SFRXETH_ADDRESS and output_token == FRXETH_ADDRESS: sfrxETH(swap).redeem(amount, self, self) elif input_token == ETH_ADDRESS and output_token == WBETH_ADDRESS: wBETH(swap).deposit(0xeCb456EA5365865EbAb8a2661B0c503410e9B347, value=amount) else: raise "Swap type 8 is only for ETH <-> WETH, ETH -> stETH or ETH -> frxETH, stETH <-> wstETH, frxETH <-> sfrxETH, ETH -> wBETH" elif params[2] == 9: Synthetix(swap).exchangeAtomically(self.snx_currency_keys[input_token], amount, self.snx_currency_keys[output_token], SNX_TRACKING_CODE, 0) else: raise "Bad swap type" # update the amount received if output_token == ETH_ADDRESS: amount = self.balance else: amount = ERC20(output_token).balanceOf(self) # sanity check, if the routing data is incorrect we will have a 0 balance and that is bad assert amount != 0, "Received nothing" # check if this was the last swap if i == 5 or _route[i*2+1] == empty(address): break # if there is another swap, the output token becomes the input for the next round input_token = output_token amount -= 1 # Change non-zero -> non-zero costs less gas than zero -> non-zero assert amount >= _expected, "Slippage" # transfer the final token to the receiver if output_token == ETH_ADDRESS: raw_call(_receiver, b"", value=amount) else: assert ERC20(output_token).transfer(_receiver, amount, default_return_value=True) log Exchange(msg.sender, _receiver, _route, _swap_params, _pools, _amount, amount) return amount @view @external def get_dy( _route: address[11], _swap_params: uint256[5][5], _amount: uint256, _pools: address[5]=empty(address[5]) ) -> uint256: """ @notice Get amount of the final output token received in an exchange @dev Routing and swap params must be determined off-chain. This functionality is designed for gas efficiency over ease-of-use. @param _route Array of [initial token, pool or zap, token, pool or zap, token, ...] The array is iterated until a pool address of 0x00, then the last given token is transferred to `_receiver` @param _swap_params Multidimensional array of [i, j, swap type, pool_type, n_coins] where i is the index of input token j is the index of output token The swap_type should be: 1. for `exchange`, 2. for `exchange_underlying`, 3. for underlying exchange via zap: factory stable metapools with lending base pool `exchange_underlying` and factory crypto-meta pools underlying exchange (`exchange` method in zap) 4. for coin -> LP token "exchange" (actually `add_liquidity`), 5. for lending pool underlying coin -> LP token "exchange" (actually `add_liquidity`), 6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`) 7. for LP token -> lending or fake pool underlying coin "exchange" (actually `remove_liquidity_one_coin`) 8. for ETH <-> WETH, ETH -> stETH or ETH -> frxETH, stETH <-> wstETH, frxETH <-> sfrxETH, ETH -> wBETH 9. for SNX swaps (sUSD, sEUR, sETH, sBTC) pool_type: 1 - stable, 2 - crypto, 3 - tricrypto, 4 - llamma n_coins is the number of coins in pool @param _amount The amount of input token (`_route[0]`) to be sent. @param _pools Array of pools for swaps via zap contracts. This parameter is needed only for swap_type = 3. @return Expected amount of the final output token. """ input_token: address = _route[0] output_token: address = empty(address) amount: uint256 = _amount for i in range(1, 6): # 5 rounds of iteration to perform up to 5 swaps swap: address = _route[i*2-1] pool: address = _pools[i-1] # Only for Polygon meta-factories underlying swap (swap_type == 4) output_token = _route[i * 2] params: uint256[5] = _swap_params[i-1] # i, j, swap_type, pool_type, n_coins # Calc output amount according to the swap type if params[2] == 1: if params[3] == 1: # stable amount = StablePool(swap).get_dy(convert(params[0], int128), convert(params[1], int128), amount) else: # crypto or llamma amount = CryptoPool(swap).get_dy(params[0], params[1], amount) elif params[2] == 2: if params[3] == 1: # stable amount = StablePool(swap).get_dy_underlying(convert(params[0], int128), convert(params[1], int128), amount) else: # crypto amount = CryptoPool(swap).get_dy_underlying(params[0], params[1], amount) elif params[2] == 3: # SWAP IS ZAP HERE !!! if params[3] == 1: # stable amount = StablePool(pool).get_dy_underlying(convert(params[0], int128), convert(params[1], int128), amount) else: # crypto amount = CryptoMetaZap(swap).get_dy(pool, params[0], params[1], amount) elif params[2] in [4, 5]: if params[3] == 1: # stable amounts: uint256[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] amounts[params[0]] = amount amount = STABLE_CALC.calc_token_amount(swap, output_token, amounts, params[4], True, True) else: # Tricrypto pools have stablepool interface for calc_token_amount if params[4] == 2: amounts: uint256[2] = [0, 0] amounts[params[0]] = amount if params[3] == 2: # crypto amount = CryptoPool2Coins(swap).calc_token_amount(amounts) else: # tricrypto amount = StablePool2Coins(swap).calc_token_amount(amounts, True) elif params[4] == 3: amounts: uint256[3] = [0, 0, 0] amounts[params[0]] = amount if params[3] == 2: # crypto amount = CryptoPool3Coins(swap).calc_token_amount(amounts) else: # tricrypto amount = StablePool3Coins(swap).calc_token_amount(amounts, True) elif params[4] == 4: amounts: uint256[4] = [0, 0, 0, 0] amounts[params[0]] = amount if params[3] == 2: # crypto amount = CryptoPool4Coins(swap).calc_token_amount(amounts) else: # tricrypto amount = StablePool4Coins(swap).calc_token_amount(amounts, True) elif params[4] == 5: amounts: uint256[5] = [0, 0, 0, 0, 0] amounts[params[0]] = amount if params[3] == 2: # crypto amount = CryptoPool5Coins(swap).calc_token_amount(amounts) else: # tricrypto amount = StablePool5Coins(swap).calc_token_amount(amounts, True) elif params[2] in [6, 7]: if params[3] == 1: # stable amount = StablePool(swap).calc_withdraw_one_coin(amount, convert(params[1], int128)) else: # crypto amount = CryptoPool(swap).calc_withdraw_one_coin(amount, params[1]) elif params[2] == 8: if input_token == WETH_ADDRESS or output_token == WETH_ADDRESS or \ (input_token == ETH_ADDRESS and output_token == STETH_ADDRESS) or \ (input_token == ETH_ADDRESS and output_token == FRXETH_ADDRESS): # ETH <--> WETH rate is 1:1 # ETH ---> stETH rate is 1:1 # ETH ---> frxETH rate is 1:1 pass elif input_token == WSTETH_ADDRESS: amount = wstETH(swap).getStETHByWstETH(amount) elif output_token == WSTETH_ADDRESS: amount = wstETH(swap).getWstETHByStETH(amount) elif input_token == SFRXETH_ADDRESS: amount = sfrxETH(swap).convertToAssets(amount) elif output_token == SFRXETH_ADDRESS: amount = sfrxETH(swap).convertToShares(amount) elif output_token == WBETH_ADDRESS: amount = amount * 10**18 / wBETH(swap).exchangeRate() else: raise "Swap type 8 is only for ETH <-> WETH, ETH -> stETH or ETH -> frxETH, stETH <-> wstETH, frxETH <-> sfrxETH, ETH -> wBETH" elif params[2] == 9: snx_exchanger: address = SynthetixAddressResolver(SNX_ADDRESS_RESOLVER).getAddress(SNX_EXCHANGER_NAME) atomic_amount_and_fee: AtomicAmountAndFee = SynthetixExchanger(snx_exchanger).getAmountsForAtomicExchange( amount, self.snx_currency_keys[input_token], self.snx_currency_keys[output_token] ) amount = atomic_amount_and_fee.amountReceived else: raise "Bad swap type" # check if this was the last swap if i == 5 or _route[i*2+1] == empty(address): break # if there is another swap, the output token becomes the input for the next round input_token = output_token return amount - 1 @view @external def get_dx( _route: address[11], _swap_params: uint256[5][5], _out_amount: uint256, _pools: address[5], _base_pools: address[5]=empty(address[5]), _base_tokens: address[5]=empty(address[5]), ) -> uint256: """ @notice Calculate the input amount required to receive the desired output amount @dev Routing and swap params must be determined off-chain. This functionality is designed for gas efficiency over ease-of-use. @param _route Array of [initial token, pool or zap, token, pool or zap, token, ...] The array is iterated until a pool address of 0x00, then the last given token is transferred to `_receiver` @param _swap_params Multidimensional array of [i, j, swap type, pool_type, n_coins] where i is the index of input token j is the index of output token The swap_type should be: 1. for `exchange`, 2. for `exchange_underlying`, 3. for underlying exchange via zap: factory stable metapools with lending base pool `exchange_underlying` and factory crypto-meta pools underlying exchange (`exchange` method in zap) 4. for coin -> LP token "exchange" (actually `add_liquidity`), 5. for lending pool underlying coin -> LP token "exchange" (actually `add_liquidity`), 6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`) 7. for LP token -> lending or fake pool underlying coin "exchange" (actually `remove_liquidity_one_coin`) 8. for ETH <-> WETH, ETH -> stETH or ETH -> frxETH, stETH <-> wstETH, frxETH <-> sfrxETH, ETH -> wBETH 9. for SNX swaps (sUSD, sEUR, sETH, sBTC) pool_type: 1 - stable, 2 - crypto, 3 - tricrypto, 4 - llamma n_coins is the number of coins in pool @param _out_amount The desired amount of output coin to receive. @param _pools Array of pools. @param _base_pools Array of base pools (for meta pools). @param _base_tokens Array of base lp tokens (for meta pools). Should be a zap address for double meta pools. @return Required amount of input token to send. """ amount: uint256 = _out_amount for _i in range(1, 6): # 5 rounds of iteration to perform up to 5 swaps i: uint256 = 6 - _i swap: address = _route[i*2-1] if swap == empty(address): continue input_token: address = _route[(i - 1) * 2] output_token: address = _route[i * 2] pool: address = _pools[i-1] base_pool: address = _base_pools[i-1] base_token: address = _base_tokens[i-1] params: uint256[5] = _swap_params[i-1] # i, j, swap_type, pool_type, n_coins n_coins: uint256 = params[4] # Calc a required input amount according to the swap type if params[2] == 1: if params[3] == 1: # stable if base_pool == empty(address): # non-meta amount = STABLE_CALC.get_dx(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins) else: amount = STABLE_CALC.get_dx_meta(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins, base_pool) elif params[3] in [2, 3]: # crypto or tricrypto amount = CRYPTO_CALC.get_dx(pool, params[0], params[1], amount, n_coins) else: # llamma amount = Llamma(pool).get_dx(params[0], params[1], amount) elif params[2] in [2, 3]: if params[3] == 1: # stable if base_pool == empty(address): # non-meta amount = STABLE_CALC.get_dx_underlying(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins) else: amount = STABLE_CALC.get_dx_meta_underlying(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins, base_pool, base_token) else: # crypto amount = CRYPTO_CALC.get_dx_meta_underlying(pool, params[0], params[1], amount, n_coins, base_pool, base_token) elif params[2] in [4, 5]: # This is not correct. Should be something like calc_add_one_coin. But tests say that it's precise enough. if params[3] == 1: # stable amount = StablePool(swap).calc_withdraw_one_coin(amount, convert(params[0], int128)) else: # crypto amount = CryptoPool(swap).calc_withdraw_one_coin(amount, params[0]) elif params[2] in [6, 7]: if params[3] == 1: # stable amounts: uint256[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] amounts[params[1]] = amount amount = STABLE_CALC.calc_token_amount(swap, input_token, amounts, n_coins, False, True) else: # Tricrypto pools have stablepool interface for calc_token_amount if n_coins == 2: amounts: uint256[2] = [0, 0] amounts[params[1]] = amount if params[3] == 2: # crypto amount = CryptoPool2Coins(swap).calc_token_amount(amounts) # This is not correct else: # tricrypto amount = StablePool2Coins(swap).calc_token_amount(amounts, False) elif n_coins == 3: amounts: uint256[3] = [0, 0, 0] amounts[params[1]] = amount if params[3] == 2: # crypto amount = CryptoPool3Coins(swap).calc_token_amount(amounts) # This is not correct else: # tricrypto amount = StablePool3Coins(swap).calc_token_amount(amounts, False) elif n_coins == 4: amounts: uint256[4] = [0, 0, 0, 0] amounts[params[1]] = amount if params[3] == 2: # crypto amount = CryptoPool4Coins(swap).calc_token_amount(amounts) # This is not correct else: # tricrypto amount = StablePool4Coins(swap).calc_token_amount(amounts, False) elif n_coins == 5: amounts: uint256[5] = [0, 0, 0, 0, 0] amounts[params[1]] = amount if params[3] == 2: # crypto amount = CryptoPool5Coins(swap).calc_token_amount(amounts) # This is not correct else: # tricrypto amount = StablePool5Coins(swap).calc_token_amount(amounts, False) elif params[2] == 8: if input_token == WETH_ADDRESS or output_token == WETH_ADDRESS or \ (input_token == ETH_ADDRESS and output_token == STETH_ADDRESS) or \ (input_token == ETH_ADDRESS and output_token == FRXETH_ADDRESS): # ETH <--> WETH rate is 1:1 # ETH ---> stETH rate is 1:1 # ETH ---> frxETH rate is 1:1 pass elif input_token == WSTETH_ADDRESS: amount = wstETH(swap).getWstETHByStETH(amount) elif output_token == WSTETH_ADDRESS: amount = wstETH(swap).getStETHByWstETH(amount) elif input_token == SFRXETH_ADDRESS: amount = sfrxETH(swap).convertToShares(amount) elif output_token == SFRXETH_ADDRESS: amount = sfrxETH(swap).convertToAssets(amount) elif output_token == WBETH_ADDRESS: amount = amount * wBETH(swap).exchangeRate() / 10**18 else: raise "Swap type 8 is only for ETH <-> WETH, ETH -> stETH or ETH -> frxETH, stETH <-> wstETH, frxETH <-> sfrxETH, ETH -> wBETH" elif params[2] == 9: snx_exchanger: address = SynthetixAddressResolver(SNX_ADDRESS_RESOLVER).getAddress(SNX_EXCHANGER_NAME) atomic_amount_and_fee: AtomicAmountAndFee = SynthetixExchanger(snx_exchanger).getAmountsForAtomicExchange( 10**18, self.snx_currency_keys[input_token], self.snx_currency_keys[output_token] ) amount = amount * 10**18 / atomic_amount_and_fee.amountReceived else: raise "Bad swap type" return amount
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"name":"Exchange","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"receiver","type":"address","indexed":true},{"name":"route","type":"address[11]","indexed":false},{"name":"swap_params","type":"uint256[5][5]","indexed":false},{"name":"pools","type":"address[5]","indexed":false},{"name":"in_amount","type":"uint256","indexed":false},{"name":"out_amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_weth","type":"address"},{"name":"_stable_calc","type":"address"},{"name":"_crypto_calc","type":"address"},{"name":"_snx_coins","type":"address[4]"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_pools","type":"address[5]"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_out_amount","type":"uint256"},{"name":"_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_out_amount","type":"uint256"},{"name":"_pools","type":"address[5]"},{"name":"_base_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_out_amount","type":"uint256"},{"name":"_pools","type":"address[5]"},{"name":"_base_pools","type":"address[5]"},{"name":"_base_tokens","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]}]
Contract Creation Code
6020613ace6000396000518060a01c613ac9576040526020613aee6000396000518060a01c613ac9576060526020613b0e6000396000518060a01c613ac9576080526020613b2e6000396000518060a01c613ac95760a0526020613b4e6000396000518060a01c613ac95760c0526020613b6e6000396000518060a01c613ac95760e0526020613b8e6000396000518060a01c613ac9576101005234613ac95760016002737f39c581f595b53c5cb19bd0b3f8da6c935e2ca0602052600052604060002080737f39c581f595b53c5cb19bd0b3f8da6c935e2ca060205260005260406000209050556001600273ac3e018457b222d93114458476f3e3416abbe38f60205260005260406000208073ac3e018457b222d93114458476f3e3416abbe38f60205260005260406000209050556040516138d2526060516138f2526080516139125260006004905b8060051b60a0015161012052600160026101205160205260005260406000208073c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f60205260005260406000209050556101205163dbd06c85610140526020610140600461015c6000855af16101b8573d600060003e3d6000fd5b60203d10613ac95761014090505160016101205160205260005260406000205560010181811861014a5750506138d26101f661000039613932610000f36003361161000c576138be565b60003560e01c63371dc4478118610037576104c436106138c05760a0366101a037336102405261011a565b635c9c18e281186100a55761056436106138c0576104c4358060a01c6138c0576101a0526104e4358060a01c6138c0576101c052610504358060a01c6138c0576101e052610524358060a01c6138c05761020052610544358060a01c6138c05761022052336102405261011a565b63c872a3c581186115e05761058436106138c0576104c4358060a01c6138c0576101a0526104e4358060a01c6138c0576101c052610504358060a01c6138c0576101e052610524358060a01c6138c05761020052610544358060a01c6138c05761022052610564358060a01c6138c057610240525b6004358060a01c6138c0576040526024358060a01c6138c0576060526044358060a01c6138c0576080526064358060a01c6138c05760a0526084358060a01c6138c05760c05260a4358060a01c6138c05760e05260c4358060a01c6138c0576101005260e4358060a01c6138c05761012052610104358060a01c6138c05761014052610124358060a01c6138c05761016052610144358060a01c6138c057610180526000546001146138c057600160005560405161026052600061028052610484356102a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610260511861020d576102a05134186138c05761028b565b346138c057610260516323b872dd6102c052336102e05230610300526102a0516103205260206102c060646102dc6000855af161024f573d600060003e3d6000fd5b3d61026657803b156138c05760016103405261027f565b60203d106138c0576102c0518060011c6138c057610340525b610340905051156138c0575b600160058101905b806102c0526102c0518060011b818160011c186138c0579050600181038181116138c0579050600a81116138c05760051b604001516102e0526102c051600181038181116138c0579050600481116138c05760051b6101a00151610300526102c0518060011b818160011c186138c0579050600a81116138c05760051b604001516102805260a06102c051600181038181116138c0579050600481116138c057026101640180356103205260208101356103405260408101356103605260608101356103805260808101356103a052506002610260516020526000526040600020806102e0516020526000526040600020905054610436576102605163095ea7b36103c0526102e0516103e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104005260206103c060446103dc6000855af16103e3573d600060003e3d6000fd5b3d6103f357600161042052610404565b6103c0518060011c6138c057610420525b610420905051156138c05760016002610260516020526000526040600020806102e05160205260005260406000209050555b60006103c05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610463576102a0516103c0525b600161036051186105da57600161038051186104e1576102e051633df021246103e0526103205180607f1c6138c057610400526103405180607f1c6138c057610420526102a05161044052600061046052803b156138c05760006103e060846103fc6103c051855af16104db573d600060003e3d6000fd5b50611266565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610506576001610522565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b61057c576102e051635b41b9086103e052610320516104005261034051610420526102a05161044052600061046052803b156138c05760006103e060846103fc6000855af1610576573d600060003e3d6000fd5b50611266565b6102e05163394747c56103e052610320516104005261034051610420526102a05161044052600061046052600161048052803b156138c05760006103e060a46103fc6103c051855af16105d4573d600060003e3d6000fd5b50611266565b600261036051186106b05760016103805118610658576102e05163a6417ed66103e0526103205180607f1c6138c057610400526103405180607f1c6138c057610420526102a05161044052600061046052803b156138c05760006103e060846103fc6103c051855af1610652573d600060003e3d6000fd5b50611266565b6102e0516365b2489b6103e052610320516104005261034051610420526102a05161044052600061046052803b156138c05760006103e060846103fc6103c051855af16106aa573d600060003e3d6000fd5b50611266565b600361036051186107e15760016103805118610734576102e051637981c43e6103e05261030051610400526103205180607f1c6138c057610420526103405180607f1c6138c057610440526102a05161046052600061048052803b156138c05760006103e060a46103fc6000855af161072e573d600060003e3d6000fd5b50611266565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610759576001610775565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b6103e0526102e051632bf78c61610400526103005161042052610320516104405261034051610460526102a0516104805260006104a0526103e0516104c052803b156138c057600061040060c461041c6103c051855af16107db573d600060003e3d6000fd5b50611266565b60046103605118610a045760026103a05118610866576040366103e0376102a05161032051600181116138c05760051b6103e001526102e051630b4c7e4d610420526103e051610440526104005161046052600061048052803b156138c0576000610420606461043c6103c051855af1610860573d600060003e3d6000fd5b50611266565b60036103a051186108e8576060366103e0376102a05161032051600281116138c05760051b6103e001526102e051634515cef3610440526103e051610460526104005161048052610420516104a05260006104c052803b156138c0576000610440608461045c6103c051855af16108e2573d600060003e3d6000fd5b50611266565b60046103a05118610972576080366103e0376102a05161032051600381116138c05760051b6103e001526102e05163029b2f34610460526103e05161048052610400516104a052610420516104c052610440516104e052600061050052803b156138c057600061046060a461047c6103c051855af161096c573d600060003e3d6000fd5b50611266565b60056103a051186112665760a0366103e0376102a05161032051600481116138c05760051b6103e001526102e0516384738499610480526103e0516104a052610400516104c052610420516104e05261044051610500526104605161052052600061054052803b156138c057600061048060c461049c6103c051855af16109fe573d600060003e3d6000fd5b50611266565b60056103605118610a8c576060366103e0376102a05161032051600281116138c05760051b6103e001526102e051632b6e993a610440526103e051610460526104005161048052610420516104a05260006104c05260016104e052803b156138c057600061044060a461045c6103c051855af1610a86573d600060003e3d6000fd5b50611266565b60066103605118610b465760016103805118610af8576102e051631a4d01d26103e0526102a051610400526103405180607f1c6138c05761042052600061044052803b156138c05760006103e060646103fc6000855af1610af2573d600060003e3d6000fd5b50611266565b6102e05163f1dc3cc96103e0526102a051610400526103405161042052600061044052803b156138c05760006103e060646103fc6000855af1610b40573d600060003e3d6000fd5b50611266565b60076103605118610bb2576102e05163517a55a36103e0526102a051610400526103405180607f1c6138c0576104205260006104405260016104605260206103e060846103fc6000855af1610ba0573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b600861036051186111595773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610bf15760206138d2600039600051610280511815610bf4565b60005b61111f5760206138d26000396000516102605118610c2c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511815610c2f565b60005b6110df5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610c715773ae7ab96520de3a18e5e111b5eaab095312d7fe84610280511815610c74565b60005b61109f5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610cb657735e8422345238f34275888049021821e8e08caa1f610280511815610cb9565b60005b6110655773ae7ab96520de3a18e5e111b5eaab095312d7fe846102605118610cfb57737f39c581f595b53c5cb19bd0b3f8da6c935e2ca0610280511815610cfe565b60005b61102057737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06102605118610d405773ae7ab96520de3a18e5e111b5eaab095312d7fe84610280511815610d43565b60005b610fdb57735e8422345238f34275888049021821e8e08caa1f6102605118610d855773ac3e018457b222d93114458476f3e3416abbe38f610280511815610d88565b60005b610f915773ac3e018457b222d93114458476f3e3416abbe38f6102605118610dca57735e8422345238f34275888049021821e8e08caa1f610280511815610dcd565b60005b610f425773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610e0f5773a2e3356610840701bdf5611a53974510ae27e2e1610280511815610e12565b60005b610eef5760776103e0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610400527f574554482c20455448202d3e207374455448206f7220455448202d3e20667278610420527f4554482c207374455448203c2d3e207773744554482c20667278455448203c2d610440527f3e20736672784554482c20455448202d3e207742455448000000000000000000610460526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd611266565b6102e05163f340fa016103e05273ecb456ea5365865ebab8a2661b0c503410e9b34761040052803b156138c05760006103e060246103fc6102a051855af1610f3c573d600060003e3d6000fd5b50611266565b6102e05163ba0876526103e0526102a051610400523061042052306104405260206103e060646103fc6000855af1610f7f573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b6102e051636e553f656103e0526102a05161040052306104205260206103e060446103fc6000855af1610fc9573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b6102e05163de0e9a3e6103e0526102a0516104005260206103e060246103fc6000855af161100e573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b6102e05163ea598cb06103e0526102a0516104005260206103e060246103fc6000855af1611053573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b6102e051635bcb2fc66103e052803b156138c05760006103e060046103fc6102a051855af1611099573d600060003e3d6000fd5b50611266565b6102e05163a1903eab6103e052600061040052803b156138c05760006103e060246103fc6102a051855af16110d9573d600060003e3d6000fd5b50611266565b6102e051632e1a7d4d6103e0526102a05161040052803b156138c05760006103e060246103fc6000855af1611119573d600060003e3d6000fd5b50611266565b6102e05163d0e30db06103e052803b156138c05760006103e060046103fc6102a051855af1611153573d600060003e3d6000fd5b50611266565b60096103605118611200576102e0516344b3e9236103e052600161026051602052600052604060002054610400526102a05161042052600161028051602052600052604060002054610440527f43555256450000000000000000000000000000000000000000000000000000006104605260006104805260206103e060a46103fc6000855af16111ee573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b600d6103e0527f4261642073776170207479706500000000000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511861128e57476102a0526112cf565b610280516370a082316103e052306104005260206103e060246103fc845afa6112bc573d600060003e3d6000fd5b60203d106138c0576103e09050516102a0525b6102a05161133d5760106103e0527f5265636569766564206e6f7468696e6700000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b60056102c0511861134f576001611381565b6102c0518060011b818160011c186138c0579050600181018181106138c0579050600a81116138c05760051b60400151155b1561138b5761139e565b6102805161026052600101818118610293575b50506102a051600181038181116138c05790506102a0526104a4356102a05110156114295760086102c0527f536c6970706167650000000000000000000000000000000000000000000000006102e0526102c0506102c051806102e001601f826000031636823750506308c379a06102805260206102a052601f19601f6102c051011660440161029cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61028051186114795760006102c0526102c050600060006102c0516102e06102a051610240515af16114f0573d600060003e3d6000fd6114f0565b6102805163a9059cbb6102c052610240516102e0526102a0516103005260206102c060446102dc6000855af16114b4573d600060003e3d6000fd5b3d6114cb57803b156138c0576001610320526114e4565b60203d106138c0576102c0518060011c6138c057610320525b610320905051156138c0575b61024051337f56d0661e240dfb199ef196e16e6f42473990366314f0226ac978f7be3cd9ee836040516102c0526060516102e0526080516103005260a0516103205260c0516103405260e051610360526101005161038052610120516103a052610140516103c052610160516103e052610180516104005260a06101646104203760a06102046104c03760a06102a46105603760a06103446106003760a06103e46106a0376101a051610740526101c051610760526101e05161078052610200516107a052610220516107c052610484356107e0526102a051610800526105606102c0a360206102a06000600055f35b6381889a2c8118611600576104a436106138c05760a0366101a037611665565b63637653cb81186125f95761054436106138c0576104a4358060a01c6138c0576101a0526104c4358060a01c6138c0576101c0526104e4358060a01c6138c0576101e052610504358060a01c6138c05761020052610524358060a01c6138c057610220525b6004358060a01c6138c0576040526024358060a01c6138c0576060526044358060a01c6138c0576080526064358060a01c6138c05760a0526084358060a01c6138c05760c05260a4358060a01c6138c05760e05260c4358060a01c6138c0576101005260e4358060a01c6138c05761012052610104358060a01c6138c05761014052610124358060a01c6138c05761016052610144358060a01c6138c05761018052346138c057604051610240526000610260526104843561028052600160058101905b806102a0526102a0518060011b818160011c186138c0579050600181038181116138c0579050600a81116138c05760051b604001516102c0526102a051600181038181116138c0579050600481116138c05760051b6101a001516102e0526102a0518060011b818160011c186138c0579050600a81116138c05760051b604001516102605260a06102a051600181038181116138c0579050600481116138c057026101640180356103005260208101356103205260408101356103405260608101356103605260808101356103805250600161034051186118cf5760016103605118611877576102c051635e0d443f6103a0526103005180607f1c6138c0576103c0526103205180607f1c6138c0576103e052610280516104005260206103a060646103bc845afa611860573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b6102c05163556d6e9f6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa6118b8573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b600261034051186119a5576001610360511861194d576102c0516307211ef76103a0526103005180607f1c6138c0576103c0526103205180607f1c6138c0576103e052610280516104005260206103a060646103bc845afa611936573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b6102c0516385f11d1e6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa61198e573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b60036103405118611a835760016103605118611a23576102e0516307211ef76103a0526103005180607f1c6138c0576103c0526103205180607f1c6138c0576103e052610280516104005260206103a060646103bc845afa611a0c573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b6102c05163e9737ee26103a0526102e0516103c052610300516103e0526103205161040052610280516104205260206103a060846103bc845afa611a6c573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b6103405160048118611a96576001611a9c565b60058118155b90506120cb576103405160068118611ab5576001611abb565b60078118155b90506120185760086103405118611e955760206138d26000396000516102405118611ae7576001611b8f565b60206138d26000396000516102605118611b02576001611b8f565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102405118611b405773ae7ab96520de3a18e5e111b5eaab095312d7fe84610260511815611b43565b60005b611b8c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102405118611b8557735e8422345238f34275888049021821e8e08caa1f610260511815611b8f565b6000611b8f565b60015b61257a57737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06102405118611bf9576102c05163bb2952fc6103a052610280516103c05260206103a060246103bc845afa611be2573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06102605118611c5f576102c05163b0e389006103a052610280516103c05260206103a060246103bc845afa611c48573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b73ac3e018457b222d93114458476f3e3416abbe38f6102405118611cc5576102c0516307a2d13a6103a052610280516103c05260206103a060246103bc845afa611cae573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b73ac3e018457b222d93114458476f3e3416abbe38f6102605118611d2b576102c05163c6e6f5926103a052610280516103c05260206103a060246103bc845afa611d14573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b73a2e3356610840701bdf5611a53974510ae27e2e16102605118611db85761028051670de0b6b3a7640000810281670de0b6b3a76400008204186138c05790506102c051633ba0b9a96103a05260206103a060046103bc845afa611d94573d600060003e3d6000fd5b60203d106138c0576103a090505180156138c057808204905090506102805261257a565b60776103a0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e206103c0527f574554482c20455448202d3e207374455448206f7220455448202d3e206672786103e0527f4554482c207374455448203c2d3e207773744554482c20667278455448203c2d610400527f3e20736672784554482c20455448202d3e207742455448000000000000000000610420526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd61257a5661257a565b60096103405118611fae576321f8a7216103c0527f45786368616e67657200000000000000000000000000000000000000000000006103e05260206103c060246103dc73823be81bbf96bec0e25ca13170f5aacb5b79ba835afa611efe573d600060003e3d6000fd5b60203d106138c0576103c0518060a01c6138c05761040052610400516103a0526103a05163dc703e7361042052610280516104405260016102405160205260005260406000205461046052600161026051602052600052604060002054610480526060610420606461043c845afa611f7b573d600060003e3d6000fd5b60603d106138c057610420905080516103c05260208101516103e052604081015161040052506103c0516102805261257a565b600d6103a0527f42616420737761702074797065000000000000000000000000000000000000006103c0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd61257a565b6001610360511861207b576102c05163cc2b27d76103c052610280516103e0526103205180607f1c6138c0576104005260206103c060446103dc845afa612064573d600060003e3d6000fd5b60203d106138c0576103c09050516102805261257a565b6102c051634fb08c5e6103c052610280516103e052610320516104005260206103c060446103dc845afa6120b4573d600060003e3d6000fd5b60203d106138c0576103c09050516102805261257a565b600161036051186121b257610140366103c0376102805161030051600981116138c05760051b6103c0015260206138f26000396000516379ccdf49610500526102c0516105205261026051610540526103c051610560526103e05161058052610400516105a052610420516105c052610440516105e052610460516106005261048051610620526104a051610640526104c051610660526104e05161068052610380516106a05260016106c05260016106e05260206105006101e461051c845afa61219b573d600060003e3d6000fd5b60203d106138c0576105009050516102805261257a565b6002610380511861228d576040366103c0376102805161030051600181116138c05760051b6103c0015260026103605118612237576102c051638d8ea727610400526103c051610420526103e051610440526020610400604461041c845afa612220573d600060003e3d6000fd5b60203d106138c0576104009050516102805261257a565b6102c05163ed8e84f3610400526103c051610420526103e051610440526001610460526020610400606461041c845afa612276573d600060003e3d6000fd5b60203d106138c0576104009050516102805261257a565b60036103805118612378576060366103c0376102805161030051600281116138c05760051b6103c001526002610360511861231a576102c051635b6f1b5a610420526103c051610440526103e0516104605261040051610480526020610420606461043c845afa612303573d600060003e3d6000fd5b60203d106138c0576104209050516102805261257a565b6102c051633883e119610420526103c051610440526103e05161046052610400516104805260016104a0526020610420608461043c845afa612361573d600060003e3d6000fd5b60203d106138c0576104209050516102805261257a565b60046103805118612473576080366103c0376102805161030051600381116138c05760051b6103c001526002610360511861240d576102c051631a805185610440526103c051610460526103e05161048052610400516104a052610420516104c0526020610440608461045c845afa6123f6573d600060003e3d6000fd5b60203d106138c0576104409050516102805261257a565b6102c05163cf701ff7610440526103c051610460526103e05161048052610400516104a052610420516104c05260016104e052602061044060a461045c845afa61245c573d600060003e3d6000fd5b60203d106138c0576104409050516102805261257a565b6005610380511861257a5760a0366103c0376102805161030051600481116138c05760051b6103c0015260026103605118612510576102c0516309379690610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052602061046060a461047c845afa6124f9573d600060003e3d6000fd5b60203d106138c0576104609050516102805261257a565b6102c051637ede89c5610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052600161052052602061046060c461047c845afa612567573d600060003e3d6000fd5b60203d106138c057610460905051610280525b60056102a0511861258c5760016125be565b6102a0518060011b818160011c186138c0579050600181018181106138c0579050600a81116138c05760051b60400151155b156125c8576125db565b6102605161024052600101818118611729575b505061028051600181038181116138c05790506102a05260206102a0f35b63c07b5353811861261a5761054436106138c057610140366102403761273f565b6381fc0ca5811861268a576105e436106138c057610544358060a01c6138c05761024052610564358060a01c6138c05761026052610584358060a01c6138c057610280526105a4358060a01c6138c0576102a0526105c4358060a01c6138c0576102c05260a0366102e03761273f565b6390e7e20581186138bc5761068436106138c057610544358060a01c6138c05761024052610564358060a01c6138c05761026052610584358060a01c6138c057610280526105a4358060a01c6138c0576102a0526105c4358060a01c6138c0576102c0526105e4358060a01c6138c0576102e052610604358060a01c6138c05761030052610624358060a01c6138c05761032052610644358060a01c6138c05761034052610664358060a01c6138c057610360525b6004358060a01c6138c0576040526024358060a01c6138c0576060526044358060a01c6138c0576080526064358060a01c6138c05760a0526084358060a01c6138c05760c05260a4358060a01c6138c05760e05260c4358060a01c6138c0576101005260e4358060a01c6138c05761012052610104358060a01c6138c05761014052610124358060a01c6138c05761016052610144358060a01c6138c057610180526104a4358060a01c6138c0576101a0526104c4358060a01c6138c0576101c0526104e4358060a01c6138c0576101e052610504358060a01c6138c05761020052610524358060a01c6138c05761022052346138c0576104843561038052600160058101905b806103a0526103a05180600603600681116138c05790506103c0526103c0518060011b818160011c186138c0579050600181038181116138c0579050600a81116138c05760051b604001516103e0526103e0516128a2576138a9565b6103c051600181038181116138c05790508060011b818160011c186138c0579050600a81116138c05760051b60400151610400526103c0518060011b818160011c186138c0579050600a81116138c05760051b60400151610420526103c051600181038181116138c0579050600481116138c05760051b6101a00151610440526103c051600181038181116138c0579050600481116138c05760051b6102400151610460526103c051600181038181116138c0579050600481116138c05760051b6102e001516104805260a06103c051600181038181116138c0579050600481116138c057026101640180356104a05260208101356104c05260408101356104e05260608101356105005260808101356105205250610520516105405260016104e05118612bc95760016105005118612ae35761046051612a5c5760206138f260003960005163158819d46105605261044051610580526104a05180607f1c6138c0576105a0526104c05180607f1c6138c0576105c052610380516105e0526105405161060052602061056060a461057c845afa612a45573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b60206138f260003960005163571f00b56105605261044051610580526104a05180607f1c6138c0576105a0526104c05180607f1c6138c0576105c052610380516105e05261054051610600526104605161062052602061056060c461057c845afa612acc573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b6105005160028118612af6576001612afc565b60038118155b9050612b5a57610440516337ed3a7a610560526104a051610580526104c0516105a052610380516105c0526020610560606461057c845afa612b43573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b602061391260003960005163ca4bc71461058052610440516105a0526104a0516105c0526104c0516105e05261038051610600526105405161062052602061058060a461059c845afa612bb2573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b6104e05160028118612bdc576001612be2565b60038118155b905061370d576104e05160048118612bfb576001612c01565b60058118155b905061365a576104e05160068118612c1a576001612c20565b60078118155b90506131a75760086104e05118612ff05760206138d26000396000516104005118612c4c576001612cf4565b60206138d26000396000516104205118612c67576001612cf4565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6104005118612ca55773ae7ab96520de3a18e5e111b5eaab095312d7fe84610420511815612ca8565b60005b612cf15773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6104005118612cea57735e8422345238f34275888049021821e8e08caa1f610420511815612cf4565b6000612cf4565b60015b6138a957737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06104005118612d5e576103e05163b0e389006105605261038051610580526020610560602461057c845afa612d47573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06104205118612dc4576103e05163bb2952fc6105605261038051610580526020610560602461057c845afa612dad573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b73ac3e018457b222d93114458476f3e3416abbe38f6104005118612e2a576103e05163c6e6f5926105605261038051610580526020610560602461057c845afa612e13573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b73ac3e018457b222d93114458476f3e3416abbe38f6104205118612e90576103e0516307a2d13a6105605261038051610580526020610560602461057c845afa612e79573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b73a2e3356610840701bdf5611a53974510ae27e2e16104205118612f1357610380516103e051633ba0b9a9610560526020610560600461057c845afa612edb573d600060003e3d6000fd5b60203d106138c0576105609050518082028115838383041417156138c05790509050670de0b6b3a764000081049050610380526138a9565b6077610560527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610580527f574554482c20455448202d3e207374455448206f7220455448202d3e206672786105a0527f4554482c207374455448203c2d3e207773744554482c20667278455448203c2d6105c0527f3e20736672784554482c20455448202d3e2077424554480000000000000000006105e05261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd6138a9566138a9565b60096104e0511861313d576321f8a721610580527f45786368616e67657200000000000000000000000000000000000000000000006105a0526020610580602461059c73823be81bbf96bec0e25ca13170f5aacb5b79ba835afa613059573d600060003e3d6000fd5b60203d106138c057610580518060a01c6138c0576105c0526105c051610560526105605163dc703e736105e052670de0b6b3a764000061060052600161040051602052600052604060002054610620526001610420516020526000526040600020546106405260606105e060646105fc845afa6130db573d600060003e3d6000fd5b60603d106138c0576105e0905080516105805260208101516105a05260408101516105c0525061038051670de0b6b3a7640000810281670de0b6b3a76400008204186138c05790506105805180156138c05780820490509050610380526138a9565b600d610560527f42616420737761702074797065000000000000000000000000000000000000006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd6138a9565b6001610500511861328e576101403661058037610380516104c051600981116138c05760051b610580015260206138f26000396000516379ccdf496106c0526103e0516106e052610400516107005261058051610720526105a051610740526105c051610760526105e05161078052610600516107a052610620516107c052610640516107e052610660516108005261068051610820526106a05161084052610540516108605260006108805260016108a05260206106c06101e46106dc845afa613277573d600060003e3d6000fd5b60203d106138c0576106c0905051610380526138a9565b600261054051186133695760403661058037610380516104c051600181116138c05760051b610580015260026105005118613313576103e051638d8ea7276105c052610580516105e0526105a0516106005260206105c060446105dc845afa6132fc573d600060003e3d6000fd5b60203d106138c0576105c0905051610380526138a9565b6103e05163ed8e84f36105c052610580516105e0526105a0516106005260006106205260206105c060646105dc845afa613352573d600060003e3d6000fd5b60203d106138c0576105c0905051610380526138a9565b600361054051186134545760603661058037610380516104c051600281116138c05760051b6105800152600261050051186133f6576103e051635b6f1b5a6105e05261058051610600526105a051610620526105c0516106405260206105e060646105fc845afa6133df573d600060003e3d6000fd5b60203d106138c0576105e0905051610380526138a9565b6103e051633883e1196105e05261058051610600526105a051610620526105c0516106405260006106605260206105e060846105fc845afa61343d573d600060003e3d6000fd5b60203d106138c0576105e0905051610380526138a9565b6004610540511861354f5760803661058037610380516104c051600381116138c05760051b6105800152600261050051186134e9576103e051631a8051856106005261058051610620526105a051610640526105c051610660526105e051610680526020610600608461061c845afa6134d2573d600060003e3d6000fd5b60203d106138c057610600905051610380526138a9565b6103e05163cf701ff76106005261058051610620526105a051610640526105c051610660526105e0516106805260006106a052602061060060a461061c845afa613538573d600060003e3d6000fd5b60203d106138c057610600905051610380526138a9565b600561054051186138a95760a03661058037610380516104c051600481116138c05760051b6105800152600261050051186135ec576103e05163093796906106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c052602061062060a461063c845afa6135d5573d600060003e3d6000fd5b60203d106138c057610620905051610380526138a9565b6103e051637ede89c56106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c05260006106e052602061062060c461063c845afa613643573d600060003e3d6000fd5b60203d106138c057610620905051610380526138a9565b600161050051186136bd576103e05163cc2b27d761058052610380516105a0526104a05180607f1c6138c0576105c0526020610580604461059c845afa6136a6573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b6103e051634fb08c5e61058052610380516105a0526104a0516105c0526020610580604461059c845afa6136f6573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b6001610500511861382e576104605161379f5760206138f2600039600051638fd3218f61058052610440516105a0526104a05180607f1c6138c0576105c0526104c05180607f1c6138c0576105e05261038051610600526105405161062052602061058060a461059c845afa613788573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b60206138f2600039600051634933a86461058052610440516105a0526104a05180607f1c6138c0576105c0526104c05180607f1c6138c0576105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa613817573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b6020613912600039600051638ca1565361058052610440516105a0526104a0516105c0526104c0516105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa613896573d600060003e3d6000fd5b60203d106138c057610580905051610380525b6001018181186128465750506020610380f35b505b005b600080fda165767970657283000307000b005b600080fd000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000ca8d0747b5573d69653c3ac22242e6341c36e4b4000000000000000000000000a72c85c258a81761433b4e8da60505fe3dd551cc00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51000000000000000000000000d71ecff9342a5ced620049e616c5035f1db986200000000000000000000000005e74c9036fb86bd7ecdcb084a0673efc32ea31cb000000000000000000000000fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6Deployed Bytecode
0x6003361161000c576138be565b60003560e01c63371dc4478118610037576104c436106138c05760a0366101a037336102405261011a565b635c9c18e281186100a55761056436106138c0576104c4358060a01c6138c0576101a0526104e4358060a01c6138c0576101c052610504358060a01c6138c0576101e052610524358060a01c6138c05761020052610544358060a01c6138c05761022052336102405261011a565b63c872a3c581186115e05761058436106138c0576104c4358060a01c6138c0576101a0526104e4358060a01c6138c0576101c052610504358060a01c6138c0576101e052610524358060a01c6138c05761020052610544358060a01c6138c05761022052610564358060a01c6138c057610240525b6004358060a01c6138c0576040526024358060a01c6138c0576060526044358060a01c6138c0576080526064358060a01c6138c05760a0526084358060a01c6138c05760c05260a4358060a01c6138c05760e05260c4358060a01c6138c0576101005260e4358060a01c6138c05761012052610104358060a01c6138c05761014052610124358060a01c6138c05761016052610144358060a01c6138c057610180526000546001146138c057600160005560405161026052600061028052610484356102a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610260511861020d576102a05134186138c05761028b565b346138c057610260516323b872dd6102c052336102e05230610300526102a0516103205260206102c060646102dc6000855af161024f573d600060003e3d6000fd5b3d61026657803b156138c05760016103405261027f565b60203d106138c0576102c0518060011c6138c057610340525b610340905051156138c0575b600160058101905b806102c0526102c0518060011b818160011c186138c0579050600181038181116138c0579050600a81116138c05760051b604001516102e0526102c051600181038181116138c0579050600481116138c05760051b6101a00151610300526102c0518060011b818160011c186138c0579050600a81116138c05760051b604001516102805260a06102c051600181038181116138c0579050600481116138c057026101640180356103205260208101356103405260408101356103605260608101356103805260808101356103a052506002610260516020526000526040600020806102e0516020526000526040600020905054610436576102605163095ea7b36103c0526102e0516103e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104005260206103c060446103dc6000855af16103e3573d600060003e3d6000fd5b3d6103f357600161042052610404565b6103c0518060011c6138c057610420525b610420905051156138c05760016002610260516020526000526040600020806102e05160205260005260406000209050555b60006103c05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610463576102a0516103c0525b600161036051186105da57600161038051186104e1576102e051633df021246103e0526103205180607f1c6138c057610400526103405180607f1c6138c057610420526102a05161044052600061046052803b156138c05760006103e060846103fc6103c051855af16104db573d600060003e3d6000fd5b50611266565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610506576001610522565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b61057c576102e051635b41b9086103e052610320516104005261034051610420526102a05161044052600061046052803b156138c05760006103e060846103fc6000855af1610576573d600060003e3d6000fd5b50611266565b6102e05163394747c56103e052610320516104005261034051610420526102a05161044052600061046052600161048052803b156138c05760006103e060a46103fc6103c051855af16105d4573d600060003e3d6000fd5b50611266565b600261036051186106b05760016103805118610658576102e05163a6417ed66103e0526103205180607f1c6138c057610400526103405180607f1c6138c057610420526102a05161044052600061046052803b156138c05760006103e060846103fc6103c051855af1610652573d600060003e3d6000fd5b50611266565b6102e0516365b2489b6103e052610320516104005261034051610420526102a05161044052600061046052803b156138c05760006103e060846103fc6103c051855af16106aa573d600060003e3d6000fd5b50611266565b600361036051186107e15760016103805118610734576102e051637981c43e6103e05261030051610400526103205180607f1c6138c057610420526103405180607f1c6138c057610440526102a05161046052600061048052803b156138c05760006103e060a46103fc6000855af161072e573d600060003e3d6000fd5b50611266565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610759576001610775565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b6103e0526102e051632bf78c61610400526103005161042052610320516104405261034051610460526102a0516104805260006104a0526103e0516104c052803b156138c057600061040060c461041c6103c051855af16107db573d600060003e3d6000fd5b50611266565b60046103605118610a045760026103a05118610866576040366103e0376102a05161032051600181116138c05760051b6103e001526102e051630b4c7e4d610420526103e051610440526104005161046052600061048052803b156138c0576000610420606461043c6103c051855af1610860573d600060003e3d6000fd5b50611266565b60036103a051186108e8576060366103e0376102a05161032051600281116138c05760051b6103e001526102e051634515cef3610440526103e051610460526104005161048052610420516104a05260006104c052803b156138c0576000610440608461045c6103c051855af16108e2573d600060003e3d6000fd5b50611266565b60046103a05118610972576080366103e0376102a05161032051600381116138c05760051b6103e001526102e05163029b2f34610460526103e05161048052610400516104a052610420516104c052610440516104e052600061050052803b156138c057600061046060a461047c6103c051855af161096c573d600060003e3d6000fd5b50611266565b60056103a051186112665760a0366103e0376102a05161032051600481116138c05760051b6103e001526102e0516384738499610480526103e0516104a052610400516104c052610420516104e05261044051610500526104605161052052600061054052803b156138c057600061048060c461049c6103c051855af16109fe573d600060003e3d6000fd5b50611266565b60056103605118610a8c576060366103e0376102a05161032051600281116138c05760051b6103e001526102e051632b6e993a610440526103e051610460526104005161048052610420516104a05260006104c05260016104e052803b156138c057600061044060a461045c6103c051855af1610a86573d600060003e3d6000fd5b50611266565b60066103605118610b465760016103805118610af8576102e051631a4d01d26103e0526102a051610400526103405180607f1c6138c05761042052600061044052803b156138c05760006103e060646103fc6000855af1610af2573d600060003e3d6000fd5b50611266565b6102e05163f1dc3cc96103e0526102a051610400526103405161042052600061044052803b156138c05760006103e060646103fc6000855af1610b40573d600060003e3d6000fd5b50611266565b60076103605118610bb2576102e05163517a55a36103e0526102a051610400526103405180607f1c6138c0576104205260006104405260016104605260206103e060846103fc6000855af1610ba0573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b600861036051186111595773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610bf15760206138d2600039600051610280511815610bf4565b60005b61111f5760206138d26000396000516102605118610c2c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511815610c2f565b60005b6110df5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610c715773ae7ab96520de3a18e5e111b5eaab095312d7fe84610280511815610c74565b60005b61109f5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610cb657735e8422345238f34275888049021821e8e08caa1f610280511815610cb9565b60005b6110655773ae7ab96520de3a18e5e111b5eaab095312d7fe846102605118610cfb57737f39c581f595b53c5cb19bd0b3f8da6c935e2ca0610280511815610cfe565b60005b61102057737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06102605118610d405773ae7ab96520de3a18e5e111b5eaab095312d7fe84610280511815610d43565b60005b610fdb57735e8422345238f34275888049021821e8e08caa1f6102605118610d855773ac3e018457b222d93114458476f3e3416abbe38f610280511815610d88565b60005b610f915773ac3e018457b222d93114458476f3e3416abbe38f6102605118610dca57735e8422345238f34275888049021821e8e08caa1f610280511815610dcd565b60005b610f425773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610e0f5773a2e3356610840701bdf5611a53974510ae27e2e1610280511815610e12565b60005b610eef5760776103e0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610400527f574554482c20455448202d3e207374455448206f7220455448202d3e20667278610420527f4554482c207374455448203c2d3e207773744554482c20667278455448203c2d610440527f3e20736672784554482c20455448202d3e207742455448000000000000000000610460526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd611266565b6102e05163f340fa016103e05273ecb456ea5365865ebab8a2661b0c503410e9b34761040052803b156138c05760006103e060246103fc6102a051855af1610f3c573d600060003e3d6000fd5b50611266565b6102e05163ba0876526103e0526102a051610400523061042052306104405260206103e060646103fc6000855af1610f7f573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b6102e051636e553f656103e0526102a05161040052306104205260206103e060446103fc6000855af1610fc9573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b6102e05163de0e9a3e6103e0526102a0516104005260206103e060246103fc6000855af161100e573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b6102e05163ea598cb06103e0526102a0516104005260206103e060246103fc6000855af1611053573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b6102e051635bcb2fc66103e052803b156138c05760006103e060046103fc6102a051855af1611099573d600060003e3d6000fd5b50611266565b6102e05163a1903eab6103e052600061040052803b156138c05760006103e060246103fc6102a051855af16110d9573d600060003e3d6000fd5b50611266565b6102e051632e1a7d4d6103e0526102a05161040052803b156138c05760006103e060246103fc6000855af1611119573d600060003e3d6000fd5b50611266565b6102e05163d0e30db06103e052803b156138c05760006103e060046103fc6102a051855af1611153573d600060003e3d6000fd5b50611266565b60096103605118611200576102e0516344b3e9236103e052600161026051602052600052604060002054610400526102a05161042052600161028051602052600052604060002054610440527f43555256450000000000000000000000000000000000000000000000000000006104605260006104805260206103e060a46103fc6000855af16111ee573d600060003e3d6000fd5b60203d106138c0576103e05050611266565b600d6103e0527f4261642073776170207479706500000000000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511861128e57476102a0526112cf565b610280516370a082316103e052306104005260206103e060246103fc845afa6112bc573d600060003e3d6000fd5b60203d106138c0576103e09050516102a0525b6102a05161133d5760106103e0527f5265636569766564206e6f7468696e6700000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b60056102c0511861134f576001611381565b6102c0518060011b818160011c186138c0579050600181018181106138c0579050600a81116138c05760051b60400151155b1561138b5761139e565b6102805161026052600101818118610293575b50506102a051600181038181116138c05790506102a0526104a4356102a05110156114295760086102c0527f536c6970706167650000000000000000000000000000000000000000000000006102e0526102c0506102c051806102e001601f826000031636823750506308c379a06102805260206102a052601f19601f6102c051011660440161029cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61028051186114795760006102c0526102c050600060006102c0516102e06102a051610240515af16114f0573d600060003e3d6000fd6114f0565b6102805163a9059cbb6102c052610240516102e0526102a0516103005260206102c060446102dc6000855af16114b4573d600060003e3d6000fd5b3d6114cb57803b156138c0576001610320526114e4565b60203d106138c0576102c0518060011c6138c057610320525b610320905051156138c0575b61024051337f56d0661e240dfb199ef196e16e6f42473990366314f0226ac978f7be3cd9ee836040516102c0526060516102e0526080516103005260a0516103205260c0516103405260e051610360526101005161038052610120516103a052610140516103c052610160516103e052610180516104005260a06101646104203760a06102046104c03760a06102a46105603760a06103446106003760a06103e46106a0376101a051610740526101c051610760526101e05161078052610200516107a052610220516107c052610484356107e0526102a051610800526105606102c0a360206102a06000600055f35b6381889a2c8118611600576104a436106138c05760a0366101a037611665565b63637653cb81186125f95761054436106138c0576104a4358060a01c6138c0576101a0526104c4358060a01c6138c0576101c0526104e4358060a01c6138c0576101e052610504358060a01c6138c05761020052610524358060a01c6138c057610220525b6004358060a01c6138c0576040526024358060a01c6138c0576060526044358060a01c6138c0576080526064358060a01c6138c05760a0526084358060a01c6138c05760c05260a4358060a01c6138c05760e05260c4358060a01c6138c0576101005260e4358060a01c6138c05761012052610104358060a01c6138c05761014052610124358060a01c6138c05761016052610144358060a01c6138c05761018052346138c057604051610240526000610260526104843561028052600160058101905b806102a0526102a0518060011b818160011c186138c0579050600181038181116138c0579050600a81116138c05760051b604001516102c0526102a051600181038181116138c0579050600481116138c05760051b6101a001516102e0526102a0518060011b818160011c186138c0579050600a81116138c05760051b604001516102605260a06102a051600181038181116138c0579050600481116138c057026101640180356103005260208101356103205260408101356103405260608101356103605260808101356103805250600161034051186118cf5760016103605118611877576102c051635e0d443f6103a0526103005180607f1c6138c0576103c0526103205180607f1c6138c0576103e052610280516104005260206103a060646103bc845afa611860573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b6102c05163556d6e9f6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa6118b8573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b600261034051186119a5576001610360511861194d576102c0516307211ef76103a0526103005180607f1c6138c0576103c0526103205180607f1c6138c0576103e052610280516104005260206103a060646103bc845afa611936573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b6102c0516385f11d1e6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa61198e573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b60036103405118611a835760016103605118611a23576102e0516307211ef76103a0526103005180607f1c6138c0576103c0526103205180607f1c6138c0576103e052610280516104005260206103a060646103bc845afa611a0c573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b6102c05163e9737ee26103a0526102e0516103c052610300516103e0526103205161040052610280516104205260206103a060846103bc845afa611a6c573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b6103405160048118611a96576001611a9c565b60058118155b90506120cb576103405160068118611ab5576001611abb565b60078118155b90506120185760086103405118611e955760206138d26000396000516102405118611ae7576001611b8f565b60206138d26000396000516102605118611b02576001611b8f565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102405118611b405773ae7ab96520de3a18e5e111b5eaab095312d7fe84610260511815611b43565b60005b611b8c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102405118611b8557735e8422345238f34275888049021821e8e08caa1f610260511815611b8f565b6000611b8f565b60015b61257a57737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06102405118611bf9576102c05163bb2952fc6103a052610280516103c05260206103a060246103bc845afa611be2573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06102605118611c5f576102c05163b0e389006103a052610280516103c05260206103a060246103bc845afa611c48573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b73ac3e018457b222d93114458476f3e3416abbe38f6102405118611cc5576102c0516307a2d13a6103a052610280516103c05260206103a060246103bc845afa611cae573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b73ac3e018457b222d93114458476f3e3416abbe38f6102605118611d2b576102c05163c6e6f5926103a052610280516103c05260206103a060246103bc845afa611d14573d600060003e3d6000fd5b60203d106138c0576103a09050516102805261257a565b73a2e3356610840701bdf5611a53974510ae27e2e16102605118611db85761028051670de0b6b3a7640000810281670de0b6b3a76400008204186138c05790506102c051633ba0b9a96103a05260206103a060046103bc845afa611d94573d600060003e3d6000fd5b60203d106138c0576103a090505180156138c057808204905090506102805261257a565b60776103a0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e206103c0527f574554482c20455448202d3e207374455448206f7220455448202d3e206672786103e0527f4554482c207374455448203c2d3e207773744554482c20667278455448203c2d610400527f3e20736672784554482c20455448202d3e207742455448000000000000000000610420526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd61257a5661257a565b60096103405118611fae576321f8a7216103c0527f45786368616e67657200000000000000000000000000000000000000000000006103e05260206103c060246103dc73823be81bbf96bec0e25ca13170f5aacb5b79ba835afa611efe573d600060003e3d6000fd5b60203d106138c0576103c0518060a01c6138c05761040052610400516103a0526103a05163dc703e7361042052610280516104405260016102405160205260005260406000205461046052600161026051602052600052604060002054610480526060610420606461043c845afa611f7b573d600060003e3d6000fd5b60603d106138c057610420905080516103c05260208101516103e052604081015161040052506103c0516102805261257a565b600d6103a0527f42616420737761702074797065000000000000000000000000000000000000006103c0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd61257a565b6001610360511861207b576102c05163cc2b27d76103c052610280516103e0526103205180607f1c6138c0576104005260206103c060446103dc845afa612064573d600060003e3d6000fd5b60203d106138c0576103c09050516102805261257a565b6102c051634fb08c5e6103c052610280516103e052610320516104005260206103c060446103dc845afa6120b4573d600060003e3d6000fd5b60203d106138c0576103c09050516102805261257a565b600161036051186121b257610140366103c0376102805161030051600981116138c05760051b6103c0015260206138f26000396000516379ccdf49610500526102c0516105205261026051610540526103c051610560526103e05161058052610400516105a052610420516105c052610440516105e052610460516106005261048051610620526104a051610640526104c051610660526104e05161068052610380516106a05260016106c05260016106e05260206105006101e461051c845afa61219b573d600060003e3d6000fd5b60203d106138c0576105009050516102805261257a565b6002610380511861228d576040366103c0376102805161030051600181116138c05760051b6103c0015260026103605118612237576102c051638d8ea727610400526103c051610420526103e051610440526020610400604461041c845afa612220573d600060003e3d6000fd5b60203d106138c0576104009050516102805261257a565b6102c05163ed8e84f3610400526103c051610420526103e051610440526001610460526020610400606461041c845afa612276573d600060003e3d6000fd5b60203d106138c0576104009050516102805261257a565b60036103805118612378576060366103c0376102805161030051600281116138c05760051b6103c001526002610360511861231a576102c051635b6f1b5a610420526103c051610440526103e0516104605261040051610480526020610420606461043c845afa612303573d600060003e3d6000fd5b60203d106138c0576104209050516102805261257a565b6102c051633883e119610420526103c051610440526103e05161046052610400516104805260016104a0526020610420608461043c845afa612361573d600060003e3d6000fd5b60203d106138c0576104209050516102805261257a565b60046103805118612473576080366103c0376102805161030051600381116138c05760051b6103c001526002610360511861240d576102c051631a805185610440526103c051610460526103e05161048052610400516104a052610420516104c0526020610440608461045c845afa6123f6573d600060003e3d6000fd5b60203d106138c0576104409050516102805261257a565b6102c05163cf701ff7610440526103c051610460526103e05161048052610400516104a052610420516104c05260016104e052602061044060a461045c845afa61245c573d600060003e3d6000fd5b60203d106138c0576104409050516102805261257a565b6005610380511861257a5760a0366103c0376102805161030051600481116138c05760051b6103c0015260026103605118612510576102c0516309379690610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052602061046060a461047c845afa6124f9573d600060003e3d6000fd5b60203d106138c0576104609050516102805261257a565b6102c051637ede89c5610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052600161052052602061046060c461047c845afa612567573d600060003e3d6000fd5b60203d106138c057610460905051610280525b60056102a0511861258c5760016125be565b6102a0518060011b818160011c186138c0579050600181018181106138c0579050600a81116138c05760051b60400151155b156125c8576125db565b6102605161024052600101818118611729575b505061028051600181038181116138c05790506102a05260206102a0f35b63c07b5353811861261a5761054436106138c057610140366102403761273f565b6381fc0ca5811861268a576105e436106138c057610544358060a01c6138c05761024052610564358060a01c6138c05761026052610584358060a01c6138c057610280526105a4358060a01c6138c0576102a0526105c4358060a01c6138c0576102c05260a0366102e03761273f565b6390e7e20581186138bc5761068436106138c057610544358060a01c6138c05761024052610564358060a01c6138c05761026052610584358060a01c6138c057610280526105a4358060a01c6138c0576102a0526105c4358060a01c6138c0576102c0526105e4358060a01c6138c0576102e052610604358060a01c6138c05761030052610624358060a01c6138c05761032052610644358060a01c6138c05761034052610664358060a01c6138c057610360525b6004358060a01c6138c0576040526024358060a01c6138c0576060526044358060a01c6138c0576080526064358060a01c6138c05760a0526084358060a01c6138c05760c05260a4358060a01c6138c05760e05260c4358060a01c6138c0576101005260e4358060a01c6138c05761012052610104358060a01c6138c05761014052610124358060a01c6138c05761016052610144358060a01c6138c057610180526104a4358060a01c6138c0576101a0526104c4358060a01c6138c0576101c0526104e4358060a01c6138c0576101e052610504358060a01c6138c05761020052610524358060a01c6138c05761022052346138c0576104843561038052600160058101905b806103a0526103a05180600603600681116138c05790506103c0526103c0518060011b818160011c186138c0579050600181038181116138c0579050600a81116138c05760051b604001516103e0526103e0516128a2576138a9565b6103c051600181038181116138c05790508060011b818160011c186138c0579050600a81116138c05760051b60400151610400526103c0518060011b818160011c186138c0579050600a81116138c05760051b60400151610420526103c051600181038181116138c0579050600481116138c05760051b6101a00151610440526103c051600181038181116138c0579050600481116138c05760051b6102400151610460526103c051600181038181116138c0579050600481116138c05760051b6102e001516104805260a06103c051600181038181116138c0579050600481116138c057026101640180356104a05260208101356104c05260408101356104e05260608101356105005260808101356105205250610520516105405260016104e05118612bc95760016105005118612ae35761046051612a5c5760206138f260003960005163158819d46105605261044051610580526104a05180607f1c6138c0576105a0526104c05180607f1c6138c0576105c052610380516105e0526105405161060052602061056060a461057c845afa612a45573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b60206138f260003960005163571f00b56105605261044051610580526104a05180607f1c6138c0576105a0526104c05180607f1c6138c0576105c052610380516105e05261054051610600526104605161062052602061056060c461057c845afa612acc573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b6105005160028118612af6576001612afc565b60038118155b9050612b5a57610440516337ed3a7a610560526104a051610580526104c0516105a052610380516105c0526020610560606461057c845afa612b43573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b602061391260003960005163ca4bc71461058052610440516105a0526104a0516105c0526104c0516105e05261038051610600526105405161062052602061058060a461059c845afa612bb2573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b6104e05160028118612bdc576001612be2565b60038118155b905061370d576104e05160048118612bfb576001612c01565b60058118155b905061365a576104e05160068118612c1a576001612c20565b60078118155b90506131a75760086104e05118612ff05760206138d26000396000516104005118612c4c576001612cf4565b60206138d26000396000516104205118612c67576001612cf4565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6104005118612ca55773ae7ab96520de3a18e5e111b5eaab095312d7fe84610420511815612ca8565b60005b612cf15773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6104005118612cea57735e8422345238f34275888049021821e8e08caa1f610420511815612cf4565b6000612cf4565b60015b6138a957737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06104005118612d5e576103e05163b0e389006105605261038051610580526020610560602461057c845afa612d47573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06104205118612dc4576103e05163bb2952fc6105605261038051610580526020610560602461057c845afa612dad573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b73ac3e018457b222d93114458476f3e3416abbe38f6104005118612e2a576103e05163c6e6f5926105605261038051610580526020610560602461057c845afa612e13573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b73ac3e018457b222d93114458476f3e3416abbe38f6104205118612e90576103e0516307a2d13a6105605261038051610580526020610560602461057c845afa612e79573d600060003e3d6000fd5b60203d106138c057610560905051610380526138a9565b73a2e3356610840701bdf5611a53974510ae27e2e16104205118612f1357610380516103e051633ba0b9a9610560526020610560600461057c845afa612edb573d600060003e3d6000fd5b60203d106138c0576105609050518082028115838383041417156138c05790509050670de0b6b3a764000081049050610380526138a9565b6077610560527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610580527f574554482c20455448202d3e207374455448206f7220455448202d3e206672786105a0527f4554482c207374455448203c2d3e207773744554482c20667278455448203c2d6105c0527f3e20736672784554482c20455448202d3e2077424554480000000000000000006105e05261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd6138a9566138a9565b60096104e0511861313d576321f8a721610580527f45786368616e67657200000000000000000000000000000000000000000000006105a0526020610580602461059c73823be81bbf96bec0e25ca13170f5aacb5b79ba835afa613059573d600060003e3d6000fd5b60203d106138c057610580518060a01c6138c0576105c0526105c051610560526105605163dc703e736105e052670de0b6b3a764000061060052600161040051602052600052604060002054610620526001610420516020526000526040600020546106405260606105e060646105fc845afa6130db573d600060003e3d6000fd5b60603d106138c0576105e0905080516105805260208101516105a05260408101516105c0525061038051670de0b6b3a7640000810281670de0b6b3a76400008204186138c05790506105805180156138c05780820490509050610380526138a9565b600d610560527f42616420737761702074797065000000000000000000000000000000000000006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd6138a9565b6001610500511861328e576101403661058037610380516104c051600981116138c05760051b610580015260206138f26000396000516379ccdf496106c0526103e0516106e052610400516107005261058051610720526105a051610740526105c051610760526105e05161078052610600516107a052610620516107c052610640516107e052610660516108005261068051610820526106a05161084052610540516108605260006108805260016108a05260206106c06101e46106dc845afa613277573d600060003e3d6000fd5b60203d106138c0576106c0905051610380526138a9565b600261054051186133695760403661058037610380516104c051600181116138c05760051b610580015260026105005118613313576103e051638d8ea7276105c052610580516105e0526105a0516106005260206105c060446105dc845afa6132fc573d600060003e3d6000fd5b60203d106138c0576105c0905051610380526138a9565b6103e05163ed8e84f36105c052610580516105e0526105a0516106005260006106205260206105c060646105dc845afa613352573d600060003e3d6000fd5b60203d106138c0576105c0905051610380526138a9565b600361054051186134545760603661058037610380516104c051600281116138c05760051b6105800152600261050051186133f6576103e051635b6f1b5a6105e05261058051610600526105a051610620526105c0516106405260206105e060646105fc845afa6133df573d600060003e3d6000fd5b60203d106138c0576105e0905051610380526138a9565b6103e051633883e1196105e05261058051610600526105a051610620526105c0516106405260006106605260206105e060846105fc845afa61343d573d600060003e3d6000fd5b60203d106138c0576105e0905051610380526138a9565b6004610540511861354f5760803661058037610380516104c051600381116138c05760051b6105800152600261050051186134e9576103e051631a8051856106005261058051610620526105a051610640526105c051610660526105e051610680526020610600608461061c845afa6134d2573d600060003e3d6000fd5b60203d106138c057610600905051610380526138a9565b6103e05163cf701ff76106005261058051610620526105a051610640526105c051610660526105e0516106805260006106a052602061060060a461061c845afa613538573d600060003e3d6000fd5b60203d106138c057610600905051610380526138a9565b600561054051186138a95760a03661058037610380516104c051600481116138c05760051b6105800152600261050051186135ec576103e05163093796906106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c052602061062060a461063c845afa6135d5573d600060003e3d6000fd5b60203d106138c057610620905051610380526138a9565b6103e051637ede89c56106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c05260006106e052602061062060c461063c845afa613643573d600060003e3d6000fd5b60203d106138c057610620905051610380526138a9565b600161050051186136bd576103e05163cc2b27d761058052610380516105a0526104a05180607f1c6138c0576105c0526020610580604461059c845afa6136a6573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b6103e051634fb08c5e61058052610380516105a0526104a0516105c0526020610580604461059c845afa6136f6573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b6001610500511861382e576104605161379f5760206138f2600039600051638fd3218f61058052610440516105a0526104a05180607f1c6138c0576105c0526104c05180607f1c6138c0576105e05261038051610600526105405161062052602061058060a461059c845afa613788573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b60206138f2600039600051634933a86461058052610440516105a0526104a05180607f1c6138c0576105c0526104c05180607f1c6138c0576105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa613817573d600060003e3d6000fd5b60203d106138c057610580905051610380526138a9565b6020613912600039600051638ca1565361058052610440516105a0526104a0516105c0526104c0516105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa613896573d600060003e3d6000fd5b60203d106138c057610580905051610380525b6001018181186128465750506020610380f35b505b005b600080fda165767970657283000307000b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000ca8d0747b5573d69653c3ac22242e6341c36e4b4000000000000000000000000a72c85c258a81761433b4e8da60505fe3dd551cc
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000ca8d0747b5573d69653c3ac22242e6341c36e4b4000000000000000000000000a72c85c258a81761433b4e8da60505fe3dd551cc00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51000000000000000000000000d71ecff9342a5ced620049e616c5035f1db986200000000000000000000000005e74c9036fb86bd7ecdcb084a0673efc32ea31cb000000000000000000000000fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _stable_calc (address): 0xCA8d0747B5573D69653C3aC22242e6341C36e4b4
Arg [2] : _crypto_calc (address): 0xA72C85C258A81761433B4e8da60505Fe3Dd551CC
Arg [3] : _snx_coins (address[4]): 0x57Ab1ec28D129707052df4dF418D58a2D46d5f51,0xD71eCFF9342A5Ced620049e616c5035F1dB98620,0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb,0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 000000000000000000000000ca8d0747b5573d69653c3ac22242e6341c36e4b4
Arg [2] : 000000000000000000000000a72c85c258a81761433b4e8da60505fe3dd551cc
Arg [3] : 00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51
Arg [4] : 000000000000000000000000d71ecff9342a5ced620049e616c5035f1db98620
Arg [5] : 0000000000000000000000005e74c9036fb86bd7ecdcb084a0673efc32ea31cb
Arg [6] : 000000000000000000000000fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingMultichain Portfolio | 26 Chains
Chain Token Portfolio % Price Amount Value OP 33.24% $3,367.06 0.000000000000000001 <$0.000001 ARB 33.24% $3,367 0.000000000000000001 <$0.000001 ETH Ether (ETH)33.24% $3,366.98 0.000000000000000001 <$0.000001 AVAX 0.26% $26.01 0.000000000000000001 <$0.000001 FTM <0.01% $0.568451 0.000000000000000001 <$0.000001 MATIC <0.01% $0.553272 0.000000000000000001 <$0.000001 Loading...Loading[ Download: CSV Export ][ 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.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Before You Copy
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.