Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 870 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20566887 | 14 days ago | IN | 0 ETH | 0.00060809 | ||||
Withdraw | 20436620 | 32 days ago | IN | 0 ETH | 0.00193012 | ||||
Withdraw | 20431058 | 33 days ago | IN | 0 ETH | 0.00196476 | ||||
Withdraw | 20337573 | 46 days ago | IN | 0 ETH | 0.00161324 | ||||
Withdraw | 20150154 | 72 days ago | IN | 0 ETH | 0.00040329 | ||||
Withdraw | 20150127 | 72 days ago | IN | 0 ETH | 0.00040976 | ||||
Withdraw | 19852959 | 113 days ago | IN | 0 ETH | 0.00089498 | ||||
Withdraw | 19852929 | 113 days ago | IN | 0 ETH | 0.00089498 | ||||
Withdraw | 19828969 | 117 days ago | IN | 0 ETH | 0.00082763 | ||||
Withdraw | 19792719 | 122 days ago | IN | 0 ETH | 0.00100412 | ||||
Withdraw | 19785047 | 123 days ago | IN | 0 ETH | 0.00140832 | ||||
Withdraw | 19769965 | 125 days ago | IN | 0 ETH | 0.00283774 | ||||
Withdraw | 19769822 | 125 days ago | IN | 0 ETH | 0.00304457 | ||||
Withdraw | 19656513 | 141 days ago | IN | 0 ETH | 0.0019576 | ||||
Withdraw | 19352386 | 184 days ago | IN | 0 ETH | 0.00731311 | ||||
Withdraw | 19236448 | 200 days ago | IN | 0 ETH | 0.00622559 | ||||
Withdraw | 19205781 | 204 days ago | IN | 0 ETH | 0.00521683 | ||||
Withdraw | 19205741 | 204 days ago | IN | 0 ETH | 0.00584369 | ||||
Withdraw | 19148639 | 212 days ago | IN | 0 ETH | 0.00524313 | ||||
Withdraw | 19148632 | 212 days ago | IN | 0 ETH | 0.00556715 | ||||
Withdraw | 19073448 | 223 days ago | IN | 0 ETH | 0.00215667 | ||||
Withdraw | 18996827 | 233 days ago | IN | 0 ETH | 0.00368288 | ||||
Withdraw | 18985709 | 235 days ago | IN | 0 ETH | 0.00668567 | ||||
Withdraw | 18911818 | 245 days ago | IN | 0 ETH | 0.0023939 | ||||
Withdraw | 18911793 | 245 days ago | IN | 0 ETH | 0.00234014 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20566887 | 14 days ago | 0.00541 ETH | ||||
20566887 | 14 days ago | 0.00541 ETH | ||||
20436620 | 32 days ago | 0.108505 ETH | ||||
20436620 | 32 days ago | 0.108505 ETH | ||||
20431058 | 33 days ago | 0.108505 ETH | ||||
20431058 | 33 days ago | 0.108505 ETH | ||||
20337573 | 46 days ago | 0.10115 ETH | ||||
20337573 | 46 days ago | 0.10115 ETH | ||||
20150154 | 72 days ago | 0.002184 ETH | ||||
20150154 | 72 days ago | 0.002184 ETH | ||||
20150127 | 72 days ago | 0.001091 ETH | ||||
20150127 | 72 days ago | 0.001091 ETH | ||||
19852959 | 113 days ago | 0.00537016 ETH | ||||
19852959 | 113 days ago | 0.00537016 ETH | ||||
19852929 | 113 days ago | 0.0036065 ETH | ||||
19852929 | 113 days ago | 0.0036065 ETH | ||||
19828969 | 117 days ago | 0.00532301 ETH | ||||
19828969 | 117 days ago | 0.00532301 ETH | ||||
19792719 | 122 days ago | 0.00159242 ETH | ||||
19792719 | 122 days ago | 0.00159242 ETH | ||||
19785047 | 123 days ago | 0.01068415 ETH | ||||
19785047 | 123 days ago | 0.01068415 ETH | ||||
19769965 | 125 days ago | 0.02782198 ETH | ||||
19769965 | 125 days ago | 0.02782198 ETH | ||||
19769822 | 125 days ago | 0.05350381 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.2.12
Contract Source Code (Vyper language format)
# @version 0.2.12 """ @title Unagii EthVault V2 0.1.1 @author stakewith.us @license AGPL-3.0-or-later """ from vyper.interfaces import ERC20 interface UnagiiToken: def minter() -> address: view def token() -> address: view def decimals() -> uint256: view def totalSupply() -> uint256: view def balanceOf(owner: address) -> uint256: view def mint(receiver: address, amount: uint256): nonpayable def burn(spender: address, amount: uint256): nonpayable def lastBlock(owner: address) -> uint256: view # used for migrating to new Vault contract interface Vault: def oldVault() -> address: view def token() -> address: view def uToken() -> address: view def fundManager() -> address: view def initialize(): payable def balanceOfVault() -> uint256: view def debt() -> uint256: view def lockedProfit() -> uint256: view def lastReport() -> uint256: view interface FundManager: def vault() -> address: view def token() -> address: view # returns loss = debt - total assets in fund manager def withdraw(amount: uint256) -> uint256: nonpayable event Migrate: vault: address balanceOfVault: uint256 debt: uint256 lockedProfit: uint256 event SetNextTimeLock: nextTimeLock: address event AcceptTimeLock: timeLock: address event SetGuardian: guardian: address event SetAdmin: admin: address event SetFundManager: fundManager: address event SetPause: paused: bool event SetWhitelist: addr: indexed(address) approved: bool event ReceiveEth: sender: indexed(address) amount: uint256 event Deposit: sender: indexed(address) amount: uint256 shares: uint256 event Withdraw: owner: indexed(address) shares: uint256 amount: uint256 event Borrow: fundManager: indexed(address) amount: uint256 borrowed: uint256 event Repay: fundManager: indexed(address) amount: uint256 repaid: uint256 event Report: fundManager: indexed(address) balanceOfVault: uint256 debt: uint256 gain: uint256 loss: uint256 diff: uint256 lockedProfit: uint256 event ForceUpdateBalanceOfVault: balanceOfVault: uint256 initialized: public(bool) paused: public(bool) ETH: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE uToken: public(UnagiiToken) fundManager: public(FundManager) # privileges: time lock >= admin >= guardian timeLock: public(address) nextTimeLock: public(address) guardian: public(address) admin: public(address) depositLimit: public(uint256) # ETH balance of vault tracked internally to protect against share dilution # from sending ETH directly to this contract balanceOfVault: public(uint256) debt: public(uint256) # debt to users (amount borrowed by fund manager) # minimum amount of ETH to be kept in this vault for cheap withdraw minReserve: public(uint256) MAX_MIN_RESERVE: constant(uint256) = 10000 # timestamp of last report lastReport: public(uint256) # profit locked from report, released over time at a rate set by lockedProfitDegradation lockedProfit: public(uint256) MAX_DEGRADATION: constant(uint256) = 10 ** 18 # rate at which locked profit is released # 0 = forever, MAX_DEGREDATION = 100% of profit is released 1 block after report lockedProfitDegradation: public(uint256) # minimum number of block to wait before deposit / withdraw # used to protect agains flash attacks blockDelay: public(uint256) # whitelisted address can bypass block delay check whitelist: public(HashMap[address, bool]) # address of old Vault contract, used for migration oldVault: public(Vault) @external def __init__(uToken: address, guardian: address, oldVault: address): self.timeLock = msg.sender self.admin = msg.sender self.guardian = guardian self.uToken = UnagiiToken(uToken) assert self.uToken.token() == ETH, "uToken token != ETH" self.paused = True self.blockDelay = 1 self.minReserve = 500 # 5% of free funds # 6 hours self.lockedProfitDegradation = convert(MAX_DEGRADATION / 21600, uint256) if oldVault != ZERO_ADDRESS: self.oldVault = Vault(oldVault) assert self.oldVault.token() == ETH, "old vault token != ETH" assert self.oldVault.uToken() == uToken, "old vault uToken != uToken" @external @payable def __default__(): """ @dev Prevent users from accidentally sending ETH to this vault """ assert msg.sender == self.fundManager.address, "!fund manager" log ReceiveEth(msg.sender, msg.value) @external @view def token() -> address: return ETH @internal def _sendEth(to: address, amount: uint256): assert to != ZERO_ADDRESS, "to = 0 address" raw_call(to, b"", value=amount) @internal def _safeTransfer(token: address, receiver: address, amount: uint256): res: Bytes[32] = raw_call( token, concat( method_id("transfer(address,uint256)"), convert(receiver, bytes32), convert(amount, bytes32), ), max_outsize=32, ) if len(res) > 0: assert convert(res, bool), "transfer failed" @external @payable def initialize(): """ @notice Initialize vault. Transfer ETH and copy states if old vault is set. """ assert not self.initialized, "initialized" if self.oldVault.address == ZERO_ADDRESS: assert msg.sender in [self.timeLock, self.admin], "!auth" self.lastReport = block.timestamp else: assert msg.sender == self.oldVault.address, "!old vault" assert self.uToken.minter() == self, "minter != self" assert ( self.fundManager.address == self.oldVault.fundManager() ), "fund manager != old vault fund manager" if self.fundManager.address != ZERO_ADDRESS: assert self.fundManager.vault() == self, "fund manager vault != self" # check ETH sent from old vault >= old balanceOfVault balOfVault: uint256 = self.oldVault.balanceOfVault() assert msg.value >= balOfVault, "value < vault" self.balanceOfVault = min(balOfVault, msg.value) self.debt = self.oldVault.debt() self.lockedProfit = self.oldVault.lockedProfit() self.lastReport = self.oldVault.lastReport() self.initialized = True # Migration steps from this vault to new vault # # ut = unagi token # v1 = vault 1 # v2 = vault 2 # f = fund manager # # action | caller # ---------------------------------------- # 1. v2.setPause(true) | admin # 2. v1.setPause(true) | admin # 3. ut.setMinter(v2) | time lock # 4. f.setVault(v2) | time lock # 5. v2.setFundManager(f) | time lock # 6. transfer ETH | v1 # 7. v2 copy states from v1 | v2 # - balanceOfVault | # - debt | # - locked profit | # - last report | # 8. v1 set state = 0 | v1 # - balanceOfVault | # - debt | # - locked profit | @external def migrate(vault: address): """ @notice Migrate to new vault @param vault Address of new vault """ assert msg.sender == self.timeLock, "!time lock" assert self.initialized, "!initialized" assert self.paused, "!paused" assert Vault(vault).token() == ETH, "new vault token != ETH" assert Vault(vault).uToken() == self.uToken.address, "new vault uToken != uToken" # minter is set to new vault assert self.uToken.minter() == vault, "minter != new vault" # new vault's fund manager is set to current fund manager assert ( Vault(vault).fundManager() == self.fundManager.address ), "new vault fund manager != fund manager" if self.fundManager.address != ZERO_ADDRESS: # fund manager's vault is set to new vault assert self.fundManager.vault() == vault, "fund manager vault != new vault" # check balance of vault >= balanceOfVault bal: uint256 = self.balance assert bal >= self.balanceOfVault, "bal < vault" assert Vault(vault).oldVault() == self, "old vault != self" Vault(vault).initialize(value=bal) log Migrate(vault, self.balanceOfVault, self.debt, self.lockedProfit) # reset state self.balanceOfVault = 0 self.debt = 0 self.lockedProfit = 0 @external def setNextTimeLock(nextTimeLock: address): """ @notice Set next time lock @param nextTimeLock Address of next time lock """ assert msg.sender == self.timeLock, "!time lock" self.nextTimeLock = nextTimeLock log SetNextTimeLock(nextTimeLock) @external def acceptTimeLock(): """ @notice Accept time lock @dev Only `nextTimeLock` can claim time lock """ assert msg.sender == self.nextTimeLock, "!next time lock" self.timeLock = msg.sender self.nextTimeLock = ZERO_ADDRESS log AcceptTimeLock(msg.sender) @external def setAdmin(admin: address): assert msg.sender in [self.timeLock, self.admin], "!auth" self.admin = admin log SetAdmin(admin) @external def setGuardian(guardian: address): assert msg.sender in [self.timeLock, self.admin], "!auth" self.guardian = guardian log SetGuardian(guardian) @external def setFundManager(fundManager: address): """ @notice Set fund manager @param fundManager Address of new fund manager """ assert msg.sender == self.timeLock, "!time lock" assert FundManager(fundManager).vault() == self, "fund manager vault != self" assert FundManager(fundManager).token() == ETH, "fund manager token != ETH" self.fundManager = FundManager(fundManager) log SetFundManager(fundManager) @external def setPause(paused: bool): assert msg.sender in [self.timeLock, self.admin, self.guardian], "!auth" self.paused = paused log SetPause(paused) @external def setMinReserve(minReserve: uint256): """ @notice Set minimum amount of ETH reserved in this vault for cheap withdrawn by user @param minReserve Numerator to calculate min reserve 0 = all funds can be transferred to fund manager MAX_MIN_RESERVE = 0 ETH can be transferred to fund manager """ assert msg.sender in [self.timeLock, self.admin], "!auth" assert minReserve <= MAX_MIN_RESERVE, "min reserve > max" self.minReserve = minReserve @external def setLockedProfitDegradation(degradation: uint256): """ @notice Set locked profit degradation (rate locked profit is released) @param degradation Rate of degradation 0 = profit is locked forever MAX_DEGRADATION = 100% of profit is released 1 block after report """ assert msg.sender in [self.timeLock, self.admin], "!auth" assert degradation <= MAX_DEGRADATION, "degradation > max" self.lockedProfitDegradation = degradation @external def setDepositLimit(limit: uint256): """ @notice Set limit to total deposit @param limit Limit for total deposit """ assert msg.sender in [self.timeLock, self.admin], "!auth" self.depositLimit = limit @external def setBlockDelay(delay: uint256): """ @notice Set block delay, used to protect against flash attacks @param delay Number of blocks to delay before user can deposit / withdraw """ assert msg.sender in [self.timeLock, self.admin], "!auth" assert delay >= 1, "delay = 0" self.blockDelay = delay @external def setWhitelist(addr: address, approved: bool): """ @notice Approve or disapprove address to skip check on block delay. Approved address can deposit, withdraw and transfer uToken in a single transaction @param approved Boolean True = approve False = disapprove """ assert msg.sender in [self.timeLock, self.admin], "!auth" self.whitelist[addr] = approved log SetWhitelist(addr, approved) @internal @view def _totalAssets() -> uint256: """ @notice Total amount of ETH in this vault + amount in fund manager @dev State variable `balanceOfVault` is used to track balance of ETH in this contract instead of `self.balance`. This is done to protect against uToken shares being diluted by directly sending ETH to this contract. @dev Returns total amount of ETH in this contract """ return self.balanceOfVault + self.debt @external @view def totalAssets() -> uint256: return self._totalAssets() @internal @view def _calcLockedProfit() -> uint256: """ @notice Calculated locked profit @dev Returns amount of profit locked from last report. Profit is released over time, depending on the release rate `lockedProfitDegradation`. Profit is locked after `report` to protect against sandwich attack. """ lockedFundsRatio: uint256 = ( block.timestamp - self.lastReport ) * self.lockedProfitDegradation if lockedFundsRatio < MAX_DEGRADATION: lockedProfit: uint256 = self.lockedProfit return lockedProfit - lockedFundsRatio * lockedProfit / MAX_DEGRADATION else: return 0 @external @view def calcLockedProfit() -> uint256: return self._calcLockedProfit() @internal @view def _calcFreeFunds() -> uint256: """ @notice Calculate free funds (total assets - locked profit) @dev Returns total amount of ETH that can be withdrawn """ return self._totalAssets() - self._calcLockedProfit() @external @view def calcFreeFunds() -> uint256: return self._calcFreeFunds() @internal @pure def _calcSharesToMint( amount: uint256, totalSupply: uint256, freeFunds: uint256 ) -> uint256: """ @notice Calculate uToken shares to mint @param amount Amount of ETH to deposit @param totalSupply Total amount of shares @param freeFunds Free funds before deposit @dev Returns amount of uToken to mint. Input must be numbers before deposit @dev Calculated with `freeFunds`, not `totalAssets` """ # s = shares to mint # T = total shares before mint # a = deposit amount # P = total amount of ETH in vault + fund manager before deposit # s / (T + s) = a / (P + a) # sP = aT # a = 0 | mint s = 0 # a > 0, T = 0, P = 0 | mint s = a # a > 0, T = 0, P > 0 | mint s = a as if P = 0 # a > 0, T > 0, P = 0 | invalid, equation cannot be true for any s # a > 0, T > 0, P > 0 | mint s = aT / P if amount == 0: return 0 if totalSupply == 0: return amount # reverts if free funds = 0 return amount * totalSupply / freeFunds @external @view def calcSharesToMint(amount: uint256) -> uint256: return self._calcSharesToMint( amount, self.uToken.totalSupply(), self._calcFreeFunds() ) @internal @pure def _calcWithdraw(shares: uint256, totalSupply: uint256, freeFunds: uint256) -> uint256: """ @notice Calculate amount of ETH to withdraw @param shares Amount of uToken shares to burn @param totalSupply Total amount of shares before burn @param freeFunds Free funds @dev Returns amount of ETH to withdraw @dev Calculated with `freeFunds`, not `totalAssets` """ # s = shares # T = total supply of shares # a = amount to withdraw # P = total amount of ETH in vault + fund manager # s / T = a / P (constraints T >= s, P >= a) # sP = aT # s = 0 | a = 0 # s > 0, T = 0, P = 0 | invalid (violates constraint T >= s) # s > 0, T = 0, P > 0 | invalid (violates constraint T >= s) # s > 0, T > 0, P = 0 | a = 0 # s > 0, T > 0, P > 0 | a = sP / T if shares == 0: return 0 # invalid if total supply = 0 return shares * freeFunds / totalSupply @external @view def calcWithdraw(shares: uint256) -> uint256: return self._calcWithdraw(shares, self.uToken.totalSupply(), self._calcFreeFunds()) @external @payable @nonreentrant("lock") def deposit(amount: uint256, _min: uint256) -> uint256: """ @notice Deposit ETH into vault @param amount Amount of ETH to deposit @param _min Minimum amount of uToken to be minted @dev Returns actual amount of uToken minted """ assert self.initialized, "!initialized" assert not self.paused, "paused" # check block delay or whitelisted assert ( block.number >= self.uToken.lastBlock(msg.sender) + self.blockDelay or self.whitelist[msg.sender] ), "block < delay" assert amount == msg.value, "amount != msg.value" assert amount > 0, "deposit = 0" # check deposit limit assert self._totalAssets() + amount <= self.depositLimit, "deposit limit" # calculate with free funds before deposit (msg.value is not included in freeFunds) shares: uint256 = self._calcSharesToMint( amount, self.uToken.totalSupply(), self._calcFreeFunds() ) assert shares >= _min, "shares < min" self.balanceOfVault += amount self.uToken.mint(msg.sender, shares) # check ETH balance >= balanceOfVault assert self.balance >= self.balanceOfVault, "bal < vault" log Deposit(msg.sender, amount, shares) return shares @external @nonreentrant("lock") def withdraw(shares: uint256, _min: uint256) -> uint256: """ @notice Withdraw ETH from vault @param shares Amount of uToken to burn @param _min Minimum amount of ETH that msg.sender will receive @dev Returns actual amount of ETH transferred to msg.sender """ assert self.initialized, "!initialized" # check block delay or whitelisted assert ( block.number >= self.uToken.lastBlock(msg.sender) + self.blockDelay or self.whitelist[msg.sender] ), "block < delay" _shares: uint256 = min(shares, self.uToken.balanceOf(msg.sender)) assert _shares > 0, "shares = 0" amount: uint256 = self._calcWithdraw( _shares, self.uToken.totalSupply(), self._calcFreeFunds() ) # withdraw from fund manager if amount to withdraw > balance of vault if amount > self.balanceOfVault: diff: uint256 = self.balance # loss = debt - total assets in fund manager + any loss from strategies # ETH received by __default__ loss: uint256 = self.fundManager.withdraw(amount - self.balanceOfVault) diff = self.balance - diff # diff + loss may be >= amount if loss > 0: # msg.sender must cover all of loss amount -= loss self.debt -= loss self.debt -= diff self.balanceOfVault += diff if amount > self.balanceOfVault: amount = self.balanceOfVault self.uToken.burn(msg.sender, _shares) assert amount >= _min, "amount < min" self.balanceOfVault -= amount self._sendEth(msg.sender, amount) # check ETH balance >= balanceOfVault assert self.balance >= self.balanceOfVault, "bal < vault" log Withdraw(msg.sender, _shares, amount) return amount @internal @view def _calcMinReserve() -> uint256: """ @notice Calculate minimum amount of ETH that is reserved in vault for cheap withdraw by users @dev Returns min reserve """ freeFunds: uint256 = self._calcFreeFunds() return freeFunds * self.minReserve / MAX_MIN_RESERVE @external def calcMinReserve() -> uint256: return self._calcMinReserve() @internal @view def _calcMaxBorrow() -> uint256: """ @notice Calculate amount of ETH available for fund manager to borrow @dev Returns amount of ETH fund manager can borrow """ if ( (not self.initialized) or self.paused or self.fundManager.address == ZERO_ADDRESS ): return 0 minBal: uint256 = self._calcMinReserve() if self.balanceOfVault > minBal: return self.balanceOfVault - minBal return 0 @external @view def calcMaxBorrow() -> uint256: return self._calcMaxBorrow() @external def borrow(amount: uint256) -> uint256: """ @notice Borrow ETH from vault @dev Only fund manager can borrow @dev Returns actual amount that was given to fund manager """ assert self.initialized, "!initialized" assert not self.paused, "paused" assert msg.sender == self.fundManager.address, "!fund manager" available: uint256 = self._calcMaxBorrow() _amount: uint256 = min(amount, available) assert _amount > 0, "borrow = 0" self._sendEth(msg.sender, _amount) self.balanceOfVault -= _amount self.debt += _amount # check ETH balance >= balanceOfVault assert self.balance >= self.balanceOfVault, "bal < vault" log Borrow(msg.sender, amount, _amount) return _amount @external @payable def repay(amount: uint256) -> uint256: """ @notice Repay ETH to vault @dev Only fund manager can borrow @dev Returns actual amount that was repaid by fund manager """ assert self.initialized, "!initialized" assert msg.sender == self.fundManager.address, "!fund manager" assert amount == msg.value, "amount != msg.value" assert amount > 0, "repay = 0" self.balanceOfVault += amount self.debt -= amount # check ETH balance >= balanceOfVault assert self.balance >= self.balanceOfVault, "bal < vault" log Repay(msg.sender, amount, amount) return amount @external @payable def report(gain: uint256, loss: uint256): """ @notice Report profit or loss @param gain Profit since last report @param loss Loss since last report @dev Only fund manager can call @dev Locks profit to be release over time """ assert self.initialized, "!initialized" assert msg.sender == self.fundManager.address, "!fund manager" # can't have both gain and loss > 0 assert (gain >= 0 and loss == 0) or (gain == 0 and loss >= 0), "gain and loss > 0" assert gain == msg.value, "gain != msg.value" # calculate current locked profit lockedProfit: uint256 = self._calcLockedProfit() diff: uint256 = msg.value # actual amount transferred if gain > 0 if gain > 0: # free funds = bal + diff + debt - (locked profit + diff) self.balanceOfVault += diff self.lockedProfit = lockedProfit + diff elif loss > 0: # free funds = bal + debt - loss - (locked profit - loss) self.debt -= loss # deduct locked profit if lockedProfit > loss: self.lockedProfit -= loss else: # no locked profit to be released self.lockedProfit = 0 self.lastReport = block.timestamp # check ETH balance >= balanceOfVault assert self.balance >= self.balanceOfVault, "bal < vault" # log updated debt and lockedProfit log Report( msg.sender, self.balanceOfVault, self.debt, gain, loss, diff, self.lockedProfit ) @external def forceUpdateBalanceOfVault(): """ @notice Force `balanceOfVault` to equal `self.balance` @dev Only use in case of emergency if `balanceOfVault` is > actual balance """ assert self.initialized, "!initialized" assert msg.sender in [self.timeLock, self.admin], "!auth" bal: uint256 = self.balance assert bal < self.balanceOfVault, "bal >= vault" self.balanceOfVault = bal log ForceUpdateBalanceOfVault(bal) @external def skim(): """ @notice Transfer excess ETH sent to this contract to admin or time lock @dev actual ETH balance must be >= `balanceOfVault` """ assert msg.sender == self.timeLock, "!time lock" self._sendEth(msg.sender, self.balance - self.balanceOfVault) @external def sweep(token: address): """ @notice Transfer any token accidentally sent to this contract to admin or time lock """ assert msg.sender in [self.timeLock, self.admin], "!auth" self._safeTransfer(token, msg.sender, ERC20(token).balanceOf(self))
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"Migrate","inputs":[{"name":"vault","type":"address","indexed":false},{"name":"balanceOfVault","type":"uint256","indexed":false},{"name":"debt","type":"uint256","indexed":false},{"name":"lockedProfit","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetNextTimeLock","inputs":[{"name":"nextTimeLock","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"AcceptTimeLock","inputs":[{"name":"timeLock","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetGuardian","inputs":[{"name":"guardian","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetAdmin","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetFundManager","inputs":[{"name":"fundManager","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetPause","inputs":[{"name":"paused","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetWhitelist","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"approved","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"ReceiveEth","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Deposit","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false},{"name":"shares","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"name":"owner","type":"address","indexed":true},{"name":"shares","type":"uint256","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Borrow","inputs":[{"name":"fundManager","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false},{"name":"borrowed","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Repay","inputs":[{"name":"fundManager","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false},{"name":"repaid","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Report","inputs":[{"name":"fundManager","type":"address","indexed":true},{"name":"balanceOfVault","type":"uint256","indexed":false},{"name":"debt","type":"uint256","indexed":false},{"name":"gain","type":"uint256","indexed":false},{"name":"loss","type":"uint256","indexed":false},{"name":"diff","type":"uint256","indexed":false},{"name":"lockedProfit","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ForceUpdateBalanceOfVault","inputs":[{"name":"balanceOfVault","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"uToken","type":"address"},{"name":"guardian","type":"address"},{"name":"oldVault","type":"address"}],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":378},{"stateMutability":"payable","type":"function","name":"initialize","inputs":[],"outputs":[],"gas":217951},{"stateMutability":"nonpayable","type":"function","name":"migrate","inputs":[{"name":"vault","type":"address"}],"outputs":[],"gas":143188},{"stateMutability":"nonpayable","type":"function","name":"setNextTimeLock","inputs":[{"name":"nextTimeLock","type":"address"}],"outputs":[],"gas":39101},{"stateMutability":"nonpayable","type":"function","name":"acceptTimeLock","inputs":[],"outputs":[],"gas":59029},{"stateMutability":"nonpayable","type":"function","name":"setAdmin","inputs":[{"name":"admin","type":"address"}],"outputs":[],"gas":41682},{"stateMutability":"nonpayable","type":"function","name":"setGuardian","inputs":[{"name":"guardian","type":"address"}],"outputs":[],"gas":41712},{"stateMutability":"nonpayable","type":"function","name":"setFundManager","inputs":[{"name":"fundManager","type":"address"}],"outputs":[],"gas":44198},{"stateMutability":"nonpayable","type":"function","name":"setPause","inputs":[{"name":"paused","type":"bool"}],"outputs":[],"gas":44040},{"stateMutability":"nonpayable","type":"function","name":"setMinReserve","inputs":[{"name":"minReserve","type":"uint256"}],"outputs":[],"gas":40473},{"stateMutability":"nonpayable","type":"function","name":"setLockedProfitDegradation","inputs":[{"name":"degradation","type":"uint256"}],"outputs":[],"gas":40503},{"stateMutability":"nonpayable","type":"function","name":"setDepositLimit","inputs":[{"name":"limit","type":"uint256"}],"outputs":[],"gas":40415},{"stateMutability":"nonpayable","type":"function","name":"setBlockDelay","inputs":[{"name":"delay","type":"uint256"}],"outputs":[],"gas":40563},{"stateMutability":"nonpayable","type":"function","name":"setWhitelist","inputs":[{"name":"addr","type":"address"},{"name":"approved","type":"bool"}],"outputs":[],"gas":42518},{"stateMutability":"view","type":"function","name":"totalAssets","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":5973},{"stateMutability":"view","type":"function","name":"calcLockedProfit","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":8919},{"stateMutability":"view","type":"function","name":"calcFreeFunds","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":28343},{"stateMutability":"view","type":"function","name":"calcSharesToMint","inputs":[{"name":"amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":34671},{"stateMutability":"view","type":"function","name":"calcWithdraw","inputs":[{"name":"shares","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":34576},{"stateMutability":"payable","type":"function","name":"deposit","inputs":[{"name":"amount","type":"uint256"},{"name":"_min","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":184302},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[{"name":"shares","type":"uint256"},{"name":"_min","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":343643},{"stateMutability":"nonpayable","type":"function","name":"calcMinReserve","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":59332},{"stateMutability":"view","type":"function","name":"calcMaxBorrow","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":129729},{"stateMutability":"nonpayable","type":"function","name":"borrow","inputs":[{"name":"amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":254849},{"stateMutability":"payable","type":"function","name":"repay","inputs":[{"name":"amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":84773},{"stateMutability":"payable","type":"function","name":"report","inputs":[{"name":"gain","type":"uint256"},{"name":"loss","type":"uint256"}],"outputs":[],"gas":136768},{"stateMutability":"nonpayable","type":"function","name":"forceUpdateBalanceOfVault","inputs":[],"outputs":[],"gas":46636},{"stateMutability":"nonpayable","type":"function","name":"skim","inputs":[],"outputs":[],"gas":44754},{"stateMutability":"nonpayable","type":"function","name":"sweep","inputs":[{"name":"token","type":"address"}],"outputs":[],"gas":18697},{"stateMutability":"view","type":"function","name":"initialized","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":3348},{"stateMutability":"view","type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":3378},{"stateMutability":"view","type":"function","name":"uToken","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3408},{"stateMutability":"view","type":"function","name":"fundManager","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3438},{"stateMutability":"view","type":"function","name":"timeLock","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3468},{"stateMutability":"view","type":"function","name":"nextTimeLock","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3498},{"stateMutability":"view","type":"function","name":"guardian","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3528},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3558},{"stateMutability":"view","type":"function","name":"depositLimit","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3588},{"stateMutability":"view","type":"function","name":"balanceOfVault","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3618},{"stateMutability":"view","type":"function","name":"debt","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3648},{"stateMutability":"view","type":"function","name":"minReserve","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3678},{"stateMutability":"view","type":"function","name":"lastReport","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3708},{"stateMutability":"view","type":"function","name":"lockedProfit","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3738},{"stateMutability":"view","type":"function","name":"lockedProfitDegradation","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3768},{"stateMutability":"view","type":"function","name":"blockDelay","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3798},{"stateMutability":"view","type":"function","name":"whitelist","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":4043},{"stateMutability":"view","type":"function","name":"oldVault","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3858}]
Contract Creation Code
60606138c66101403960206138c660c03960c05160a01c1561002057600080fd5b602060206138c60160c03960c05160a01c1561003b57600080fd5b602060406138c60160c03960c05160a01c1561005657600080fd5b3360045533600755610160516006556101405160025573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6020610200600463fc0c546a6101a0526101bc6002545afa6100a257600080fd5b601f3d116100af57600080fd5b60005061020051141515610102576308c379a0610220526020610240526013610260527f75546f6b656e20746f6b656e20213d20455448000000000000000000000000006102805261026050606461023cfd5b60016001556001600f556101f4600b55652a1b324b8f68600e55600061018051181561024a576101805160115573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6020610200600463fc0c546a6101a0526101bc6011545afa61016557600080fd5b601f3d1161017257600080fd5b600050610200511415156101c5576308c379a0610220526020610240526016610260527f6f6c64207661756c7420746f6b656e20213d20455448000000000000000000006102805261026050606461023cfd5b610140516020610200600463633156376101a0526101bc6011545afa6101ea57600080fd5b601f3d116101f757600080fd5b6000506102005114151561024a576308c379a061022052602061024052601a610260527f6f6c64207661756c742075546f6b656e20213d2075546f6b656e0000000000006102805261026050606461023cfd5b6138ae56600436101561000d5761305c565b600035601c52600051638129fc1c81141561048357600054151515610071576308c379a061014052602061016052600b610180527f696e697469616c697a65640000000000000000000000000000000000000000006101a05261018050606461015cfd5b601154151561012457600454610160526007546101805260006101405261014061012060006002818352015b6101205160200261016001513314156100b957600183526100c9565b815160010180835281141561009d575b50505061014051151561011b576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b42600c5561047c565b60115433141515610174576308c379a061014052602061016052600a610180527f216f6c64207661756c74000000000000000000000000000000000000000000006101a05261018050606461015cfd5b3060206101a0600463075461726101405261015c6002545afa61019657600080fd5b601f3d116101a357600080fd5b6000506101a0511415156101f6576308c379a06101c05260206101e052600e610200527f6d696e74657220213d2073656c66000000000000000000000000000000000000610220526102005060646101dcfd5b60206101a06004636209ec2d6101405261015c6011545afa61021757600080fd5b601f3d1161022457600080fd5b6000506101a05160035414151561029f576308c379a06101c05260206101e0526026610200527f66756e64206d616e6167657220213d206f6c64207661756c742066756e64206d610220527f616e616765720000000000000000000000000000000000000000000000000000610240526102005060846101dcfd5b6000600354181561032c573060206101a0600463fbfa77cf6101405261015c6003545afa6102cc57600080fd5b601f3d116102d957600080fd5b6000506101a05114151561032c576308c379a06101c05260206101e052601a610200527f66756e64206d616e61676572207661756c7420213d2073656c66000000000000610220526102005060646101dcfd5b60206101c06004639994673d6101605261017c6011545afa61034d57600080fd5b601f3d1161035a57600080fd5b6000506101c051610140526101405134101515156103b7576308c379a061016052602061018052600d6101a0527f76616c7565203c207661756c74000000000000000000000000000000000000006101c0526101a050606461017cfd5b6101405134808211156103ca57806103cc565b815b9050905060095560206101c06004630dca59c16101605261017c6011545afa6103f457600080fd5b601f3d1161040157600080fd5b6000506101c051600a5560206101c060046344b813966101605261017c6011545afa61042c57600080fd5b601f3d1161043957600080fd5b6000506101c051600d5560206101c0600463c3535b526101605261017c6011545afa61046457600080fd5b601f3d1161047157600080fd5b6000506101c051600c555b6001600055005b63e2bbb158811415610956576012541561049c57600080fd5b600160125560005415156104ef576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b60015415151561053e576308c379a0610140526020610160526006610180527f70617573656400000000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b6020610260602463952ca92c6101e05233610200526101fc6002545afa61056457600080fd5b601f3d1161057157600080fd5b60005061026051600f5481818301101561058a57600080fd5b80820190509050431015156105a05760016105b0565b60103360e05260c052604060c020545b15156105fb576308c379a06102805260206102a052600d6102c0527f626c6f636b203c2064656c6179000000000000000000000000000000000000006102e0526102c050606461029cfd5b3460043514151561064b576308c379a0610140526020610160526013610180527f616d6f756e7420213d206d73672e76616c7565000000000000000000000000006101a05261018050606461015cfd5b600060043511151561069c576308c379a061014052602061016052600b610180527f6465706f736974203d20300000000000000000000000000000000000000000006101a05261018050606461015cfd5b6008546006580161331d565b61014052610140516004358181830110156106c257600080fd5b8082019050905011151515610716576308c379a061016052602061018052600d6101a0527f6465706f736974206c696d6974000000000000000000000000000000000000006101c0526101a050606461017cfd5b60206101c060046318160ddd6101605261017c6002545afa61073757600080fd5b601f3d1161074457600080fd5b6000506101c0516101e0526101405161016051610180516101a0516101c0516101e0516006580161340c565b610200526101e0526101c0526101a05261018052610160526101405261020051610220526101405161016051610180516101a0516101c0516101e0516102005161022051600435610240526101e0516102605261022051610280526102805161026051610240516006580161346a565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e051610140526024356101405110151515610860576308c379a061016052602061018052600c6101a0527f736861726573203c206d696e00000000000000000000000000000000000000006101c0526101a050606461017cfd5b6009805460043581818301101561087657600080fd5b808201905090508155506002543b61088d57600080fd5b6000600060446340c10f19610160523361018052610140516101a05261017c60006002545af16108bc57600080fd5b600954471015151561090d576308c379a061016052602061018052600b6101a0527f62616c203c207661756c740000000000000000000000000000000000000000006101c0526101a050606461017cfd5b600435610160526101405161018052337f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a156040610160a261014051600052600060125560206000f35b63371fd8e6811415610b725760005415156109b0576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b60035433141515610a00576308c379a061014052602061016052600d610180527f2166756e64206d616e61676572000000000000000000000000000000000000006101a05261018050606461015cfd5b34600435141515610a50576308c379a0610140526020610160526013610180527f616d6f756e7420213d206d73672e76616c7565000000000000000000000000006101a05261018050606461015cfd5b6000600435111515610aa1576308c379a0610140526020610160526009610180527f7265706179203d203000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b60098054600435818183011015610ab757600080fd5b80820190509050815550600a805460043580821015610ad557600080fd5b808203905090508155506009544710151515610b30576308c379a061014052602061016052600b610180527f62616c203c207661756c740000000000000000000000000000000000000000006101a05261018050606461015cfd5b6004356101405260043561016052337f77c6871227e5d2dec8dadd5354f78453203e22e669cd0ec4c19d9a8c5edb31d06040610140a260043560005260206000f35b63753c0985811415610e6a576000541515610bcc576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b60035433141515610c1c576308c379a061014052602061016052600d610180527f2166756e64206d616e61676572000000000000000000000000000000000000006101a05261018050606461015cfd5b6000600435101515610c315760243515610c34565b60005b15610c40576001610c58565b6004351515610c555760006024351015610c58565b60005b1515610ca3576308c379a0610140526020610160526011610180527f6761696e20616e64206c6f7373203e20300000000000000000000000000000006101a05261018050606461015cfd5b34600435141515610cf3576308c379a0610140526020610160526011610180527f6761696e20213d206d73672e76616c75650000000000000000000000000000006101a05261018050606461015cfd5b6101405160065801613349565b61016052610140526101605161014052346101605260006004351115610d67576009805461016051818183011015610d3757600080fd5b808201905090508155506101405161016051818183011015610d5857600080fd5b80820190509050600d55610dc6565b60006024351115610dc657600a805460243580821015610d8657600080fd5b80820390509050815550602435610140511115610dc057600d805460243580821015610db157600080fd5b80820390509050815550610dc6565b6000600d555b42600c556009544710151515610e1b576308c379a06101805260206101a052600b6101c0527f62616c203c207661756c740000000000000000000000000000000000000000006101e0526101c050606461019cfd5b60095461018052600a546101a052604060046101c0376101605161020052600d5461022052337f7c7d4c274383cf61f46bee82092136a188e27c566b0857a2d68d01ae1814cdac60c0610180a2005b63fc0c546a811415610e9f573415610e8157600080fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60005260206000f35b63ce5494bb8114156113e8573415610eb657600080fd5b60043560a01c15610ec657600080fd5b60045433141515610f16576308c379a061014052602061016052600a610180527f2174696d65206c6f636b000000000000000000000000000000000000000000006101a05261018050606461015cfd5b6000541515610f64576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b6001541515610fb2576308c379a0610140526020610160526007610180527f21706175736564000000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60206101a0600463fc0c546a6101405261015c6004355afa610fe857600080fd5b601f3d11610ff557600080fd5b6000506101a051141515611048576308c379a06101c05260206101e0526016610200527f6e6577207661756c7420746f6b656e20213d2045544800000000000000000000610220526102005060646101dcfd5b60025460206101a0600463633156376101405261015c6004355afa61106c57600080fd5b601f3d1161107957600080fd5b6000506101a0511415156110cc576308c379a06101c05260206101e052601a610200527f6e6577207661756c742075546f6b656e20213d2075546f6b656e000000000000610220526102005060646101dcfd5b60043560206101a0600463075461726101405261015c6002545afa6110f057600080fd5b601f3d116110fd57600080fd5b6000506101a051141515611150576308c379a06101c05260206101e0526013610200527f6d696e74657220213d206e6577207661756c7400000000000000000000000000610220526102005060646101dcfd5b60035460206101a06004636209ec2d6101405261015c6004355afa61117457600080fd5b601f3d1161118157600080fd5b6000506101a0511415156111f9576308c379a06101c05260206101e0526026610200527f6e6577207661756c742066756e64206d616e6167657220213d2066756e64206d610220527f616e616765720000000000000000000000000000000000000000000000000000610240526102005060846101dcfd5b600060035418156112885760043560206101a0600463fbfa77cf6101405261015c6003545afa61122857600080fd5b601f3d1161123557600080fd5b6000506101a051141515611288576308c379a06101c05260206101e052601f610200527f66756e64206d616e61676572207661756c7420213d206e6577207661756c7400610220526102005060646101dcfd5b476101405260095461014051101515156112e1576308c379a061016052602061018052600b6101a0527f62616c203c207661756c740000000000000000000000000000000000000000006101c0526101a050606461017cfd5b3060206101c060046392f73fc06101605261017c6004355afa61130357600080fd5b601f3d1161131057600080fd5b6000506101c051141515611363576308c379a06101e0526020610200526011610220527f6f6c64207661756c7420213d2073656c66000000000000000000000000000000610240526102205060646101fcfd5b6004353b61137057600080fd5b600060006004638129fc1c6101605261017c610140516004355af161139457600080fd5b6004356101605260095461018052600a546101a052600d546101c0527fc47a839c70aa320457c80c5abd38ce8b516c72e37be119b7962f67f1f8eb7ac26080610160a160006009556000600a556000600d55005b6347a02a448114156114955734156113ff57600080fd5b60043560a01c1561140f57600080fd5b6004543314151561145f576308c379a061014052602061016052600a610180527f2174696d65206c6f636b000000000000000000000000000000000000000000006101a05261018050606461015cfd5b600435600555600435610140527f5c06d5a6f95a574bb95a214c88933831c63fcd6f6c5d1d61a21efb92be19bc2c6020610140a1005b631e39831e8114156115335734156114ac57600080fd5b600554331415156114fc576308c379a061014052602061016052600f610180527f216e6578742074696d65206c6f636b00000000000000000000000000000000006101a05261018050606461015cfd5b33600455600060055533610140527f77b69635186d51fb2d031f67a7995795c8384acb800219c7d30861125d154f026020610140a1005b63704b6c0281141561163157341561154a57600080fd5b60043560a01c1561155a57600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b61012051602002610160015133141561159957600183526115a9565b815160010180835281141561157d575b5050506101405115156115fb576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b600435600755600435610140527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a16020610140a1005b638a0dac4a81141561172f57341561164857600080fd5b60043560a01c1561165857600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b61012051602002610160015133141561169757600183526116a7565b815160010180835281141561167b575b5050506101405115156116f9576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b600435600655600435610140527f31845eceb9cde510c7e8b37f76301c688feb70bc9653aa4c28a3734999840fd86020610140a1005b63232a30608114156118f457341561174657600080fd5b60043560a01c1561175657600080fd5b600454331415156117a6576308c379a061014052602061016052600a610180527f2174696d65206c6f636b000000000000000000000000000000000000000000006101a05261018050606461015cfd5b3060206101a0600463fbfa77cf6101405261015c6004355afa6117c857600080fd5b601f3d116117d557600080fd5b6000506101a051141515611828576308c379a06101c05260206101e052601a610200527f66756e64206d616e61676572207661756c7420213d2073656c66000000000000610220526102005060646101dcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60206101a0600463fc0c546a6101405261015c6004355afa61185e57600080fd5b601f3d1161186b57600080fd5b6000506101a0511415156118be576308c379a06101c05260206101e0526019610200527f66756e64206d616e6167657220746f6b656e20213d2045544800000000000000610220526102005060646101dcfd5b600435600355600435610140527f5b94aba958ab93884b4020c8f52abddc2584e61c0adf58c3ab88acb28480e6f56020610140a1005b63bedb86fb8114156119f957341561190b57600080fd5b60043560011c1561191b57600080fd5b60045461016052600754610180526006546101a05260006101405261014061012060006003818352015b6101205160200261016001513314156119615760018352611971565b8151600101808352811415611945575b5050506101405115156119c3576308c379a06101c05260206101e0526005610200527f2161757468000000000000000000000000000000000000000000000000000000610220526102005060646101dcfd5b600435600155600435610140527f140eb9f8b591138e129e4caf389c92df4f0545b902523eee9e63153ecdb2026e6020610140a1005b633deb91c7811415611b0c573415611a1057600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611a4f5760018352611a5f565b8151600101808352811415611a33575b505050610140511515611ab1576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b61271060043511151515611b04576308c379a0610140526020610160526011610180527f6d696e2072657365727665203e206d61780000000000000000000000000000006101a05261018050606461015cfd5b600435600b55005b637a550365811415611c25573415611b2357600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611b625760018352611b72565b8151600101808352811415611b46575b505050610140511515611bc4576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b670de0b6b3a764000060043511151515611c1d576308c379a0610140526020610160526011610180527f6465677261646174696f6e203e206d61780000000000000000000000000000006101a05261018050606461015cfd5b600435600e55005b63bdc8144b811415611ce5573415611c3c57600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611c7b5760018352611c8b565b8151600101808352811415611c5f575b505050610140511515611cdd576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b600435600855005b63fa67ae5a811415611df7573415611cfc57600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611d3b5760018352611d4b565b8151600101808352811415611d1f575b505050610140511515611d9d576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b600160043510151515611def576308c379a0610140526020610160526009610180527f64656c6179203d203000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b600435600f55005b6353d6fd59811415611f16573415611e0e57600080fd5b60043560a01c15611e1e57600080fd5b60243560011c15611e2e57600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611e6d5760018352611e7d565b8151600101808352811415611e51575b505050610140511515611ecf576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b602435601060043560e05260c052604060c02055602435610140526004357ff6019ec0a78d156d249a1ec7579e2321f6ac7521d6e1d2eacf90ba4a184dcceb6020610140a2005b6301e1d114811415611f47573415611f2d57600080fd5b6006580161331d565b610140526101405160005260206000f35b630f73cea6811415611f78573415611f5e57600080fd5b60065801613349565b610140526101405160005260206000f35b63d13e56f1811415611fa9573415611f8f57600080fd5b6006580161340c565b610140526101405160005260206000f35b63ae074a098114156120ab573415611fc057600080fd5b60206101a060046318160ddd6101405261015c6002545afa611fe157600080fd5b601f3d11611fee57600080fd5b6000506101a0516101c0526101405161016051610180516101a0516101c0516006580161340c565b6101e0526101c0526101a0526101805261016052610140526101e051610200526101405161016051610180516101a0516101c0516101e05161020051600435610220526101c0516102405261020051610260526102605161024051610220516006580161346a565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c05160005260206000f35b639b05f5e48114156121ad5734156120c257600080fd5b60206101a060046318160ddd6101405261015c6002545afa6120e357600080fd5b601f3d116120f057600080fd5b6000506101a0516101c0526101405161016051610180516101a0516101c0516006580161340c565b6101e0526101c0526101a0526101805261016052610140526101e051610200526101405161016051610180516101a0516101c0516101e05161020051600435610220526101c051610240526102005161026052610260516102405161022051600658016134f0565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c05160005260206000f35b63441a3e7081141561273457601254156121c657600080fd5b600160125534156121d657600080fd5b6000541515612224576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b6020610260602463952ca92c6101e05233610200526101fc6002545afa61224a57600080fd5b601f3d1161225757600080fd5b60005061026051600f5481818301101561227057600080fd5b8082019050905043101515612286576001612296565b60103360e05260c052604060c020545b15156122e1576308c379a06102805260206102a052600d6102c0527f626c6f636b203c2064656c6179000000000000000000000000000000000000006102e0526102c050606461029cfd5b60043560206101e060246370a0823161016052336101805261017c6002545afa61230a57600080fd5b601f3d1161231757600080fd5b6000506101e0518082111561232c578061232e565b815b9050905061014052600061014051111515612388576308c379a061016052602061018052600a6101a0527f736861726573203d2030000000000000000000000000000000000000000000006101c0526101a050606461017cfd5b60206101e060046318160ddd6101805261019c6002545afa6123a957600080fd5b601f3d116123b657600080fd5b6000506101e051610200526101405161016051610180516101a0516101c0516101e051610200516006580161340c565b61022052610200526101e0526101c0526101a05261018052610160526101405261022051610240526101405161016051610180516101a0516101c0516101e05161020051610220516102405161014051610260526102005161028052610240516102a0526102a0516102805161026051600658016134f0565b610300526102405261022052610200526101e0526101c0526101a05261018052610160526101405261030051610160526009546101605111156125b957476101805260206102406024632e1a7d4d6101c05261016051600954808210156124c557600080fd5b808203905090506101e0526101dc60006003545af16124e357600080fd5b601f3d116124f057600080fd5b600050610240516101a05247610180518082101561250d57600080fd5b808203905090506101805260006101a05111156125645761016080516101a0518082101561253a57600080fd5b80820390509050815250600a80546101a0518082101561255957600080fd5b808203905090508155505b600a8054610180518082101561257957600080fd5b80820390509050815550600980546101805181818301101561259a57600080fd5b808201905090508155506009546101605111156125b957600954610160525b6002543b6125c657600080fd5b600060006044639dc29fac61018052336101a052610140516101c05261019c60006002545af16125f557600080fd5b6024356101605110151515612649576308c379a06101805260206101a052600c6101c0527f616d6f756e74203c206d696e00000000000000000000000000000000000000006101e0526101c050606461019cfd5b60098054610160518082101561265e57600080fd5b8082039050905081555061014051610160513361018052610160516101a0526101a05161018051600658016130db565b610160526101405260005060095447101515156126ea576308c379a06101805260206101a052600b6101c0527f62616c203c207661756c740000000000000000000000000000000000000000006101e0526101c050606461019cfd5b6101405161018052610160516101a052337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5686040610180a261016051600052600060125560206000f35b633347b9b281141561276557341561274b57600080fd5b6006580161355c565b610140526101405160005260206000f35b6367ff0b0681141561279657341561277c57600080fd5b600658016135bd565b610140526101405160005260206000f35b63c5ebeaec811415612a2e5734156127ad57600080fd5b60005415156127fb576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b60015415151561284a576308c379a0610140526020610160526006610180527f70617573656400000000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b6003543314151561289a576308c379a061014052602061016052600d610180527f2166756e64206d616e61676572000000000000000000000000000000000000006101a05261018050606461015cfd5b61014051600658016135bd565b6101605261014052610160516101405260043561014051808211156128cc57806128ce565b815b9050905061016052600061016051111515612928576308c379a06101805260206101a052600a6101c0527f626f72726f77203d2030000000000000000000000000000000000000000000006101e0526101c050606461019cfd5b61014051610160513361018052610160516101a0526101a05161018051600658016130db565b610160526101405260005060098054610160518082101561296e57600080fd5b80820390509050815550600a80546101605181818301101561298f57600080fd5b8082019050905081555060095447101515156129ea576308c379a06101805260206101a052600b6101c0527f62616c203c207661756c740000000000000000000000000000000000000000006101e0526101c050606461019cfd5b60043561018052610160516101a052337fe1979fe4c35e0cef342fef5668e2c8e7a7e9f5d5d1ca8fee0ac6c427fa4153af6040610180a26101605160005260206000f35b63d8dad962811415612bc4573415612a4557600080fd5b6000541515612a93576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415612ad25760018352612ae2565b8151600101808352811415612ab6575b505050610140511515612b34576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b476101405260095461014051101515612b8c576308c379a061016052602061018052600c6101a0527f62616c203e3d207661756c7400000000000000000000000000000000000000006101c0526101a050606461017cfd5b6101405160095561014051610160527f83a5bfe8bda9655fa2e9a9b551f1adb479366b2ee2f537d890c05e9f565837856020610160a1005b631dd19cb4811415612c62573415612bdb57600080fd5b60045433141515612c2b576308c379a061014052602061016052600a610180527f2174696d65206c6f636b000000000000000000000000000000000000000000006101a05261018050606461015cfd5b33610140524760095480821015612c4157600080fd5b80820390509050610160526101605161014051600658016130db565b600050005b6301681a62811415612dc6573415612c7957600080fd5b60043560a01c15612c8957600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415612cc85760018352612cd8565b8151600101808352811415612cac575b505050610140511515612d2a576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b60206101c060246370a0823161014052306101605261015c6004355afa612d5057600080fd5b601f3d11612d5d57600080fd5b6000506101c0516101e0526101405161016051610180516101a0516101c0516101e0516004356102005233610220526101e0516102405261024051610220516102005160065801613183565b6101e0526101c0526101a052610180526101605261014052600050005b63158ef93e811415612de9573415612ddd57600080fd5b60005460005260206000f35b635c975abb811415612e0c573415612e0057600080fd5b60015460005260206000f35b6363315637811415612e2f573415612e2357600080fd5b60025460005260206000f35b636209ec2d811415612e52573415612e4657600080fd5b60035460005260206000f35b63d085835a811415612e75573415612e6957600080fd5b60045460005260206000f35b63b127df87811415612e98573415612e8c57600080fd5b60055460005260206000f35b63452a9320811415612ebb573415612eaf57600080fd5b60065460005260206000f35b63f851a440811415612ede573415612ed257600080fd5b60075460005260206000f35b63ecf70858811415612f01573415612ef557600080fd5b60085460005260206000f35b639994673d811415612f24573415612f1857600080fd5b60095460005260206000f35b630dca59c1811415612f47573415612f3b57600080fd5b600a5460005260206000f35b631b4a2001811415612f6a573415612f5e57600080fd5b600b5460005260206000f35b63c3535b52811415612f8d573415612f8157600080fd5b600c5460005260206000f35b6344b81396811415612fb0573415612fa457600080fd5b600d5460005260206000f35b6342232716811415612fd3573415612fc757600080fd5b600e5460005260206000f35b63d98f6088811415612ff6573415612fea57600080fd5b600f5460005260206000f35b639b19251a81141561303757341561300d57600080fd5b60043560a01c1561301d57600080fd5b601060043560e05260c052604060c0205460005260206000f35b6392f73fc081141561305a57341561304e57600080fd5b60115460005260206000f35b505b600354331415156130ac576308c379a061014052602061016052600d610180527f2166756e64206d616e61676572000000000000000000000000000000000000006101a05261018050606461015cfd5b3461014052337fefc0288202e432ade6bf71491d0001d7e389ad4f8e4e9c7aa038dd1a563efc606020610140a2005b6101805261014052610160526000610140511415151561313a576308c379a06101a05260206101c052600e6101e0527f746f203d20302061646472657373000000000000000000000000000000000000610200526101e05060646101bcfd5b60006101a0526101a08051602001806101e08284600060045af161315d57600080fd5b5050600060006101e05161020061016051610140515af161317d57600080fd5b61018051565b6101a05261014052610160526101805260006004610220527fa9059cbb000000000000000000000000000000000000000000000000000000006102405261022060048060208461028001018260208501600060045af15050805182019150506101605160208261028001015260208101905061018051602082610280010152602081019050806102805261028090508051602001806103208284600060045af161322c57600080fd5b505060206103e0610320516103406000610140515af161324b57600080fd5b60203d8082111561325c578061325e565b815b905090506103c0526103c08051602001806101c08284600060045af161328357600080fd5b505060006101c0511115613317576101c08060200151600082518060209013156132ac57600080fd5b80919012156132ba57600080fd5b806020036101000a820490509050905015151515613317576308c379a061022052602061024052600f610260527f7472616e73666572206661696c656400000000000000000000000000000000006102805261026050606461023cfd5b6101a051565b61014052600954600a5481818301101561333657600080fd5b8082019050905060005260005161014051565b6101405242600c548082101561335e57600080fd5b80820390509050600e54808202821582848304141761337c57600080fd5b8090509050905061016052670de0b6b3a76400006101605110156133fc57600d546101805261018051610160516101805180820282158284830414176133c157600080fd5b80905090509050670de0b6b3a764000080820490509050808210156133e557600080fd5b80820390509050600052600051610140515661340a565b600060005260005161014051565b005b61014052610140516006580161331d565b610160526101405261016051610140516101605160065801613349565b610180526101605261014052610180518082101561345757600080fd5b8082039050905060005260005161014051565b6101a0526101405261016052610180526101405115156134925760006000526000516101a051565b6101605115156134ac57610140516000526000516101a051565b610140516101605180820282158284830414176134c857600080fd5b809050905090506101805180806134de57600080fd5b8204905090506000526000516101a051565b6101a0526101405261016052610180526101405115156135185760006000526000516101a051565b6101405161018051808202821582848304141761353457600080fd5b8090509050905061016051808061354a57600080fd5b8204905090506000526000516101a051565b6101405261014051610160516006580161340c565b610180526101605261014052610180516101605261016051600b5480820282158284830414176135a057600080fd5b809050905090506127108082049050905060005260005161014051565b6101405260005415156135d15760016135e5565b600154156135e05760016135e5565b600354155b156135f857600060005260005161014051565b61014051610160516006580161355c565b610180526101605261014052610180516101605261016051600954111561365157600954610160518082101561363e57600080fd5b8082039050905060005260005161014051565b600060005260005161014051565b61024f6138ae0361024f60003961024f6138ae036000f3000000000000000000000000de07f45688cb6cfaac398c1485860e186d55996d00000000000000000000000086d10751b18f3fe331c146546868a07224a8598b0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x600436101561000d5761305c565b600035601c52600051638129fc1c81141561048357600054151515610071576308c379a061014052602061016052600b610180527f696e697469616c697a65640000000000000000000000000000000000000000006101a05261018050606461015cfd5b601154151561012457600454610160526007546101805260006101405261014061012060006002818352015b6101205160200261016001513314156100b957600183526100c9565b815160010180835281141561009d575b50505061014051151561011b576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b42600c5561047c565b60115433141515610174576308c379a061014052602061016052600a610180527f216f6c64207661756c74000000000000000000000000000000000000000000006101a05261018050606461015cfd5b3060206101a0600463075461726101405261015c6002545afa61019657600080fd5b601f3d116101a357600080fd5b6000506101a0511415156101f6576308c379a06101c05260206101e052600e610200527f6d696e74657220213d2073656c66000000000000000000000000000000000000610220526102005060646101dcfd5b60206101a06004636209ec2d6101405261015c6011545afa61021757600080fd5b601f3d1161022457600080fd5b6000506101a05160035414151561029f576308c379a06101c05260206101e0526026610200527f66756e64206d616e6167657220213d206f6c64207661756c742066756e64206d610220527f616e616765720000000000000000000000000000000000000000000000000000610240526102005060846101dcfd5b6000600354181561032c573060206101a0600463fbfa77cf6101405261015c6003545afa6102cc57600080fd5b601f3d116102d957600080fd5b6000506101a05114151561032c576308c379a06101c05260206101e052601a610200527f66756e64206d616e61676572207661756c7420213d2073656c66000000000000610220526102005060646101dcfd5b60206101c06004639994673d6101605261017c6011545afa61034d57600080fd5b601f3d1161035a57600080fd5b6000506101c051610140526101405134101515156103b7576308c379a061016052602061018052600d6101a0527f76616c7565203c207661756c74000000000000000000000000000000000000006101c0526101a050606461017cfd5b6101405134808211156103ca57806103cc565b815b9050905060095560206101c06004630dca59c16101605261017c6011545afa6103f457600080fd5b601f3d1161040157600080fd5b6000506101c051600a5560206101c060046344b813966101605261017c6011545afa61042c57600080fd5b601f3d1161043957600080fd5b6000506101c051600d5560206101c0600463c3535b526101605261017c6011545afa61046457600080fd5b601f3d1161047157600080fd5b6000506101c051600c555b6001600055005b63e2bbb158811415610956576012541561049c57600080fd5b600160125560005415156104ef576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b60015415151561053e576308c379a0610140526020610160526006610180527f70617573656400000000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b6020610260602463952ca92c6101e05233610200526101fc6002545afa61056457600080fd5b601f3d1161057157600080fd5b60005061026051600f5481818301101561058a57600080fd5b80820190509050431015156105a05760016105b0565b60103360e05260c052604060c020545b15156105fb576308c379a06102805260206102a052600d6102c0527f626c6f636b203c2064656c6179000000000000000000000000000000000000006102e0526102c050606461029cfd5b3460043514151561064b576308c379a0610140526020610160526013610180527f616d6f756e7420213d206d73672e76616c7565000000000000000000000000006101a05261018050606461015cfd5b600060043511151561069c576308c379a061014052602061016052600b610180527f6465706f736974203d20300000000000000000000000000000000000000000006101a05261018050606461015cfd5b6008546006580161331d565b61014052610140516004358181830110156106c257600080fd5b8082019050905011151515610716576308c379a061016052602061018052600d6101a0527f6465706f736974206c696d6974000000000000000000000000000000000000006101c0526101a050606461017cfd5b60206101c060046318160ddd6101605261017c6002545afa61073757600080fd5b601f3d1161074457600080fd5b6000506101c0516101e0526101405161016051610180516101a0516101c0516101e0516006580161340c565b610200526101e0526101c0526101a05261018052610160526101405261020051610220526101405161016051610180516101a0516101c0516101e0516102005161022051600435610240526101e0516102605261022051610280526102805161026051610240516006580161346a565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e051610140526024356101405110151515610860576308c379a061016052602061018052600c6101a0527f736861726573203c206d696e00000000000000000000000000000000000000006101c0526101a050606461017cfd5b6009805460043581818301101561087657600080fd5b808201905090508155506002543b61088d57600080fd5b6000600060446340c10f19610160523361018052610140516101a05261017c60006002545af16108bc57600080fd5b600954471015151561090d576308c379a061016052602061018052600b6101a0527f62616c203c207661756c740000000000000000000000000000000000000000006101c0526101a050606461017cfd5b600435610160526101405161018052337f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a156040610160a261014051600052600060125560206000f35b63371fd8e6811415610b725760005415156109b0576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b60035433141515610a00576308c379a061014052602061016052600d610180527f2166756e64206d616e61676572000000000000000000000000000000000000006101a05261018050606461015cfd5b34600435141515610a50576308c379a0610140526020610160526013610180527f616d6f756e7420213d206d73672e76616c7565000000000000000000000000006101a05261018050606461015cfd5b6000600435111515610aa1576308c379a0610140526020610160526009610180527f7265706179203d203000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b60098054600435818183011015610ab757600080fd5b80820190509050815550600a805460043580821015610ad557600080fd5b808203905090508155506009544710151515610b30576308c379a061014052602061016052600b610180527f62616c203c207661756c740000000000000000000000000000000000000000006101a05261018050606461015cfd5b6004356101405260043561016052337f77c6871227e5d2dec8dadd5354f78453203e22e669cd0ec4c19d9a8c5edb31d06040610140a260043560005260206000f35b63753c0985811415610e6a576000541515610bcc576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b60035433141515610c1c576308c379a061014052602061016052600d610180527f2166756e64206d616e61676572000000000000000000000000000000000000006101a05261018050606461015cfd5b6000600435101515610c315760243515610c34565b60005b15610c40576001610c58565b6004351515610c555760006024351015610c58565b60005b1515610ca3576308c379a0610140526020610160526011610180527f6761696e20616e64206c6f7373203e20300000000000000000000000000000006101a05261018050606461015cfd5b34600435141515610cf3576308c379a0610140526020610160526011610180527f6761696e20213d206d73672e76616c75650000000000000000000000000000006101a05261018050606461015cfd5b6101405160065801613349565b61016052610140526101605161014052346101605260006004351115610d67576009805461016051818183011015610d3757600080fd5b808201905090508155506101405161016051818183011015610d5857600080fd5b80820190509050600d55610dc6565b60006024351115610dc657600a805460243580821015610d8657600080fd5b80820390509050815550602435610140511115610dc057600d805460243580821015610db157600080fd5b80820390509050815550610dc6565b6000600d555b42600c556009544710151515610e1b576308c379a06101805260206101a052600b6101c0527f62616c203c207661756c740000000000000000000000000000000000000000006101e0526101c050606461019cfd5b60095461018052600a546101a052604060046101c0376101605161020052600d5461022052337f7c7d4c274383cf61f46bee82092136a188e27c566b0857a2d68d01ae1814cdac60c0610180a2005b63fc0c546a811415610e9f573415610e8157600080fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60005260206000f35b63ce5494bb8114156113e8573415610eb657600080fd5b60043560a01c15610ec657600080fd5b60045433141515610f16576308c379a061014052602061016052600a610180527f2174696d65206c6f636b000000000000000000000000000000000000000000006101a05261018050606461015cfd5b6000541515610f64576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b6001541515610fb2576308c379a0610140526020610160526007610180527f21706175736564000000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60206101a0600463fc0c546a6101405261015c6004355afa610fe857600080fd5b601f3d11610ff557600080fd5b6000506101a051141515611048576308c379a06101c05260206101e0526016610200527f6e6577207661756c7420746f6b656e20213d2045544800000000000000000000610220526102005060646101dcfd5b60025460206101a0600463633156376101405261015c6004355afa61106c57600080fd5b601f3d1161107957600080fd5b6000506101a0511415156110cc576308c379a06101c05260206101e052601a610200527f6e6577207661756c742075546f6b656e20213d2075546f6b656e000000000000610220526102005060646101dcfd5b60043560206101a0600463075461726101405261015c6002545afa6110f057600080fd5b601f3d116110fd57600080fd5b6000506101a051141515611150576308c379a06101c05260206101e0526013610200527f6d696e74657220213d206e6577207661756c7400000000000000000000000000610220526102005060646101dcfd5b60035460206101a06004636209ec2d6101405261015c6004355afa61117457600080fd5b601f3d1161118157600080fd5b6000506101a0511415156111f9576308c379a06101c05260206101e0526026610200527f6e6577207661756c742066756e64206d616e6167657220213d2066756e64206d610220527f616e616765720000000000000000000000000000000000000000000000000000610240526102005060846101dcfd5b600060035418156112885760043560206101a0600463fbfa77cf6101405261015c6003545afa61122857600080fd5b601f3d1161123557600080fd5b6000506101a051141515611288576308c379a06101c05260206101e052601f610200527f66756e64206d616e61676572207661756c7420213d206e6577207661756c7400610220526102005060646101dcfd5b476101405260095461014051101515156112e1576308c379a061016052602061018052600b6101a0527f62616c203c207661756c740000000000000000000000000000000000000000006101c0526101a050606461017cfd5b3060206101c060046392f73fc06101605261017c6004355afa61130357600080fd5b601f3d1161131057600080fd5b6000506101c051141515611363576308c379a06101e0526020610200526011610220527f6f6c64207661756c7420213d2073656c66000000000000000000000000000000610240526102205060646101fcfd5b6004353b61137057600080fd5b600060006004638129fc1c6101605261017c610140516004355af161139457600080fd5b6004356101605260095461018052600a546101a052600d546101c0527fc47a839c70aa320457c80c5abd38ce8b516c72e37be119b7962f67f1f8eb7ac26080610160a160006009556000600a556000600d55005b6347a02a448114156114955734156113ff57600080fd5b60043560a01c1561140f57600080fd5b6004543314151561145f576308c379a061014052602061016052600a610180527f2174696d65206c6f636b000000000000000000000000000000000000000000006101a05261018050606461015cfd5b600435600555600435610140527f5c06d5a6f95a574bb95a214c88933831c63fcd6f6c5d1d61a21efb92be19bc2c6020610140a1005b631e39831e8114156115335734156114ac57600080fd5b600554331415156114fc576308c379a061014052602061016052600f610180527f216e6578742074696d65206c6f636b00000000000000000000000000000000006101a05261018050606461015cfd5b33600455600060055533610140527f77b69635186d51fb2d031f67a7995795c8384acb800219c7d30861125d154f026020610140a1005b63704b6c0281141561163157341561154a57600080fd5b60043560a01c1561155a57600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b61012051602002610160015133141561159957600183526115a9565b815160010180835281141561157d575b5050506101405115156115fb576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b600435600755600435610140527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a16020610140a1005b638a0dac4a81141561172f57341561164857600080fd5b60043560a01c1561165857600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b61012051602002610160015133141561169757600183526116a7565b815160010180835281141561167b575b5050506101405115156116f9576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b600435600655600435610140527f31845eceb9cde510c7e8b37f76301c688feb70bc9653aa4c28a3734999840fd86020610140a1005b63232a30608114156118f457341561174657600080fd5b60043560a01c1561175657600080fd5b600454331415156117a6576308c379a061014052602061016052600a610180527f2174696d65206c6f636b000000000000000000000000000000000000000000006101a05261018050606461015cfd5b3060206101a0600463fbfa77cf6101405261015c6004355afa6117c857600080fd5b601f3d116117d557600080fd5b6000506101a051141515611828576308c379a06101c05260206101e052601a610200527f66756e64206d616e61676572207661756c7420213d2073656c66000000000000610220526102005060646101dcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60206101a0600463fc0c546a6101405261015c6004355afa61185e57600080fd5b601f3d1161186b57600080fd5b6000506101a0511415156118be576308c379a06101c05260206101e0526019610200527f66756e64206d616e6167657220746f6b656e20213d2045544800000000000000610220526102005060646101dcfd5b600435600355600435610140527f5b94aba958ab93884b4020c8f52abddc2584e61c0adf58c3ab88acb28480e6f56020610140a1005b63bedb86fb8114156119f957341561190b57600080fd5b60043560011c1561191b57600080fd5b60045461016052600754610180526006546101a05260006101405261014061012060006003818352015b6101205160200261016001513314156119615760018352611971565b8151600101808352811415611945575b5050506101405115156119c3576308c379a06101c05260206101e0526005610200527f2161757468000000000000000000000000000000000000000000000000000000610220526102005060646101dcfd5b600435600155600435610140527f140eb9f8b591138e129e4caf389c92df4f0545b902523eee9e63153ecdb2026e6020610140a1005b633deb91c7811415611b0c573415611a1057600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611a4f5760018352611a5f565b8151600101808352811415611a33575b505050610140511515611ab1576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b61271060043511151515611b04576308c379a0610140526020610160526011610180527f6d696e2072657365727665203e206d61780000000000000000000000000000006101a05261018050606461015cfd5b600435600b55005b637a550365811415611c25573415611b2357600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611b625760018352611b72565b8151600101808352811415611b46575b505050610140511515611bc4576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b670de0b6b3a764000060043511151515611c1d576308c379a0610140526020610160526011610180527f6465677261646174696f6e203e206d61780000000000000000000000000000006101a05261018050606461015cfd5b600435600e55005b63bdc8144b811415611ce5573415611c3c57600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611c7b5760018352611c8b565b8151600101808352811415611c5f575b505050610140511515611cdd576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b600435600855005b63fa67ae5a811415611df7573415611cfc57600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611d3b5760018352611d4b565b8151600101808352811415611d1f575b505050610140511515611d9d576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b600160043510151515611def576308c379a0610140526020610160526009610180527f64656c6179203d203000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b600435600f55005b6353d6fd59811415611f16573415611e0e57600080fd5b60043560a01c15611e1e57600080fd5b60243560011c15611e2e57600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415611e6d5760018352611e7d565b8151600101808352811415611e51575b505050610140511515611ecf576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b602435601060043560e05260c052604060c02055602435610140526004357ff6019ec0a78d156d249a1ec7579e2321f6ac7521d6e1d2eacf90ba4a184dcceb6020610140a2005b6301e1d114811415611f47573415611f2d57600080fd5b6006580161331d565b610140526101405160005260206000f35b630f73cea6811415611f78573415611f5e57600080fd5b60065801613349565b610140526101405160005260206000f35b63d13e56f1811415611fa9573415611f8f57600080fd5b6006580161340c565b610140526101405160005260206000f35b63ae074a098114156120ab573415611fc057600080fd5b60206101a060046318160ddd6101405261015c6002545afa611fe157600080fd5b601f3d11611fee57600080fd5b6000506101a0516101c0526101405161016051610180516101a0516101c0516006580161340c565b6101e0526101c0526101a0526101805261016052610140526101e051610200526101405161016051610180516101a0516101c0516101e05161020051600435610220526101c0516102405261020051610260526102605161024051610220516006580161346a565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c05160005260206000f35b639b05f5e48114156121ad5734156120c257600080fd5b60206101a060046318160ddd6101405261015c6002545afa6120e357600080fd5b601f3d116120f057600080fd5b6000506101a0516101c0526101405161016051610180516101a0516101c0516006580161340c565b6101e0526101c0526101a0526101805261016052610140526101e051610200526101405161016051610180516101a0516101c0516101e05161020051600435610220526101c051610240526102005161026052610260516102405161022051600658016134f0565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c05160005260206000f35b63441a3e7081141561273457601254156121c657600080fd5b600160125534156121d657600080fd5b6000541515612224576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b6020610260602463952ca92c6101e05233610200526101fc6002545afa61224a57600080fd5b601f3d1161225757600080fd5b60005061026051600f5481818301101561227057600080fd5b8082019050905043101515612286576001612296565b60103360e05260c052604060c020545b15156122e1576308c379a06102805260206102a052600d6102c0527f626c6f636b203c2064656c6179000000000000000000000000000000000000006102e0526102c050606461029cfd5b60043560206101e060246370a0823161016052336101805261017c6002545afa61230a57600080fd5b601f3d1161231757600080fd5b6000506101e0518082111561232c578061232e565b815b9050905061014052600061014051111515612388576308c379a061016052602061018052600a6101a0527f736861726573203d2030000000000000000000000000000000000000000000006101c0526101a050606461017cfd5b60206101e060046318160ddd6101805261019c6002545afa6123a957600080fd5b601f3d116123b657600080fd5b6000506101e051610200526101405161016051610180516101a0516101c0516101e051610200516006580161340c565b61022052610200526101e0526101c0526101a05261018052610160526101405261022051610240526101405161016051610180516101a0516101c0516101e05161020051610220516102405161014051610260526102005161028052610240516102a0526102a0516102805161026051600658016134f0565b610300526102405261022052610200526101e0526101c0526101a05261018052610160526101405261030051610160526009546101605111156125b957476101805260206102406024632e1a7d4d6101c05261016051600954808210156124c557600080fd5b808203905090506101e0526101dc60006003545af16124e357600080fd5b601f3d116124f057600080fd5b600050610240516101a05247610180518082101561250d57600080fd5b808203905090506101805260006101a05111156125645761016080516101a0518082101561253a57600080fd5b80820390509050815250600a80546101a0518082101561255957600080fd5b808203905090508155505b600a8054610180518082101561257957600080fd5b80820390509050815550600980546101805181818301101561259a57600080fd5b808201905090508155506009546101605111156125b957600954610160525b6002543b6125c657600080fd5b600060006044639dc29fac61018052336101a052610140516101c05261019c60006002545af16125f557600080fd5b6024356101605110151515612649576308c379a06101805260206101a052600c6101c0527f616d6f756e74203c206d696e00000000000000000000000000000000000000006101e0526101c050606461019cfd5b60098054610160518082101561265e57600080fd5b8082039050905081555061014051610160513361018052610160516101a0526101a05161018051600658016130db565b610160526101405260005060095447101515156126ea576308c379a06101805260206101a052600b6101c0527f62616c203c207661756c740000000000000000000000000000000000000000006101e0526101c050606461019cfd5b6101405161018052610160516101a052337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5686040610180a261016051600052600060125560206000f35b633347b9b281141561276557341561274b57600080fd5b6006580161355c565b610140526101405160005260206000f35b6367ff0b0681141561279657341561277c57600080fd5b600658016135bd565b610140526101405160005260206000f35b63c5ebeaec811415612a2e5734156127ad57600080fd5b60005415156127fb576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b60015415151561284a576308c379a0610140526020610160526006610180527f70617573656400000000000000000000000000000000000000000000000000006101a05261018050606461015cfd5b6003543314151561289a576308c379a061014052602061016052600d610180527f2166756e64206d616e61676572000000000000000000000000000000000000006101a05261018050606461015cfd5b61014051600658016135bd565b6101605261014052610160516101405260043561014051808211156128cc57806128ce565b815b9050905061016052600061016051111515612928576308c379a06101805260206101a052600a6101c0527f626f72726f77203d2030000000000000000000000000000000000000000000006101e0526101c050606461019cfd5b61014051610160513361018052610160516101a0526101a05161018051600658016130db565b610160526101405260005060098054610160518082101561296e57600080fd5b80820390509050815550600a80546101605181818301101561298f57600080fd5b8082019050905081555060095447101515156129ea576308c379a06101805260206101a052600b6101c0527f62616c203c207661756c740000000000000000000000000000000000000000006101e0526101c050606461019cfd5b60043561018052610160516101a052337fe1979fe4c35e0cef342fef5668e2c8e7a7e9f5d5d1ca8fee0ac6c427fa4153af6040610180a26101605160005260206000f35b63d8dad962811415612bc4573415612a4557600080fd5b6000541515612a93576308c379a061014052602061016052600c610180527f21696e697469616c697a656400000000000000000000000000000000000000006101a05261018050606461015cfd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415612ad25760018352612ae2565b8151600101808352811415612ab6575b505050610140511515612b34576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b476101405260095461014051101515612b8c576308c379a061016052602061018052600c6101a0527f62616c203e3d207661756c7400000000000000000000000000000000000000006101c0526101a050606461017cfd5b6101405160095561014051610160527f83a5bfe8bda9655fa2e9a9b551f1adb479366b2ee2f537d890c05e9f565837856020610160a1005b631dd19cb4811415612c62573415612bdb57600080fd5b60045433141515612c2b576308c379a061014052602061016052600a610180527f2174696d65206c6f636b000000000000000000000000000000000000000000006101a05261018050606461015cfd5b33610140524760095480821015612c4157600080fd5b80820390509050610160526101605161014051600658016130db565b600050005b6301681a62811415612dc6573415612c7957600080fd5b60043560a01c15612c8957600080fd5b600454610160526007546101805260006101405261014061012060006002818352015b610120516020026101600151331415612cc85760018352612cd8565b8151600101808352811415612cac575b505050610140511515612d2a576308c379a06101a05260206101c05260056101e0527f2161757468000000000000000000000000000000000000000000000000000000610200526101e05060646101bcfd5b60206101c060246370a0823161014052306101605261015c6004355afa612d5057600080fd5b601f3d11612d5d57600080fd5b6000506101c0516101e0526101405161016051610180516101a0516101c0516101e0516004356102005233610220526101e0516102405261024051610220516102005160065801613183565b6101e0526101c0526101a052610180526101605261014052600050005b63158ef93e811415612de9573415612ddd57600080fd5b60005460005260206000f35b635c975abb811415612e0c573415612e0057600080fd5b60015460005260206000f35b6363315637811415612e2f573415612e2357600080fd5b60025460005260206000f35b636209ec2d811415612e52573415612e4657600080fd5b60035460005260206000f35b63d085835a811415612e75573415612e6957600080fd5b60045460005260206000f35b63b127df87811415612e98573415612e8c57600080fd5b60055460005260206000f35b63452a9320811415612ebb573415612eaf57600080fd5b60065460005260206000f35b63f851a440811415612ede573415612ed257600080fd5b60075460005260206000f35b63ecf70858811415612f01573415612ef557600080fd5b60085460005260206000f35b639994673d811415612f24573415612f1857600080fd5b60095460005260206000f35b630dca59c1811415612f47573415612f3b57600080fd5b600a5460005260206000f35b631b4a2001811415612f6a573415612f5e57600080fd5b600b5460005260206000f35b63c3535b52811415612f8d573415612f8157600080fd5b600c5460005260206000f35b6344b81396811415612fb0573415612fa457600080fd5b600d5460005260206000f35b6342232716811415612fd3573415612fc757600080fd5b600e5460005260206000f35b63d98f6088811415612ff6573415612fea57600080fd5b600f5460005260206000f35b639b19251a81141561303757341561300d57600080fd5b60043560a01c1561301d57600080fd5b601060043560e05260c052604060c0205460005260206000f35b6392f73fc081141561305a57341561304e57600080fd5b60115460005260206000f35b505b600354331415156130ac576308c379a061014052602061016052600d610180527f2166756e64206d616e61676572000000000000000000000000000000000000006101a05261018050606461015cfd5b3461014052337fefc0288202e432ade6bf71491d0001d7e389ad4f8e4e9c7aa038dd1a563efc606020610140a2005b6101805261014052610160526000610140511415151561313a576308c379a06101a05260206101c052600e6101e0527f746f203d20302061646472657373000000000000000000000000000000000000610200526101e05060646101bcfd5b60006101a0526101a08051602001806101e08284600060045af161315d57600080fd5b5050600060006101e05161020061016051610140515af161317d57600080fd5b61018051565b6101a05261014052610160526101805260006004610220527fa9059cbb000000000000000000000000000000000000000000000000000000006102405261022060048060208461028001018260208501600060045af15050805182019150506101605160208261028001015260208101905061018051602082610280010152602081019050806102805261028090508051602001806103208284600060045af161322c57600080fd5b505060206103e0610320516103406000610140515af161324b57600080fd5b60203d8082111561325c578061325e565b815b905090506103c0526103c08051602001806101c08284600060045af161328357600080fd5b505060006101c0511115613317576101c08060200151600082518060209013156132ac57600080fd5b80919012156132ba57600080fd5b806020036101000a820490509050905015151515613317576308c379a061022052602061024052600f610260527f7472616e73666572206661696c656400000000000000000000000000000000006102805261026050606461023cfd5b6101a051565b61014052600954600a5481818301101561333657600080fd5b8082019050905060005260005161014051565b6101405242600c548082101561335e57600080fd5b80820390509050600e54808202821582848304141761337c57600080fd5b8090509050905061016052670de0b6b3a76400006101605110156133fc57600d546101805261018051610160516101805180820282158284830414176133c157600080fd5b80905090509050670de0b6b3a764000080820490509050808210156133e557600080fd5b80820390509050600052600051610140515661340a565b600060005260005161014051565b005b61014052610140516006580161331d565b610160526101405261016051610140516101605160065801613349565b610180526101605261014052610180518082101561345757600080fd5b8082039050905060005260005161014051565b6101a0526101405261016052610180526101405115156134925760006000526000516101a051565b6101605115156134ac57610140516000526000516101a051565b610140516101605180820282158284830414176134c857600080fd5b809050905090506101805180806134de57600080fd5b8204905090506000526000516101a051565b6101a0526101405261016052610180526101405115156135185760006000526000516101a051565b6101405161018051808202821582848304141761353457600080fd5b8090509050905061016051808061354a57600080fd5b8204905090506000526000516101a051565b6101405261014051610160516006580161340c565b610180526101605261014052610180516101605261016051600b5480820282158284830414176135a057600080fd5b809050905090506127108082049050905060005260005161014051565b6101405260005415156135d15760016135e5565b600154156135e05760016135e5565b600354155b156135f857600060005260005161014051565b61014051610160516006580161355c565b610180526101605261014052610180516101605261016051600954111561365157600954610160518082101561363e57600080fd5b8082039050905060005260005161014051565b60006000526000516101405156
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000de07f45688cb6cfaac398c1485860e186d55996d00000000000000000000000086d10751b18f3fe331c146546868a07224a8598b0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : uToken (address): 0xDe07f45688cb6CfAaC398c1485860e186D55996D
Arg [1] : guardian (address): 0x86d10751B18F3fE331C146546868a07224A8598B
Arg [2] : oldVault (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000de07f45688cb6cfaac398c1485860e186d55996d
Arg [1] : 00000000000000000000000086d10751b18f3fe331c146546868a07224a8598b
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
MATIC | 100.00% | $0.410649 | 0.007569 | $0.003108 |
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.