7 txs
239 calls
constructor
constructor(address _initialOwner, address __supplyToken, address __borrowToken, address _morphoAddress, address _morphoMarketOracle, address _morphoMarketIrm, uint96 _morphoMarketLltv, uint256 _maxSafeLtv)
functions
availableToBorrow
viewfunction availableToBorrow() view returns (uint256)
availableToSupply
purefunction availableToSupply() pure returns (uint256 supplyCap, uint256 available)
availableToWithdraw
viewfunction availableToWithdraw() view returns (uint256)
borrowToken
viewfunction borrowToken() view returns (address)
debtAccountData
viewfunction debtAccountData() view returns (uint256 collateral, uint256 collateralPrice, uint256 borrowed, uint256 maxBorrow, uint256 currentLtv, uint256 healthFactor)
debtBalance
viewfunction debtBalance() view returns (uint256)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
getMarketParams
viewfunction getMarketParams() view returns (tuple)
isSafeAlRatio
viewfunction isSafeAlRatio(uint256 alRatio) view returns (bool)
marketId
viewfunction marketId() view returns (bytes32)
maxSafeLtv
viewfunction maxSafeLtv() view returns (uint256)
morpho
viewfunction morpho() view returns (address)
morphoMarketIrm
viewfunction morphoMarketIrm() view returns (address)
morphoMarketLltv
viewfunction morphoMarketLltv() view returns (uint96)
morphoMarketOracle
viewfunction morphoMarketOracle() view returns (address)
owner
viewfunction owner() view returns (address)
positionOwner
viewfunction positionOwner() view returns (address)
suppliedBalance
viewfunction suppliedBalance() view returns (uint256)
supplyToken
viewfunction supplyToken() view returns (address)
swapper
viewfunction swapper() view returns (address)
acceptOwner
nonpayablefunction acceptOwner()
borrow
nonpayablefunction borrow(uint256 borrowAmount, address recipient)
decreaseLeverage
nonpayablefunction decreaseLeverage(uint256 repayAmount, uint256 withdrawCollateralAmount, bytes swapData, uint256 repaySurplusThreshold) returns (uint256 debtRepaidAmount, uint256 surplusDebtRepaid)
increaseLeverage
nonpayablefunction increaseLeverage(uint256 supplyAmount, uint256 borrowAmount, bytes swapData, uint256 supplyCollateralSurplusThreshold) returns (uint256 totalCollateralSupplied)
onMorphoRepay
nonpayablefunction onMorphoRepay(uint256 repayAmount, bytes data)
onMorphoSupplyCollateral
nonpayablefunction onMorphoSupplyCollateral(uint256 supplyAmount, bytes data)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
repay
nonpayablefunction repay(uint256 repayAmount) returns (uint256 debtRepaidAmount)
repayAndWithdraw
nonpayablefunction repayAndWithdraw(uint256 repayAmount, uint256 withdrawAmount, address recipient) returns (uint256 debtRepaidAmount, uint256 withdrawnAmount)
revokeOwnership
nonpayablefunction revokeOwnership()
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setMaxSafeLtv
nonpayablefunction setMaxSafeLtv(uint256 _maxSafeLtv)
setPositionOwner
nonpayablefunction setPositionOwner(address account)
setSwapper
nonpayablefunction setSwapper(address _swapper)
supply
nonpayablefunction supply(uint256 supplyAmount)
supplyAndBorrow
nonpayablefunction supplyAndBorrow(uint256 supplyAmount, uint256 borrowAmount, address recipient)
withdraw
nonpayablefunction withdraw(uint256 withdrawAmount, address recipient) returns (uint256 amountWithdrawn)
events
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
MaxSafeLtvSet
event MaxSafeLtvSet(uint256 _maxSafeLtv)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
PositionOwnerSet
event PositionOwnerSet(address indexed account)
SurplusDebtReclaimed
event SurplusDebtReclaimed(uint256 amount, address indexed recipient)
SwapperSet
event SwapperSet(address indexed swapper)
TokenRecovered
event TokenRecovered(address indexed to, address indexed token, uint256 amount)
errors
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidAmount
error InvalidAmount(address token, uint256 amount)
InvalidParam
error InvalidParam()
InvalidToken
error InvalidToken(address token)
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
Slippage
error Slippage(uint256 minAmountExpected, uint256 actualAmount)
creation bytecode
0x6101606040523480156200001257600080fd5b50604051620057cf380380620057cf8339810160408190526200003591620007b7565b876200004181620001c1565b506001600160a01b0380881660a05286811660c05285811660805284811660e0528316610100526001600160601b03821661012081905281106200009857604051633494a40d60e21b815260040160405180910390fd5b60048190556200013c620001356040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a0016040528060c0516001600160a01b0316815260200160a0516001600160a01b0316815260200160e0516001600160a01b03168152602001610100516001600160a01b03168152602001610120516001600160601b0316815250905090565b60a0902090565b6101408190526080516200015c916001600160a01b03909116906200023e565b6000036200017d57604051633494a40d60e21b815260040160405180910390fd5b60a05162000198906001600160a01b03168660001962000302565b60c051620001b3906001600160a01b03168660001962000302565b505050505050505062000a67565b6000546001600160a01b031615620001ec57604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200021c57604051634726455360e11b8152600060048201526024015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080620002566200025084620003d8565b6200041f565b604051637784c68560e01b81529091506001600160a01b03851690637784c685906200028790849060040162000866565b600060405180830381865afa158015620002a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620002cf9190810190620008c2565b600081518110620002e457620002e46200098b565b602002602001015160001c6001600160801b03169150505b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526200035c90859083906200046d16565b620003d2576040516001600160a01b038416602482015260006044820152620003c690859063095ea7b360e01b9060640160408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b03938416179052906200051d16565b620003d284826200051d565b50505050565b60006002826003604051602001620003fa929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c620002fc9190620009a1565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106200045c576200045c6200098b565b602090810291909101015292915050565b6000806000846001600160a01b0316846040516200048c9190620009e9565b6000604051808303816000865af19150503d8060008114620004cb576040519150601f19603f3d011682016040523d82523d6000602084013e620004d0565b606091505b5091509150818015620004fe575080511580620004fe575080806020019051810190620004fe919062000a07565b80156200051457506001600160a01b0385163b15155b95945050505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200056c906001600160a01b038516908490620005f6565b90508051600014806200059057508080602001905181019062000590919062000a07565b620005f15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000213565b505050565b60606200060784846000856200060f565b949350505050565b606082471015620006725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000213565b600080866001600160a01b03168587604051620006909190620009e9565b60006040518083038185875af1925050503d8060008114620006cf576040519150601f19603f3d011682016040523d82523d6000602084013e620006d4565b606091505b509092509050620006e887838387620006f3565b979650505050505050565b60608315620007675782516000036200075f576001600160a01b0385163b6200075f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000213565b508162000607565b6200060783838151156200077e5781518083602001fd5b8060405162461bcd60e51b815260040162000213919062000a32565b80516001600160a01b0381168114620007b257600080fd5b919050565b600080600080600080600080610100898b031215620007d557600080fd5b620007e0896200079a565b9750620007f060208a016200079a565b96506200080060408a016200079a565b95506200081060608a016200079a565b94506200082060808a016200079a565b93506200083060a08a016200079a565b60c08a01519093506001600160601b03811681146200084e57600080fd5b8092505060e089015190509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b81811015620008a05783518352928401929184019160010162000882565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215620008d657600080fd5b82516001600160401b0380821115620008ee57600080fd5b818501915085601f8301126200090357600080fd5b815181811115620009185762000918620008ac565b8060051b604051601f19603f83011681018181108582111715620009405762000940620008ac565b6040529182528482019250838101850191888311156200095f57600080fd5b938501935b828510156200097f5784518452938501939285019262000964565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b80820180821115620002fc57634e487b7160e01b600052601160045260246000fd5b60005b83811015620009e0578181015183820152602001620009c6565b50506000910152565b60008251620009fd818460208701620009c3565b9190910192915050565b60006020828403121562000a1a57600080fd5b8151801515811462000a2b57600080fd5b9392505050565b602081526000825180602084015262000a53816040850160208701620009c3565b601f01601f19169190910160400192915050565b60805160a05160c05160e051610100516101205161014051614a8262000d4d6000396000818161046a0152818161217d0152818161298c015281816129e30152612ce40152600081816105960152818161067d015281816108c601528181610a5901528181610e98015281816110400152818161118b01528181611360015281816114f40152818161179001528181611ba001528181611f16015281816122fd015281816124bf015261280c015260008181610315015281816105670152818161089701528181610a2a01528181610e690152818161101101528181611331015281816114c501528181611b7101528181611ee7015281816122ce0152818161249001526127dd0152600081816102d60152818161053801528181610868015281816109fb01528181610e3a01528181610fe2015281816110cd015281816113020152818161149601528181611b4201528181611eb80152818161229f0152818161246101526127ae0152600081816103db015281816104da0152818161080a0152818161099d01528181610b8401528181610ddc01528181610f84015281816112a40152818161143801528181611640015281816116ab0152818161197201528181611ae401528181611c2f01528181611e5a015281816122410152818161240301528181612750015281816128bd0152612fc901526000818161042e0152818161050901528181610839015281816109cc01528181610ade01528181610b6101528181610e0b01528181610fb3015281816112d3015281816114670152818161160b015281816116750152818161193701528181611b1301528181611c5201528181611e89015281816122700152818161243201528181612568015261277f0152600081816106c10152818161091201528181611a5901528181611f550152818161215b0152818161296a015281816129c101528181612adc01528181612b8001528181612c3401528181612d1301528181612da00152612f100152614a826000f3fe608060405234801561001057600080fd5b50600436106102915760003560e01c80639c82f2a411610160578063cbda3f69116100d8578063e5331e911161008c578063ebbc496511610071578063ebbc496514610747578063eedc07131461074f578063f8fd31001461076257600080fd5b8063e5331e9114610721578063e9e11f101461073457600080fd5b8063daeccc79116100bd578063daeccc79146106e3578063e322ad2b14610711578063e4e889541461071957600080fd5b8063cbda3f6914610678578063d8fbc833146106bc57600080fd5b8063b1022fdf1161012f578063bf1eb64a11610114578063bf1eb64a1461064a578063bfccf0ec14610652578063cb2af14b1461066557600080fd5b8063b1022fdf14610624578063b1f8100d1461063757600080fd5b80639c82f2a4146105d85780639e784426146105eb578063a4fb4120146105fe578063a7229fd91461061157600080fd5b806340a647e21161020e57806352059756116101c25780636ed71ede116101a75780636ed71ede146104655780638da5cb5b1461048c57806390c9427c1461049f57600080fd5b8063520597561461042c57806362625c3f1461045257600080fd5b8063456dc17a116101f3578063456dc17a146103d95780634b3fd148146103ff5780634eb75f401461041257600080fd5b806340a647e21461039b57806342e4a4ac146103d057600080fd5b80632b3297f911610265578063354030231161024a5780633540302314610352578063371fd8e6146103655780633d33809d1461037857600080fd5b80632b3297f9146103375780632b9689581461034a57600080fd5b8062f714ce1461029657806305b4591c146102bc578063070881d1146102d15780631e99f22414610310575b600080fd5b6102a96102a4366004613e96565b61076a565b6040519081526020015b60405180910390f35b6102cf6102ca366004613ec2565b610907565b005b6102f87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b3565b6102f87f000000000000000000000000000000000000000000000000000000000000000081565b6005546102f8906001600160a01b031681565b6102cf610c3e565b6102cf610360366004613f3e565b610d40565b6102a9610373366004613f3e565b610ee5565b61038b610386366004613f3e565b611090565b60405190151581526020016102b3565b6103a36110b8565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016102b3565b6102a960045481565b7f00000000000000000000000000000000000000000000000000000000000000006102f8565b6102cf61040d366004613e96565b611207565b600019805b604080519283526020830191909152016102b3565b7f00000000000000000000000000000000000000000000000000000000000000006102f8565b6102cf610460366004613f57565b61139e565b6102a97f000000000000000000000000000000000000000000000000000000000000000081565b6000546102f8906001600160a01b031681565b6105cb6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b6040516102b39190613f8c565b6102cf6105e6366004613fd6565b611556565b6102cf6105f9366004613f3e565b611743565b6102cf61060c366004613fd6565b611830565b6102cf61061f366004613ff1565b6118dd565b6102cf610632366004613ec2565b611a4e565b6102cf610645366004613fd6565b611d0b565b6102a9611e1a565b6102cf61066036600461402d565b611f81565b6003546102f8906001600160a01b031681565b61069f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516bffffffffffffffffffffffff90911681526020016102b3565b6102f87f000000000000000000000000000000000000000000000000000000000000000081565b61038b6106f13660046140d0565b600160209081526000928352604080842090915290825290205460ff1681565b6102a9612146565b6102a961214c565b61041761072f366004613f57565b6121a2565b6102a96107423660046141f3565b612366565b6102cf612616565b61041761075d3660046141f3565b6126b1565b6102a961295a565b6003546000906001600160a01b031633146107ca576107ad336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b6107ca57604051633006171960e21b815260040160405180910390fd5b61090083836108fb6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b612a90565b9392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461095057604051633006171960e21b815260040160405180910390fd5b600061095e8284018461429d565b90506000610a8e6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b90506000610aa183600001513084612a90565b83519091508114610b185782516040517fb2b3b53b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260248101919091526044015b60405180910390fd5b600554835160208501516040517fee534a3f0000000000000000000000000000000000000000000000000000000081526000936001600160a01b03169263ee534a3f92610bac927f000000000000000000000000000000000000000000000000000000000000000092917f000000000000000000000000000000000000000000000000000000000000000091600401614322565b6020604051808303816000875af1158015610bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bef9190614354565b905086811015610c35576040517f2746152a0000000000000000000000000000000000000000000000000000000081526004810188905260248101829052604401610b0f565b50505050505050565b610c6c336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b610c8957604051633006171960e21b815260040160405180910390fd5b6002546001600160a01b031661dead14610cde576002546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b0f565b600080546040516001600160a01b03909116907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6003546001600160a01b03163314610d9d57610d80336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b610d9d57604051633006171960e21b815260040160405180910390fd5b610ee281610ecd6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b60405180602001604052806000815250612b50565b50565b6003546000906001600160a01b03163314610f4557610f28336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b610f4557604051633006171960e21b815260040160405180910390fd5b61108a826110756040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b60405180602001604052806000815250612be9565b92915050565b60006004546ec097ce7bc90715b34b9f10000000006110af91906143cb565b90911015919050565b6000806000806000806110c961214c565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d9190614354565b9450611157611e1a565b9350600061117687876ec097ce7bc90715b34b9f100000000084612e42565b90506111bb816bffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016670de0b6b3a76400006000612e42565b9350846000036111cf5760001991506111fe565b6111e485670de0b6b3a7640000836001612e42565b92506111fb84670de0b6b3a7640000876000612e42565b91505b50909192939495565b6003546001600160a01b0316331461126457611247336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b61126457604051633006171960e21b815260040160405180910390fd5b61139a82826113956040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b612edd565b5050565b6003546001600160a01b031633146113fb576113de336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b6113fb57604051633006171960e21b815260040160405180910390fd5b60006115296040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b9050611545848260405180602001604052806000815250612b50565b611550838383612edd565b50505050565b611584336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b6115a157604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166115ec576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610b0f565b6005546001600160a01b03168015611668576116336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016826000612ffd565b6116686001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016826000612ffd565b61169e6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683600019612ffd565b6116d46001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683600019612ffd565b6040516001600160a01b038316907f673779832598d6a388768ee342f8de96fdd5c39a468a6955377cf1405b9652b990600090a250600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b611771336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b61178e57604051633006171960e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681106117f5576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60048190556040518181527f994e009790ba0b9928d4b193d3ba06a943b02485bae67e9c3af2e1955e065cf29060200160405180910390a150565b61185e336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b61187b57604051633006171960e21b815260040160405180910390fd5b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f014e5e53fac070a4a01cf0bc7ae3d30d5ee46aed56c4029a5b6f8e0ad21f8a5890600090a250565b61190b336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b61192857604051633006171960e21b815260040160405180910390fd5b611930611e1a565b156119e8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614806119a657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b156119e8576040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610b0f565b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f909683604051611a2d91815260200190565b60405180910390a3611a496001600160a01b0384168383613133565b505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a9757604051633006171960e21b815260040160405180910390fd5b6000611aa58284018461429d565b90506000611bd56040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b9050611be682600001513083612edd565b600554825160208401516040517fee534a3f0000000000000000000000000000000000000000000000000000000081526000936001600160a01b03169263ee534a3f92611c7a927f000000000000000000000000000000000000000000000000000000000000000092917f000000000000000000000000000000000000000000000000000000000000000091600401614322565b6020604051808303816000875af1158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190614354565b905085811015611d03576040517f2746152a0000000000000000000000000000000000000000000000000000000081526004810187905260248101829052604401610b0f565b505050505050565b611d39336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b611d5657604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116611da1576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610b0f565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000611f7c611f4b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016903061317c565b905090565b611faf336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b611fcc57604051633006171960e21b815260040160405180910390fd5b6001600160a01b038316612017576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610b0f565b604080518082019091526000808252602082015260005b8281101561213f5783838281811061204857612048614406565b90506040020180360381019061205e9190614443565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b03871660009081526001808452604080832087517fffffffff0000000000000000000000000000000000000000000000000000000016845290945292902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790550161202e565b5050505050565b6000611f7c5b6000611f7c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000306131d1565b60035460009081906001600160a01b03163314612204576121e7336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b61220457604051633006171960e21b815260040160405180910390fd5b60006123326040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b905061234e868260405180602001604052806000815250612be9565b925061235b858583612a90565b915050935093915050565b6003546000906001600160a01b031633146123c6576123a9336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b6123c657604051633006171960e21b815260040160405180910390fd5b60006124f46040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b9050612534868260405180604001604052808981526020018881525060405160200161252091906144a1565b604051602081830303815290604052612b50565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201528692506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156125b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125db9190614354565b90508381111561260c576125ff818360405180602001604052806000815250612b50565b61260981846144b4565b92505b5050949350505050565b6002546001600160a01b0316331461264157604051633006171960e21b815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b60035460009081906001600160a01b03163314612713576126f6336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a28565b61271357604051633006171960e21b815260040160405180910390fd5b60006128416040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16815250905090565b9050612881878260405180604001604052808a81526020018981525060405160200161286d91906144a1565b604051602081830303815290604052612be9565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529093506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129289190614354565b90508481111561294f5761294c818360405180602001604052806000815250612be9565b92505b505094509492505050565b6000806129b06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000613284565b90506000612a076001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000613358565b9050808211612a17576000612a21565b612a2181836144c7565b9250505090565b600080546001600160a01b03848116911614806109005750506001600160a01b03821660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008516845290915290205460ff1692915050565b60006000198414612aa15783612aa9565b612aa961214c565b6040517f8720316d0000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638720316d90612b179085908590309089906004016144da565b600060405180830381600087803b158015612b3157600080fd5b505af1158015612b45573d6000803e3d6000fd5b505050509392505050565b6040517f238d65790000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063238d657990612bbb90859087903090879060040161454a565b600060405180830381600087803b158015612bd557600080fd5b505af1158015610c35573d6000803e3d6000fd5b600080612bf4611e1a565b90508015612e3a5780851015612cbc576040517f20b76e810000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906320b76e8190612c72908790899060009030908a906004016145c7565b60408051808303816000875af1158015612c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb49190614640565b509150612e3a565b6040517f93c520620000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201523060248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906393c5206290604401606060405180830381865afa158015612d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d869190614684565b602001516fffffffffffffffffffffffffffffffff1690507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320b76e818660008430896040518663ffffffff1660e01b8152600401612df39594939291906145c7565b60408051808303816000875af1158015612e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e359190614640565b509250505b509392505050565b6000612e4f858585613367565b90506001826001811115612e6557612e656146e9565b03612ed5578280612e7857612e7861436d565b84860915612ed557600019811015612e9257600101612ed5565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610b0f565b949350505050565b6040517f50d8cd4b0000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906350d8cd4b90612f4d9085908890869030908a90600401614718565b60408051808303816000875af1158015612f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8f9190614640565b509050838114611550576040517fb2b3b53b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260248101829052604401610b0f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905261307c8482613454565b611550576040516001600160a01b0384166024820152600060448201526131299085907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526134fb565b61155084826134fb565b6040516001600160a01b038316602482015260448101829052611a499084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016130c5565b60008061318a8460a0902090565b905060006131a26001600160a01b03871683866135fd565b90506000806131b188886136d3565b90945092506131c5915084905083836139e8565b98975050505050505050565b6000806131e66131e18585613a0d565b613a82565b90506080856001600160a01b0316637784c685836040518263ffffffff1660e01b81526004016132169190614790565b600060405180830381865afa158015613233573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261325b91908101906147d4565b60008151811061326d5761326d614406565b6020026020010151901c60001c9150509392505050565b6000806132936131e184613acd565b6040517f7784c6850000000000000000000000000000000000000000000000000000000081529091506001600160a01b03851690637784c685906132db908490600401614790565b600060405180830381865afa1580156132f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261332091908101906147d4565b60008151811061333257613332614406565b602002602001015160001c6fffffffffffffffffffffffffffffffff1691505092915050565b6000806132936131e184613b10565b60008080600019858709858702925082811083820303915050806000036133a1578382816133975761339761436d565b0492505050610900565b8381106133eb576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610b0f565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000806000846001600160a01b031684604051613471919061486e565b6000604051808303816000865af19150503d80600081146134ae576040519150601f19603f3d011682016040523d82523d6000602084013e6134b3565b606091505b50915091508180156134dd5750805115806134dd5750808060200190518101906134dd919061488a565b80156134f257506001600160a01b0385163b15155b95945050505050565b6000613550826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613b319092919063ffffffff16565b9050805160001480613571575080806020019051810190613571919061488a565b611a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b0f565b60008061360d6131e18585613a0d565b6040517f7784c6850000000000000000000000000000000000000000000000000000000081529091506001600160a01b03861690637784c68590613655908490600401614790565b600060405180830381865afa158015613672573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261369a91908101906147d4565b6000815181106136ac576136ac614406565b602002602001015160001c6fffffffffffffffffffffffffffffffff169150509392505050565b60008060008060006136e68660a0902090565b6040517f5c60e39a000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b03891690635c60e39a9060240160c060405180830381865afa15801561374a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376e91906148a7565b9050600081608001516fffffffffffffffffffffffffffffffff164261379491906144c7565b905080158015906137ba575060408201516fffffffffffffffffffffffffffffffff1615155b80156137d2575060608801516001600160a01b031615155b156139ab5760608801516040517f8c00bf6b0000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690638c00bf6b90613825908c908790600401614946565b602060405180830381865afa158015613842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138669190614354565b905060006138946138778385613b40565b60408601516fffffffffffffffffffffffffffffffff1690613bab565b905061389f81613bc0565b846040018181516138b091906149f2565b6fffffffffffffffffffffffffffffffff169052506138ce81613bc0565b845185906138dd9083906149f2565b6fffffffffffffffffffffffffffffffff90811690915260a0860151161590506139a857600061392c8560a001516fffffffffffffffffffffffffffffffff1683613bab90919063ffffffff16565b905060006139748287600001516fffffffffffffffffffffffffffffffff1661395591906144c7565b60208801518491906fffffffffffffffffffffffffffffffff16613c49565b905061397f81613bc0565b8660200181815161399091906149f2565b6fffffffffffffffffffffffffffffffff1690525050505b50505b508051602082015160408301516060909301516fffffffffffffffffffffffffffffffff9283169b9183169a509282169850911695509350505050565b6000612ed56139f86001856144b4565b613a05620f4240856144b4565b869190613c6e565b6000600182846002604051602001613a2f929190918252602082015260400190565b60408051601f1981840301815282825280516020918201206001600160a01b03909416908301528101919091526060016040516020818303038152906040528051906020012060001c61090091906144b4565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613abc57613abc614406565b602090810291909101015292915050565b600080826003604051602001613aed929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c61108a91906144b4565b60006001826003604051602001613aed929190918252602082015260400190565b6060612ed58484600085613c9a565b600080613b4d8385614a22565b90506000613b6e8280613b69670de0b6b3a76400006002614a22565b613d9b565b90506000613b8a8284613b69670de0b6b3a76400006003614a22565b905080613b9783856144b4565b613ba191906144b4565b9695505050505050565b60006109008383670de0b6b3a7640000613d9b565b60408051808201909152601481527f6d61782075696e7431323820657863656564656400000000000000000000000060208201526000906fffffffffffffffffffffffffffffffff831115613c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0f9190614a39565b5090919050565b6000612ed5613c5b620f4240846144b4565b613c666001866144b4565b869190613d9b565b600081613c7c6001826144c7565b613c868587614a22565b613c9091906144b4565b612ed591906143cb565b606082471015613d2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b0f565b600080866001600160a01b03168587604051613d48919061486e565b60006040518083038185875af1925050503d8060008114613d85576040519150601f19603f3d011682016040523d82523d6000602084013e613d8a565b606091505b509150915061260987838387613da8565b600081613c908486614a22565b60608315613e31578251600003613e2a576001600160a01b0385163b613e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b0f565b5081612ed5565b612ed58383815115613e465781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0f9190614a39565b80356001600160a01b0381168114613e9157600080fd5b919050565b60008060408385031215613ea957600080fd5b82359150613eb960208401613e7a565b90509250929050565b600080600060408486031215613ed757600080fd5b83359250602084013567ffffffffffffffff80821115613ef657600080fd5b818601915086601f830112613f0a57600080fd5b813581811115613f1957600080fd5b876020828501011115613f2b57600080fd5b6020830194508093505050509250925092565b600060208284031215613f5057600080fd5b5035919050565b600080600060608486031215613f6c57600080fd5b8335925060208401359150613f8360408501613e7a565b90509250925092565b60a0810161108a82846001600160a01b0380825116835280602083015116602084015280604083015116604084015280606083015116606084015250608081015160808301525050565b600060208284031215613fe857600080fd5b61090082613e7a565b60008060006060848603121561400657600080fd5b61400f84613e7a565b925061401d60208501613e7a565b9150604084013590509250925092565b60008060006040848603121561404257600080fd5b61404b84613e7a565b9250602084013567ffffffffffffffff8082111561406857600080fd5b818601915086601f83011261407c57600080fd5b81358181111561408b57600080fd5b8760208260061b8501011115613f2b57600080fd5b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114613e9157600080fd5b600080604083850312156140e357600080fd5b6140ec83613e7a565b9150613eb9602084016140a0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561414c5761414c6140fa565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561417b5761417b6140fa565b604052919050565b600082601f83011261419457600080fd5b813567ffffffffffffffff8111156141ae576141ae6140fa565b6141c16020601f19601f84011601614152565b8181528460208386010111156141d657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561420957600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561422e57600080fd5b61423a87828801614183565b949793965093946060013593505050565b60006040828403121561425d57600080fd5b614265614129565b905081358152602082013567ffffffffffffffff81111561428557600080fd5b61429184828501614183565b60208301525092915050565b6000602082840312156142af57600080fd5b813567ffffffffffffffff8111156142c657600080fd5b612ed58482850161424b565b60005b838110156142ed5781810151838201526020016142d5565b50506000910152565b6000815180845261430e8160208601602086016142d2565b601f01601f19169290920160200192915050565b60006001600160a01b03808716835285602084015280851660408401525060806060830152613ba160808301846142f6565b60006020828403121561436657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082614401577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8015158114610ee257600080fd5b60006040828403121561445557600080fd5b61445d614129565b614466836140a0565b8152602083013561447681614435565b60208201529392505050565b805182526000602082015160406020850152612ed560408501826142f6565b6020815260006109006020830184614482565b8082018082111561108a5761108a61439c565b8181038181111561108a5761108a61439c565b610100810161452582876001600160a01b0380825116835280602083015116602084015280604083015116604084015280606083015116606084015250608081015160808301525050565b60a08201949094526001600160a01b0392831660c0820152911660e090910152919050565b600061010061459583886001600160a01b0380825116835280602083015116602084015280604083015116604084015280606083015116606084015250608081015160808301525050565b8560a08401526001600160a01b03851660c08401528060e08401526145bc818401856142f6565b979650505050505050565b600061012061461283896001600160a01b0380825116835280602083015116602084015280604083015116604084015280606083015116606084015250608081015160808301525050565b8660a08401528560c08401526001600160a01b03851660e0840152806101008401526131c5818401856142f6565b6000806040838503121561465357600080fd5b505080516020909101519092909150565b80516fffffffffffffffffffffffffffffffff81168114613e9157600080fd5b60006060828403121561469657600080fd5b6040516060810181811067ffffffffffffffff821117156146b9576146b96140fa565b604052825181526146cc60208401614664565b60208201526146dd60408401614664565b60408201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b610120810161476382886001600160a01b0380825116835280602083015116602084015280604083015116604084015280606083015116606084015250608081015160808301525050565b60a082019590955260c08101939093526001600160a01b0391821660e08401521661010090910152919050565b6020808252825182820181905260009190848201906040850190845b818110156147c8578351835292840192918401916001016147ac565b50909695505050505050565b600060208083850312156147e757600080fd5b825167ffffffffffffffff808211156147ff57600080fd5b818501915085601f83011261481357600080fd5b815181811115614825576148256140fa565b8060051b9150614836848301614152565b818152918301840191848101908884111561485057600080fd5b938501935b838510156131c557845182529385019390850190614855565b600082516148808184602087016142d2565b9190910192915050565b60006020828403121561489c57600080fd5b815161090081614435565b600060c082840312156148b957600080fd5b60405160c0810181811067ffffffffffffffff821117156148dc576148dc6140fa565b6040526148e883614664565b81526148f660208401614664565b602082015261490760408401614664565b604082015261491860608401614664565b606082015261492960808401614664565b608082015261493a60a08401614664565b60a08201529392505050565b610160810161499182856001600160a01b0380825116835280602083015116602084015280604083015116604084015280606083015116606084015250608081015160808301525050565b6fffffffffffffffffffffffffffffffff8084511660a08401528060208501511660c08401528060408501511660e084015280606085015116610100840152806080850151166101208401528060a085015116610140840152509392505050565b6fffffffffffffffffffffffffffffffff818116838216019080821115614a1b57614a1b61439c565b5092915050565b808202811582820484141761108a5761108a61439c565b60208152600061090060208301846142f656fea2646970667358221220e97b81ce7ad8cd37355093a2c8e6df2a7cf6c28a817d48aa515f4729d7a2a50b64736f6c63430008160033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d80000000000000000000000000b7de5dfcb74d25c2f21841fbd6230355c50d93080000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb000000000000000000000000e84f7e0a890e5e57d0beea2c8716ddf0c9846b4a000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000000000000000000000000000000cb2bba6f17b80000000000000000000000000000000000000000000000000000c7d713b49da0000