0 txs
0 calls
constructor
constructor(address dataProvider)
functions
borrowApyPerSecond
viewfunction borrowApyPerSecond(address borrowToken) view returns (uint64)
borrowingOf
viewfunction borrowingOf(address user, address borrowToken) view returns (uint256)
borrowingOf
viewfunction borrowingOf(address user) view returns (tuple[], uint256)
borrowTokenConfig
viewfunction borrowTokenConfig(address borrowToken) view returns (tuple)
borrowTokenMinShares
viewfunction borrowTokenMinShares(address borrowToken) view returns (uint128)
collateralOf
viewfunction collateralOf(address user) view returns (tuple[], uint256)
collateralTokenConfig
viewfunction collateralTokenConfig(address collateralToken) view returns (tuple)
convertCollateralTokenToUsd
viewfunction convertCollateralTokenToUsd(address collateralToken, uint256 collateralAmount) view returns (uint256)
convertUsdToCollateralToken
viewfunction convertUsdToCollateralToken(address collateralToken, uint256 debtUsdAmount) view returns (uint256)
DEBT_MANAGER_ADMIN_ROLE
viewfunction DEBT_MANAGER_ADMIN_ROLE() view returns (bytes32)
ensureHealth
viewfunction ensureHealth(address user) view
etherFiDataProvider
viewfunction etherFiDataProvider() view returns (address)
getBorrowingPowerAndTotalBorrowing
viewfunction getBorrowingPowerAndTotalBorrowing(address user, tuple[] tokenAmounts) view returns (uint256, uint256)
getBorrowTokens
viewfunction getBorrowTokens() view returns (address[])
getCollateralTokens
viewfunction getCollateralTokens() view returns (address[])
getCollateralValueInUsd
viewfunction getCollateralValueInUsd(address user) view returns (uint256)
getCurrentIndex
viewfunction getCurrentIndex(address borrowToken) view returns (uint256)
getCurrentState
viewfunction getCurrentState() view returns (tuple[] borrowings, uint256 totalBorrowingsInUsd, tuple[] totalLiquidStableAmounts)
getDebtManagerAdmin
viewfunction getDebtManagerAdmin() view returns (address)
getMaxBorrowAmount
viewfunction getMaxBorrowAmount(address user, bool forLtv) view returns (uint256)
getUserCollateralForToken
viewfunction getUserCollateralForToken(address safe, address token) view returns (uint256, uint256)
getUserCurrentState
viewfunction getUserCurrentState(address user) view returns (tuple[] totalCollaterals, uint256 totalCollateralInUsd, tuple[] borrowings, uint256 totalBorrowings)
HUNDRED_PERCENT
viewfunction HUNDRED_PERCENT() view returns (uint256)
isBorrowToken
viewfunction isBorrowToken(address token) view returns (bool)
isCollateralToken
viewfunction isCollateralToken(address token) view returns (bool)
liquidatable
viewfunction liquidatable(address user) view returns (bool)
MAX_BORROW_APY
viewfunction MAX_BORROW_APY() view returns (uint64)
paused
viewfunction paused() view returns (bool)
PRECISION
viewfunction PRECISION() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
remainingBorrowingCapacityInUSD
viewfunction remainingBorrowingCapacityInUSD(address user) view returns (uint256)
roleRegistry
viewfunction roleRegistry() view returns (address)
SIX_DECIMALS
viewfunction SIX_DECIMALS() view returns (uint256)
supplierBalance
viewfunction supplierBalance(address supplier, address borrowToken) view returns (uint256)
supplierBalance
viewfunction supplierBalance(address supplier) view returns (tuple[], uint256)
totalBorrowingAmount
viewfunction totalBorrowingAmount(address borrowToken) view returns (uint256)
totalBorrowingAmounts
viewfunction totalBorrowingAmounts() view returns (tuple[], uint256)
totalSupplies
viewfunction totalSupplies() view returns (tuple[], uint256)
totalSupplies
viewfunction totalSupplies(address borrowToken) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
borrow
nonpayablefunction borrow(uint8 binSponsor, address token, uint256 amount)
liquidate
nonpayablefunction liquidate(address user, address borrowToken, address[] collateralTokensPreference)
pause
nonpayablefunction pause()
repay
nonpayablefunction repay(address user, address token, uint256 amount)
setAdminImpl
nonpayablefunction setAdminImpl(address newImpl)
supply
nonpayablefunction supply(address user, address borrowToken, uint256 amount)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawBorrowToken
nonpayablefunction withdrawBorrowToken(address borrowToken, uint256 amount)
events
BorrowApySet
event BorrowApySet(address indexed token, uint256 oldApy, uint256 newApy)
Borrowed
event Borrowed(address indexed user, address indexed token, uint256 amount)
BorrowTokenAdded
event BorrowTokenAdded(address token)
BorrowTokenConfigSet
event BorrowTokenConfigSet(address indexed token, (uint256 interestIndexSnapshot, uint256 totalNormalizedBorrowingAmount, uint256 totalSharesOfBorrowTokens, uint64 lastUpdateTimestamp, uint64 borrowApy, uint128 minShares) config)
BorrowTokenRemoved
event BorrowTokenRemoved(address token)
CollateralTokenAdded
event CollateralTokenAdded(address token)
CollateralTokenConfigSet
event CollateralTokenConfigSet(address indexed collateralToken, (uint80 ltv, uint80 liquidationThreshold, uint96 liquidationBonus) oldConfig, (uint80 ltv, uint80 liquidationThreshold, uint96 liquidationBonus) newConfig)
CollateralTokenRemoved
event CollateralTokenRemoved(address token)
Initialized
event Initialized(uint64 version)
InterestIndexUpdated
event InterestIndexUpdated(address indexed borrowToken, uint256 oldIndex, uint256 newIndex)
Liquidated
event Liquidated(address indexed liquidator, address indexed user, address indexed debtTokenToLiquidate, (address token, uint256 amount, uint256 liquidationBonus)[] userCollateralLiquidated, uint256 beforeDebtAmount, uint256 debtAmountLiquidated)
LiquidationThresholdUpdated
event LiquidationThresholdUpdated(uint256 oldThreshold, uint256 newThreshold)
MinSharesOfBorrowTokenSet
event MinSharesOfBorrowTokenSet(address indexed token, uint128 oldMinShares, uint128 newMinShares)
Paused
event Paused(address account)
Repaid
event Repaid(address indexed user, address indexed payer, address indexed token, uint256 amount)
Supplied
event Supplied(address indexed sender, address indexed user, address indexed token, uint256 amount)
TotalBorrowingUpdated
event TotalBorrowingUpdated(address indexed borrowToken, uint256 totalBorrowingAmtBeforeInterest, uint256 totalBorrowingAmtAfterInterest)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
UserInterestAdded
event UserInterestAdded(address indexed user, uint256 borrowingAmtBeforeInterest, uint256 borrowingAmtAfterInterest)
WithdrawBorrowToken
event WithdrawBorrowToken(address indexed withdrawer, address indexed borrowToken, uint256 amount)
errors
AccountUnhealthy
error AccountUnhealthy()
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyBorrowToken
error AlreadyBorrowToken()
AlreadyCollateralToken
error AlreadyCollateralToken()
ArrayLengthMismatch
error ArrayLengthMismatch()
BorrowAmountZero
error BorrowAmountZero()
BorrowTokenCannotBeRemovedFromCollateral
error BorrowTokenCannotBeRemovedFromCollateral()
BorrowTokenConfigAlreadySet
error BorrowTokenConfigAlreadySet()
BorrowTokenStillInTheSystem
error BorrowTokenStillInTheSystem()
CannotLiquidateYet
error CannotLiquidateYet()
CollateralPreferenceIsEmpty
error CollateralPreferenceIsEmpty()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
EtherFiSafeCannotSupplyDebtTokens
error EtherFiSafeCannotSupplyDebtTokens()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
IndexOutOfBounds
error IndexOutOfBounds()
InsufficientBorrowShares
error InsufficientBorrowShares()
InsufficientCollateral
error InsufficientCollateral()
InsufficientCollateralToRepay
error InsufficientCollateralToRepay()
InsufficientLiquidity
error InsufficientLiquidity()
InsufficientLiquidityPleaseTryAgainLater
error InsufficientLiquidityPleaseTryAgainLater()
InvalidInitialization
error InvalidInitialization()
InvalidValue
error InvalidValue()
LiquidAmountLesserThanRequired
error LiquidAmountLesserThanRequired()
LiquidatableAmountIsZero
error LiquidatableAmountIsZero()
LtvCannotBeGreaterThanLiquidationThreshold
error LtvCannotBeGreaterThanLiquidationThreshold()
NoBorrowTokenLeft
error NoBorrowTokenLeft()
NoCollateralTokenLeft
error NoCollateralTokenLeft()
NotABorrowToken
error NotABorrowToken()
NotACollateralToken
error NotACollateralToken()
NotAEtherFiSafe
error NotAEtherFiSafe()
NotInitializing
error NotInitializing()
OnlyEtherFiSafe
error OnlyEtherFiSafe()
OnlyRoleRegistryOwner
error OnlyRoleRegistryOwner()
OnlyUserCanRepayWithCollateral
error OnlyUserCanRepayWithCollateral()
OraclePriceZero
error OraclePriceZero()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RepaymentAmountIsZero
error RepaymentAmountIsZero()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SharesCannotBeLessThanMinShares
error SharesCannotBeLessThanMinShares()
SharesCannotBeZero
error SharesCannotBeZero()
SupplyCapBreached
error SupplyCapBreached()
TotalBorrowingsForUserNotZero
error TotalBorrowingsForUserNotZero()
TotalCollateralAmountNotZero
error TotalCollateralAmountNotZero()
Unauthorized
error Unauthorized()
UnsupportedBorrowToken
error UnsupportedBorrowToken()
UnsupportedCollateralToken
error UnsupportedCollateralToken()
UnsupportedRepayToken
error UnsupportedRepayToken()
UserStillLiquidatable
error UserStillLiquidatable()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroCollateralValue
error ZeroCollateralValue()
ZeroTotalBorrowTokens
error ZeroTotalBorrowTokens()
creation bytecode
0x60c060405230608052348015610013575f5ffd5b506040516148a83803806148a883398101604081905261003291610101565b6001600160a01b03811660a0528061004861004f565b505061012e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561009f5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100fe5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610111575f5ffd5b81516001600160a01b0381168114610127575f5ffd5b9392505050565b60805160a0516147056101a35f395f81816109a001528181610aad01528181610de8015281816113620152818161173201528181611c1a01528181611d8001528181611f0d0152818161249e01528181612afb015261369001525f81816130cb015281816130f401526132ad01526147055ff3fe6080604052600436106102ad575f3560e01c8063748288f411610174578063c5b66b4a116100db578063eda7fbcd11610094578063f9fba81b1161006e578063f9fba81b1461098f578063fc0cfeee146109c2578063fefb0549146109e1578063ffec70af14610a00576102ad565b8063eda7fbcd146108f6578063f0ba097e14610915578063f6513bfe14610970576102ad565b8063c5b66b4a14610833578063c94f8d4214610852578063cebcff8914610871578063d068cdc514610890578063d6d3ec9c146108a4578063ea515161146108d7576102ad565b80639782e8211161012d5780639782e8211461076a578063a56c8ff714610789578063aaf5eb68146107a8578063ad3cb1cc146107c3578063afe6ab0014610800578063b58eb63f1461081f576102ad565b8063748288f4146106455780637b702c13146106745780637e5cdc5e146106935780638456cb591461071857806392f1079a1461072c578063944e2f5e1461074b576102ad565b80634142152e116102185780635a52477a116101d15780635a52477a146105765780635c975abb1461059757806364752eec146105ba57806369d84428146105d95780636ed93dd0146105f8578063711eb22b14610614576102ad565b80634142152e146104ab5780634231a400146104ca5780634766162c146105015780634f1ef2861461053057806352d1902d146105435780635806165214610557576102ad565b806324d86a1b1161026a57806324d86a1b146103d55780632b180bcf146104165780632ef3d2361461042c578063378aa701146104405780633f4ba83a14610463578063408130f514610477576102ad565b806308c73259146102fb5780630c0a769b1461032c578063186c66cc1461034b5780631aefb107146103785780631da649cf146103975780631de233e8146103b6575b3480156102b8575f5ffd5b507f49d4a010ddc5f453173525f0adf6cfb97318b551312f237c11fd9f432a1f5d21365f80375f5f365f84545af43d5f5f3e8080156102f5573d5ff35b3d5ffd5b005b348015610306575f5ffd5b5061030f610a1f565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610337575f5ffd5b506102f9610346366004613dd2565b610a4d565b348015610356575f5ffd5b5061036a610365366004613e10565b610ccf565b604051610323929190613e83565b348015610383575f5ffd5b5061036a610392366004613e10565b610de2565b3480156103a2575f5ffd5b506102f96103b1366004613dd2565b610f46565b3480156103c1575f5ffd5b5061036a6103d0366004613e10565b611031565b3480156103e0575f5ffd5b506104087fcda823d74cf986ec31c71a83e1e23c851af1104972cb36530a474c8f1f53eb5a81565b604051908152602001610323565b348015610421575f5ffd5b50610408620f424081565b348015610437575f5ffd5b5061036a61114b565b34801561044b575f5ffd5b506104546112af565b60405161032393929190613ea4565b34801561046e575f5ffd5b506102f96112d0565b348015610482575f5ffd5b50610496610491366004613ed8565b611337565b60408051928352602083019190915201610323565b3480156104b6575f5ffd5b506104086104c5366004613ed8565b61146c565b3480156104d5575f5ffd5b506104e96104e4366004613e10565b6114bc565b6040516001600160801b039091168152602001610323565b34801561050c575f5ffd5b5061052061051b366004613e10565b6114f9565b6040519015158152602001610323565b6102f961053e366004613f7b565b61150c565b34801561054e575f5ffd5b5061040861152b565b348015610562575f5ffd5b50610408610571366004613ed8565b611546565b348015610581575f5ffd5b5061058a6115cc565b6040516103239190614020565b3480156105a2575f5ffd5b505f5160206146d95f395f51905f525460ff16610520565b3480156105c5575f5ffd5b506104086105d4366004613e10565b6115de565b3480156105e4575f5ffd5b506102f96105f3366004613e10565b6116c9565b348015610603575f5ffd5b5061040868056bc75e2d6310000081565b34801561061f575f5ffd5b5061062d650171268b5ad481565b6040516001600160401b039091168152602001610323565b348015610650575f5ffd5b5061066461065f366004613e10565b611701565b604051610323949392919061406b565b34801561067f575f5ffd5b5061040861068e366004613e10565b61172a565b34801561069e575f5ffd5b506106b26106ad366004613e10565b61187b565b60405161032391905f60c0820190508251825260208301516020830152604083015160408301526001600160401b0360608401511660608301526001600160401b0360808401511660808301526001600160801b0360a08401511660a083015292915050565b348015610723575f5ffd5b506102f9611933565b348015610737575f5ffd5b50610520610746366004613e10565b611998565b348015610756575f5ffd5b5061062d610765366004613e10565b6119ae565b348015610775575f5ffd5b50610408610784366004613e10565b6119eb565b348015610794575f5ffd5b506102f96107a33660046140a7565b6119f5565b3480156107b3575f5ffd5b50610408670de0b6b3a764000081565b3480156107ce575f5ffd5b506107f3604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161032391906140d1565b34801561080b575f5ffd5b5061040861081a3660046140a7565b611bf1565b34801561082a575f5ffd5b5061058a611d31565b34801561083e575f5ffd5b5061040861084d3660046140a7565b611d43565b34801561085d575f5ffd5b5061040861086c366004613e10565b611e68565b34801561087c575f5ffd5b5061040861088b366004614113565b611efa565b34801561089b575f5ffd5b5061036a61213c565b3480156108af575f5ffd5b507f49d4a010ddc5f453173525f0adf6cfb97318b551312f237c11fd9f432a1f5d215461030f565b3480156108e2575f5ffd5b506102f96108f1366004614161565b61224d565b348015610901575f5ffd5b506102f9610910366004614225565b612310565b348015610920575f5ffd5b5061093461092f366004613e10565b6125e9565b60408051825169ffffffffffffffffffff908116825260208085015190911690820152918101516001600160601b031690820152606001610323565b34801561097b575f5ffd5b5061040861098a366004613e10565b612672565b34801561099a575f5ffd5b5061030f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109cd575f5ffd5b506102f96109dc366004613e10565b6126ad565b3480156109ec575f5ffd5b506104966109fb366004614245565b612760565b348015610a0b575f5ffd5b50610520610a1a366004613e10565b6127fa565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f500546001600160a01b031690565b610a55612819565b610a5d612849565b5f610a666128b6565b9050610a7183611998565b610a8e5760405163454467e960e11b815260040160405180910390fd5b60405163b7ca418b60e01b81526001600160a01b0385811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90602401602060405180830381865afa158015610af2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b169190614318565b15610b345760405163f3f2520d60e01b815260040160405180910390fd5b6001600160a01b0383165f908152600280830160205260408220015415610b8d576001600160a01b0384165f908152600280840160205260409091200154610b8890610b7f866128da565b8591905f612959565b610b8f565b825b6001600160a01b038087165f9081526005850160209081526040808320938916835292905290812080549293508392909190610bcc908490614347565b90915550506001600160a01b0384165f908152600280840160205260408220018054839290610bfc908490614347565b90915550506001600160a01b0384165f908152600283810160205260409091206003810154910154600160801b9091046001600160801b03161115610c54576040516359e4c8dd60e01b815260040160405180910390fd5b610c696001600160a01b03851633308661299b565b836001600160a01b0316856001600160a01b0316336001600160a01b03167f50413727b37795d672f09d0997645a955fa227befaefdd4adb611542dea3fd8086604051610cb891815260200190565b60405180910390a45050610cca612a08565b505050565b60605f5f610cdb6128b6565b90505f610cea82600101612a32565b90505f816001600160401b03811115610d0557610d05613f0f565b604051908082528060200260200182016040528015610d4957816020015b604080518082019091525f8082526020820152815260200190600190039081610d235790505b5090505f80805b84811015610dd3575f610d666001880183612a83565b90505f610d738b8361146c565b90508015610dc957610d858186614347565b94506040518060400160405280836001600160a01b0316815260200182815250868581518110610db757610db761435a565b60200260200101819052508360010193505b5050600101610d50565b50825290969095509350505050565b60605f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c40bf77d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e42573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e66919061436e565b6040516306c790df60e11b81526001600160a01b0386811660048301529190911690630d8f21be906024015f60405180830381865afa158015610eab573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ed29190810190614389565b80519091505f805b82811015610f3957610f25848281518110610ef757610ef761435a565b60200260200101515f0151858381518110610f1457610f1461435a565b602002602001015160200151611d43565b610f2f9083614347565b9150600101610eda565b5091959194509092505050565b610f4e612819565b610f56612849565b5f610f5f6128b6565b9050610f6a84612adc565b610f7383612b84565b506001600160a01b0383165f90815260028201602052604081205490610f998585611d43565b6001600160a01b038088165f9081526004860160209081526040808320938a1683529290529081205491925090610fd09084612c42565b905081811015610fea57809150610fe78683611bf1565b94505b5f610ff58385612c57565b9050805f036110175760405163d288c88d60e01b815260040160405180910390fd5b6110248789888685612c6c565b5050505050610cca612a08565b60605f5f6110486110406128b6565b600101612d5d565b80519091505f816001600160401b0381111561106657611066613f0f565b6040519080825280602002602001820160405280156110aa57816020015b604080518082019091525f80825260208201528152602001906001900390816110845790505b5090505f80805b84811015610dd3575f8682815181106110cc576110cc61435a565b602002602001015190505f6110e18b83611546565b90508015611141576110f38282611d43565b6110fd9086614347565b94506040518060400160405280836001600160a01b031681526020018281525086858151811061112f5761112f61435a565b60200260200101819052508360010193505b50506001016110b1565b60605f5f61115a6110406128b6565b80519091505f816001600160401b0381111561117857611178613f0f565b6040519080825280602002602001820160405280156111bc57816020015b604080518082019091525f80825260208201528152602001906001900390816111965790505b5090505f80805b848110156112a1575f6111ee8783815181106111e1576111e161435a565b602002602001015161187b565b90505f6112138884815181106112065761120661435a565b60200260200101516115de565b90505f611224836020015183612c42565b905080156112935760405180604001604052808a86815181106112495761124961435a565b60200260200101516001600160a01b03168152602001828152508786815181106112755761127561435a565b602090810291909101015261128a8187614347565b95508460010194505b8360010193505050506111c3565b508252909590945092505050565b60605f60606112bc61114b565b90935091506112c9612e31565b9050909192565b6112d8610a1f565b6040516317bf301f60e21b81523360048201526001600160a01b039190911690635efcc07c906024015f6040518083038186803b158015611317575f5ffd5b505afa158015611329573d5f5f3e3d5ffd5b50505050611335612fb8565b565b5f5f611342836114f9565b61135f5760405163eece95c360e01b815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c40bf77d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e0919061436e565b60405163408130f560e01b81526001600160a01b0387811660048301528681166024830152919091169063408130f590604401602060405180830381865afa15801561142e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611452919061443d565b90505f61145f8583611d43565b9196919550909350505050565b5f5f6114766128b6565b6001600160a01b038086165f9081526004830160209081526040808320938816835292905220549091506114b2906114ad856115de565b612c42565b9150505b92915050565b5f6114c56128b6565b6001600160a01b03929092165f9081526002909201602052506040902060030154600160801b90046001600160801b031690565b5f6114b6826115066128b6565b90613017565b6115146130c0565b61151d82613164565b61152782826131e1565b5050565b5f6115346132a2565b505f5160206146b95f395f51905f5290565b5f5f6115506128b6565b6001600160a01b0384165f90815260028083016020526040822001549192500361157d575f9150506114b6565b6114b2611589846128da565b6001600160a01b038086165f81815260028087016020908152604080842090920154948b1683526005880181528183209383529290925290812054929190612959565b60606115d96110406128b6565b905090565b5f5f6115e86128b6565b6001600160a01b0384165f908152600291820160209081526040808320815160c0810183528154815260018201549381019390935293840154908201526003909201546001600160401b0380821660608501819052600160401b83049091166080850152600160801b9091046001600160801b031660a0840152919250906116709042614454565b9050805f0361168157505192915050565b5f6116b08284608001516001600160401b031661169e9190614467565b84519068056bc75e2d631000006132eb565b83519091506116c0908290614347565b95945050505050565b5f6116d382610ccf565b9150506116e1826001611efa565b811115611527576040516302fb7a9160e31b815260040160405180910390fd5b60605f60605f61171085610de2565b909450925061171e85610ccf565b94969395509392915050565b5f5f5f90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c40bf77d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b0919061436e565b6040516306c790df60e11b81526001600160a01b0386811660048301529190911690630d8f21be906024015f60405180830381865afa1580156117f5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261181c9190810190614389565b80519091505f5b818110156118715761185d8382815181106118405761184061435a565b60200260200101515f0151848381518110610f1457610f1461435a565b6118679085614347565b9350600101611823565b5091949350505050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101919091526118b46128b6565b6001600160a01b039092165f90815260029283016020908152604091829020825160c0810184528154815260018201549281019290925293840154918101919091526003909201546001600160401b038082166060850152600160401b82041660808401526001600160801b03600160801b9091041660a08301525090565b61193b610a1f565b604051632fd0067b60e21b81523360048201526001600160a01b03919091169063bf4019ec906024015f6040518083038186803b15801561197a575f5ffd5b505afa15801561198c573d5f5f3e3d5ffd5b505050506113356133a1565b5f6114b6826119a56128b6565b60010190613017565b5f6119b76128b6565b6001600160a01b03929092165f9081526002909201602052506040902060030154600160401b90046001600160401b031690565b5f6114b6826128da565b6119fd612819565b5f611a066128b6565b90505f611a12846128da565b9050805f03611a3457604051631977439160e21b815260040160405180910390fd5b6001600160a01b0384165f9081526002808401602052604082200154611a5e908590846001612959565b9050805f03611a8057604051633122bc0960e21b815260040160405180910390fd5b335f90815260058401602090815260408083206001600160a01b0389168452909152902054811115611ac55760405163086fa77160e41b815260040160405180910390fd5b6001600160a01b0385165f9081526002808501602052604082200154611aec908390614454565b90508015801590611b2857506001600160a01b0386165f908152600285016020526040902060030154600160801b90046001600160801b031681105b15611b46576040516359e4c8dd60e01b815260040160405180910390fd5b335f90815260058501602090815260408083206001600160a01b038a16845290915281208054849290611b7a908490614454565b90915550506001600160a01b0386165f8181526002808701602052604090912001829055611ba99033876133e9565b6040518581526001600160a01b0387169033907f2930a7b877d817b672bfa2846d236a1da511a35f283e7a75c55d4124216841e69060200160405180910390a3505050505050565b5f611bfb836114f9565b611c185760405163eece95c360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630a065fb66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c98919061436e565b6040516315d5220f60e31b81526001600160a01b038581166004830152919091169063aea9107890602401602060405180830381865afa158015611cde573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d02919061443d565b611d0b8461341a565b611d1690600a614551565b611d209084614467565b611d2a9190614573565b9392505050565b60606115d9611d3e6128b6565b612d5d565b5f611d4d836114f9565b611d6a5760405163eece95c360e01b815260040160405180910390fd5b611d738361341a565b611d7e90600a614551565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630a065fb66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dfe919061436e565b6040516315d5220f60e31b81526001600160a01b038681166004830152919091169063aea9107890602401602060405180830381865afa158015611e44573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d16919061443d565b5f5f611e726128b6565b6001600160a01b0384165f90815260029182016020908152604091829020825160c08101845281548152600182015492810183905293810154928401929092526003909101546001600160401b038082166060850152600160401b8204166080840152600160801b90046001600160801b031660a0830152909150611d2a906114ad856115de565b5f5f611f046128b6565b90505f5f90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c40bf77d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f67573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8b919061436e565b6040516306c790df60e11b81526001600160a01b0388811660048301529190911690630d8f21be906024015f60405180830381865afa158015611fd0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ff79190810190614389565b80519091505f5b81811015612130575f61203984838151811061201c5761201c61435a565b60200260200101515f0151858481518110610f1457610f1461435a565b905087156120b3576120a2866003015f86858151811061205b5761205b61435a565b602090810291909101810151516001600160a01b031682528101919091526040015f90812054839169ffffffffffffffffffff9091169068056bc75e2d6310000090612959565b6120ac9086614347565b9450612127565b61211a866003015f8685815181106120cd576120cd61435a565b602090810291909101810151516001600160a01b031682528101919091526040015f908120548391600160501b90910469ffffffffffffffffffff169068056bc75e2d6310000090612959565b6121249086614347565b94505b50600101611ffe565b50919695505050505050565b60605f5f61214b6110406128b6565b80519091505f816001600160401b0381111561216957612169613f0f565b6040519080825280602002602001820160405280156121ad57816020015b604080518082019091525f80825260208201528152602001906001900390816121875790505b5090505f80805b848110156112a1575f8682815181106121cf576121cf61435a565b602002602001015190505f6121e3826119eb565b90508015612243576121f58282611d43565b6121ff9086614347565b94506040518060400160405280836001600160a01b03168152602001828152508685815181106122315761223161435a565b60200260200101819052508360010193505b50506001016121b4565b612255612819565b61225d612849565b80515f0361227e5760405163bd64745560e01b815260040160405180910390fd5b61228782612b84565b505f6122916128b6565b6001600160a01b0384165f908152600291909101602052604090205490506122b883611998565b6122d55760405163454467e960e11b815260040160405180910390fd5b6122de846127fa565b6122fb57604051632597221560e01b815260040160405180910390fd5b6123078484848461347b565b50610cca612a08565b612318612819565b612320612849565b61232933612adc565b5f6123326128b6565b905061233d83611998565b61235a5760405163454467e960e11b815260040160405180910390fd5b5f61236484612b84565b90505f6123718585611d43565b90505f61237e8284612c57565b9050805f036123a0576040516323921dc560e01b815260040160405180910390fd5b335f90815260048501602090815260408083206001600160a01b038a168452909152812080548392906123d4908490614347565b90915550506001600160a01b0386165f90815260028501602052604081206001018054839290612405908490614347565b909155506124149050336116c9565b6040516370a0823160e01b815230600482015285906001600160a01b038816906370a0823190602401602060405180830381865afa158015612458573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247c919061443d565b101561249b5760405163bb55fd2760e01b815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663882d16986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124f8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061251c919061436e565b6001600160a01b03166391f4d6a5896040518263ffffffff1660e01b8152600401612547919061459a565b602060405180830381865afa158015612562573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612586919061436e565b905061259c6001600160a01b03881682886133e9565b6040518681526001600160a01b0388169033907f3fc499aeb0bb1cb58b6de8b02b3f86f4e7394e9690bef0110e32ced8a56310459060200160405180910390a35050505050610cca612a08565b604080516060810182525f808252602082018190529181019190915261260d6128b6565b6001600160a01b03929092165f908152600390920160209081526040928390208351606081018552905469ffffffffffffffffffff8082168352600160501b82041692820192909252600160a01b9091046001600160601b0316928101929092525090565b5f5f61267f836001611efa565b90505f61268b84610ccf565b91505080821161269b575f6126a5565b6126a58183614454565b949350505050565b336126b6610a1f565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126f1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612715919061436e565b6001600160a01b03161461273c5760405163ab1899a760e01b815260040160405180910390fd5b7f49d4a010ddc5f453173525f0adf6cfb97318b551312f237c11fd9f432a1f5d2155565b5f5f5f61276b6128b6565b84519091505f805b828110156127df575f6127ae8883815181106127915761279161435a565b60200260200101515f0151898481518110610f1457610f1461435a565b90506127ca856003015f8a858151811061205b5761205b61435a565b6127d49084614347565b925050600101612773565b505f6127ea88610ccf565b9299929850919650505050505050565b5f5f61280583610ccf565b915050612812835f611efa565b1092915050565b5f5160206146d95f395f51905f525460ff16156113355760405163d93c066560e01b815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c1561288957604051633ee5aeb560e01b815260040160405180910390fd5b61133560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b9061351a565b7f607698a05bce028f7bdc9529d6ab4a3ba381baf9d53007699c53d9e5dd543c0090565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561291e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612942919061443d565b61294f8361081a85611e68565b6114b69190614347565b5f61298661296683613521565b801561298157505f848061297c5761297c61455f565b868809115b151590565b6129918686866132eb565b6116c09190614347565b6040516001600160a01b038481166024830152838116604483015260648201839052612a029186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061354d565b50505050565b6113355f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006128b0565b63978aab926004525f8181526024812080548060a01b60a01c8060011c9350808260601c1517612a7b57600193508383015415612a7b57600293508383015415612a7b57600393505b505050919050565b63978aab926004525f828152602481208281015460601c915068fbb67fda52d4bfb8bf82141582029150612ab684612a32565b8310612ad557604051634e23d03560e01b815260040160405180910390fd5b5092915050565b60405163b7ca418b60e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90602401602060405180830381865afa158015612b40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b649190614318565b612b81576040516334d0b49960e01b815260040160405180910390fd5b50565b5f5f612b8e6128b6565b6001600160a01b0384165f908152600291909101602052604090206003810154909150426001600160401b0390911603612bc9575492915050565b8054612bd4846115de565b80835560038301805467ffffffffffffffff1916426001600160401b03161790556040805183815260208101929092526001600160a01b038616917fc6ecd996cf998cfeedb2b1379b047e8579d888439dacbc60641c6dfd07f1f802910160405180910390a2505492915050565b5f611d2a8383670de0b6b3a764000084612959565b5f611d2a83670de0b6b3a76400008484612959565b5f612c756128b6565b6001600160a01b038087165f9081526004830160209081526040808320938b16835292905290812080549293508492909190612cb2908490614454565b90915550506001600160a01b0386165f90815260028201602052604081206001018054849290612ce3908490614454565b90915550612cfe90506001600160a01b03871633308761299b565b856001600160a01b0316336001600160a01b0316866001600160a01b03167f861660e9b7ead7183d53fe928b5638c7b57a7bcf16a89d7fdb04db65ce3ad6d586604051612d4d91815260200190565b60405180910390a4505050505050565b63978aab926004525f818152602481206060915068fbb67fda52d4bfb8bf81548060a01b60a01c6040519450846020018260601c9250838314158302815281612deb578215612de657600191508185015460601c92508215612de6578284141590920260208301525060028381015460601c918215612de6576003915083831415830260408201525b612e1b565b600191821c915b82811015612e19578581015460601c858114158102600583901b8401529350600101612df2565b505b8186528160051b81016040525050505050919050565b60605f612e3f6110406128b6565b80519091505f816001600160401b03811115612e5d57612e5d613f0f565b604051908082528060200260200182016040528015612ea157816020015b604080518082019091525f8082526020820152815260200190600190039081612e7b5790505b5090505f80805b84811015612fad575f868281518110612ec357612ec361435a565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612f11573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f35919061443d565b90508015612fa4576040518060400160405280888481518110612f5a57612f5a61435a565b60200260200101516001600160a01b0316815260200182815250858581518110612f8657612f8661435a565b6020908102919091010152612f9b8184614347565b92508360010193505b50600101612ea8565b505081529392505050565b612fc06135b9565b5f5160206146d95f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be1983016130525763f5a267f15f526004601cfd5b826130645768fbb67fda52d4bfb8bf92505b80546001600160601b0381166130a75760019250838160601c03156130b857600182015460601c84146130b857600282015460601c84146130b8575f92506130b8565b81602052835f5260405f2054151592505b505092915050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061314657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661313a5f5160206146b95f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156113355760405163703e46dd60e11b815260040160405180910390fd5b5f7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f5008054604051634766d28760e01b81523360048201529192506001600160a01b031690634766d287906024015f6040518083038186803b1580156131c7575f5ffd5b505afa1580156131d9573d5f5f3e3d5ffd5b505050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561323b575060408051601f3d908101601f191682019092526132389181019061443d565b60015b61326857604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f5160206146b95f395f51905f52811461329857604051632a87526960e21b81526004810182905260240161325f565b610cca83836135e8565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113355760405163703e46dd60e11b815260040160405180910390fd5b5f838302815f1985870982811083820303915050805f0361331f578382816133155761331561455f565b0492505050611d2a565b80841161333657613336600385150260111861363d565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6133a9612819565b5f5160206146d95f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612ff9565b6040516001600160a01b03838116602483015260448201839052610cca91859182169063a9059cbb906064016129d0565b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613457573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b691906145c0565b5f6134846128b6565b6001600160a01b038087165f9081526004830160209081526040808320938916835292905290812054919250906134c6906134c090600261364e565b84612c42565b90506134d58686868487613682565b6134de866127fa565b156131d9576001600160a01b038087165f9081526004840160209081526040808320938916835292905220546131d99087908790879087613682565b80825d5050565b5f600282600381111561353657613536614586565b61354091906145e0565b60ff166001149050919050565b5f5f60205f8451602086015f885af18061356c576040513d5f823e3d81fd5b50505f513d91508115613583578060011415613590565b6001600160a01b0384163b155b15612a0257604051635274afe760e01b81526001600160a01b038516600482015260240161325f565b5f5160206146d95f395f51905f525460ff1661133557604051638dfc202b60e01b815260040160405180910390fd5b6135f18261395c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561363557610cca82826139bf565b611527613a28565b634e487b715f52806020526024601cfd5b5f815f0361366057613660601261363d565b8160018403816136725761367261455f565b046001018315155b029392505050565b5f61368b6128b6565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663882d16986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061370e919061436e565b60405163054ca70760e11b81526001600160a01b03898116600483015291925090821690630a994e0e906024015f604051808303815f87803b158015613752575f5ffd5b505af1158015613764573d5f5f3e3d5ffd5b50505050835f036137885760405163311c18e960e01b815260040160405180910390fd5b6001600160a01b038088165f9081526004840160209081526040808320938a168352929052908120546137bb9085612c42565b90505f5f6137ca8a888a613a47565b604051630bd735b760e01b815291935091506001600160a01b03851690630bd735b7906137ff908d9033908790600401614653565b5f604051808303815f87803b158015613816575f5ffd5b505af1158015613828573d5f5f3e3d5ffd5b505050505f81886138399190614454565b90505f6138468289612c57565b905080876004015f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f8d6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461389d9190614454565b90915550506001600160a01b038b165f908152600288016020526040812060010180548392906138ce908490614454565b909155506138f5905033306138e38e86611bf1565b6001600160a01b038f1692919061299b565b8a6001600160a01b03168c6001600160a01b0316336001600160a01b03167ffd54f2a27ee93a2b60fa895931f0067b8eab4f20662e14ef1ef0720eb772ea9c8789876040516139469392919061467e565b60405180910390a4505050505050505050505050565b806001600160a01b03163b5f0361399157604051634c9c8ce360e01b81526001600160a01b038216600482015260240161325f565b5f5160206146b95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516139db91906146a2565b5f60405180830381855af49150503d805f8114613a13576040519150601f19603f3d011682016040523d82523d5f602084013e613a18565b606091505b50915091506116c0858383613d39565b34156113355760405163b398979f60e01b815260040160405180910390fd5b60605f5f613a536128b6565b84519091505f816001600160401b03811115613a7157613a71613f0f565b604051908082528060200260200182016040528015613acc57816020015b613ab960405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b815260200190600190039081613a8f5790505b5090505f5b82811015613d28575f878281518110613aec57613aec61435a565b60200260200101519050613aff816114f9565b613b1c576040516375e72ed760e11b815260040160405180910390fd5b5f613b27828b611bf1565b6040516370a0823160e01b81526001600160a01b038d811660048301529192505f918416906370a0823190602401602060405180830381865afa158015613b70573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b94919061443d565b6001600160a01b0384165f9081526003890160205260408120549192509068056bc75e2d6310000090613bd790600160a01b90046001600160601b031684614467565b613be19190614573565b905082613bee8284614454565b1015613c5d575f8190506040518060600160405280866001600160a01b0316815260200184815260200182815250878781518110613c2e57613c2e61435a565b60209081029190910101525f613c488661084d8487614454565b9050613c54818f614454565b9d505050613cf9565b6001600160a01b0384165f90815260038901602052604081205468056bc75e2d6310000090613c9c90600160a01b90046001600160601b031686614467565b613ca69190614573565b90506040518060600160405280866001600160a01b031681526020018286613cce9190614347565b815260200182815250878781518110613ce957613ce961435a565b60200260200101819052505f9c50505b8b5f03613d19575f613d0c866001614347565b875250613d289350505050565b84600101945050505050613ad1565b50935085925050505b935093915050565b606082613d4e57613d4982613d95565b611d2a565b8151158015613d6557506001600160a01b0384163b155b15613d8e57604051639996b31560e01b81526001600160a01b038516600482015260240161325f565b5080611d2a565b805115613da55780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6001600160a01b0381168114612b81575f5ffd5b5f5f5f60608486031215613de4575f5ffd5b8335613def81613dbe565b92506020840135613dff81613dbe565b929592945050506040919091013590565b5f60208284031215613e20575f5ffd5b8135611d2a81613dbe565b5f8151808452602084019350602083015f5b82811015613e7957613e6386835180516001600160a01b03168252602090810151910152565b6040959095019460209190910190600101613e3d565b5093949350505050565b604081525f613e956040830185613e2b565b90508260208301529392505050565b606081525f613eb66060830186613e2b565b8460208401528281036040840152613ece8185613e2b565b9695505050505050565b5f5f60408385031215613ee9575f5ffd5b8235613ef481613dbe565b91506020830135613f0481613dbe565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715613f4557613f45613f0f565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613f7357613f73613f0f565b604052919050565b5f5f60408385031215613f8c575f5ffd5b8235613f9781613dbe565b915060208301356001600160401b03811115613fb1575f5ffd5b8301601f81018513613fc1575f5ffd5b80356001600160401b03811115613fda57613fda613f0f565b613fed601f8201601f1916602001613f4b565b818152866020838501011115614001575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b602080825282518282018190525f918401906040840190835b818110156140605783516001600160a01b0316835260209384019390920191600101614039565b509095945050505050565b608081525f61407d6080830187613e2b565b85602084015282810360408401526140958186613e2b565b91505082606083015295945050505050565b5f5f604083850312156140b8575f5ffd5b82356140c381613dbe565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8015158114612b81575f5ffd5b5f5f60408385031215614124575f5ffd5b823561412f81613dbe565b91506020830135613f0481614106565b5f6001600160401b0382111561415757614157613f0f565b5060051b60200190565b5f5f5f60608486031215614173575f5ffd5b833561417e81613dbe565b9250602084013561418e81613dbe565b915060408401356001600160401b038111156141a8575f5ffd5b8401601f810186136141b8575f5ffd5b80356141cb6141c68261413f565b613f4b565b8082825260208201915060208360051b8501019250888311156141ec575f5ffd5b6020840193505b8284101561421757833561420681613dbe565b8252602093840193909101906141f3565b809450505050509250925092565b5f5f5f60608486031215614237575f5ffd5b833560028110613def575f5ffd5b5f5f60408385031215614256575f5ffd5b823561426181613dbe565b915060208301356001600160401b0381111561427b575f5ffd5b8301601f8101851361428b575f5ffd5b80356142996141c68261413f565b8082825260208201915060208360061b8501019250878311156142ba575f5ffd5b6020840193505b8284101561430a57604084890312156142d8575f5ffd5b6142e0613f23565b84356142eb81613dbe565b81526020858101358183015290835260409094019391909101906142c1565b809450505050509250929050565b5f60208284031215614328575f5ffd5b8151611d2a81614106565b634e487b7160e01b5f52601160045260245ffd5b808201808211156114b6576114b6614333565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561437e575f5ffd5b8151611d2a81613dbe565b5f60208284031215614399575f5ffd5b81516001600160401b038111156143ae575f5ffd5b8201601f810184136143be575f5ffd5b80516143cc6141c68261413f565b8082825260208201915060208360061b8501019250868311156143ed575f5ffd5b6020840193505b82841015613ece576040848803121561440b575f5ffd5b614413613f23565b845161441e81613dbe565b81526020858101518183015290835260409094019391909101906143f4565b5f6020828403121561444d575f5ffd5b5051919050565b818103818111156114b6576114b6614333565b80820281158282048414176114b6576114b6614333565b6001815b6001841115613d315780850481111561449d5761449d614333565b60018416156144ab57908102905b60019390931c928002614482565b5f826144c7575060016114b6565b816144d357505f6114b6565b81600181146144e957600281146144f35761450f565b60019150506114b6565b60ff84111561450457614504614333565b50506001821b6114b6565b5060208310610133831016604e8410600b8410161715614532575081810a6114b6565b61453e5f19848461447e565b805f190482111561367a5761367a614333565b5f611d2a60ff8416836144b9565b634e487b7160e01b5f52601260045260245ffd5b5f826145815761458161455f565b500490565b634e487b7160e01b5f52602160045260245ffd5b60208101600283106145ba57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f602082840312156145d0575f5ffd5b815160ff81168114611d2a575f5ffd5b5f60ff8316806145f2576145f261455f565b8060ff84160691505092915050565b5f8151808452602084019350602083015f5b82811015613e7957815180516001600160a01b03168752602080820151818901526040918201519188019190915260609096019590910190600101614613565b6001600160a01b038481168252831660208201526060604082018190525f906116c090830184614601565b606081525f6146906060830186614601565b60208301949094525060400152919050565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a164736f6c634300081c000a0000000000000000000000004a9c44c97bbf6079db37c4769aebe425bbcdd09a