[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "borrowAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrows", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountInterestIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" } ], "name": "Borrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "loaner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "loanAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "flashloanFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "protocolFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "Flashloan", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "liquidator", "type": "address" }, { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "repayAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "iTokenCollateral", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "seizeTokens", "type": "uint256" } ], "name": "LiquidateBorrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "mintAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "mintTokens", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract IController", "name": "oldController", "type": "address" }, { "indexed": false, "internalType": "contract IController", "name": "newController", "type": "address" } ], "name": "NewController", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldFlashloanFeeRatio", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newFlashloanFeeRatio", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldProtocolFeeRatio", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newProtocolFeeRatio", "type": "uint256" } ], "name": "NewFlashloanFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldFlashloanFeeRatio", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newFlashloanFeeRatio", "type": "uint256" } ], "name": "NewFlashloanFeeRatio", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract IInterestRateModel", "name": "oldInterestRateModel", "type": "address" }, { "indexed": false, "internalType": "contract IInterestRateModel", "name": "newInterestRateModel", "type": "address" } ], "name": "NewInterestRateModel", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract MSDController", "name": "oldMSDController", "type": "address" }, { "indexed": false, "internalType": "contract MSDController", "name": "newMSDController", "type": "address" } ], "name": "NewMSDController", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "NewOwner", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldPendingOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newPendingOwner", "type": "address" } ], "name": "NewPendingOwner", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldProtocolFeeRatio", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newProtocolFeeRatio", "type": "uint256" } ], "name": "NewProtocolFeeRatio", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldReserveRatio", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newReserveRatio", "type": "uint256" } ], "name": "NewReserveRatio", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "redeemiTokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "redeemUnderlyingAmount", "type": "uint256" } ], "name": "Redeem", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "repayAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrows", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountInterestIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" } ], "name": "RepayBorrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalReserves", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldTotalReserves", "type": "uint256" } ], "name": "ReservesWithdrawn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "currentBlockNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "interestAccumulated", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "borrowIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "cash", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalReserves", "type": "uint256" } ], "name": "UpdateInterest", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOTAL_SUPPLY_THRESHOLD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_acceptOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IController", "name": "_newController", "type": "address" } ], "name": "_setController", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IInterestRateModel", "name": "_newInterestRateModel", "type": "address" } ], "name": "_setInterestRateModel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract MSDController", "name": "_newMSDController", "type": "address" } ], "name": "_setMSDController", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newFlashloanFeeRatio", "type": "uint256" } ], "name": "_setNewFlashloanFeeRatio", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newProtocolFeeRatio", "type": "uint256" } ], "name": "_setNewProtocolFeeRatio", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newReserveRatio", "type": "uint256" } ], "name": "_setNewReserveRatio", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "newPendingOwner", "type": "address" } ], "name": "_setPendingOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "_upgrade", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_withdrawAmount", "type": "uint256" } ], "name": "_withdrawReserves", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accrualBlockNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accrualBlockTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "balanceOfUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_borrowAmount", "type": "uint256" }, { "internalType": "bool", "name": "refreshEligibility", "type": "bool" } ], "name": "borrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_borrowAmount", "type": "uint256" } ], "name": "borrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "borrowBalanceCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "borrowBalanceStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "borrowIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "borrowRatePerUnit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "borrowSnapshot", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "controller", "outputs": [ { "internalType": "contract IController", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "exchangeRateCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "exchangeRateStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "flashloanFeeRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAccrualInterestUnit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCash", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_underlyingToken", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "contract IController", "name": "_lendingController", "type": "address" }, { "internalType": "contract IInterestRateModel", "name": "_interestRateModel", "type": "address" }, { "internalType": "contract MSDController", "name": "_msdController", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "interestRateModel", "outputs": [ { "internalType": "contract IInterestRateModel", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isSupported", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isiToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_borrower", "type": "address" }, { "internalType": "uint256", "name": "_repayAmount", "type": "uint256" }, { "internalType": "address", "name": "_assetCollateral", "type": "address" }, { "internalType": "bool", "name": "refreshEligibility", "type": "bool" } ], "name": "liquidateBorrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_borrower", "type": "address" }, { "internalType": "uint256", "name": "_repayAmount", "type": "uint256" }, { "internalType": "address", "name": "_assetCollateral", "type": "address" } ], "name": "liquidateBorrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "msdController", "outputs": [ { "internalType": "contract MSDController", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_spender", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" }, { "internalType": "uint8", "name": "_v", "type": "uint8" }, { "internalType": "bytes32", "name": "_r", "type": "bytes32" }, { "internalType": "bytes32", "name": "_s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "protocolFeeRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_repayAmount", "type": "uint256" } ], "name": "repayBorrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_repayAmount", "type": "uint256" }, { "internalType": "bool", "name": "refreshEligibility", "type": "bool" } ], "name": "repayBorrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_borrower", "type": "address" }, { "internalType": "uint256", "name": "_repayAmount", "type": "uint256" } ], "name": "repayBorrowBehalf", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_borrower", "type": "address" }, { "internalType": "uint256", "name": "_repayAmount", "type": "uint256" }, { "internalType": "bool", "name": "refreshEligibility", "type": "bool" } ], "name": "repayBorrowBehalf", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reserveRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_liquidator", "type": "address" }, { "internalType": "address", "name": "_borrower", "type": "address" }, { "internalType": "uint256", "name": "_seizeTokens", "type": "uint256" } ], "name": "seize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrows", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrowsCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalReserves", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlying", "outputs": [ { "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "updateInterest", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50614132806100206000396000f3fe608060405234801561001057600080fd5b50600436106103d05760003560e01c80637a27d9f6116101ff578063c5ebeaec1161011a578063db8d8fc6116100ad578063f3fdb15a1161007c578063f3fdb15a14610ba7578063f5e3c46214610baf578063f77c479114610be5578063fc4d33f914610bed576103d0565b8063db8d8fc6146109f4578063dd62ed3e14610b4b578063e30c397814610b79578063f2b3abbd14610b81576103d0565b8063d1482791116100e9578063d14827911461092b578063d505accf14610933578063d8c026e614610984578063db256d5a146109c0576103d0565b8063c5ebeaec146108e1578063c9f30e53146108fe578063ca302d0d1461091b578063cfa9920114610923576103d0565b806395dd919311610192578063b2a02ff111610161578063b2a02ff114610886578063b3efd5b4146108bc578063ba49f54a146108d9578063bd6d894d1461051f576103d0565b806395dd919314610800578063a457c2d714610826578063a9059cbb14610852578063aa5af0fd1461087e576103d0565b80638da5cb5b116101ce5780638da5cb5b146107e05780638f840ddd146107e857806392e8dbd7146107f057806395d89b41146107f8576103d0565b80637a27d9f6146107675780637ecebe001461076f57806383de424e146107955780638cd01307146107bb576103d0565b806339509351116102ef578063621fd5071161028257806370a082311161025157806370a082311461072957806373acee981461074f5780637442793714610757578063793dd9611461075f576103d0565b8063621fd507146106eb5780636c540baf146106f35780636e96dfd7146106fb5780636f307dc314610721576103d0565b806347bd3718116102be57806347bd3718146106995780634dd0ef7c146106a1578063508fe21f146106c657806359a7715a146106e3576103d0565b8063395093511461061b5780633af9e669146106475780633b1d21a21461066d578063432a259114610675576103d0565b8063197523f81161036757806330adf81f1161033657806330adf81f146105ae578063313ce567146105b65780633644e515146105d457806337d33618146105dc576103d0565b8063197523f81461052757806323b872dd1461052f5780632608f81814610565578063269aafee14610591576103d0565b80631639f8fb116103a35780631639f8fb146104cb57806317bfdfbc146104f157806318160ddd14610517578063182df0f51461051f576103d0565b806306fdde03146103d5578063095ea7b3146104525780630c7d5cd8146104925780630e752702146104ac575b600080fd5b6103dd610bf5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104175781810151838201526020016103ff565b50505050905090810190601f1680156104445780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61047e6004803603604081101561046857600080fd5b506001600160a01b038135169060200135610c83565b604080519115158252519081900360200190f35b61049a610c9a565b60408051918252519081900360200190f35b6104c9600480360360208110156104c257600080fd5b5035610ca0565b005b6104c9600480360360208110156104e157600080fd5b50356001600160a01b0316610d52565b61049a6004803603602081101561050757600080fd5b50356001600160a01b0316610ea9565b61049a610f11565b61049a610f17565b61049a610f23565b61047e6004803603606081101561054557600080fd5b506001600160a01b03813581169160208101359091169060400135610f29565b6104c96004803603604081101561057b57600080fd5b506001600160a01b038135169060200135610fc7565b6104c9600480360360208110156105a757600080fd5b503561107a565b61049a6111a5565b6105be6111c9565b6040805160ff9092168252519081900360200190f35b61049a6111d2565b610602600480360360208110156105f257600080fd5b50356001600160a01b03166111d8565b6040805192835260208301919091528051918290030190f35b61047e6004803603604081101561063157600080fd5b506001600160a01b0381351690602001356111fb565b61049a6004803603602081101561065d57600080fd5b50356001600160a01b0316611231565b61049a611239565b61067d611248565b604080516001600160a01b039092168252519081900360200190f35b61049a611257565b6104c9600480360360408110156106b757600080fd5b5080359060200135151561125d565b6104c9600480360360208110156106dc57600080fd5b50356112d5565b61049a611400565b61047e611406565b61049a61140b565b6104c96004803603602081101561071157600080fd5b50356001600160a01b0316611411565b61067d61150d565b61049a6004803603602081101561073f57600080fd5b50356001600160a01b031661151c565b61049a61152e565b61047e61153f565b61049a611544565b61049a61154a565b61049a6004803603602081101561078557600080fd5b50356001600160a01b0316611550565b6104c9600480360360208110156107ab57600080fd5b50356001600160a01b0316611562565b6104c9600480360360408110156107d157600080fd5b508035906020013515156116b9565b61067d6116c2565b61049a6116d1565b61049a6116d7565b6103dd61176c565b61049a6004803603602081101561081657600080fd5b50356001600160a01b03166117c7565b61047e6004803603604081101561083c57600080fd5b506001600160a01b0381351690602001356117d2565b61047e6004803603604081101561086857600080fd5b506001600160a01b038135169060200135611808565b61049a61186b565b6104c96004803603606081101561089c57600080fd5b506001600160a01b03813581169160208101359091169060400135611871565b6104c9600480360360208110156108d257600080fd5b50356118be565b6104c9611a1d565b6104c9600480360360208110156108f757600080fd5b5035611ac6565b6104c96004803603602081101561091457600080fd5b5035611b76565b61049a611c66565b61049a611c6c565b61047e611c72565b6104c9600480360360e081101561094957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611c82565b6104c96004803603608081101561099a57600080fd5b506001600160a01b03813581169160208101359160408201351690606001351515611ec5565b6104c9600480360360608110156109d657600080fd5b506001600160a01b0381351690602081013590604001351515611feb565b6104c9600480360360c0811015610a0a57600080fd5b6001600160a01b038235169190810190604081016020820135640100000000811115610a3557600080fd5b820183602082011115610a4757600080fd5b80359060200191846001830284011164010000000083111715610a6957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050640100000000811115610abc57600080fd5b820183602082011115610ace57600080fd5b80359060200191846001830284011164010000000083111715610af057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135811693604001351691506120679050565b61049a60048036036040811015610b6157600080fd5b506001600160a01b038135811691602001351661227a565b61067d612297565b6104c960048036036020811015610b9757600080fd5b50356001600160a01b03166122a6565b61067d6123fd565b6104c960048036036060811015610bc557600080fd5b506001600160a01b0381358116916020810135916040909101351661240c565b61067d612514565b6104c9612523565b606a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c7b5780601f10610c5057610100808354040283529160200191610c7b565b820191906000526020600020905b815481529060010190602001808311610c5e57829003601f168201915b505050505081565b6000610c9033848461260a565b5060015b92915050565b609f5481565b60026001541415610ce6576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ca2833981519152604482015290519081900360640190fd5b6002600155610cf36126f6565b610cfb61294f565b610d03611544565b14610d3f5760405162461bcd60e51b8152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b610d4a333383612953565b505060018055565b6033546001600160a01b03163314610d9b5760405162461bcd60e51b8152600401808060200182810382526022815260200180613f5a6022913960400191505060405180910390fd5b60ac546040805163fb43d68d60e01b815290516001600160a01b039283169284169163fb43d68d916004808301926020929190829003018186803b158015610de257600080fd5b505afa158015610df6573d6000803e3d6000fd5b505050506040513d6020811015610e0c57600080fd5b5051610e495760405162461bcd60e51b81526004018080602001828103825260378152602001806140c66037913960400191505060405180910390fd5b60ac80546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915280517f08bb8c686743d914705c0bdbf1391a04b632b9cf6b5cbff0ab46cd44a8ab6b8d9281900390910190a15050565b600060026001541415610ef1576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ca2833981519152604482015290519081900360640190fd5b6002600155610efe6126f6565b610f0782612b36565b6001805592915050565b60695481565b670de0b6b3a764000090565b60a05481565b600060026001541415610f71576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ca2833981519152604482015290519081900360640190fd5b60026001556001600160a01b038416600090815260686020908152604080832033808552925290912054610fb0918691610fab9086612b93565b61260a565b610fbb848484612bd5565b60018055949350505050565b6002600154141561100d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ca2833981519152604482015290519081900360640190fd5b600260015561101a6126f6565b61102261294f565b61102a611544565b146110665760405162461bcd60e51b8152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b611071338383612953565b50506001805550565b6033546001600160a01b031633146110c35760405162461bcd60e51b8152600401808060200182810382526022815260200180613f5a6022913960400191505060405180910390fd5b6110cb6126f6565b6110d361294f565b6110db611544565b146111175760405162461bcd60e51b8152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b670de0b6b3a764000081111561115e5760405162461bcd60e51b8152600401808060200182810382526036815260200180613e496036913960400191505060405180910390fd5b60a1805490829055604080518281526020810184905281517f1f6917c8223f142d2549d7531b9897b963f67c4cd1d266e9771080a608ebe188929181900390910190a15050565b7f576144ed657c8304561e56ca632e17751956250114636e8c01f64a7f2c6d98cf81565b606c5460ff1681565b60aa5481565b6001600160a01b0316600090815260a96020526040902080546001909101549091565b3360008181526068602090815260408083206001600160a01b03871684529091528120549091610c90918590610fab9086612d33565b60005b919050565b6000611243611406565b905090565b60ac546001600160a01b031681565b60a75481565b61126682610ca0565b80156112d15760a45460408051633996b8cb60e11b815233600482015290516001600160a01b039092169163732d71969160248082019260009290919082900301818387803b1580156112b857600080fd5b505af11580156112cc573d6000803e3d6000fd5b505050505b5050565b6033546001600160a01b0316331461131e5760405162461bcd60e51b8152600401808060200182810382526022815260200180613f5a6022913960400191505060405180910390fd5b6113266126f6565b61132e61294f565b611336611544565b146113725760405162461bcd60e51b8152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b670de0b6b3a76400008111156113b95760405162461bcd60e51b8152600401808060200182810382526037815260200180613f7c6037913960400191505060405180910390fd5b60a0805490829055604080518281526020810184905281517fcc8d29bd7a6ccb34210e5349873398367afa955e6b745621430e8152677d7c75929181900390910190a15050565b60a75490565b600090565b60a65481565b6033546001600160a01b0316331461145a5760405162461bcd60e51b8152600401808060200182810382526022815260200180613f5a6022913960400191505060405180910390fd5b6001600160a01b0381161580159061148057506034546001600160a01b03828116911614155b6114bb5760405162461bcd60e51b815260040180806020018281038252604b815260200180613ced604b913960600191505060405180910390fd5b603480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b60a2546001600160a01b031681565b60676020526000908152604090205481565b60006115386126f6565b5060a75490565b600181565b60ad5490565b60a15481565b60ab6020526000908152604090205481565b6033546001600160a01b031633146115ab5760405162461bcd60e51b8152600401808060200182810382526022815260200180613f5a6022913960400191505060405180910390fd5b60a45460408051634e1647fb60e01b815290516001600160a01b0392831692841691634e1647fb916004808301926020929190829003018186803b1580156115f257600080fd5b505afa158015611606573d6000803e3d6000fd5b505050506040513d602081101561161c57600080fd5b50516116595760405162461bcd60e51b8152600401808060200182810382526034815260200180613c306034913960400191505060405180910390fd5b60a480546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915280517ff9b6a28700579d5c8fab50f0ac2dcaa52109b85c369c4f511fcc873330ab6cbb9281900390910190a15050565b61126682611ac6565b6033546001600160a01b031681565b60a85481565b60a3546000906001600160a01b03166315f240536116f3611406565b60a75460a8546040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561173b57600080fd5b505afa15801561174f573d6000803e3d6000fd5b505050506040513d602081101561176557600080fd5b5051905090565b606b805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c7b5780601f10610c5057610100808354040283529160200191610c7b565b6000610c9482612b36565b3360008181526068602090815260408083206001600160a01b03871684529091528120549091610c90918590610fab9086612b93565b600060026001541415611850576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ca2833981519152604482015290519081900360640190fd5b6002600155611860338484612bd5565b600180559392505050565b60a55481565b6040805162461bcd60e51b815260206004820152601c60248201527f694d534420546f6b656e2063616e206e6f74206265207365697a656400000000604482015290519081900360640190fd5b6033546001600160a01b031633146119075760405162461bcd60e51b8152600401808060200182810382526022815260200180613f5a6022913960400191505060405180910390fd5b61190f6126f6565b61191761294f565b61191f611544565b1461195b5760405162461bcd60e51b8152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b60a85481111561199c5760405162461bcd60e51b815260040180806020018281038252602b815260200180613cc2602b913960400191505060405180910390fd5b60a8546119a98183612b93565b60a8556033546119c2906001600160a01b031683612d8d565b60335460a854604080516001600160a01b039093168352602083018590528281019190915260608201839052517f2e8843ddc3123732d720f1cb17a6e81d71d5bb90a346f13498b87c5639d474409181900360800190a15050565b6033546001600160a01b03163314611a665760405162461bcd60e51b8152600401808060200182810382526022815260200180613f5a6022913960400191505060405180910390fd5b60ad5415611abb576040805162461bcd60e51b815260206004820152601860248201527f5f757067726164653a2048617665207570677261646564210000000000000000604482015290519081900360640190fd5b611ac442612e85565b565b60026001541415611b0c576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ca2833981519152604482015290519081900360640190fd5b6002600155611b196126f6565b611b2161294f565b611b29611544565b14611b655760405162461bcd60e51b8152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b611b6f3382612e8a565b5060018055565b6033546001600160a01b03163314611bbf5760405162461bcd60e51b8152600401808060200182810382526022815260200180613f5a6022913960400191505060405180910390fd5b611bc76126f6565b611bcf61294f565b611bd7611544565b14611c135760405162461bcd60e51b8152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b609f8054670de0b6b3a764000091829055604080518281526020810193909352805191927f619970c7b73e9bc2b93e0fc379d50dbf7eced564f397fba395b2e7efc0b4894d929081900390910190a15050565b61271081565b60ad5481565b6000611c7c6126f6565b50600190565b42841015611cca576040805162461bcd60e51b815260206004820152601060248201526f7065726d69743a20455850495245442160801b604482015290519081900360640190fd5b6001600160a01b038716600090815260ab602052604081205460aa549091907f576144ed657c8304561e56ca632e17751956250114636e8c01f64a7f2c6d98cf8a8a611d1461301f565b604080516020808201969096526001600160a01b0394851681830152929093166060830152608082015260a081018b905260c0810186905260e08082018b9052825180830390910181526101008201835280519084012061190160f01b61012083015261012282019490945261014280820194909452815180820390940184526101628101808352845194840194909420600094859052610182820180845281905260ff8a166101a28301526101c282018990526101e282018890529151919450600192610202808301939192601f198301929081900390910190855afa158015611e03573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611e395750896001600160a01b0316816001600160a01b0316145b611e8a576040805162461bcd60e51b815260206004820152601a60248201527f7065726d69743a20494e56414c49445f5349474e415455524521000000000000604482015290519081900360640190fd5b611e95836001612d33565b6001600160a01b038b16600090815260ab6020526040902055611eb98a8a8a61260a565b50505050505050505050565b611ed084848461240c565b8015611fe55760408051600280825260608083018452926020830190803683370190505090508481600081518110611f0457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250503381600181518110611f3257fe5b6001600160a01b0392831660209182029290920181019190915260a454604051630589c62760e31b8152600481018381528551602483015285519290941693632c4e313893869391928392604490910191858101910280838360005b83811015611fa6578181015183820152602001611f8e565b5050505090500192505050600060405180830381600087803b158015611fcb57600080fd5b505af1158015611fdf573d6000803e3d6000fd5b50505050505b50505050565b611ff58383610fc7565b80156120625760a45460408051633996b8cb60e11b81526001600160a01b0386811660048301529151919092169163732d719691602480830192600092919082900301818387803b15801561204957600080fd5b505af115801561205d573d6000803e3d6000fd5b505050505b505050565b60005460ff16156120a95760405162461bcd60e51b815260040180806020018281038252602e815260200180613ea7602e913960400191505060405180910390fd5b6001600160a01b0386166120ee5760405162461bcd60e51b815260040180806020018281038252603a815260200180613bf6603a913960400191505060405180910390fd5b6001600160a01b0383166121335760405162461bcd60e51b815260040180806020018281038252603a815260200180613fb3603a913960400191505060405180910390fd5b6001600160a01b0381166121785760405162461bcd60e51b815260040180806020018281038252603e815260200180613ed5603e913960400191505060405180910390fd5b6001600160a01b0382166121bd5760405162461bcd60e51b815260040180806020018281038252603e815260200180613c64603e913960400191505060405180910390fd5b61222e8585886001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156121fb57600080fd5b505afa15801561220f573d6000803e3d6000fd5b505050506040513d602081101561222557600080fd5b50518686613023565b60a280546001600160a01b039788166001600160a01b03199182161790915560ac8054929097169116179094555050670de0b6b3a7640000609f5550506000805460ff19166001179055565b606860209081526000928352604080842090915290825290205481565b6034546001600160a01b031681565b6033546001600160a01b031633146122ef5760405162461bcd60e51b8152600401808060200182810382526022815260200180613f5a6022913960400191505060405180910390fd5b60a354604080516337fddfc160e21b815290516001600160a01b039283169284169163dff77f04916004808301926020929190829003018186803b15801561233657600080fd5b505afa15801561234a573d6000803e3d6000fd5b505050506040513d602081101561236057600080fd5b505161239d5760405162461bcd60e51b81526004018080602001828103825260428152602001806140126042913960600191505060405180910390fd5b60a380546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915280517feb5cc99f497dc2d7106563bb080e06c9b09e3d81a38623ac4d0839575658d1fa9281900390910190a15050565b60a3546001600160a01b031681565b60026001541415612452576040805162461bcd60e51b815260206004820152601f6024820152600080516020613ca2833981519152604482015290519081900360640190fd5b600260015561245f6126f6565b61246761294f565b61246f611544565b146124ab5760405162461bcd60e51b8152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b6001600160a01b038116301415612509576040805162461bcd60e51b815260206004820152601c60248201527f694d534420546f6b656e2063616e206e6f74206265207365697a656400000000604482015290519081900360640190fd5b61107183838361313e565b60a4546001600160a01b031681565b6034546001600160a01b0316331461256c5760405162461bcd60e51b81526004018080602001828103825260258152602001806140a16025913960400191505060405180910390fd5b60338054603480546001600160a01b038082166001600160a01b031980861682179687905590921690925560405192821693909291169083907f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b236490600090a36034546040516001600160a01b03918216918316907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b6001600160a01b03831661264f5760405162461bcd60e51b81526004018080602001828103825260248152602001806140546024913960400191505060405180910390fd5b6001600160a01b0382166126945760405162461bcd60e51b8152600401808060200182810382526022815260200180613d386022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6126fe611544565b61270661294f565b14611ac457612713613ade565b61271b611406565b604080830182905260a7546060840181905260a8546080850181905260a35483516315f2405360e01b815260048101959095526024850192909252604484015290516001600160a01b03909116916315f24053916064808301926020929190829003018186803b15801561278e57600080fd5b505afa1580156127a2573d6000803e3d6000fd5b505050506040513d60208110156127b857600080fd5b505180825266038d7ea4c6800010156128025760405162461bcd60e51b81526004018080602001828103825260298152602001806140786029913960400191505060405180910390fd5b61280a61294f565b602082015261282561281a611544565b602083015190612b93565b60c08201819052815161283791613576565b60e08201819052606082015161284d91906135cf565b610100820181905260608201516128649190612d33565b6101208201526080810151610100820151609f5461288d929161288791906135cf565b90612d33565b61014082015260a55460a0820181905260e08201516128b1919061288790826135cf565b61016082015260208101516128c590612e85565b61016081015160a581905561012082015160a781905561014083015160a8819055602080850151610100860151604080880151815193845293830191909152818101959095526060810191909152608081019290925260a082015290517f59693255bedc2974b761b077cd2fdb47b3bde759f64b247f599c6941525655e19181900360c00190a150565b4290565b60a45460408051631637eefd60e01b81523060048201526001600160a01b03868116602483015285811660448301526064820185905291516000939290921691631637eefd91608480820192869290919082900301818387803b1580156129b957600080fd5b505af11580156129cd573d6000803e3d6000fd5b5050505060006129dc84612b36565b905060006129f8868386116129f157856129f3565b835b6135ed565b6001600160a01b038616600090815260a960205260409020909150612a1d8383612b93565b815560a554600182015560a7548211612a425760a754612a3d9083612b93565b612a45565b60005b60a75560a4546040805163783ca10560e11b81523060048201526001600160a01b038a811660248301528981166044830152606482018690529151919092169163f079420a91608480830192600092919082900301818387803b158015612aab57600080fd5b505af1158015612abf573d6000803e3d6000fd5b50508254600184015460a754604080516001600160a01b03808f1682528d1660208201528082018990526060810194909452608084019290925260a0830152517f6fadbf7329d21f278e724fa0d4511001a158f2a97ee35c5bc4cf8b64417399ef93509081900360c0019150a15095945050505050565b6001600160a01b038116600090815260a96020526040812080541580612b5e57506001810154155b15612b6d576000915050611234565b600181015460a5548254612b8c9291612b869190613576565b90613664565b9392505050565b6000612b8c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061367f565b6000826001600160a01b0316846001600160a01b03161415612c285760405162461bcd60e51b8152600401808060200182810382526026815260200180613f346026913960400191505060405180910390fd5b60a4546040805163395a182560e11b81523060048201526001600160a01b038781166024830152868116604483015260648201869052915191909216916372b4304a91608480830192600092919082900301818387803b158015612c8b57600080fd5b505af1158015612c9f573d6000803e3d6000fd5b50505050612cae848484613716565b60a4546040805163719d7a4560e11b81523060048201526001600160a01b0387811660248301528681166044830152606482018690529151919092169163e33af48a91608480830192600092919082900301818387803b158015612d1157600080fd5b505af1158015612d25573d6000803e3d6000fd5b506001979650505050505050565b600082820183811015612b8c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60a45460a2546040805163cb299dc760e01b81523060048201526001600160a01b0392831660248201526044810185905285831660648201529051600093929092169163cb299dc79160848082019260209290919082900301818787803b158015612df757600080fd5b505af1158015612e0b573d6000803e3d6000fd5b505050506040513d6020811015612e2157600080fd5b505160ac5460a25460408051636e839b0b60e01b81526001600160a01b0392831660048201528285166024820152604481018790529051939450911691636e839b0b9160648082019260009290919082900301818387803b15801561204957600080fd5b60ad55565b60a454604080516315caa9e760e11b81523060048201526001600160a01b0385811660248301526044820185905291519190921691632b9553ce91606480830192600092919082900301818387803b158015612ee557600080fd5b505af1158015612ef9573d6000803e3d6000fd5b505050506001600160a01b038216600090815260a960205260409020612f228261288785612b36565b815560a554600182015560a754612f399083612d33565b60a755612f468383612d8d565b60a45460408051636524c56b60e11b81523060048201526001600160a01b038681166024830152604482018690529151919092169163ca498ad691606480830192600092919082900301818387803b158015612fa157600080fd5b505af1158015612fb5573d6000803e3d6000fd5b50508254600184015460a754604080516001600160a01b038a168152602081018990528082019490945260608401929092526080830152517f2dd79f4fccfd18c360ce7f9132f3621bf05eee18f995224badb32d17f172df7393509081900360a0019150a1505050565b4690565b60a480546001600160a01b038085166001600160a01b03199283161790925560a380549284169290911691909117905561306361305e61294f565b612e85565b670de0b6b3a764000060a5556602d79883d2000060a0556703782dace9d9000060a15561308e61384e565b613099858585613890565b6130a16138d0565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8580519060200120604051806040016040528060018152602001603160f81b815250805190602001206130f361301f565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c09092019052805191012060aa555050505050565b336001600160a01b03841614156131865760405162461bcd60e51b8152600401808060200182810382526039815260200180613dea6039913960400191505060405180910390fd5b816131c25760405162461bcd60e51b8152600401808060200182810382526044815260200180613d5a6044913960600191505060405180910390fd5b6000819050806001600160a01b031663d14827916040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561320257600080fd5b505af1158015613216573d6000803e3d6000fd5b505050506040513d602081101561322c57600080fd5b505060a480546040805163030b416f60e11b81523060048201526001600160a01b0386811660248301523360448301528881166064830152608482018890529151919092169263061682de9280820192600092909182900301818387803b15801561329657600080fd5b505af11580156132aa573d6000803e3d6000fd5b505050506132b661294f565b816001600160a01b031663793dd9616040518163ffffffff1660e01b815260040160206040518083038186803b1580156132ef57600080fd5b505afa158015613303573d6000803e3d6000fd5b505050506040513d602081101561331957600080fd5b5051146133575760405162461bcd60e51b815260040180806020018281038252604c815260200180613d9e604c913960600191505060405180910390fd5b6000613364338686612953565b60a4546040805163191f14f760e11b81523060048201526001600160a01b0387811660248301526044820185905289811660648301529151939450600093919092169163323e29ee916084808301926020929190829003018186803b1580156133cc57600080fd5b505afa1580156133e0573d6000803e3d6000fd5b505050506040513d60208110156133f657600080fd5b505190506001600160a01b03841630141561341c57613417303388846138d6565b61348d565b6040805163b2a02ff160e01b81523360048201526001600160a01b0388811660248301526044820184905291519185169163b2a02ff19160648082019260009290919082900301818387803b15801561347457600080fd5b505af1158015613488573d6000803e3d6000fd5b505050505b60a4805460408051632fbde00360e11b81523060048201526001600160a01b0388811660248301523360448301528a811660648301526084820187905293810185905290519290911691635f7bc0069160c48082019260009290919082900301818387803b1580156134fe57600080fd5b505af1158015613512573d6000803e3d6000fd5b5050604080513381526001600160a01b03808b166020830152818301879052881660608201526080810185905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb5293509081900360a0019150a1505050505050565b60008261358557506000610c94565b8282028284828161359257fe5b0414612b8c5760405162461bcd60e51b8152600401808060200182810382526021815260200180613f136021913960400191505060405180910390fd5b6000612b8c670de0b6b3a76400006135e78585613576565b90613a3c565b60a25460408051632770a7eb60e21b81526001600160a01b0385811660048301526024820185905291516000939290921691639dc29fac91604480820192869290919082900301818387803b15801561364557600080fd5b505af1158015613659573d6000803e3d6000fd5b509395945050505050565b6000612b8c826135e7613678826001612b93565b8690612d33565b6000818484111561370e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136d35781810151838201526020016136bb565b50505050905090810190601f1680156137005780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03831661375b5760405162461bcd60e51b8152600401808060200182810382526025815260200180613fed6025913960400191505060405180910390fd5b6001600160a01b0382166137a05760405162461bcd60e51b8152600401808060200182810382526023815260200180613bd36023913960400191505060405180910390fd5b6001600160a01b0383166000908152606760205260409020546137c39082612b93565b6001600160a01b0380851660009081526067602052604080822093909355908416815220546137f29082612d33565b6001600160a01b0380841660008181526067602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b603380546001600160a01b031916339081179091556040516000907f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364908290a3565b82516138a390606a906020860190613b3f565b5081516138b790606b906020850190613b3f565b50606c805460ff191660ff929092169190911790555050565b60018055565b826001600160a01b0316826001600160a01b031614156139275760405162461bcd60e51b8152600401808060200182810382526026815260200180613e236026913960400191505060405180910390fd5b60a48054604080516332db6c6760e21b81523060048201526001600160a01b03888116602483015287811660448301528681166064830152608482018690529151919092169263cb6db19c9280820192600092909182900301818387803b15801561399157600080fd5b505af11580156139a5573d6000803e3d6000fd5b505050506139b4828483613716565b60a48054604080516306bfb3d160e11b81523060048201526001600160a01b038881166024830152878116604483015286811660648301526084820186905291519190921692630d7f67a29280820192600092909182900301818387803b158015613a1e57600080fd5b505af1158015613a32573d6000803e3d6000fd5b5050505050505050565b6000612b8c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060008183613ac85760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156136d35781810151838201526020016136bb565b506000838581613ad457fe5b0495945050505050565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b8057805160ff1916838001178555613bad565b82800160010185558215613bad579182015b82811115613bad578251825591602001919060010190613b92565b50613bb9929150613bbd565b5090565b5b80821115613bb95760008155600101613bbe56fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373696e697469616c697a653a20756e6465726c79696e6720616464726573732073686f756c64206e6f74206265207a65726f2061646472657373215f736574436f6e74726f6c6c65723a2054686973206973206e6f742074686520636f6e74726f6c6c657220636f6e747261637421696e697469616c697a653a20696e746572657374206d6f64656c20616464726573732073686f756c64206e6f74206265207a65726f2061646472657373215265656e7472616e637947756172643a207265656e7472616e742063616c6c005f776974686472617752657365727665733a20496e76616c696420776974686472617720616d6f756e74215f73657450656e64696e674f776e65723a204e6577206f77656e722063616e206e6f74206265207a65726f206164647265737320616e64206f776e657220686173206265656e207365742145524332303a20617070726f766520746f20746865207a65726f20616464726573735f6c6971756964617465426f72726f77496e7465726e616c3a204c697175696461746520616d6f756e742073686f756c642062652067726561746572207468616e2030215f6c6971756964617465426f72726f77496e7465726e616c3a204661696c656420746f2075706461746520626c6f636b206e756d62657220696e20636f6c6c61746572616c206173736574215f6c6971756964617465426f72726f77496e7465726e616c3a204c697175696461746f722063616e206e6f7420626520626f72726f776572217365697a653a204c697175696461746f722063616e206e6f7420626520626f72726f776572215f7365744e657750726f746f636f6c466565526174696f3a204e65772070726f746f636f6c20726174696f20746f6f206c6172676521736574746c65496e7465726573743a204661696c20746f2061636372756520696e74657265737421496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564696e697469616c697a653a204d534420636f6e74726f6c6c657220616464726573732073686f756c64206e6f74206265207a65726f206164647265737321536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775f7472616e73666572546f6b656e733a20446f206e6f742073656c662d7472616e73666572216f6e6c794f776e65723a2063616c6c6572206973206e6f7420746865206f776e65727365744e6577466c6173686c6f616e466565526174696f3a204e657720666c6173686c6f616e20726174696f20746f6f206c6172676521696e697469616c697a653a20636f6e74726f6c6c657220616464726573732073686f756c64206e6f74206265207a65726f20616464726573732145524332303a207472616e736665722066726f6d20746865207a65726f20616464726573735f736574496e746572657374526174654d6f64656c3a2054686973206973206e6f74207468652072617465207365636f6e64206d6f64656c20636f6e74726163742145524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735f757064617465496e7465726573743a20426f72726f77207261746520697320746f6f2068696768215f6163636570744f776e65723a204f6e6c7920666f722070656e64696e67206f776e6572215f7365744d5344436f6e74726f6c6c65723a2054686973206973206e6f74204d534420636f6e74726f6c6c657220636f6e747261637421a26469706673582212207888a8453628e91b6984937c87108c20d8914b5caae654700f7631b4080f53ae64736f6c634300060c0033