UNPKG

@augumented-finance/protocol-v1

Version:

Augmented Protocol smart contracts

1,206 lines 78.5 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LendingPoolFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class LendingPoolFactory extends contracts_1.ContractFactory { constructor(linkLibraryAddresses, signer) { super(_abi, LendingPoolFactory.linkBytecode(linkLibraryAddresses), signer); } static linkBytecode(linkLibraryAddresses) { let linkedBytecode = _bytecode; linkedBytecode = linkedBytecode.replace(new RegExp("__\\$de8c0cf1a7d7c36c802af9a64fb9d86036\\$__", "g"), linkLibraryAddresses["__$de8c0cf1a7d7c36c802af9a64fb9d86036$__"] .replace(/^0x/, "") .toLowerCase()); linkedBytecode = linkedBytecode.replace(new RegExp("__\\$22cd43a9dda9ce44e9b92ba393b88fb9ac\\$__", "g"), linkLibraryAddresses["__$22cd43a9dda9ce44e9b92ba393b88fb9ac$__"] .replace(/^0x/, "") .toLowerCase()); return linkedBytecode; } deploy(overrides) { return super.deploy(overrides || {}); } getDeployTransaction(overrides) { return super.getDeployTransaction(overrides || {}); } attach(address) { return super.attach(address); } connect(signer) { return super.connect(signer); } static connect(address, signerOrProvider) { return new contracts_1.Contract(address, _abi, signerOrProvider); } } exports.LendingPoolFactory = LendingPoolFactory; const _abi = [ { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: false, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "onBehalfOf", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "borrowRateMode", type: "uint256", }, { indexed: false, internalType: "uint256", name: "borrowRate", type: "uint256", }, { indexed: true, internalType: "uint64", name: "referral", type: "uint64", }, ], name: "Borrow", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: false, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "onBehalfOf", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: true, internalType: "uint64", name: "referral", type: "uint64", }, ], name: "Deposit", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "target", type: "address", }, { indexed: true, internalType: "address", name: "initiator", type: "address", }, { indexed: true, internalType: "address", name: "asset", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "premium", type: "uint256", }, { indexed: false, internalType: "uint64", name: "referralCode", type: "uint64", }, ], name: "FlashLoan", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "collateralAsset", type: "address", }, { indexed: true, internalType: "address", name: "debtAsset", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: false, internalType: "uint256", name: "debtToCover", type: "uint256", }, { indexed: false, internalType: "uint256", name: "liquidatedCollateralAmount", type: "uint256", }, { indexed: false, internalType: "address", name: "liquidator", type: "address", }, { indexed: false, internalType: "bool", name: "receiveAToken", type: "bool", }, ], name: "LiquidationCall", type: "event", }, { anonymous: false, inputs: [], name: "Paused", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, ], name: "RebalanceStableBorrowRate", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "repayer", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Repay", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: false, internalType: "uint256", name: "liquidityRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "stableBorrowRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "variableBorrowRate", type: "uint256", }, { indexed: false, internalType: "uint256", name: "liquidityIndex", type: "uint256", }, { indexed: false, internalType: "uint256", name: "variableBorrowIndex", type: "uint256", }, ], name: "ReserveDataUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, ], name: "ReserveUsedAsCollateralDisabled", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, ], name: "ReserveUsedAsCollateralEnabled", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: false, internalType: "uint256", name: "rateMode", type: "uint256", }, ], name: "Swap", type: "event", }, { anonymous: false, inputs: [], name: "Unpaused", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "reserve", type: "address", }, { indexed: true, internalType: "address", name: "user", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Withdraw", type: "event", }, { inputs: [], name: "FLASHLOAN_PREMIUM_TOTAL", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "MAX_NUMBER_RESERVES", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "MAX_STABLE_RATE_BORROW_SIZE_PERCENT", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "REVISION", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "interestRateMode", type: "uint256", }, { internalType: "uint64", name: "referralCode", type: "uint64", }, { internalType: "address", name: "onBehalfOf", type: "address", }, ], name: "borrow", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "address", name: "onBehalfOf", type: "address", }, { internalType: "uint64", name: "referralCode", type: "uint64", }, ], name: "deposit", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "address", name: "from", type: "address", }, { internalType: "address", name: "to", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "balanceFromBefore", type: "uint256", }, { internalType: "uint256", name: "balanceToBefore", type: "uint256", }, ], name: "finalizeTransfer", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "receiverAddress", type: "address", }, { internalType: "address[]", name: "assets", type: "address[]", }, { internalType: "uint256[]", name: "amounts", type: "uint256[]", }, { internalType: "uint256[]", name: "modes", type: "uint256[]", }, { internalType: "address", name: "onBehalfOf", type: "address", }, { internalType: "bytes", name: "params", type: "bytes", }, { internalType: "uint64", name: "referralCode", type: "uint64", }, ], name: "flashLoan", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "getAccessController", outputs: [ { internalType: "contract IMarketAccessController", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getAddressesProvider", outputs: [ { internalType: "contract IMarketAccessController", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getConfiguration", outputs: [ { components: [ { internalType: "uint256", name: "data", type: "uint256", }, ], internalType: "struct DataTypes.ReserveConfigurationMap", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getReserveData", outputs: [ { components: [ { components: [ { internalType: "uint256", name: "data", type: "uint256", }, ], internalType: "struct DataTypes.ReserveConfigurationMap", name: "configuration", type: "tuple", }, { internalType: "uint128", name: "liquidityIndex", type: "uint128", }, { internalType: "uint128", name: "variableBorrowIndex", type: "uint128", }, { internalType: "uint128", name: "currentLiquidityRate", type: "uint128", }, { internalType: "uint128", name: "currentVariableBorrowRate", type: "uint128", }, { internalType: "uint128", name: "currentStableBorrowRate", type: "uint128", }, { internalType: "uint40", name: "lastUpdateTimestamp", type: "uint40", }, { internalType: "address", name: "aTokenAddress", type: "address", }, { internalType: "address", name: "stableDebtTokenAddress", type: "address", }, { internalType: "address", name: "variableDebtTokenAddress", type: "address", }, { internalType: "address", name: "interestRateStrategyAddress", type: "address", }, { internalType: "uint8", name: "id", type: "uint8", }, ], internalType: "struct DataTypes.ReserveData", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getReserveNormalizedIncome", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getReserveNormalizedVariableDebt", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getReservesList", outputs: [ { internalType: "address[]", name: "", type: "address[]", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "getUserAccountData", outputs: [ { internalType: "uint256", name: "totalCollateralETH", type: "uint256", }, { internalType: "uint256", name: "totalDebtETH", type: "uint256", }, { internalType: "uint256", name: "availableBorrowsETH", type: "uint256", }, { internalType: "uint256", name: "currentLiquidationThreshold", type: "uint256", }, { internalType: "uint256", name: "ltv", type: "uint256", }, { internalType: "uint256", name: "healthFactor", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "getUserConfiguration", outputs: [ { components: [ { internalType: "uint256", name: "data", type: "uint256", }, ], internalType: "struct DataTypes.UserConfigurationMap", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "address", name: "aTokenAddress", type: "address", }, { internalType: "address", name: "stableDebtAddress", type: "address", }, { internalType: "address", name: "variableDebtAddress", type: "address", }, { internalType: "address", name: "interestRateStrategyAddress", type: "address", }, ], name: "initReserve", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract IMarketAccessController", name: "provider", type: "address", }, ], name: "initialize", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "isPaused", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "addr", type: "address", }, ], name: "isPoolAdmin", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "collateralAsset", type: "address", }, { internalType: "address", name: "debtAsset", type: "address", }, { internalType: "address", name: "user", type: "address", }, { internalType: "uint256", name: "debtToCover", type: "uint256", }, { internalType: "bool", name: "receiveAToken", type: "bool", }, ], name: "liquidationCall", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "address", name: "user", type: "address", }, ], name: "rebalanceStableBorrowRate", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "rateMode", type: "uint256", }, { internalType: "address", name: "onBehalfOf", type: "address", }, ], name: "repay", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "configuration", type: "uint256", }, ], name: "setConfiguration", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "premium", type: "uint16", }, ], name: "setFlashLoanPremium", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "val", type: "bool", }, ], name: "setPaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "address", name: "rateStrategyAddress", type: "address", }, ], name: "setReserveInterestRateStrategyAddress", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "bool", name: "useAsCollateral", type: "bool", }, ], name: "setUserUseReserveAsCollateral", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "receiverAddress", type: "address", }, { internalType: "address[]", name: "assets", type: "address[]", }, { internalType: "uint256[]", name: "amounts", type: "uint256[]", }, { internalType: "uint256[]", name: "modes", type: "uint256[]", }, { internalType: "address", name: "onBehalfOf", type: "address", }, { internalType: "bytes", name: "params", type: "bytes", }, { internalType: "uint64", name: "referralCode", type: "uint64", }, ], name: "sponsoredFlashLoan", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "rateMode", type: "uint256", }, ], name: "swapBorrowRateMode", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "address", name: "to", type: "address", }, ], name: "withdraw", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x608060405260008055600060015534801561001957600080fd5b50615b29806200002a6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c806394ba89a21161010f578063cd112382116100a2578063dde43cba11610071578063dde43cba14610447578063e82fec2f1461044f578063f8119d5114610457578063fe65acfe1461023a576101ef565b8063cd112382146103f9578063d15e00531461040c578063d1946dbc1461041f578063d5ed393314610434576101ef565b8063c44b11f7116100de578063c44b11f7146103ad578063c4d66de8146103c0578063ca0d4d8c146103d3578063ca54b5ba146103e6576101ef565b806394ba89a21461035a578063b187bd261461036d578063b8d2927614610375578063bf92857c14610388576101ef565b806342eab7a41161018757806369328dec1161015657806369328dec146103015780637a708e92146103145780637be53ca1146103275780637f9cb3be14610347576101ef565b806342eab7a4146102a85780634417a583146102bb578063573ade81146102db5780635a3b74b9146102ee576101ef565b80631d2118f9116101c35780631d2118f91461024f5780631fc0a6ce1461026257806335ea6a7514610275578063386497fd14610295576101ef565b8062a718a9146101f4578063074b2e431461020957806316c38b3c1461022757806316d6b5f61461023a575b600080fd5b610207610202366004614cef565b61045f565b005b610211610635565b60405161021e9190615a1a565b60405180910390f35b610207610235366004615015565b610645565b61024261071e565b60405161021e919061527d565b61020761025d366004614c47565b61072d565b610207610270366004614dac565b610767565b610288610283366004614c0f565b6107d0565b60405161021e919061582f565b6102116102a3366004614c0f565b6108b0565b6102076102b6366004614fd6565b6108d7565b6102ce6102c9366004614c0f565b61095c565b60405161021e9190615825565b6102116102e9366004614f8d565b61098f565b6102076102fc366004614ea3565b610cbb565b61021161030f366004614efb565b610e8a565b610207610322366004614c7f565b6111c1565b61033a610335366004614c0f565b6112a3565b60405161021e91906155b5565b61020761035536600461504d565b611324565b610207610368366004614ed0565b6113a0565b61033a61170d565b610207610383366004614ed0565b61171d565b61039b610396366004614c0f565b611741565b60405161021e96959493929190615a52565b6102ce6103bb366004614c0f565b611828565b6102076103ce366004614c0f565b61185b565b6102076103e1366004614f3c565b6118e6565b6102076103f4366004614dac565b611b18565b610207610407366004614c47565b611bb4565b61021161041a366004614c0f565b611e2a565b610427611e4b565b60405161021e9190615568565b610207610442366004614d48565b611f05565b610211612140565b61021161214f565b610211612159565b61046761216b565b6006546040805163712d917160e01b815290516000926001600160a01b03169163712d9171916004808301926020929190829003018186803b1580156104ac57600080fd5b505afa1580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e49190614c2b565b905060006060826001600160a01b0316888888888860405160240161050d959493929190615305565b60408051601f198184030181529181526020820180516001600160e01b031662a718a960e01b179052516105419190615261565b600060405180830381855af49150503d806000811461057c576040519150601f19603f3d011682016040523d82523d6000602084013e610581565b606091505b50915091508160405180604001604052806002815260200161323360f01b815250906105c95760405162461bcd60e51b81526004016105c091906155c0565b60405180910390fd5b5060006060828060200190518101906105e29190615087565b9150915081600014816040516020016105fb9190615261565b604051602081830303815290604052906106285760405162461bcd60e51b81526004016105c091906155c0565b5050505050505050505050565b600a5462010000900461ffff1690565b60065461065f906001600160a01b031633620200016121b0565b604051806040016040528060028152602001611b9b60f11b815250906106985760405162461bcd60e51b81526004016105c091906155c0565b50600a805466ff0000000000001916600160301b8315158102919091179182905560ff910416156106f1576040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a161071b565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a15b50565b6006546001600160a01b031690565b6107356121cf565b6001600160a01b0391821660009081526007602081905260409091200180546001600160a01b03191691909216179055565b61076f61216b565b61077761495a565b6001600160a01b038c811682526001600160401b03831660e0830152851660c0820152600a546107c29082908d908d908d908d908d908d908c908c9062010000900461ffff16612222565b505050505050505050505050565b6107d86149a6565b506001600160a01b0381811660009081526007602081815260409283902083516101a08101855281546101808201908152815260018201546001600160801b0380821694830194909452600160801b908190048416958201959095526002820154808416606083015285900483166080820152600382015492831660a08201529390910464ffffffffff1660c08401526004810154841660e084015260058101548416610100840152600681015484166101208401520154918216610140820152600160a01b90910460ff166101608201525b919050565b6001600160a01b03811660009081526007602052604081206108d190612382565b92915050565b6108df61216b565b6001600160a01b038086166000818152600760209081526040918290208251610100810184529384523391840191909152848416918301919091526060820187905260808201869052600481015490921660a08201526001600160401b03841660c0820152600160e0820152610954906123f7565b505050505050565b610964614a11565b506001600160a01b031660009081526008602090815260409182902082519182019092529054815290565b600061099961216b565b6001600160a01b038516600090815260076020526040812090806109bd8584612916565b9150915060008660028111156109cf57fe5b60405163fa0c214960e01b815290915073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__9063fa0c214990610a139087908c9086908c908a908a906004016159d8565b60006040518083038186803b158015610a2b57600080fd5b505af4158015610a3f573d6000803e3d6000fd5b506000925060019150610a4f9050565b826002811115610a5b57fe5b14610a665782610a68565b835b905080891015610a755750875b610a7e85612a2b565b6001826002811115610a8c57fe5b1415610afd576005850154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac90610ac6908a9085906004016152c2565b600060405180830381600087803b158015610ae057600080fd5b505af1158015610af4573d6000803e3d6000fd5b50505050610b7b565b60068501546001860154604051637a94c56560e11b81526001600160a01b039092169163f5298aca91610b48918b918691600160801b9091046001600160801b0316906004016152db565b600060405180830381600087803b158015610b6257600080fd5b505af1158015610b76573d6000803e3d6000fd5b505050505b60048501546001600160a01b0316610b97868c83856000612af8565b610bab82610ba58787612e60565b90612e85565b610be35760078601546001600160a01b0389166000908152600860205260408120610be3929091600160a01b90910460ff1690612ec7565b610bf86001600160a01b038c16338385612f37565b6040516388dd91a160e01b81526001600160a01b038216906388dd91a190610c2690339086906004016152c2565b600060405180830381600087803b158015610c4057600080fd5b505af1158015610c54573d6000803e3d6000fd5b50505050336001600160a01b0316886001600160a01b03168c6001600160a01b03167f4cdde6e09bb755c9a5589ebaec640bbfedff1362d4b255ebf8339782b9942faa85604051610ca59190615a1a565b60405180910390a4509998505050505050505050565b610cc361216b565b6001600160a01b0382811660009081526007602081815260408084203385526008835293819020600a546006548351631f94a27560e31b81529351969773__$de8c0cf1a7d7c36c802af9a64fb9d86036$__97635fa297e5978a978d978d9792969295600995600160201b90940460ff169493169263fca513a892600480840193919291829003018186803b158015610d5b57600080fd5b505afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190614c2b565b6040518963ffffffff1660e01b8152600401610db6989796959493929190615950565b60006040518083038186803b158015610dce57600080fd5b505af4158015610de2573d6000803e3d6000fd5b505050506007810154336000908152600860205260409020610e0e91600160a01b900460ff1684612f95565b8115610e4e5760405133906001600160a01b038516907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3610e85565b60405133906001600160a01b038516907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b505050565b6000610e9461216b565b6001600160a01b0380851660009081526007602052604080822060048082015492516370a0823160e01b8152919492909216929183916370a0823191610edc9133910161527d565b60206040518083038186803b158015610ef457600080fd5b505afa158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c919061506f565b905085600019811415610f3c5750805b73__$de8c0cf1a7d7c36c802af9a64fb9d86036$__63d09db04a898385600760086000336001600160a01b03166001600160a01b031681526020019081526020016000206009600a60049054906101000a900460ff16600660009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015610fe057600080fd5b505afa158015610ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110189190614c2b565b6040518963ffffffff1660e01b815260040161103b989796959493929190615435565b60006040518083038186803b15801561105357600080fd5b505af4158015611067573d6000803e3d6000fd5b5050505061107484612a2b565b611082848985600085612af8565b818114156110ec5760078401543360009081526008602052604081206110b5929091600160a01b90910460ff1690612f95565b60405133906001600160a01b038a16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b6001840154604051636b81068560e11b81526001600160a01b0385169163d7020d0a9161112d9133918b9187916001600160801b0390911690600401615291565b600060405180830381600087803b15801561114757600080fd5b505af115801561115b573d6000803e3d6000fd5b50505050856001600160a01b0316336001600160a01b0316896001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f7846040516111ac9190615a1a565b60405180910390a493505050505b9392505050565b6111c96121cf565b6111d28561300b565b6040518060400160405280600281526020016106e760f31b8152509061120b5760405162461bcd60e51b81526004016105c091906155c0565b506001600160a01b038516600090815260076020526040908190209051630acce25f60e21b815273__$22cd43a9dda9ce44e9b92ba393b88fb9ac$__91632b33897c9161126391908890889088908890600401615922565b60006040518083038186803b15801561127b57600080fd5b505af415801561128f573d6000803e3d6000fd5b5050505061129c85613044565b5050505050565b600654604051637be53ca160e01b81526000916001600160a01b031690637be53ca1906112d490859060040161527d565b60206040518083038186803b1580156112ec57600080fd5b505afa158015611300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190615031565b61132c6121cf565b61271061ffff821611801590611346575060008161ffff16115b604051806040016040528060028152602001611c1960f11b8152509061137f5760405162461bcd60e51b81526004016105c091906155c0565b50600a805461ffff909216620100000263ffff000019909216919091179055565b6113a861216b565b6001600160a01b038216600090815260076020526040812090806113cc3384612916565b9150915060008460028111156113de57fe5b3360009081526008602052604090819020905163a8695b1d60e01b815291925073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__9163a8695b1d9161142f91889190889088908890600401615995565b60006040518083038186803b15801561144757600080fd5b505af415801561145b573d6000803e3d6000fd5b5050505061146884612a2b565b600181600281111561147657fe5b1415611586576005840154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906114b090339087906004016152c2565b600060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b505050506006840154600185015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d9161152e91339182918991600160801b90046001600160801b031690600401615291565b602060405180830381600087803b15801561154857600080fd5b505af115801561155c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115809190615031565b5061169c565b60068401546001850154604051637a94c56560e11b81526001600160a01b039092169163f5298aca916115d19133918791600160801b9091046001600160801b0316906004016152db565b600060405180830381600087803b1580156115eb57600080fd5b505af11580156115ff573d6000803e3d6000fd5b505050506005840154600385015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d91611648913391829188916001600160801b031690600401615291565b602060405180830381600087803b15801561166257600080fd5b505af1158015611676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169a9190615031565b505b60048401546116ba90859088906001600160a01b0316600080612af8565b336001600160a01b0316866001600160a01b03167fea368a40e9570069bb8e6511d668293ad2e1f03b0d982431fd223de9f3b70ca6876040516116fd9190615a1a565b60405180910390a3505050505050565b600a54600160301b900460ff1690565b6117256121cf565b6001600160a01b03909116600090815260076020526040902055565b6001600160a01b0381811660009081526008602090815260408083208151808401835290548152600a546006548351631f94a27560e31b81529351959687968796879687968796611805968e966007969395600995600160201b90940460ff1694929091169263fca513a89260048083019392829003018186803b1580156117c857600080fd5b505afa1580156117dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118009190614c2b565b613182565b9399509197509094509250905061181d868684613643565b935091939550919395565b611830614a11565b506001600160a01b031660009081526007602090815260409182902082519182019092529054815290565b60016000611867613677565b9050600080611876848461367c565b91509150806118d3576001849055600680546001600160a01b0319166001600160a01b038716179055600a80546109c461ffff199091161763ffff00001916620900001765ff000000000019166580000000000017905560008490555b8161129c57505060009081556001555050565b6118ee61216b565b6001600160a01b038416600090815260076020526040908190209051630eca322b60e01b815273__$de8c0cf1a7d7c36c802af9a64fb9d86036$__90630eca322b9061194090849088906004016159ca565b60006040518083038186803b15801561195857600080fd5b505af415801561196c573d6000803e3d6000fd5b5050505060048101546001600160a01b031661198782612a2b565b611995828783886000612af8565b6119aa6001600160a01b038716338388612f37565b6001820154604051630ab714fb60e11b81526000916001600160a01b0384169163156e29f6916119ec9189918b916001600160801b03909116906004016152db565b602060405180830381600087803b158015611a0657600080fd5b505af1158015611a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3e9190615031565b90508015611ab85760078301546001600160a01b0386166000908152600860205260409020611a7891600160a01b900460ff166001612f95565b846001600160a01b0316876001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b836001600160401b0316856001600160a01b0316886001600160a01b03167fabcc7b4487b46b08359b61c97c47c57dc0755d30f07b4e37b8bc8dd19ab5a1ca338a604051611b079291906152c2565b60405180910390a450505050505050565b611b2061216b565b600654611b3c906001600160a01b031633640800000000613758565b60405180604001604052806002815260200161383360f01b81525090611b755760405162461bcd60e51b81526004016105c091906155c0565b50611b7e61495a565b6001600160a01b03808d1682526001600160401b03831660e0830152851660c08201526107c2818c8c8c8c8c8c8b8b6000612222565b611bbc61216b565b6001600160a01b038083166000908152600760205260408082206005810154600682015460048084015494516370a0823160e01b81529396928316959183169490921692909185916370a0823191611c16918a910161527d565b60206040518083038186803b158015611c2e57600080fd5b505afa158015611c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c66919061506f565b60405163548cad0960e01b815290915073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__9063548cad0990611ca89088908b90899089908990600401615922565b60006040518083038186803b158015611cc057600080fd5b505af4158015611cd4573d6000803e3d6000fd5b50505050611ce185612a2b565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90611d0f90899085906004016152c2565b600060405180830381600087803b158015611d2957600080fd5b505af1158015611d3d573d6000803e3d6000fd5b505050600386015460405163b3f1c93d60e01b81526001600160a01b038716925063b3f1c93d91611d80918a91829187916001600160801b031690600401615291565b602060405180830381600087803b158015611d9a57600080fd5b505af1158015611dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd29190615031565b50611de1858884600080612af8565b856001600160a01b0316876001600160a01b03167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a350505050505050565b6001600160a01b03811660009081526007602052604081206108d19061376f565b600a546060908190600160201b900460ff166001600160401b0381118015611e7257600080fd5b50604051908082528060200260200182016040528015611e9c578160200160208202803683370190505b50905060005b600a54600160201b900460ff16811015611eff5760008181526009602052604090205482516001600160a01b0390911690839083908110611edf57fe5b6001600160a01b0390921660209283029190910190910152600101611ea2565b50905090565b611f0d61216b565b6001600160a01b038681166000908152600760209081526040918290206004015482518084019093526002835261363360f01b918301919091529091163314611f695760405162461bcd60e51b81526004016105c091906155c0565b506001600160a01b03858116600090815260086020908152604091829020600a546006548451631f94a27560e31b81529451612016968c96600796600995600160201b900460ff16949092169263fca513a892600480840193919291829003018186803b158015611fd957600080fd5b505afa158015611fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120119190614c2b565b6137ce565b6001600160a01b0386811660009081526007602081905260409091200154600160a01b900460ff169085811690871614612137576120548385612e85565b6120c0576001600160a01b03861660009081526008602052604081209061207e9082908490612f95565b866001600160a01b0316886001600160a01b03167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a3505b811580156120cd57508315155b15612137576001600160a01b03851660009081526008602052604090206120f681836001612f95565b856001600160a01b0316886001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a3505b50505050505050565b600061214a613677565b905090565b600a5461ffff1690565b600a5465010000000000900460ff1690565b600a546040805180820190915260028152610d8d60f21b602082015290600160301b900460ff161561071b5760405162461bcd60e51b81526004016105c091906155c0565b60006121c7826121c1868686613844565b906138c5565b949350505050565b6006546121e9906001600160a01b03163362020000613758565b60405180604001604052806002815260200161323760f01b8152509061071b5760405162461bcd60e51b81526004016105c091906155c0565b61228f89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b9182918501908490808284376000920191909152506138cb92505050565b6060806122a48c600001518c8c8c8c88613909565b8d51604051632483d72160e21b81529294509092506001600160a01b03169063920f5c84906122e5908e908e908e908e90889033908e908e906004016154a4565b602060405180830381600087803b1580156122ff57600080fd5b505af1158015612313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123379190615031565b604051806040016040528060028152602001611b1b60f11b815250906123705760405162461bcd60e51b81526004016105c091906155c0565b506107c28c8c8c8c8c8c8c8989613b0d565b600381015460009064ffffffffff600160801b90910481169042168114156123c05750506001810154