/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ import { Signer, Contract, ContractFactory, Overrides } from "ethers"; import { Provider, TransactionRequest } from "@ethersproject/providers"; import type { CompoundLens } from "../CompoundLens"; export class CompoundLens__factory extends ContractFactory { constructor(signer?: Signer) { super(_abi, _bytecode, signer); } deploy( overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy(overrides || {}) as Promise; } getDeployTransaction( overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction(overrides || {}); } attach(address: string): CompoundLens { return super.attach(address) as CompoundLens; } connect(signer: Signer): CompoundLens__factory { return super.connect(signer) as CompoundLens__factory; } static connect( address: string, signerOrProvider: Signer | Provider ): CompoundLens { return new Contract(address, _abi, signerOrProvider) as CompoundLens; } } const _abi = [ { inputs: [ { internalType: "contract CToken", name: "cToken", type: "address", }, { internalType: "address payable", name: "account", type: "address", }, ], name: "cTokenBalances", outputs: [ { components: [ { internalType: "address", name: "cToken", type: "address", }, { internalType: "uint256", name: "balanceOf", type: "uint256", }, { internalType: "uint256", name: "borrowBalanceCurrent", type: "uint256", }, { internalType: "uint256", name: "balanceOfUnderlying", type: "uint256", }, { internalType: "uint256", name: "tokenBalance", type: "uint256", }, { internalType: "uint256", name: "tokenAllowance", type: "uint256", }, ], internalType: "struct CompoundLens.CTokenBalances", name: "", type: "tuple", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract CToken[]", name: "cTokens", type: "address[]", }, { internalType: "address payable", name: "account", type: "address", }, ], name: "cTokenBalancesAll", outputs: [ { components: [ { internalType: "address", name: "cToken", type: "address", }, { internalType: "uint256", name: "balanceOf", type: "uint256", }, { internalType: "uint256", name: "borrowBalanceCurrent", type: "uint256", }, { internalType: "uint256", name: "balanceOfUnderlying", type: "uint256", }, { internalType: "uint256", name: "tokenBalance", type: "uint256", }, { internalType: "uint256", name: "tokenAllowance", type: "uint256", }, ], internalType: "struct CompoundLens.CTokenBalances[]", name: "", type: "tuple[]", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract CToken", name: "cToken", type: "address", }, ], name: "cTokenMetadata", outputs: [ { components: [ { internalType: "address", name: "cToken", type: "address", }, { internalType: "uint256", name: "exchangeRateCurrent", type: "uint256", }, { internalType: "uint256", name: "supplyRatePerBlock", type: "uint256", }, { internalType: "uint256", name: "borrowRatePerBlock", type: "uint256", }, { internalType: "uint256", name: "reserveFactorMantissa", type: "uint256", }, { internalType: "uint256", name: "totalBorrows", type: "uint256", }, { internalType: "uint256", name: "totalReserves", type: "uint256", }, { internalType: "uint256", name: "totalSupply", type: "uint256", }, { internalType: "uint256", name: "totalCash", type: "uint256", }, { internalType: "bool", name: "isListed", type: "bool", }, { internalType: "uint256", name: "collateralFactorMantissa", type: "uint256", }, { internalType: "address", name: "underlyingAssetAddress", type: "address", }, { internalType: "uint256", name: "cTokenDecimals", type: "uint256", }, { internalType: "uint256", name: "underlyingDecimals", type: "uint256", }, { internalType: "uint256", name: "compSupplySpeed", type: "uint256", }, { internalType: "uint256", name: "compBorrowSpeed", type: "uint256", }, { internalType: "uint256", name: "borrowCap", type: "uint256", }, ], internalType: "struct CompoundLens.CTokenMetadata", name: "", type: "tuple", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract CToken[]", name: "cTokens", type: "address[]", }, ], name: "cTokenMetadataAll", outputs: [ { components: [ { internalType: "address", name: "cToken", type: "address", }, { internalType: "uint256", name: "exchangeRateCurrent", type: "uint256", }, { internalType: "uint256", name: "supplyRatePerBlock", type: "uint256", }, { internalType: "uint256", name: "borrowRatePerBlock", type: "uint256", }, { internalType: "uint256", name: "reserveFactorMantissa", type: "uint256", }, { internalType: "uint256", name: "totalBorrows", type: "uint256", }, { internalType: "uint256", name: "totalReserves", type: "uint256", }, { internalType: "uint256", name: "totalSupply", type: "uint256", }, { internalType: "uint256", name: "totalCash", type: "uint256", }, { internalType: "bool", name: "isListed", type: "bool", }, { internalType: "uint256", name: "collateralFactorMantissa", type: "uint256", }, { internalType: "address", name: "underlyingAssetAddress", type: "address", }, { internalType: "uint256", name: "cTokenDecimals", type: "uint256", }, { internalType: "uint256", name: "underlyingDecimals", type: "uint256", }, { internalType: "uint256", name: "compSupplySpeed", type: "uint256", }, { internalType: "uint256", name: "compBorrowSpeed", type: "uint256", }, { internalType: "uint256", name: "borrowCap", type: "uint256", }, ], internalType: "struct CompoundLens.CTokenMetadata[]", name: "", type: "tuple[]", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract CToken", name: "cToken", type: "address", }, ], name: "cTokenUnderlyingPrice", outputs: [ { components: [ { internalType: "address", name: "cToken", type: "address", }, { internalType: "uint256", name: "underlyingPrice", type: "uint256", }, ], internalType: "struct CompoundLens.CTokenUnderlyingPrice", name: "", type: "tuple", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract CToken[]", name: "cTokens", type: "address[]", }, ], name: "cTokenUnderlyingPriceAll", outputs: [ { components: [ { internalType: "address", name: "cToken", type: "address", }, { internalType: "uint256", name: "underlyingPrice", type: "uint256", }, ], internalType: "struct CompoundLens.CTokenUnderlyingPrice[]", name: "", type: "tuple[]", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract ComptrollerLensInterface", name: "comptroller", type: "address", }, { internalType: "address", name: "account", type: "address", }, ], name: "getAccountLimits", outputs: [ { components: [ { internalType: "contract CToken[]", name: "markets", type: "address[]", }, { internalType: "uint256", name: "liquidity", type: "uint256", }, { internalType: "uint256", name: "shortfall", type: "uint256", }, ], internalType: "struct CompoundLens.AccountLimits", name: "", type: "tuple", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract Comp", name: "comp", type: "address", }, { internalType: "address", name: "account", type: "address", }, ], name: "getCompBalanceMetadata", outputs: [ { components: [ { internalType: "uint256", name: "balance", type: "uint256", }, { internalType: "uint256", name: "votes", type: "uint256", }, { internalType: "address", name: "delegate", type: "address", }, ], internalType: "struct CompoundLens.CompBalanceMetadata", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract Comp", name: "comp", type: "address", }, { internalType: "contract ComptrollerLensInterface", name: "comptroller", type: "address", }, { internalType: "address", name: "account", type: "address", }, ], name: "getCompBalanceMetadataExt", outputs: [ { components: [ { internalType: "uint256", name: "balance", type: "uint256", }, { internalType: "uint256", name: "votes", type: "uint256", }, { internalType: "address", name: "delegate", type: "address", }, { internalType: "uint256", name: "allocated", type: "uint256", }, ], internalType: "struct CompoundLens.CompBalanceMetadataExt", name: "", type: "tuple", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract Comp", name: "comp", type: "address", }, { internalType: "address", name: "account", type: "address", }, { internalType: "uint32[]", name: "blockNumbers", type: "uint32[]", }, ], name: "getCompVotes", outputs: [ { components: [ { internalType: "uint256", name: "blockNumber", type: "uint256", }, { internalType: "uint256", name: "votes", type: "uint256", }, ], internalType: "struct CompoundLens.CompVotes[]", name: "", type: "tuple[]", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract GovernorBravoInterface", name: "governor", type: "address", }, { internalType: "uint256[]", name: "proposalIds", type: "uint256[]", }, ], name: "getGovBravoProposals", outputs: [ { components: [ { internalType: "uint256", name: "proposalId", type: "uint256", }, { internalType: "address", name: "proposer", type: "address", }, { internalType: "uint256", name: "eta", type: "uint256", }, { internalType: "address[]", name: "targets", type: "address[]", }, { internalType: "uint256[]", name: "values", type: "uint256[]", }, { internalType: "string[]", name: "signatures", type: "string[]", }, { internalType: "bytes[]", name: "calldatas", type: "bytes[]", }, { internalType: "uint256", name: "startBlock", type: "uint256", }, { internalType: "uint256", name: "endBlock", type: "uint256", }, { internalType: "uint256", name: "forVotes", type: "uint256", }, { internalType: "uint256", name: "againstVotes", type: "uint256", }, { internalType: "uint256", name: "abstainVotes", type: "uint256", }, { internalType: "bool", name: "canceled", type: "bool", }, { internalType: "bool", name: "executed", type: "bool", }, ], internalType: "struct CompoundLens.GovBravoProposal[]", name: "", type: "tuple[]", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract GovernorBravoInterface", name: "governor", type: "address", }, { internalType: "address", name: "voter", type: "address", }, { internalType: "uint256[]", name: "proposalIds", type: "uint256[]", }, ], name: "getGovBravoReceipts", outputs: [ { components: [ { internalType: "uint256", name: "proposalId", type: "uint256", }, { internalType: "bool", name: "hasVoted", type: "bool", }, { internalType: "uint8", name: "support", type: "uint8", }, { internalType: "uint96", name: "votes", type: "uint96", }, ], internalType: "struct CompoundLens.GovBravoReceipt[]", name: "", type: "tuple[]", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract GovernorAlpha", name: "governor", type: "address", }, { internalType: "uint256[]", name: "proposalIds", type: "uint256[]", }, ], name: "getGovProposals", outputs: [ { components: [ { internalType: "uint256", name: "proposalId", type: "uint256", }, { internalType: "address", name: "proposer", type: "address", }, { internalType: "uint256", name: "eta", type: "uint256", }, { internalType: "address[]", name: "targets", type: "address[]", }, { internalType: "uint256[]", name: "values", type: "uint256[]", }, { internalType: "string[]", name: "signatures", type: "string[]", }, { internalType: "bytes[]", name: "calldatas", type: "bytes[]", }, { internalType: "uint256", name: "startBlock", type: "uint256", }, { internalType: "uint256", name: "endBlock", type: "uint256", }, { internalType: "uint256", name: "forVotes", type: "uint256", }, { internalType: "uint256", name: "againstVotes", type: "uint256", }, { internalType: "bool", name: "canceled", type: "bool", }, { internalType: "bool", name: "executed", type: "bool", }, ], internalType: "struct CompoundLens.GovProposal[]", name: "", type: "tuple[]", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract GovernorAlpha", name: "governor", type: "address", }, { internalType: "address", name: "voter", type: "address", }, { internalType: "uint256[]", name: "proposalIds", type: "uint256[]", }, ], name: "getGovReceipts", outputs: [ { components: [ { internalType: "uint256", name: "proposalId", type: "uint256", }, { internalType: "bool", name: "hasVoted", type: "bool", }, { internalType: "bool", name: "support", type: "bool", }, { internalType: "uint96", name: "votes", type: "uint96", }, ], internalType: "struct CompoundLens.GovReceipt[]", name: "", type: "tuple[]", }, ], stateMutability: "view", type: "function", }, ]; const _bytecode = "0x608060405234801561001057600080fd5b50613a2a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063595642191161008c57806396994869116100665780639699486914610285578063995ed99f146102a5578063bdf950c9146102c5578063c5ae5934146102e557600080fd5b8063595642191461022557806375d80e90146102455780637dd8f6d91461026557600080fd5b80632b2d5ed6116100c85780632b2d5ed614610187578063416405d7146101a757806343c811cc146101e55780634b70d84b1461020557600080fd5b80630972bf8b146100ef578063158eca8b146101185780631ea6374114610138575b600080fd5b6101026100fd366004612808565b610305565b60405161010f919061289e565b60405180910390f35b61012b6101263660046128ec565b6103d5565b60405161010f91906129d5565b61014b6101463660046129e4565b610b75565b60405161010f919081518152602080830151908201526040808301516001600160a01b0316908201526060918201519181019190915260800190565b61019a610195366004612a24565b610ed6565b60405161010f9190612a65565b6101ba6101b5366004612ac5565b610fab565b604080518251815260208084015190820152918101516001600160a01b03169082015260600161010f565b6101f86101f3366004612c1d565b61114c565b60405161010f9190612c7e565b610218610213366004612a24565b6112ee565b60405161010f9190612ce3565b610238610233366004612d26565b6113ac565b60405161010f9190612d8a565b610258610253366004612dcc565b611548565b60405161010f9190612f38565b610278610273366004612ac5565b6117a9565b60405161010f9190613072565b610298610293366004612dcc565b6118e3565b60405161010f91906130e1565b6102b86102b3366004612c1d565b611b2d565b60405161010f9190613202565b6102d86102d3366004612ac5565b611cce565b60405161010f9190613266565b6102f86102f33660046128ec565b612017565b60405161010f9190613274565b6060826000816001600160401b0381111561032257610322612afe565b60405190808252806020026020018201604052801561035b57816020015b6103486126d5565b8152602001906001900390816103405790505b50905060005b828110156103c95761039987878381811061037e5761037e613294565b905060200201602081019061039391906128ec565b86611cce565b8282815181106103ab576103ab613294565b602002602001018190525080806103c1906132c0565b915050610361565b509150505b9392505050565b6103dd612714565b6000826001600160a01b031663bd6d894d6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561041f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044391906132db565b90506000836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a991906132f4565b604051638e8f294b60e01b81526001600160a01b038681166004830152919250600091829190841690638e8f294b906024016040805180830381865afa1580156104f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051b9190613326565b915091506000806105ad886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610563573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261058b91908101906133c0565b604051806040016040528060048152602001630c68aa8960e31b815250612181565b156105be57506000905060126106f1565b6000889050806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610601573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062591906132f4565b9250806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610665573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068991906132f4565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ea9190613418565b60ff169150505b6000806106fe878b6121da565b9150915060008080896001600160a01b0316634a58443260e01b8e60405160200161073891906001600160a01b0391909116815260200190565b60408051601f19818403018152908290526107569291602001613433565b60408051601f198184030181529082905261077091613464565b6000604051808303816000865af19150503d80600081146107ad576040519150601f19603f3d011682016040523d82523d6000602084013e6107b2565b606091505b509150915081156107d457808060200190518101906107d191906132db565b92505b6040518061022001604052808e6001600160a01b031681526020018c81526020018e6001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085791906132db565b81526020018e6001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be91906132db565b81526020018e6001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015610901573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092591906132db565b81526020018e6001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa158015610968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098c91906132db565b81526020018e6001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f391906132db565b81526020018e6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a91906132db565b81526020018e6001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac191906132db565b81526020018a15158152602001898152602001886001600160a01b031681526020018e6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b459190613418565b60ff168152602001878152602001868152602001858152602001848152509b505050505050505050505050919050565b610ba96040518060800160405280600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040516370a0823160e01b81526001600160a01b038381166004830152600091908616906370a0823190602401602060405180830381865afa158015610bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1791906132db565b6040516374d7814960e11b81526001600160a01b0385811660048301529192509085169063e9af029290602401600060405180830381600087803b158015610c5e57600080fd5b505af1158015610c72573d6000803e3d6000fd5b50506040516370a0823160e01b81526001600160a01b03868116600483015260009350881691506370a0823190602401602060405180830381865afa158015610cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce391906132db565b60405163331faf7160e21b81526001600160a01b03868116600483015291925060009187169063cc7ebdc490602401602060405180830381865afa158015610d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5391906132db565b90506000610d8882846040518060400160405280600e81526020016d1cdd5b4818dbdb5c081d1bdd185b60921b81525061245d565b90506000610dbc82866040518060400160405280600d81526020016c1cdd5888185b1b1bd8d85d1959609a1b815250612497565b60408051608081018252878152905163b4b5ea5760e01b81526001600160a01b038a8116600483015292935090916020830191908c169063b4b5ea5790602401602060405180830381865afa158015610e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3d9190613497565b6001600160601b03168152604051632c3e6f0f60e11b81526001600160a01b038a811660048301526020909201918c169063587cde1e90602401602060405180830381865afa158015610e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb891906132f4565b6001600160a01b031681526020019190915298975050505050505050565b6060816000816001600160401b03811115610ef357610ef3612afe565b604051908082528060200260200182016040528015610f3857816020015b6040805180820190915260008082526020820152815260200190600190039081610f115790505b50905060005b82811015610fa057610f70868683818110610f5b57610f5b613294565b90506020020160208101906102f391906128ec565b828281518110610f8257610f82613294565b60200260200101819052508080610f98906132c0565b915050610f3e565b509150505b92915050565b610fd86040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b6040805160608101918290526370a0823160e01b9091526001600160a01b038381166064830152819085166370a0823160848301602060405180830381865afa158015611029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d91906132db565b815260405163b4b5ea5760e01b81526001600160a01b03858116600483015260209092019186169063b4b5ea5790602401602060405180830381865afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190613497565b6001600160601b03168152604051632c3e6f0f60e11b81526001600160a01b03858116600483015260209092019186169063587cde1e90602401602060405180830381865afa158015611116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113a91906132f4565b6001600160a01b031690529392505050565b80516060906000816001600160401b0381111561116b5761116b612afe565b6040519080825280602002602001820160405280156111bd57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816111895790505b50905060005b828110156103c9576000876001600160a01b031663e23a9a528784815181106111ee576111ee613294565b6020026020010151896040518363ffffffff1660e01b81526004016112269291909182526001600160a01b0316602082015260400190565b606060405180830381865afa158015611243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126791906134b2565b9050604051806080016040528087848151811061128657611286613294565b60200260200101518152602001826000015115158152602001826020015160ff16815260200182604001516001600160601b03168152508383815181106112cf576112cf613294565b60200260200101819052505080806112e6906132c0565b9150506111c3565b6060816000816001600160401b0381111561130b5761130b612afe565b60405190808252806020026020018201604052801561134457816020015b611331612714565b8152602001906001900390816113295790505b50905060005b82811015610fa05761137c86868381811061136757611367613294565b905060200201602081019061012691906128ec565b82828151811061138e5761138e613294565b602002602001018190525080806113a4906132c0565b91505061134a565b60606000826001600160401b038111156113c8576113c8612afe565b60405190808252806020026020018201604052801561140d57816020015b60408051808201909152600080825260208201528152602001906001900390816113e65790505b50905060005b8381101561153e57604051806040016040528086868481811061143857611438613294565b905060200201602081019061144d9190613500565b63ffffffff168152602001886001600160a01b031663782d6fe18989898781811061147a5761147a613294565b905060200201602081019061148f9190613500565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff166024820152604401602060405180830381865afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190613497565b6001600160601b031681525082828151811061152057611520613294565b60200260200101819052508080611536906132c0565b915050611413565b5095945050505050565b60606000826001600160401b0381111561156457611564612afe565b60405190808252806020026020018201604052801561161457816020015b611601604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b8152602001906001900390816115825790505b50905060005b838110156117a057600080600080896001600160a01b031663328dd9828a8a8881811061164957611649613294565b905060200201356040518263ffffffff1660e01b815260040161166e91815260200190565b600060405180830381865afa15801561168b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116b39190810190613694565b9350935093509350604051806101c001604052806000815260200160006001600160a01b031681526020016000815260200185815260200184815260200183815260200182815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525086868151811061174257611742613294565b602002602001018190525061178986868151811061176257611762613294565b60200260200101518b8b8b8981811061177d5761177d613294565b905060200201356124d1565b505050508080611798906132c0565b91505061161a565b50949350505050565b6117cd60405180606001604052806060815260200160008152602001600081525090565b604051635ec88c7960e01b81526001600160a01b0383811660048301526000918291829190871690635ec88c7990602401606060405180830381865afa15801561181b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f91906137a1565b9250925092508260001461185257600080fd5b604080516060810191829052632aff3bff60e21b9091526001600160a01b0386811660648301528190881663abfceffc60848301600060405180830381865afa1580156118a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118cb91908101906137cf565b81526020810193909352604090920152949350505050565b60606000826001600160401b038111156118ff576118ff612afe565b6040519080825280602002602001820160405280156119a857816020015b611995604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b81526020019060019003908161191d5790505b50905060005b838110156117a057600080600080896001600160a01b031663328dd9828a8a888181106119dd576119dd613294565b905060200201356040518263ffffffff1660e01b8152600401611a0291815260200190565b600060405180830381865afa158015611a1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a479190810190613694565b9350935093509350604051806101a001604052806000815260200160006001600160a01b03168152602001600081526020018581526020018481526020018381526020018281526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815250868681518110611acf57611acf613294565b6020026020010181905250611b16868681518110611aef57611aef613294565b60200260200101518b8b8b89818110611b0a57611b0a613294565b905060200201356125bc565b505050508080611b25906132c0565b9150506119ae565b80516060906000816001600160401b03811115611b4c57611b4c612afe565b604051908082528060200260200182016040528015611b9e57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181611b6a5790505b50905060005b828110156103c9576000876001600160a01b031663e23a9a52878481518110611bcf57611bcf613294565b6020026020010151896040518363ffffffff1660e01b8152600401611c079291909182526001600160a01b0316602082015260400190565b606060405180830381865afa158015611c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c489190613868565b90506040518060800160405280878481518110611c6757611c67613294565b6020026020010151815260200182600001511515815260200182602001511515815260200182604001516001600160601b0316815250838381518110611caf57611caf613294565b6020026020010181905250508080611cc6906132c0565b915050611ba4565b611cd66126d5565b6040516370a0823160e01b81526001600160a01b038381166004830152600091908516906370a0823190602401602060405180830381865afa158015611d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4491906132db565b6040516305eff7ef60e21b81526001600160a01b0385811660048301529192506000918616906317bfdfbc906024016020604051808303816000875af1158015611d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db691906132db565b604051633af9e66960e01b81526001600160a01b038681166004830152919250600091871690633af9e669906024016020604051808303816000875af1158015611e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2891906132db565b9050600080611e6e886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610563573d6000803e3d6000fd5b15611e885750506001600160a01b03851680319031611fda565b60008890506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef191906132f4565b6040516370a0823160e01b81526001600160a01b038b81166004830152919250908216906370a0823190602401602060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5f91906132db565b604051636eb1769f60e11b81526001600160a01b038b811660048301528c811660248301529195509082169063dd62ed3e90604401602060405180830381865afa158015611fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd591906132db565b925050505b6040805160c0810182526001600160a01b039990991689526020890195909552938701929092526060860152608085015260a08401525090919050565b60408051808201909152600080825260208201526000826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f91906132f4565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f591906132f4565b6040805180820182526001600160a01b03808816808352925163fc57d4df60e01b815260048101939093529293509160208301919084169063fc57d4df90602401602060405180830381865afa158015612153573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217791906132db565b9052949350505050565b6000816040516020016121949190613464565b60405160208183030381529060405280519060200120836040516020016121bb9190613464565b6040516020818303038152906040528051906020012014905092915050565b60008060008080866001600160a01b0316636aa875b560e01b8760405160200161221391906001600160a01b0391909116815260200190565b60408051601f19818403018152908290526122319291602001613433565b60408051601f198184030181529082905261224b91613464565b6000604051808303816000865af19150503d8060008114612288576040519150601f19603f3d011682016040523d82523d6000602084013e61228d565b606091505b509150915081156122af57808060200190518101906122ac91906132db565b92505b604080516001600160a01b038881166020830152600092839283928c16916303d290cf60e61b910160408051601f19818403018152908290526122f59291602001613433565b60408051601f198184030181529082905261230f91613464565b6000604051808303816000865af19150503d806000811461234c576040519150601f19603f3d011682016040523d82523d6000602084013e612351565b606091505b50915091508115612373578080602001905181019061237091906132db565b92505b84158061237e575081155b1561244c57604080516001600160a01b038b811660208301526000928392918e1691631d7b33d760e01b910160408051601f19818403018152908290526123c89291602001613433565b60408051601f19818403018152908290526123e291613464565b6000604051808303816000865af19150503d806000811461241f576040519150601f19603f3d011682016040523d82523d6000602084013e612424565b606091505b50915091508115612449578080602001905181019061244391906132db565b94508497505b50505b5093955093505050505b9250929050565b60008061246a8486613899565b905082858210156117a05760405162461bcd60e51b815260040161248e91906138b1565b60405180910390fd5b600081848411156124bb5760405162461bcd60e51b815260040161248e91906138b1565b5060006124c884866138c4565b95945050505050565b60405163013cf08b60e01b8152600481018290526000906001600160a01b0384169063013cf08b9060240161014060405180830381865afa15801561251a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253e91906138db565b918452506020808201516001600160a01b03169084015260408082015190840152606081015160e08085019190915260808201516101008086019190915260a08301516101208087019190915260c0840151610140870152918301516101608601528201511515610180850152015115156101a09092019190915250565b600080600080600080600080896001600160a01b031663013cf08b8a6040518263ffffffff1660e01b81526004016125f691815260200190565b61012060405180830381865afa158015612614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126389190613972565b9850985098509850985098509850985050888b6000018181525050878b602001906001600160a01b031690816001600160a01b031681525050868b6040018181525050858b60e0018181525050848b610100018181525050838b610120018181525050828b610140018181525050818b610160019015159081151581525050808b6101800190151590811515815250505050505050505050505050565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180610220016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008083601f8401126127be57600080fd5b5081356001600160401b038111156127d557600080fd5b6020830191508360208260051b850101111561245657600080fd5b6001600160a01b038116811461280557600080fd5b50565b60008060006040848603121561281d57600080fd5b83356001600160401b0381111561283357600080fd5b61283f868287016127ac565b9094509250506020840135612853816127f0565b809150509250925092565b80516001600160a01b031682526020808201519083015260408082015190830152606080820151908301526080808201519083015260a090810151910152565b6020808252825182820181905260009190848201906040850190845b818110156128e0576128cd83855161285e565b9284019260c092909201916001016128ba565b50909695505050505050565b6000602082840312156128fe57600080fd5b81356103ce816127f0565b80516001600160a01b031682526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015161297c8285018215159052565b50506101408181015190830152610160808201516001600160a01b03169083015261018080820151908301526101a080820151908301526101c080820151908301526101e0808201519083015261020090810151910152565b6102208101610fa58284612909565b6000806000606084860312156129f957600080fd5b8335612a04816127f0565b92506020840135612a14816127f0565b91506040840135612853816127f0565b60008060208385031215612a3757600080fd5b82356001600160401b03811115612a4d57600080fd5b612a59858286016127ac565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015612ab857612aa884835180516001600160a01b03168252602090810151910152565b9284019290850190600101612a82565b5091979650505050505050565b60008060408385031215612ad857600080fd5b8235612ae3816127f0565b91506020830135612af3816127f0565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612b3657612b36612afe565b60405290565b60405161014081016001600160401b0381118282101715612b3657612b36612afe565b604051601f8201601f191681016001600160401b0381118282101715612b8757612b87612afe565b604052919050565b60006001600160401b03821115612ba857612ba8612afe565b5060051b60200190565b600082601f830112612bc357600080fd5b81356020612bd8612bd383612b8f565b612b5f565b82815260059290921b84018101918181019086841115612bf757600080fd5b8286015b84811015612c125780358352918301918301612bfb565b509695505050505050565b600080600060608486031215612c3257600080fd5b8335612c3d816127f0565b92506020840135612c4d816127f0565b915060408401356001600160401b03811115612c6857600080fd5b612c7486828701612bb2565b9150509250925092565b602080825282518282018190526000919060409081850190868401855b82811015612ab857815180518552868101511515878601528581015160ff16868601526060908101516001600160601b03169085015260809093019290850190600101612c9b565b6020808252825182820181905260009190848201906040850190845b818110156128e057612d12838551612909565b928401926102209290920191600101612cff565b60008060008060608587031215612d3c57600080fd5b8435612d47816127f0565b93506020850135612d57816127f0565b925060408501356001600160401b03811115612d7257600080fd5b612d7e878288016127ac565b95989497509550505050565b602080825282518282018190526000919060409081850190868401855b82811015612ab857815180518552860151868501529284019290850190600101612da7565b600080600060408486031215612de157600080fd5b8335612dec816127f0565b925060208401356001600160401b03811115612e0757600080fd5b612e13868287016127ac565b9497909650939450505050565b600081518084526020808501945080840160005b83811015612e595781516001600160a01b031687529582019590820190600101612e34565b509495945050505050565b600081518084526020808501945080840160005b83811015612e5957815187529582019590820190600101612e78565b60005b83811015612eaf578181015183820152602001612e97565b83811115612ebe576000848401525b50505050565b60008151808452612edc816020860160208601612e94565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015612ab8578284038952612f26848351612ec4565b98850198935090840190600101612f0e565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561306457888303603f19018552815180518452878101516001600160a01b038116898601526101c0905087820151888601526060808301518282880152612fac83880182612e20565b9250505060808083015186830382880152612fc78382612e64565b9250505060a08083015186830382880152612fe28382612ef0565b9250505060c08083015186830382880152612ffd8382612ef0565b60e085810151908901526101008086015190890152610120808601519089015261014080860151908901526101608086015190890152610180808601511515908901526101a094850151151594909701939093525050509386019390860190600101612f5f565b509098975050505050505050565b6020808252825160608383015280516080840181905260009291820190839060a08601905b808310156130c05783516001600160a01b03168252928401926001929092019190840190613097565b50838701516040870152604087015160608701528094505050505092915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561306457888303603f19018552815180518452878101516001600160a01b038116898601526101a090508782015188860152606080830151828288015261315583880182612e20565b92505050608080830151868303828801526131708382612e64565b9250505060a0808301518683038288015261318b8382612ef0565b9250505060c080830151868303828801526131a68382612ef0565b60e085810151908901526101008086015190890152610120808601519089015261014080860151908901526101608086015115159089015261018094850151151594909701939093525050509386019390860190600101613108565b602080825282518282018190526000919060409081850190868401855b82811015612ab85781518051855286810151151587860152858101511515868601526060908101516001600160601b0316908501526080909301929085019060010161321f565b60c08101610fa5828461285e565b81516001600160a01b031681526020808301519082015260408101610fa5565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156132d4576132d46132aa565b5060010190565b6000602082840312156132ed57600080fd5b5051919050565b60006020828403121561330657600080fd5b81516103ce816127f0565b8051801515811461332157600080fd5b919050565b6000806040838503121561333957600080fd5b61334283613311565b9150602083015190509250929050565b60006001600160401b0383111561336b5761336b612afe565b61337e601f8401601f1916602001612b5f565b905082815283838301111561339257600080fd5b6103ce836020830184612e94565b600082601f8301126133b157600080fd5b6103ce83835160208501613352565b6000602082840312156133d257600080fd5b81516001600160401b038111156133e857600080fd5b6133f4848285016133a0565b949350505050565b8051613321816127f0565b805160ff8116811461332157600080fd5b60006020828403121561342a57600080fd5b6103ce82613407565b6001600160e01b0319831681528151600090613456816004850160208701612e94565b919091016004019392505050565b60008251613476818460208701612e94565b9190910192915050565b80516001600160601b038116811461332157600080fd5b6000602082840312156134a957600080fd5b6103ce82613480565b6000606082840312156134c457600080fd5b6134cc612b14565b6134d583613311565b81526134e360208401613407565b60208201526134f460408401613480565b60408201529392505050565b60006020828403121561351257600080fd5b813563ffffffff811681146103ce57600080fd5b600082601f83011261353757600080fd5b81516020613547612bd383612b8f565b82815260059290921b8401810191818101908684111561356657600080fd5b8286015b84811015612c12578051835291830191830161356a565b600082601f83011261359257600080fd5b815160206135a2612bd383612b8f565b82815260059290921b840181019181810190868411156135c157600080fd5b8286015b84811015612c125780516001600160401b038111156135e45760008081fd5b6135f28986838b01016133a0565b8452509183019183016135c5565b600082601f83011261361157600080fd5b81516020613621612bd383612b8f565b82815260059290921b8401810191818101908684111561364057600080fd5b8286015b84811015612c125780516001600160401b038111156136635760008081fd5b8701603f810189136136755760008081fd5b613686898683015160408401613352565b845250918301918301613644565b600080600080608085870312156136aa57600080fd5b84516001600160401b03808211156136c157600080fd5b818701915087601f8301126136d557600080fd5b815160206136e5612bd383612b8f565b82815260059290921b8401810191818101908b84111561370457600080fd5b948201945b8386101561372b57855161371c816127f0565b82529482019490820190613709565b918a015191985090935050508082111561374457600080fd5b61375088838901613526565b9450604087015191508082111561376657600080fd5b61377288838901613581565b9350606087015191508082111561378857600080fd5b5061379587828801613600565b91505092959194509250565b6000806000606084860312156137b657600080fd5b8351925060208401519150604084015190509250925092565b600060208083850312156137e257600080fd5b82516001600160401b038111156137f857600080fd5b8301601f8101851361380957600080fd5b8051613817612bd382612b8f565b81815260059190911b8201830190838101908783111561383657600080fd5b928401925b8284101561385d57835161384e816127f0565b8252928401929084019061383b565b979650505050505050565b60006060828403121561387a57600080fd5b613882612b14565b61388b83613311565b81526134e360208401613311565b600082198211156138ac576138ac6132aa565b500190565b6020815260006103ce6020830184612ec4565b6000828210156138d6576138d66132aa565b500390565b600061014082840312156138ee57600080fd5b6138f6612b3c565b82518152613906602084016133fc565b602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100613955818501613311565b90820152610120613967848201613311565b908201529392505050565b60008060008060008060008060006101208a8c03121561399157600080fd5b8951985060208a01516139a3816127f0565b8098505060408a0151965060608a0151955060808a0151945060a08a0151935060c08a015192506139d660e08b01613311565b91506139e56101008b01613311565b9050929598509295985092959856fea264697066735822122000e0ec19ad614be64658a61994f4e5150fa9c0a64c3037b4e9e5092cd4819ff964736f6c634300080a0033";