Debt Tokens
Debt tokens are interest-accruing tokens that are minted and burned on borrow
and repay
, representing the debt owed by the token holder. There are 2 types of debt tokens:
Stable debt tokens, representing a debt to the protocol with a stable interest rate
Variable debt tokens, representing a debt to the protocol with a variable interest rate
EIP20 Methods
Although debt tokens are modelled on the ERC20/EIP20 standard, they are non-transferrable. Therefore they do not implement any of the standard ERC20/EIP20 functions relating to transfer()
and allowance()
.
balanceOf()
will always return the most up to date accumulated debt of the user.
totalSupply()
will always return the most up to date total debt accrued by all protocol users for that specific type (stable vs variable) of debt token.
Shared Methods
UNDERLYING_ASSET_ADDRESS()
function UNDERLYING_ASSET_ADDRESS()
Returns the underlying asset of the debt token.
POOL()
function POOL()
Returns the address of the associated LendingPool
for the debt token.
approveDelegation**()**
function approveDelegation(address delegatee, uint256 amount)
Sets the amount
of allowance for delegatee
to borrow of a particular debt token.
Used in credit delegation.
delegatee
address
the user receiving the allowance
amount
uint256
the allowance amounts given to user
borrowAllowance**()**
function borrowAllowance(address fromUser, address toUser)
Returns the borrow allowance toUser
has been given by fromUser
.
Used in credit delegation.
fromUser
address
the user giving allowance
toUser
address
the user receiving the allowance
Returns the current allowance of toUser
for a particular debt token.
Stable Debt Methods
getSupplyData**()**
function getSupplyData()
Returns the supply / deposit data for the debt token.
Return values
uint256
principal supply
uint256
total supply
uint256
average borrow rate
uint40
timestamp for last supply update
getTotalSupplyAndAvgRate**()**
function getTotalSupplyAndAvgRate()
Returns the total supply and average stable rate of the token.
Return values
uint256
total supply
uint256
average stable rate
principalBalanceOf()
function principalBalanceOf(address user)
Returns the principal debt balance of the user
.
getUserLastUpdated**()**
function getUserLastUpdated(address user)
Returns the timestamp of the last action taken by user
as uint40
.
getAverageStableRate**()**
function getAverageStableRate()
Returns the average stable rate across all the stable rate debt in the protocol as uint256
.
getUserStableRate**()**
function getUserStableRate(address user)
Returns the stable rate of user
as uint256
.
Variable Debt Methods
scaledBalanceOf**()**
function scaledBalanceOf(address user)
Returns the principal debt balance of user
.
scaledTotalSupply**()**
function scaledTotalSupply()
Returns the scaled total supply of the variable debt token.
getScaledUserBalanceAndSupply**()**
function getScaledUserBalanceAndSupply(address user)
Returns the principal balance of the user
and principal total supply.
Return values
uint256
principal balance of user
uint256
principal total supply
ABI
StableDebtToken ABI
{
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"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": true,
"internalType": "address",
"name": "fromUser",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "toUser",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "BorrowAllowanceDelegated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "currentBalance",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "balanceIncrease",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "avgStableRate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newTotalSupply",
"type": "uint256"
}
],
"name": "Burn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "underlyingCollateral",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "underlyingAsset",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "incentivesController",
"type": "address"
},
{
"indexed": false,
"internalType": "uint8",
"name": "debtTokenDecimals",
"type": "uint8"
},
{
"indexed": false,
"internalType": "string",
"name": "debtTokenName",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "debtTokenSymbol",
"type": "string"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"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": "currentBalance",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "balanceIncrease",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newRate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "avgStableRate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newTotalSupply",
"type": "uint256"
}
],
"name": "Mint",
"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"
},
{
"inputs": [],
"name": "POOL",
"outputs": [
{
"internalType": "contract ILendingPool",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "UNDERLYING_ASSET_ADDRESS",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"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": "delegatee",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approveDelegation",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "fromUser",
"type": "address"
},
{
"internalType": "address",
"name": "toUser",
"type": "address"
}
],
"name": "borrowAllowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"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": "getAverageStableRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getPoolIncentivesController",
"outputs": [
{
"internalType": "contract IPoolIncentivesController",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getSupplyData",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint40",
"name": "",
"type": "uint40"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getTotalSupplyAndAvgRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getTotalSupplyLastUpdated",
"outputs": [
{
"internalType": "uint40",
"name": "",
"type": "uint40"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "getUserLastUpdated",
"outputs": [
{
"internalType": "uint40",
"name": "",
"type": "uint40"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "getUserStableRate",
"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": "addressProvider",
"type": "address"
},
{
"internalType": "address",
"name": "underlyingCollateral",
"type": "address"
},
{
"internalType": "address",
"name": "underlyingAsset",
"type": "address"
},
{
"internalType": "uint256",
"name": "underlyingMaxTokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "underlyingMinTokenId",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "debtTokenDecimals",
"type": "uint8"
},
{
"internalType": "string",
"name": "debtTokenName",
"type": "string"
},
{
"internalType": "string",
"name": "debtTokenSymbol",
"type": "string"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "address",
"name": "onBehalfOf",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "rate",
"type": "uint256"
}
],
"name": "mint",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "principalBalanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"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"
}
],
"bytecode": {
"object": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611df1806100ed6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806390f6fcf2116100de578063b3f1c93d11610097578063dd62ed3e11610071578063dd62ed3e14610378578063e748489014610386578063e78c9b3b14610395578063f731e9be146103be57600080fd5b8063b3f1c93d1461033f578063c04a8a1014610352578063c634dfaa1461036557600080fd5b806390f6fcf2146102fd57806395d89b41146103055780639dc29fac1461030d578063a457c2d714610247578063a9059cbb14610320578063b16a19de1461032e57600080fd5b8063313ce5671161014b57806370a082311161012557806370a082311461026d5780637535d24614610280578063797743381461028857806379ce6b8c146102b757600080fd5b8063313ce5671461023257806339509351146102475780636bd76d241461025a57600080fd5b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101d457806319ef9268146101ea5780631e5fa51f1461020a57806323b872dd1461021f575b600080fd5b61019b6103db565b6040516101a89190611885565b60405180910390f35b6101c46101bf3660046118b0565b61046d565b60405190151581526020016101a8565b6101dc6104b6565b6040519081526020016101a8565b6101f26104c8565b6040516001600160a01b0390911681526020016101a8565b61021d61021836600461197f565b6104d2565b005b6101c461022d366004611a47565b61069e565b60655460405160ff90911681526020016101a8565b6101c46102553660046118b0565b6106e2565b6101dc610268366004611a88565b61072d565b6101dc61027b366004611ac1565b61075a565b6101f26107d3565b6102906107dd565b6040805194855260208501939093529183015264ffffffffff1660608201526080016101a8565b6102e76102c5366004611ac1565b6001600160a01b03166000908152606d602052604090205464ffffffffff1690565b60405164ffffffffff90911681526020016101a8565b606c546101dc565b61019b610814565b61021d61031b3660046118b0565b610823565b6101c461022d3660046118b0565b6069546001600160a01b03166101f2565b6101c461034d366004611ade565b610af7565b61021d6103603660046118b0565b610e9c565b6101dc610373366004611ac1565b610f13565b6101dc610255366004611a88565b606f5464ffffffffff166102e7565b6101dc6103a3366004611ac1565b6001600160a01b03166000908152606e602052604090205490565b6103c6610f1e565b604080519283526020830191909152016101a8565b6060603680546103ea90611b24565b80601f016020809104026020016040519081016040528092919081815260200182805461041690611b24565b80156104635780601f1061043857610100808354040283529160200191610463565b820191906000526020600020905b81548152906001019060200180831161044657829003601f168201915b5050505050905090565b60405162461bcd60e51b81526020600482015260166024820152751054141493d5905317d393d517d4d5541413d495115160521b60448201526000906064015b60405180910390fd5b60006104c3606c54610f37565b905090565b60006104c3610f82565b600054610100900460ff16158080156104f25750600054600160ff909116105b8061050c5750303b15801561050c575060005460ff166001145b61056f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ad565b6000805460ff191660011790558015610592576000805461ff0019166101001790555b61059d838386610ff0565b606780546001600160a01b03808c166001600160a01b031992831617909255606880548b841690831617905560698054928a1692909116919091179055606a869055606b8590556105ec611012565b6001600160a01b0316876001600160a01b0316896001600160a01b03167fd59b5facb5e38ab634162423aec2545750f69daf91fe145954e2a2b449597d4c610632610f82565b8888886040516106459493929190611b5e565b60405180910390a48015610693576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60405162461bcd60e51b81526020600482015260166024820152751514905394d1915497d393d517d4d5541413d495115160521b60448201526000906064016104ad565b60405162461bcd60e51b815260206004820152601760248201527f414c4c4f57414e43455f4e4f545f535550504f5254454400000000000000000060448201526000906064016104ad565b6001600160a01b038083166000908152606660209081526040808320938516835292905220545b92915050565b6000806107668361105c565b6001600160a01b0384166000908152606e6020526040812054919250829003610793575060009392505050565b6001600160a01b0384166000908152606d60205260408120546107be90839064ffffffffff16611077565b90506107ca83826110bd565b95945050505050565b60006104c3611012565b6000806000806000606c5490506107f360355490565b6107fc82610f37565b606f54919790965091945064ffffffffff1692509050565b6060603780546103ea90611b24565b61082b611012565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906108795760405162461bcd60e51b81526004016104ad9190611885565b5060008061088684611100565b925092505060006108956104b6565b6001600160a01b0386166000908152606e60205260408120549192509081908684116108c5576000606c5561093d565b6108cf848861115c565b915060006108e86108df86611168565b606c54906110bd565b905060006108ff6108f88a611168565b84906110bd565b9050818110610916576000606c819055945061093a565b61093261092285611168565b61092c848461115c565b90611178565b606c81905594505b50505b85870361097a576001600160a01b0388166000908152606e60209081526040808320839055606d9091529020805464ffffffffff191690556109a8565b6001600160a01b0388166000908152606d60205260409020805464ffffffffff19164264ffffffffff161790555b606f805464ffffffffff19164264ffffffffff1617905586851115610a495760006109d3868961115c565b90506109e08982876111ac565b6040805182815260208101899052908101879052606081018390526080810185905260a081018490526001600160a01b038a169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350610abe565b6000610a55888761115c565b9050610a6289828761124a565b604080518281526020810189905290810187905260608101859052608081018490526001600160a01b038a16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b6040518781526000906001600160a01b038a1690600080516020611d9c8339815191529060200160405180910390a35050505050505050565b6000610b01611012565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610b4f5760405162461bcd60e51b81526004016104ad9190611885565b50610b826040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b846001600160a01b0316866001600160a01b031614158015610c2c5750606760009054906101000a90046001600160a01b03166001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611ba8565b6001600160a01b0316866001600160a01b031614155b15610c3c57610c3c8587866112a0565b600080610c4887611100565b9250925050610c556104b6565b808452606c546080850152610c6a90876113c0565b6020840152610c7886611168565b6040840152610cd6610c92610c8d84896113c0565b611168565b604085015161092c90610ca590896110bd565b610cd0610cb187611168565b6001600160a01b038d166000908152606e6020526040902054906110bd565b906113c0565b6060840181905260408051808201909152600381526234383560e81b6020820152906fffffffffffffffffffffffffffffffff1015610d285760405162461bcd60e51b81526004016104ad9190611885565b5060608301516001600160a01b0388166000908152606e6020908152604080832093909355606d8152919020805464ffffffffff421664ffffffffff199182168117909255606f80549091169091179055830151610dbe90610d8990611168565b61092c610da38660400151896110bd90919063ffffffff16565b610cd0610db38860000151611168565b6080890151906110bd565b606c8190556080840152610ddd87610dd688846113c0565b85516111ac565b6040518681526001600160a01b03881690600090600080516020611d9c8339815191529060200160405180910390a3866001600160a01b0316886001600160a01b03167fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f888585886060015189608001518a60200151604051610e8896959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405180910390a350159695505050505050565b3360008181526066602090815260408083206001600160a01b038781168086529190935292208490556069549192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19116604080516001600160a01b039092168252602082018690520160405180910390a35050565b60006107548261105c565b606c546000908190610f2f81610f37565b939092509050565b600080610f4360355490565b905080600003610f565750600092915050565b606f54600090610f6e90859064ffffffffff166113cc565b9050610f7a82826110bd565b949350505050565b6067546040805163033df24d60e31b815290516000926001600160a01b0316916319ef92689160048083019260209291908290030181865afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190611ba8565b610ffa83836113d9565b6065805460ff191660ff929092169190911790555050565b60675460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015610fcc573d6000803e3d6000fd5b6001600160a01b031660009081526033602052604090205490565b60008061108b64ffffffffff841642611bdb565b90506b033b2e3c9fd0803ce80000006301e133806110a98387611bee565b6110b39190611c0d565b610f7a9190611c2f565b60006110f96b033b2e3c9fd0803ce80000006110f36110dc868661140e565b610cd060026b033b2e3c9fd0803ce8000000611c0d565b9061141a565b9392505050565b60008060008061110f8561105c565b90508060000361112a57600080600093509350935050611155565b600061113f826111398861075a565b9061115c565b90508161114c81836113c0565b90955093509150505b9193909250565b60006110f98284611bdb565b600061075482633b9aca0061140e565b600080611186600284611c0d565b9050610f7a836110f36111a5876b033b2e3c9fd0803ce800000061140e565b84906113c0565b60006111b78461105c565b90506111c38484611426565b60006111cd610f82565b90506001600160a01b03811615611243576040516318c39f1760e11b81526001600160a01b03868116600483015260248201859052604482018490528216906331873e2e90606401600060405180830381600087803b15801561122f57600080fd5b505af1158015610693573d6000803e3d6000fd5b5050505050565b60006112558461105c565b905082811015604051806040016040528060038152602001621a1c1b60e91b815250906112955760405162461bcd60e51b81526004016104ad9190611885565b506111c384846114dc565b6001600160a01b038084166000908152606660209081526040808320938616835292815290829020548251808401909352600383526235303360e81b918301919091528211156113035760405162461bcd60e51b81526004016104ad9190611885565b506001600160a01b038084166000908152606660209081526040808320938616835292905290812054611337908390611bdb565b6001600160a01b038086166000818152606660209081526040808320948916808452949091529020839055919250907fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e16113996069546001600160a01b031690565b604080516001600160a01b039092168252602082018690520160405180910390a350505050565b60006110f98284611c2f565b60006110f9838342611500565b600054610100900460ff166114005760405162461bcd60e51b81526004016104ad90611c42565b61140a8282611629565b5050565b60006110f98284611bee565b60006110f98284611c0d565b600061143160355490565b9050600061143e8461105c565b905061144a848461166e565b6000611454610f82565b6001600160a01b0316146114d65761146a610f82565b6040516318c39f1760e11b81526001600160a01b038681166004830152602482018590526044820184905291909116906331873e2e90606401600060405180830381600087803b1580156114bd57600080fd5b505af11580156114d1573d6000803e3d6000fd5b505050505b50505050565b60006114e760355490565b905060006114f48461105c565b905061144a848461171d565b60008061151464ffffffffff851684611bdb565b905080600003611533576b033b2e3c9fd0803ce80000009150506110f9565b6000611540600183611bdb565b905060006002831161155357600061155e565b61155e600284611bdb565b905060006115706301e1338089611c0d565b9050600061157e82806110bd565b9050600061158c82846110bd565b9050600060028361159d888a611bee565b6115a79190611bee565b6115b19190611c0d565b90506000600683876115c38a8c611bee565b6115cd9190611bee565b6115d79190611bee565b6115e19190611c0d565b905080826115ef8a88611bee565b611605906b033b2e3c9fd0803ce8000000611c2f565b61160f9190611c2f565b6116199190611c2f565b9c9b505050505050505050505050565b600054610100900460ff166116505760405162461bcd60e51b81526004016104ad90611c42565b603661165c8382611cdb565b5060376116698282611cdb565b505050565b6001600160a01b0382166116c45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104ad565b80603560008282546116d69190611c2f565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020611d9c833981519152910160405180910390a35050565b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104ad565b6001600160a01b038216600090815260336020526040902054818110156117f15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104ad565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020611d9c833981519152910160405180910390a3505050565b6000815180845260005b8181101561186557602081850181015186830182015201611849565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006110f9602083018461183f565b6001600160a01b03811681146118ad57600080fd5b50565b600080604083850312156118c357600080fd5b82356118ce81611898565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261190357600080fd5b813567ffffffffffffffff8082111561191e5761191e6118dc565b604051601f8301601f19908116603f01168101908282118183101715611946576119466118dc565b8160405283815286602085880101111561195f57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600080610100898b03121561199c57600080fd5b88356119a781611898565b975060208901356119b781611898565b965060408901356119c781611898565b9550606089013594506080890135935060a089013560ff811681146119eb57600080fd5b925060c089013567ffffffffffffffff80821115611a0857600080fd5b611a148c838d016118f2565b935060e08b0135915080821115611a2a57600080fd5b50611a378b828c016118f2565b9150509295985092959890939650565b600080600060608486031215611a5c57600080fd5b8335611a6781611898565b92506020840135611a7781611898565b929592945050506040919091013590565b60008060408385031215611a9b57600080fd5b8235611aa681611898565b91506020830135611ab681611898565b809150509250929050565b600060208284031215611ad357600080fd5b81356110f981611898565b60008060008060808587031215611af457600080fd5b8435611aff81611898565b93506020850135611b0f81611898565b93969395505050506040820135916060013590565b600181811c90821680611b3857607f821691505b602082108103611b5857634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038516815260ff84166020820152608060408201819052600090611b8b9083018561183f565b8281036060840152611b9d818561183f565b979650505050505050565b600060208284031215611bba57600080fd5b81516110f981611898565b634e487b7160e01b600052601160045260246000fd5b8181038181111561075457610754611bc5565b6000816000190483118215151615611c0857611c08611bc5565b500290565b600082611c2a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561075457610754611bc5565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f82111561166957600081815260208120601f850160051c81016020861015611cb45750805b601f850160051c820191505b81811015611cd357828155600101611cc0565b505050505050565b815167ffffffffffffffff811115611cf557611cf56118dc565b611d0981611d038454611b24565b84611c8d565b602080601f831160018114611d3e5760008415611d265750858301515b600019600386901b1c1916600185901b178555611cd3565b600085815260208120601f198616915b82811015611d6d57888601518255948401946001909101908401611d4e565b5085821015611d8b5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204f5f21f5925202fd57687ffc69e6cc118f51001ebb99222cf0b10110cd3e90ee64736f6c63430008100033",
"sourceMap": "1327:15512:160:-:0;;;1948:55;;;;;;;;;-1:-1:-1;1973:22:160;:20;:22::i;:::-;1327:15512;;5928:279:18;5996:13;;;;;;;5995:14;5987:66;;;;-1:-1:-1;;;5987:66:18;;216:2:187;5987:66:18;;;198:21:187;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:187;;;338:37;392:19;;5987:66:18;;;;;;;;6067:12;;6082:15;6067:12;;;:30;6063:138;;;6113:12;:30;;-1:-1:-1;;6113:30:18;6128:15;6113:30;;;;;;6162:28;;564:36:187;;;6162:28:18;;552:2:187;537:18;6162:28:18;;;;;;;6063:138;5928:279::o;422:184:187:-;1327:15512:160;;;;;;",
"linkReferences": {}
},
"deployedBytecode": {
"object": "0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806390f6fcf2116100de578063b3f1c93d11610097578063dd62ed3e11610071578063dd62ed3e14610378578063e748489014610386578063e78c9b3b14610395578063f731e9be146103be57600080fd5b8063b3f1c93d1461033f578063c04a8a1014610352578063c634dfaa1461036557600080fd5b806390f6fcf2146102fd57806395d89b41146103055780639dc29fac1461030d578063a457c2d714610247578063a9059cbb14610320578063b16a19de1461032e57600080fd5b8063313ce5671161014b57806370a082311161012557806370a082311461026d5780637535d24614610280578063797743381461028857806379ce6b8c146102b757600080fd5b8063313ce5671461023257806339509351146102475780636bd76d241461025a57600080fd5b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101d457806319ef9268146101ea5780631e5fa51f1461020a57806323b872dd1461021f575b600080fd5b61019b6103db565b6040516101a89190611885565b60405180910390f35b6101c46101bf3660046118b0565b61046d565b60405190151581526020016101a8565b6101dc6104b6565b6040519081526020016101a8565b6101f26104c8565b6040516001600160a01b0390911681526020016101a8565b61021d61021836600461197f565b6104d2565b005b6101c461022d366004611a47565b61069e565b60655460405160ff90911681526020016101a8565b6101c46102553660046118b0565b6106e2565b6101dc610268366004611a88565b61072d565b6101dc61027b366004611ac1565b61075a565b6101f26107d3565b6102906107dd565b6040805194855260208501939093529183015264ffffffffff1660608201526080016101a8565b6102e76102c5366004611ac1565b6001600160a01b03166000908152606d602052604090205464ffffffffff1690565b60405164ffffffffff90911681526020016101a8565b606c546101dc565b61019b610814565b61021d61031b3660046118b0565b610823565b6101c461022d3660046118b0565b6069546001600160a01b03166101f2565b6101c461034d366004611ade565b610af7565b61021d6103603660046118b0565b610e9c565b6101dc610373366004611ac1565b610f13565b6101dc610255366004611a88565b606f5464ffffffffff166102e7565b6101dc6103a3366004611ac1565b6001600160a01b03166000908152606e602052604090205490565b6103c6610f1e565b604080519283526020830191909152016101a8565b6060603680546103ea90611b24565b80601f016020809104026020016040519081016040528092919081815260200182805461041690611b24565b80156104635780601f1061043857610100808354040283529160200191610463565b820191906000526020600020905b81548152906001019060200180831161044657829003601f168201915b5050505050905090565b60405162461bcd60e51b81526020600482015260166024820152751054141493d5905317d393d517d4d5541413d495115160521b60448201526000906064015b60405180910390fd5b60006104c3606c54610f37565b905090565b60006104c3610f82565b600054610100900460ff16158080156104f25750600054600160ff909116105b8061050c5750303b15801561050c575060005460ff166001145b61056f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ad565b6000805460ff191660011790558015610592576000805461ff0019166101001790555b61059d838386610ff0565b606780546001600160a01b03808c166001600160a01b031992831617909255606880548b841690831617905560698054928a1692909116919091179055606a869055606b8590556105ec611012565b6001600160a01b0316876001600160a01b0316896001600160a01b03167fd59b5facb5e38ab634162423aec2545750f69daf91fe145954e2a2b449597d4c610632610f82565b8888886040516106459493929190611b5e565b60405180910390a48015610693576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60405162461bcd60e51b81526020600482015260166024820152751514905394d1915497d393d517d4d5541413d495115160521b60448201526000906064016104ad565b60405162461bcd60e51b815260206004820152601760248201527f414c4c4f57414e43455f4e4f545f535550504f5254454400000000000000000060448201526000906064016104ad565b6001600160a01b038083166000908152606660209081526040808320938516835292905220545b92915050565b6000806107668361105c565b6001600160a01b0384166000908152606e6020526040812054919250829003610793575060009392505050565b6001600160a01b0384166000908152606d60205260408120546107be90839064ffffffffff16611077565b90506107ca83826110bd565b95945050505050565b60006104c3611012565b6000806000806000606c5490506107f360355490565b6107fc82610f37565b606f54919790965091945064ffffffffff1692509050565b6060603780546103ea90611b24565b61082b611012565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906108795760405162461bcd60e51b81526004016104ad9190611885565b5060008061088684611100565b925092505060006108956104b6565b6001600160a01b0386166000908152606e60205260408120549192509081908684116108c5576000606c5561093d565b6108cf848861115c565b915060006108e86108df86611168565b606c54906110bd565b905060006108ff6108f88a611168565b84906110bd565b9050818110610916576000606c819055945061093a565b61093261092285611168565b61092c848461115c565b90611178565b606c81905594505b50505b85870361097a576001600160a01b0388166000908152606e60209081526040808320839055606d9091529020805464ffffffffff191690556109a8565b6001600160a01b0388166000908152606d60205260409020805464ffffffffff19164264ffffffffff161790555b606f805464ffffffffff19164264ffffffffff1617905586851115610a495760006109d3868961115c565b90506109e08982876111ac565b6040805182815260208101899052908101879052606081018390526080810185905260a081018490526001600160a01b038a169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350610abe565b6000610a55888761115c565b9050610a6289828761124a565b604080518281526020810189905290810187905260608101859052608081018490526001600160a01b038a16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b6040518781526000906001600160a01b038a1690600080516020611d9c8339815191529060200160405180910390a35050505050505050565b6000610b01611012565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610b4f5760405162461bcd60e51b81526004016104ad9190611885565b50610b826040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b846001600160a01b0316866001600160a01b031614158015610c2c5750606760009054906101000a90046001600160a01b03166001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611ba8565b6001600160a01b0316866001600160a01b031614155b15610c3c57610c3c8587866112a0565b600080610c4887611100565b9250925050610c556104b6565b808452606c546080850152610c6a90876113c0565b6020840152610c7886611168565b6040840152610cd6610c92610c8d84896113c0565b611168565b604085015161092c90610ca590896110bd565b610cd0610cb187611168565b6001600160a01b038d166000908152606e6020526040902054906110bd565b906113c0565b6060840181905260408051808201909152600381526234383560e81b6020820152906fffffffffffffffffffffffffffffffff1015610d285760405162461bcd60e51b81526004016104ad9190611885565b5060608301516001600160a01b0388166000908152606e6020908152604080832093909355606d8152919020805464ffffffffff421664ffffffffff199182168117909255606f80549091169091179055830151610dbe90610d8990611168565b61092c610da38660400151896110bd90919063ffffffff16565b610cd0610db38860000151611168565b6080890151906110bd565b606c8190556080840152610ddd87610dd688846113c0565b85516111ac565b6040518681526001600160a01b03881690600090600080516020611d9c8339815191529060200160405180910390a3866001600160a01b0316886001600160a01b03167fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f888585886060015189608001518a60200151604051610e8896959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405180910390a350159695505050505050565b3360008181526066602090815260408083206001600160a01b038781168086529190935292208490556069549192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19116604080516001600160a01b039092168252602082018690520160405180910390a35050565b60006107548261105c565b606c546000908190610f2f81610f37565b939092509050565b600080610f4360355490565b905080600003610f565750600092915050565b606f54600090610f6e90859064ffffffffff166113cc565b9050610f7a82826110bd565b949350505050565b6067546040805163033df24d60e31b815290516000926001600160a01b0316916319ef92689160048083019260209291908290030181865afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190611ba8565b610ffa83836113d9565b6065805460ff191660ff929092169190911790555050565b60675460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015610fcc573d6000803e3d6000fd5b6001600160a01b031660009081526033602052604090205490565b60008061108b64ffffffffff841642611bdb565b90506b033b2e3c9fd0803ce80000006301e133806110a98387611bee565b6110b39190611c0d565b610f7a9190611c2f565b60006110f96b033b2e3c9fd0803ce80000006110f36110dc868661140e565b610cd060026b033b2e3c9fd0803ce8000000611c0d565b9061141a565b9392505050565b60008060008061110f8561105c565b90508060000361112a57600080600093509350935050611155565b600061113f826111398861075a565b9061115c565b90508161114c81836113c0565b90955093509150505b9193909250565b60006110f98284611bdb565b600061075482633b9aca0061140e565b600080611186600284611c0d565b9050610f7a836110f36111a5876b033b2e3c9fd0803ce800000061140e565b84906113c0565b60006111b78461105c565b90506111c38484611426565b60006111cd610f82565b90506001600160a01b03811615611243576040516318c39f1760e11b81526001600160a01b03868116600483015260248201859052604482018490528216906331873e2e90606401600060405180830381600087803b15801561122f57600080fd5b505af1158015610693573d6000803e3d6000fd5b5050505050565b60006112558461105c565b905082811015604051806040016040528060038152602001621a1c1b60e91b815250906112955760405162461bcd60e51b81526004016104ad9190611885565b506111c384846114dc565b6001600160a01b038084166000908152606660209081526040808320938616835292815290829020548251808401909352600383526235303360e81b918301919091528211156113035760405162461bcd60e51b81526004016104ad9190611885565b506001600160a01b038084166000908152606660209081526040808320938616835292905290812054611337908390611bdb565b6001600160a01b038086166000818152606660209081526040808320948916808452949091529020839055919250907fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e16113996069546001600160a01b031690565b604080516001600160a01b039092168252602082018690520160405180910390a350505050565b60006110f98284611c2f565b60006110f9838342611500565b600054610100900460ff166114005760405162461bcd60e51b81526004016104ad90611c42565b61140a8282611629565b5050565b60006110f98284611bee565b60006110f98284611c0d565b600061143160355490565b9050600061143e8461105c565b905061144a848461166e565b6000611454610f82565b6001600160a01b0316146114d65761146a610f82565b6040516318c39f1760e11b81526001600160a01b038681166004830152602482018590526044820184905291909116906331873e2e90606401600060405180830381600087803b1580156114bd57600080fd5b505af11580156114d1573d6000803e3d6000fd5b505050505b50505050565b60006114e760355490565b905060006114f48461105c565b905061144a848461171d565b60008061151464ffffffffff851684611bdb565b905080600003611533576b033b2e3c9fd0803ce80000009150506110f9565b6000611540600183611bdb565b905060006002831161155357600061155e565b61155e600284611bdb565b905060006115706301e1338089611c0d565b9050600061157e82806110bd565b9050600061158c82846110bd565b9050600060028361159d888a611bee565b6115a79190611bee565b6115b19190611c0d565b90506000600683876115c38a8c611bee565b6115cd9190611bee565b6115d79190611bee565b6115e19190611c0d565b905080826115ef8a88611bee565b611605906b033b2e3c9fd0803ce8000000611c2f565b61160f9190611c2f565b6116199190611c2f565b9c9b505050505050505050505050565b600054610100900460ff166116505760405162461bcd60e51b81526004016104ad90611c42565b603661165c8382611cdb565b5060376116698282611cdb565b505050565b6001600160a01b0382166116c45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104ad565b80603560008282546116d69190611c2f565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020611d9c833981519152910160405180910390a35050565b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104ad565b6001600160a01b038216600090815260336020526040902054818110156117f15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104ad565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020611d9c833981519152910160405180910390a3505050565b6000815180845260005b8181101561186557602081850181015186830182015201611849565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006110f9602083018461183f565b6001600160a01b03811681146118ad57600080fd5b50565b600080604083850312156118c357600080fd5b82356118ce81611898565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261190357600080fd5b813567ffffffffffffffff8082111561191e5761191e6118dc565b604051601f8301601f19908116603f01168101908282118183101715611946576119466118dc565b8160405283815286602085880101111561195f57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600080610100898b03121561199c57600080fd5b88356119a781611898565b975060208901356119b781611898565b965060408901356119c781611898565b9550606089013594506080890135935060a089013560ff811681146119eb57600080fd5b925060c089013567ffffffffffffffff80821115611a0857600080fd5b611a148c838d016118f2565b935060e08b0135915080821115611a2a57600080fd5b50611a378b828c016118f2565b9150509295985092959890939650565b600080600060608486031215611a5c57600080fd5b8335611a6781611898565b92506020840135611a7781611898565b929592945050506040919091013590565b60008060408385031215611a9b57600080fd5b8235611aa681611898565b91506020830135611ab681611898565b809150509250929050565b600060208284031215611ad357600080fd5b81356110f981611898565b60008060008060808587031215611af457600080fd5b8435611aff81611898565b93506020850135611b0f81611898565b93969395505050506040820135916060013590565b600181811c90821680611b3857607f821691505b602082108103611b5857634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038516815260ff84166020820152608060408201819052600090611b8b9083018561183f565b8281036060840152611b9d818561183f565b979650505050505050565b600060208284031215611bba57600080fd5b81516110f981611898565b634e487b7160e01b600052601160045260246000fd5b8181038181111561075457610754611bc5565b6000816000190483118215151615611c0857611c08611bc5565b500290565b600082611c2a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561075457610754611bc5565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f82111561166957600081815260208120601f850160051c81016020861015611cb45750805b601f850160051c820191505b81811015611cd357828155600101611cc0565b505050505050565b815167ffffffffffffffff811115611cf557611cf56118dc565b611d0981611d038454611b24565b84611c8d565b602080601f831160018114611d3e5760008415611d265750858301515b600019600386901b1c1916600185901b178555611cd3565b600085815260208120601f198616915b82811015611d6d57888601518255948401946001909101908401611d4e565b5085821015611d8b5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204f5f21f5925202fd57687ffc69e6cc118f51001ebb99222cf0b10110cd3e90ee64736f6c63430008100033",
"sourceMap": "1327:15512:160:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2948:248:162;;;;;;:::i;:::-;;:::i;:::-;;;1288:14:187;;1281:22;1263:41;;1251:2;1236:18;2948:248:162;1123:187:187;12485:204:160;;;:::i;:::-;;;1461:25:187;;;1449:2;1434:18;12485:204:160;1315:177:187;13772:154:160;;;:::i;:::-;;;-1:-1:-1;;;;;1696:32:187;;;1678:51;;1666:2;1651:18;13772:154:160;1497:238:187;2692:1049:160;;;;;;:::i;:::-;;:::i;:::-;;3202:320:162;;;;;;:::i;:::-;;:::i;1025:145:163:-;1149:15;;1025:145;;1149:15;;;;4470:36:187;;4458:2;4443:18;1025:145:163;4328:184:187;3528:226:162;;;;;;:::i;:::-;;:::i;2064:195::-;;;;;;:::i;:::-;;:::i;4682:531:160:-;;;;;;:::i;:::-;;:::i;13582:94::-;;;:::i;11795:343::-;;;:::i;:::-;;;;5621:25:187;;;5677:2;5662:18;;5655:34;;;;5705:18;;;5698:34;5780:12;5768:25;5763:2;5748:18;;5741:53;5608:3;5593:19;11795:343:160;5392:408:187;4128:133:160;;;;;;:::i;:::-;-1:-1:-1;;;;;4236:17:160;4210:6;4236:17;;;:11;:17;;;;;;;;;4128:133;;;;5979:12:187;5967:25;;;5949:44;;5937:2;5922:18;4128:133:160;5805:194:187;3882:121:160;3981:14;;3882:121;;2702:102:23;;;:::i;8118:2582:160:-;;;;;;:::i;:::-;;:::i;2421:253:162:-;;;;;;:::i;13370:108:160:-;13454:16;;-1:-1:-1;;;;;13454:16:160;13370:108;;5992:1938;;;;;;:::i;:::-;;:::i;1593:250:162:-;;;;;;:::i;:::-;;:::i;13113:138:160:-;;;;;;:::i;:::-;;:::i;2680:262:162:-;;;;;;:::i;12787:122:160:-;12880:21;;;;12787:122;;4417:138;;;;;;:::i;:::-;-1:-1:-1;;;;;4525:22:160;4498:7;4525:22;;;:16;:22;;;;;;;4417:138;12233:189;;;:::i;:::-;;;;6916:25:187;;;6972:2;6957:18;;6950:34;;;;6889:18;12233:189:160;6742:248:187;2491:98:23;2545:13;2577:5;2570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98;:::o;2948:248:162:-;3157:32;;-1:-1:-1;;;3157:32:162;;7582:2:187;3157:32:162;;;7564:21:187;7621:2;7601:18;;;7594:30;-1:-1:-1;;;7640:18:187;;;7633:52;3103:4:162;;7702:18:187;;3157:32:162;;;;;;;;12485:204:160;12616:7;12649:32;12666:14;;12649:16;:32::i;:::-;12642:39;;12485:204;:::o;13772:154::-;13843:25;13888:30;:28;:30::i;2692:1049::-;3268:19:18;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:18;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:18;1476:19:32;:23;;;3376:66:18;;-1:-1:-1;3425:12:18;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:18;;7933:2:187;3314:201:18;;;7915:21:187;7972:2;7952:18;;;7945:30;8011:34;7991:18;;;7984:62;-1:-1:-1;;;8062:18:187;;;8055:44;8116:19;;3314:201:18;7731:410:187;3314:201:18;3525:12;:16;;-1:-1:-1;;3525:16:18;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:18;;;;;3551:65;3091:75:160::1;3116:13;3131:15;3148:17;3091:24;:75::i;:::-;3179:16;:52:::0;;-1:-1:-1;;;;;3179:52:160;;::::1;-1:-1:-1::0;;;;;;3179:52:160;;::::1;;::::0;;;3244:21:::1;:44:::0;;;;::::1;::::0;;::::1;;::::0;;3299:16:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3344:21:::1;:44:::0;;;3399:21:::1;:44:::0;;;3560:17:::1;:15;:17::i;:::-;-1:-1:-1::0;;;;;3461:272:160::1;3522:15;-1:-1:-1::0;;;;;3461:272:160::1;3487:20;-1:-1:-1::0;;;;;3461:272:160::1;;3601:30;:28;:30::i;:::-;3647:17;3679:13;3707:15;3461:272;;;;;;;;;:::i;:::-;;;;;;;;3640:14:18::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:18;;;3710:14;;-1:-1:-1;4470:36:187;;3710:14:18;;4458:2:187;4443:18;3710:14:18;;;;;;;3636:99;3258:483;2692:1049:160;;;;;;;;:::o;3202:320:162:-;3483:32;;-1:-1:-1;;;3483:32:162;;9112:2:187;3483:32:162;;;9094:21:187;9151:2;9131:18;;;9124:30;-1:-1:-1;;;9170:18:187;;;9163:52;3411:4:162;;9232:18:187;;3483:32:162;8910:346:187;3528:226:162;3714:33;;-1:-1:-1;;;3714:33:162;;9463:2:187;3714:33:162;;;9445:21:187;9502:2;9482:18;;;9475:30;9541:25;9521:18;;;9514:53;3657:4:162;;9584:18:187;;3714:33:162;9261:347:187;2064:195:162;-1:-1:-1;;;;;2217:27:162;;;2187:7;2217:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;2064:195;;;;;:::o;4682:531:160:-;4844:7;4870:22;4895:24;4911:7;4895:15;:24::i;:::-;-1:-1:-1;;;;;4951:25:160;;4930:18;4951:25;;;:16;:25;;;;;;4870:49;;-1:-1:-1;4991:19:160;;;4987:60;;-1:-1:-1;5034:1:160;;4682:531;-1:-1:-1;;;4682:531:160:o;4987:60::-;-1:-1:-1;;;;;5135:20:160;;5057:16;5135:20;;;:11;:20;;;;;;5089:67;;5123:10;;5135:20;;5089:33;:67::i;:::-;5057:99;-1:-1:-1;5174:31:160;:14;5057:99;5174:21;:31::i;:::-;5167:38;4682:531;-1:-1:-1;;;;;4682:531:160:o;13582:94::-;13619:12;13651:17;:15;:17::i;11795:343::-;11900:7;11922;11944;11966:6;12000:15;12018:14;;12000:32;;12051:19;3666:12:23;;;3579:106;12051:19:160;12072:25;12089:7;12072:16;:25::i;:::-;12108:21;;12043:87;;;;-1:-1:-1;12099:7:160;;-1:-1:-1;12108:21:160;;;-1:-1:-1;11795:343:160;-1:-1:-1;11795:343:160:o;2702:102:23:-;2758:13;2790:7;2783:14;;;;;:::i;8118:2582:160:-;1145:17:162;:15;:17::i;:::-;-1:-1:-1;;;;;1121:42:162;929:10:33;-1:-1:-1;;;;;1121:42:162;;1165:37;;;;;;;;;;;;;-1:-1:-1;;;1165:37:162;;;1113:90;;;;;-1:-1:-1;;;1113:90:162;;;;;;;;:::i;:::-;;8210:22:160::1;8234:23:::0;8261:31:::1;8287:4;8261:25;:31::i;:::-;8207:85;;;;;8305:22;8330:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;8451:22:160;::::1;8354:24;8451:22:::0;;;:16:::1;:22;::::0;;;;;8305:38;;-1:-1:-1;8354:24:160;;;8813;;::::1;8809:790;;8871:1;8854:14;:18:::0;8809:790:::1;;;8918:26;:14:::0;8937:6;8918:18:::1;:26::i;:::-;8905:39;;8959:17;8979:48;9001:25;:14;:23;:25::i;:::-;8979:14;::::0;;:21:::1;:48::i;:::-;8959:68;;9042:18;9063:40;9085:17;:6;:15;:17::i;:::-;9063:14:::0;;:21:::1;:40::i;:::-;9042:61;;9373:9;9359:10;:23;9355:233;;9439:1;9422:14;:18;;;9403:37;;9355:233;;;9517:55;9550:21;:10;:19;:21::i;:::-;9517:25;:9:::0;9531:10;9517:13:::1;:25::i;:::-;:32:::0;::::1;:55::i;:::-;9500:14;:72;;;9481:91;;9355:233;8890:709;;8809:790;9625:14;9615:6;:24:::0;9611:235:::1;;-1:-1:-1::0;;;;;9656:22:160;::::1;9681:1;9656:22:::0;;;:16:::1;:22;::::0;;;;;;;:26;;;9697:11:::1;:17:::0;;;;;:21;;-1:-1:-1;;9697:21:160::1;::::0;;9611:235:::1;;;-1:-1:-1::0;;;;;9791:17:160;::::1;;::::0;;;:11:::1;:17;::::0;;;;:43;;-1:-1:-1;;9791:43:160::1;9818:15;9791:43;;;::::0;;9611:235:::1;9892:21;:47:::0;;-1:-1:-1;;9892:47:160::1;9923:15;9892:47;;;::::0;;9956:24;;::::1;9952:689;;;9997:20;10020:27;:15:::0;10040:6;10020:19:::1;:27::i;:::-;9997:50;;10062:41;10068:4;10074:12;10088:14;10062:5;:41::i;:::-;10123:260;::::0;;9900:25:187;;;9956:2;9941:18;;9934:34;;;9984:18;;;9977:34;;;10042:2;10027:18;;10020:34;;;10085:3;10070:19;;10063:35;;;10129:3;10114:19;;10107:35;;;-1:-1:-1;;;;;10123:260:160;::::1;::::0;;;::::1;::::0;9887:3:187;9872:19;10123:260:160::1;;;;;;;9982:413;9952:689;;;10416:20;10439:27;:6:::0;10450:15;10439:10:::1;:27::i;:::-;10416:50;;10481:41;10487:4;10493:12;10507:14;10481:5;:41::i;:::-;10542:87;::::0;;10412:25:187;;;10468:2;10453:18;;10446:34;;;10496:18;;;10489:34;;;10554:2;10539:18;;10532:34;;;10597:3;10582:19;;10575:35;;;-1:-1:-1;;;;;10542:87:160;::::1;::::0;::::1;::::0;10399:3:187;10384:19;10542:87:160::1;;;;;;;10401:240;9952:689;10658:34;::::0;1461:25:187;;;10681:1:160::1;::::0;-1:-1:-1;;;;;10658:34:160;::::1;::::0;-1:-1:-1;;;;;;;;;;;10658:34:160;1449:2:187;1434:18;10658:34:160::1;;;;;;;8196:2504;;;;;;8118:2582:::0;;:::o;5992:1938::-;6156:4;1145:17:162;:15;:17::i;:::-;-1:-1:-1;;;;;1121:42:162;929:10:33;-1:-1:-1;;;;;1121:42:162;;1165:37;;;;;;;;;;;;;-1:-1:-1;;;1165:37:162;;;1113:90;;;;;-1:-1:-1;;;1113:90:162;;;;;;;;:::i;:::-;;6173:25:160::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6173:25:160::1;6237:10;-1:-1:-1::0;;;;;6229:18:160::1;:4;-1:-1:-1::0;;;;;6229:18:160::1;;;:76;;;;;6272:16;;;;;;;;;-1:-1:-1::0;;;;;6272:16:160::1;-1:-1:-1::0;;;;;6272:31:160::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6264:41:160::1;:4;-1:-1:-1::0;;;;;6264:41:160::1;;;6229:76;6211:179;;;6328:50;6353:10;6365:4;6371:6;6328:24;:50::i;:::-;6405:22;6429:23:::0;6456:37:::1;6482:10;6456:25;:37::i;:::-;6402:91;;;;;6528:13;:11;:13::i;:::-;6506:35:::0;;;6580:14:::1;::::0;6552:25:::1;::::0;::::1;:42:::0;6623:31:::1;::::0;6647:6;6623:23:::1;:31::i;:::-;6605:15;::::0;::::1;:49:::0;6686:17:::1;:6:::0;:15:::1;:17::i;:::-;6667:16;::::0;::::1;:36:::0;6737:185:::1;6884:37;:26;:14:::0;6903:6;6884:18:::1;:26::i;:::-;:35;:37::i;:::-;6832:16;::::0;::::1;::::0;6737:125:::1;::::0;6832:29:::1;::::0;6856:4;6832:23:::1;:29::i;:::-;6737:76;6787:25;:14;:23;:25::i;:::-;-1:-1:-1::0;;;;;6737:28:160;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;:49:::1;:76::i;:::-;:94:::0;::::1;:125::i;:185::-;6716:18;::::0;::::1;:206:::0;;;6984:31:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;6984:31:160;::::1;::::0;;6965:17:::1;-1:-1:-1::0;6943:39:160::1;6935:81;;;;-1:-1:-1::0;;;6935:81:160::1;;;;;;;;:::i;:::-;-1:-1:-1::0;7058:18:160::1;::::0;::::1;::::0;-1:-1:-1;;;;;7027:28:160;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;;:49;;;;7149:11:::1;:23:::0;;;;;:49;;::::1;7182:15;7149:49;-1:-1:-1::0;;7149:49:160;;::::1;::::0;::::1;::::0;;;7125:21:::1;:73:::0;;;;::::1;::::0;;::::1;::::0;;7458:15;::::1;::::0;7311:174:::1;::::0;7458:26:::1;::::0;:24:::1;:26::i;:::-;7311:129;7410:29;7422:4;:16;;;7410:4;:11;;:29;;;;:::i;:::-;7311:84;7364:30;:4;:19;;;:28;:30::i;:::-;7311:35;::::0;::::1;::::0;;:52:::1;:84::i;:174::-;7294:14;:191:::0;;;7266:25:::1;::::0;::::1;:219:::0;7498:67:::1;7504:10:::0;7516:27:::1;:6:::0;7527:15;7516:10:::1;:27::i;:::-;7545:19:::0;;7498:5:::1;:67::i;:::-;7583:40;::::0;1461:25:187;;;-1:-1:-1;;;;;7583:40:160;::::1;::::0;7600:1:::1;::::0;-1:-1:-1;;;;;;;;;;;7583:40:160;1449:2:187;1434:18;7583:40:160::1;;;;;;;7679:10;-1:-1:-1::0;;;;;7641:242:160::1;7660:4;-1:-1:-1::0;;;;;7641:242:160::1;;7704:6;7725:14;7754:15;7784:4;:18;;;7817:4;:25;;;7857:4;:15;;;7641:242;;;;;;;;;;9900:25:187::0;;;9956:2;9941:18;;9934:34;;;;9999:2;9984:18;;9977:34;;;;10042:2;10027:18;;10020:34;10085:3;10070:19;;10063:35;10129:3;10114:19;;10107:35;9887:3;9872:19;;9613:535;7641:242:160::1;;;;;;;;-1:-1:-1::0;7903:19:160;;5992:1938;-1:-1:-1;;;;;;5992:1938:160:o;1593:250:162:-;929:10:33;1683:31:162;;;;:17;:31;;;;;;;;-1:-1:-1;;;;;1683:42:162;;;;;;;;;;;;:51;;;13454:16:160;;1683:42:162;;929:10:33;1749:87:162;;13454:16:160;1749:87:162;;;-1:-1:-1;;;;;11069:32:187;;;11051:51;;11133:2;11118:18;;11111:34;;;11024:18;1749:87:162;;;;;;;1593:250;;:::o;13113:138:160:-;13195:7;13222:21;13238:4;13222:15;:21::i;12233:189::-;12346:14;;12299:7;;;;12379:25;12346:14;12379:16;:25::i;:::-;12371:43;12406:7;;-1:-1:-1;12233:189:160;-1:-1:-1;12233:189:160:o;14890:405::-;14964:7;14984:23;15010:19;3666:12:23;;;3579:106;15010:19:160;14984:45;;15046:15;15065:1;15046:20;15042:61;;-1:-1:-1;15090:1:160;;14890:405;-1:-1:-1;;14890:405:160:o;15042:61::-;15204:21;;15115:25;;15157:69;;15195:7;;15204:21;;15157:37;:69::i;:::-;15115:111;-1:-1:-1;15246:41:160;:15;15115:111;15246:22;:41::i;:::-;15239:48;14890:405;-1:-1:-1;;;;14890:405:160:o;14020:198::-;14163:16;;:46;;;-1:-1:-1;;;14163:46:160;;;;14092:25;;-1:-1:-1;;;;;14163:16:160;;:44;;:46;;;;;;;;;;;;;;:16;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;758:201:163:-;889:28;902:5;909:7;889:12;:28::i;:::-;926:15;:27;;-1:-1:-1;;926:27:163;;;;;;;;;;;;-1:-1:-1;;758:201:163:o;14527:146:160:-;14631:16;;:33;;;-1:-1:-1;;;14631:33:160;;;;14586:12;;-1:-1:-1;;;;;14631:16:160;;:31;;:33;;;;;;;;;;;;;;:16;:33;;;;;;;;;;;;;;3743:125:23;-1:-1:-1;;;;;3843:18:23;3817:7;3843:18;;;:9;:18;;;;;;;3743:125::o;565:303:144:-;663:7;;734:48;753:28;;;734:15;:48;:::i;:::-;709:73;-1:-1:-1;524:4:146;239:8:144;798:23;806:14;798:4;:23;:::i;:::-;797:44;;;;:::i;:::-;796:67;;;;:::i;1291:126:146:-;1352:7;1379:30;524:4;1379:21;1391:8;:1;1397;1391:5;:8::i;:::-;571:7;577:1;524:4;571:7;:::i;1379:21::-;:25;;:30::i;:::-;1372:37;1291:126;-1:-1:-1;;;1291:126:146:o;10990:666:160:-;11103:7;11125;11147;11182:32;11217:21;11233:4;11217:15;:21::i;:::-;11182:56;;11255:24;11283:1;11255:29;11251:78;;11309:1;11312;11315;11301:16;;;;;;;;;11251:78;11417:23;11443:45;11463:24;11443:15;11453:4;11443:9;:15::i;:::-;:19;;:45::i;:::-;11417:71;-1:-1:-1;11523:24:160;11562:45;11523:24;11417:71;11562:28;:45::i;:::-;11501:147;;-1:-1:-1;11501:147:160;-1:-1:-1;11622:15:160;-1:-1:-1;;10990:666:160;;;;;;:::o;3122:96:71:-;3180:7;3206:5;3210:1;3206;:5;:::i;1771:107:146:-;1823:7;1850:20;:1;629:3;1850:5;:20::i;1425:158::-;1486:7;;1522:5;1526:1;1522;:5;:::i;:::-;1506:21;-1:-1:-1;1547:28:146;1573:1;1547:21;1557:10;:1;524:4;1557:5;:10::i;:::-;1547:5;;:9;:21::i;15545:482:160:-;15671:25;15699:24;15715:7;15699:15;:24::i;:::-;15671:52;;15734:28;15746:7;15755:6;15734:11;:28::i;:::-;15775:46;15824:30;:28;:30::i;:::-;15775:79;-1:-1:-1;;;;;;15871:43:160;;;15867:153;;15931:77;;-1:-1:-1;;;15931:77:160;;-1:-1:-1;;;;;12166:32:187;;;15931:77:160;;;12148:51:187;12215:18;;;12208:34;;;12258:18;;;12251:34;;;15931:33:160;;;;;12121:18:187;;15931:77:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15867:153;15660:367;;15545:482;;;:::o;16272:564::-;16398:25;16426:24;16442:7;16426:15;:24::i;:::-;16398:52;;16492:6;16471:17;:27;;16500:31;;;;;;;;;;;;;-1:-1:-1;;;16500:31:160;;;16463:69;;;;;-1:-1:-1;;;16463:69:160;;;;;;;;:::i;:::-;;16543:28;16555:7;16564:6;16543:11;:28::i;4002:501:162:-;-1:-1:-1;;;;;4147:28:162;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;4198:37;;;;;;;;;;;-1:-1:-1;;;4198:37:162;;;;;;;4147:49;-1:-1:-1;4147:49:162;4139:97;;;;-1:-1:-1;;;4139:97:162;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4278:28:162;;;4255:20;4278:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;4320:6;;4278:48;:::i;:::-;-1:-1:-1;;;;;4336:28:162;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;4255:71;;-1:-1:-1;4336:39:162;4406:90;4453:28;13454:16:160;;-1:-1:-1;;;;;13454:16:160;;13370:108;4453:28:162;4406:90;;;-1:-1:-1;;;;;11069:32:187;;;11051:51;;11133:2;11118:18;;11111:34;;;11024:18;4406:90:162;;;;;;;4129:374;4002:501;;;:::o;2755:96:71:-;2813:7;2839:5;2843:1;2839;:5;:::i;2721:200:144:-;2823:7;2845:71;2873:4;2879:19;2900:15;2845:27;:71::i;2114:147:23:-;5363:13:18;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:18;;;;;;;:::i;:::-;2216:38:23::1;2239:5;2246:7;2216:22;:38::i;:::-;2114:147:::0;;:::o;3465:96:71:-;3523:7;3549:5;3553:1;3549;:5;:::i;3850:96::-;3908:7;3934:5;3938:1;3934;:5;:::i;2233:398:163:-;2314:22;2339:19;3666:12:23;;;3579:106;2339:19:163;2314:44;;2365:25;2393:24;2409:7;2393:15;:24::i;:::-;2365:52;;2426:28;2438:7;2447:6;2426:11;:28::i;:::-;2518:1;2475:30;:28;:30::i;:::-;-1:-1:-1;;;;;2467:53:163;;2463:163;;2531:30;:28;:30::i;:::-;:87;;-1:-1:-1;;;2531:87:163;;-1:-1:-1;;;;;12166:32:187;;;2531:87:163;;;12148:51:187;12215:18;;;12208:34;;;12258:18;;;12251:34;;;2531:43:163;;;;;;;12121:18:187;;2531:87:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:163;2307:324;;2233:398;;:::o;2637:::-;2718:22;2743:19;3666:12:23;;;3579:106;2743:19:163;2718:44;;2769:25;2797:24;2813:7;2797:15;:24::i;:::-;2769:52;;2830:28;2842:7;2851:6;2830:11;:28::i;1609:827:144:-;1753:7;;1813:49;1833:28;;;1813:16;:49;:::i;:::-;1799:63;;1873:3;1880:1;1873:8;1869:52;;524:4:146;1891:23:144;;;;;1869:52;1927:19;1949:7;1955:1;1949:3;:7;:::i;:::-;1927:29;;1963:19;1991:1;1985:3;:7;:21;;2005:1;1985:21;;;1995:7;2001:1;1995:3;:7;:::i;:::-;1963:43;-1:-1:-1;2013:21:144;2037:23;239:8;2037:4;:23;:::i;:::-;2013:47;-1:-1:-1;2067:20:144;2090:35;2013:47;;2090:20;:35::i;:::-;2067:58;-1:-1:-1;2131:22:144;2156:34;2067:58;2176:13;2156:19;:34::i;:::-;2131:59;-1:-1:-1;2197:18:144;2259:1;2242:12;2219:19;2226:11;2219:3;:19;:::i;:::-;:36;;;;:::i;:::-;2218:42;;;;:::i;:::-;2197:63;-1:-1:-1;2266:17:144;2345:1;2326:14;2310:11;2287:19;2294:11;2287:3;:19;:::i;:::-;:35;;;;:::i;:::-;:54;;;;:::i;:::-;2286:60;;;;:::i;:::-;2266:80;-1:-1:-1;2266:80:144;2406:10;2380:21;2397:3;2380:13;:21;:::i;:::-;2360:42;;524:4:146;2360:42:144;:::i;:::-;:57;;;;:::i;:::-;:71;;;;:::i;:::-;2353:78;1609:827;-1:-1:-1;;;;;;;;;;;;1609:827:144:o;2267:159:23:-;5363:13:18;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:18;;;;;;;:::i;:::-;2379:5:23::1;:13;2387:5:::0;2379;:13:::1;:::i;:::-;-1:-1:-1::0;2402:7:23::1;:17;2412:7:::0;2402;:17:::1;:::i;:::-;;2267:159:::0;;:::o;8904:535::-;-1:-1:-1;;;;;8987:21:23;;8979:65;;;;-1:-1:-1;;;8979:65:23;;15114:2:187;8979:65:23;;;15096:21:187;15153:2;15133:18;;;15126:30;15192:33;15172:18;;;15165:61;15243:18;;8979:65:23;14912:355:187;8979:65:23;9131:6;9115:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9283:18:23;;;;;;:9;:18;;;;;;;;:28;;;;;;9336:37;1461:25:187;;;-1:-1:-1;;;;;;;;;;;9336:37:23;1434:18:187;9336:37:23;;;;;;;2114:147;;:::o;9759:659::-;-1:-1:-1;;;;;9842:21:23;;9834:67;;;;-1:-1:-1;;;9834:67:23;;15474:2:187;9834:67:23;;;15456:21:187;15513:2;15493:18;;;15486:30;15552:34;15532:18;;;15525:62;-1:-1:-1;;;15603:18:187;;;15596:31;15644:19;;9834:67:23;15272:397:187;9834:67:23;-1:-1:-1;;;;;9997:18:23;;9972:22;9997:18;;;:9;:18;;;;;;10033:24;;;;10025:71;;;;-1:-1:-1;;;10025:71:23;;15876:2:187;10025:71:23;;;15858:21:187;15915:2;15895:18;;;15888:30;15954:34;15934:18;;;15927:62;-1:-1:-1;;;16005:18:187;;;15998:32;16047:19;;10025:71:23;15674:398:187;10025:71:23;-1:-1:-1;;;;;10130:18:23;;;;;;:9;:18;;;;;;;;10151:23;;;10130:44;;10267:12;:22;;;;;;;10315:37;1461:25:187;;;10130:18:23;;;-1:-1:-1;;;;;;;;;;;10315:37:23;1434:18:187;10315:37:23;;;;;;;2402:17:::1;2267:159:::0;;:::o;14:423:187:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;667:131::-;-1:-1:-1;;;;;742:31:187;;732:42;;722:70;;788:1;785;778:12;722:70;667:131;:::o;803:315::-;871:6;879;932:2;920:9;911:7;907:23;903:32;900:52;;;948:1;945;938:12;900:52;987:9;974:23;1006:31;1031:5;1006:31;:::i;:::-;1056:5;1108:2;1093:18;;;;1080:32;;-1:-1:-1;;;803:315:187:o;1740:127::-;1801:10;1796:3;1792:20;1789:1;1782:31;1832:4;1829:1;1822:15;1856:4;1853:1;1846:15;1872:719;1915:5;1968:3;1961:4;1953:6;1949:17;1945:27;1935:55;;1986:1;1983;1976:12;1935:55;2022:6;2009:20;2048:18;2085:2;2081;2078:10;2075:36;;;2091:18;;:::i;:::-;2166:2;2160:9;2134:2;2220:13;;-1:-1:-1;;2216:22:187;;;2240:2;2212:31;2208:40;2196:53;;;2264:18;;;2284:22;;;2261:46;2258:72;;;2310:18;;:::i;:::-;2350:10;2346:2;2339:22;2385:2;2377:6;2370:18;2431:3;2424:4;2419:2;2411:6;2407:15;2403:26;2400:35;2397:55;;;2448:1;2445;2438:12;2397:55;2512:2;2505:4;2497:6;2493:17;2486:4;2478:6;2474:17;2461:54;2559:1;2552:4;2547:2;2539:6;2535:15;2531:26;2524:37;2579:6;2570:15;;;;;;1872:719;;;;:::o;2596:1266::-;2736:6;2744;2752;2760;2768;2776;2784;2792;2845:3;2833:9;2824:7;2820:23;2816:33;2813:53;;;2862:1;2859;2852:12;2813:53;2901:9;2888:23;2920:31;2945:5;2920:31;:::i;:::-;2970:5;-1:-1:-1;3027:2:187;3012:18;;2999:32;3040:33;2999:32;3040:33;:::i;:::-;3092:7;-1:-1:-1;3151:2:187;3136:18;;3123:32;3164:33;3123:32;3164:33;:::i;:::-;3216:7;-1:-1:-1;3270:2:187;3255:18;;3242:32;;-1:-1:-1;3321:3:187;3306:19;;3293:33;;-1:-1:-1;3378:3:187;3363:19;;3350:33;3427:4;3414:18;;3402:31;;3392:59;;3447:1;3444;3437:12;3392:59;3470:7;-1:-1:-1;3528:3:187;3513:19;;3500:33;3552:18;3582:14;;;3579:34;;;3609:1;3606;3599:12;3579:34;3632:50;3674:7;3665:6;3654:9;3650:22;3632:50;:::i;:::-;3622:60;;3735:3;3724:9;3720:19;3707:33;3691:49;;3765:2;3755:8;3752:16;3749:36;;;3781:1;3778;3771:12;3749:36;;3804:52;3848:7;3837:8;3826:9;3822:24;3804:52;:::i;:::-;3794:62;;;2596:1266;;;;;;;;;;;:::o;3867:456::-;3944:6;3952;3960;4013:2;4001:9;3992:7;3988:23;3984:32;3981:52;;;4029:1;4026;4019:12;3981:52;4068:9;4055:23;4087:31;4112:5;4087:31;:::i;:::-;4137:5;-1:-1:-1;4194:2:187;4179:18;;4166:32;4207:33;4166:32;4207:33;:::i;:::-;3867:456;;4259:7;;-1:-1:-1;;;4313:2:187;4298:18;;;;4285:32;;3867:456::o;4517:388::-;4585:6;4593;4646:2;4634:9;4625:7;4621:23;4617:32;4614:52;;;4662:1;4659;4652:12;4614:52;4701:9;4688:23;4720:31;4745:5;4720:31;:::i;:::-;4770:5;-1:-1:-1;4827:2:187;4812:18;;4799:32;4840:33;4799:32;4840:33;:::i;:::-;4892:7;4882:17;;;4517:388;;;;;:::o;4910:247::-;4969:6;5022:2;5010:9;5001:7;4997:23;4993:32;4990:52;;;5038:1;5035;5028:12;4990:52;5077:9;5064:23;5096:31;5121:5;5096:31;:::i;6212:525::-;6298:6;6306;6314;6322;6375:3;6363:9;6354:7;6350:23;6346:33;6343:53;;;6392:1;6389;6382:12;6343:53;6431:9;6418:23;6450:31;6475:5;6450:31;:::i;:::-;6500:5;-1:-1:-1;6557:2:187;6542:18;;6529:32;6570:33;6529:32;6570:33;:::i;:::-;6212:525;;6622:7;;-1:-1:-1;;;;6676:2:187;6661:18;;6648:32;;6727:2;6712:18;6699:32;;6212:525::o;6995:380::-;7074:1;7070:12;;;;7117;;;7138:61;;7192:4;7184:6;7180:17;7170:27;;7138:61;7245:2;7237:6;7234:14;7214:18;7211:38;7208:161;;7291:10;7286:3;7282:20;7279:1;7272:31;7326:4;7323:1;7316:15;7354:4;7351:1;7344:15;7208:161;;6995:380;;;:::o;8146:560::-;-1:-1:-1;;;;;8395:32:187;;8377:51;;8476:4;8464:17;;8459:2;8444:18;;8437:45;8518:3;8513:2;8498:18;;8491:31;;;-1:-1:-1;;8545:46:187;;8571:19;;8563:6;8545:46;:::i;:::-;8639:9;8631:6;8627:22;8622:2;8611:9;8607:18;8600:50;8667:33;8693:6;8685;8667:33;:::i;:::-;8659:41;8146:560;-1:-1:-1;;;;;;;8146:560:187:o;10621:251::-;10691:6;10744:2;10732:9;10723:7;10719:23;10715:32;10712:52;;;10760:1;10757;10750:12;10712:52;10792:9;10786:16;10811:31;10836:5;10811:31;:::i;11156:127::-;11217:10;11212:3;11208:20;11205:1;11198:31;11248:4;11245:1;11238:15;11272:4;11269:1;11262:15;11288:128;11355:9;;;11376:11;;;11373:37;;;11390:18;;:::i;11421:168::-;11461:7;11527:1;11523;11519:6;11515:14;11512:1;11509:21;11504:1;11497:9;11490:17;11486:45;11483:71;;;11534:18;;:::i;:::-;-1:-1:-1;11574:9:187;;11421:168::o;11594:217::-;11634:1;11660;11650:132;;11704:10;11699:3;11695:20;11692:1;11685:31;11739:4;11736:1;11729:15;11767:4;11764:1;11757:15;11650:132;-1:-1:-1;11796:9:187;;11594:217::o;11816:125::-;11881:9;;;11902:10;;;11899:36;;;11915:18;;:::i;12296:407::-;12498:2;12480:21;;;12537:2;12517:18;;;12510:30;12576:34;12571:2;12556:18;;12549:62;-1:-1:-1;;;12642:2:187;12627:18;;12620:41;12693:3;12678:19;;12296:407::o;12834:545::-;12936:2;12931:3;12928:11;12925:448;;;12972:1;12997:5;12993:2;12986:17;13042:4;13038:2;13028:19;13112:2;13100:10;13096:19;13093:1;13089:27;13083:4;13079:38;13148:4;13136:10;13133:20;13130:47;;;-1:-1:-1;13171:4:187;13130:47;13226:2;13221:3;13217:12;13214:1;13210:20;13204:4;13200:31;13190:41;;13281:82;13299:2;13292:5;13289:13;13281:82;;;13344:17;;;13325:1;13314:13;13281:82;;;13285:3;;;12834:545;;;:::o;13555:1352::-;13681:3;13675:10;13708:18;13700:6;13697:30;13694:56;;;13730:18;;:::i;:::-;13759:97;13849:6;13809:38;13841:4;13835:11;13809:38;:::i;:::-;13803:4;13759:97;:::i;:::-;13911:4;;13975:2;13964:14;;13992:1;13987:663;;;;14694:1;14711:6;14708:89;;;-1:-1:-1;14763:19:187;;;14757:26;14708:89;-1:-1:-1;;13512:1:187;13508:11;;;13504:24;13500:29;13490:40;13536:1;13532:11;;;13487:57;14810:81;;13957:944;;13987:663;12781:1;12774:14;;;12818:4;12805:18;;-1:-1:-1;;14023:20:187;;;14141:236;14155:7;14152:1;14149:14;14141:236;;;14244:19;;;14238:26;14223:42;;14336:27;;;;14304:1;14292:14;;;;14171:19;;14141:236;;;14145:3;14405:6;14396:7;14393:19;14390:201;;;14466:19;;;14460:26;-1:-1:-1;;14549:1:187;14545:14;;;14561:3;14541:24;14537:37;14533:42;14518:58;14503:74;;14390:201;-1:-1:-1;;;;;14637:1:187;14621:14;;;14617:22;14604:36;;-1:-1:-1;13555:1352:187:o",
"linkReferences": {}
},
"methodIdentifiers": {
"POOL()": "7535d246",
"UNDERLYING_ASSET_ADDRESS()": "b16a19de",
"allowance(address,address)": "dd62ed3e",
"approve(address,uint256)": "095ea7b3",
"approveDelegation(address,uint256)": "c04a8a10",
"balanceOf(address)": "70a08231",
"borrowAllowance(address,address)": "6bd76d24",
"burn(address,uint256)": "9dc29fac",
"decimals()": "313ce567",
"decreaseAllowance(address,uint256)": "a457c2d7",
"getAverageStableRate()": "90f6fcf2",
"getPoolIncentivesController()": "19ef9268",
"getSupplyData()": "79774338",
"getTotalSupplyAndAvgRate()": "f731e9be",
"getTotalSupplyLastUpdated()": "e7484890",
"getUserLastUpdated(address)": "79ce6b8c",
"getUserStableRate(address)": "e78c9b3b",
"increaseAllowance(address,uint256)": "39509351",
"initialize(address,address,address,uint256,uint256,uint8,string,string)": "1e5fa51f",
"mint(address,address,uint256,uint256)": "b3f1c93d",
"name()": "06fdde03",
"principalBalanceOf(address)": "c634dfaa",
"symbol()": "95d89b41",
"totalSupply()": "18160ddd",
"transfer(address,uint256)": "a9059cbb",
"transferFrom(address,address,uint256)": "23b872dd"
},
"rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":true,\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"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\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract ILendingPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"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\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"getAverageStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolIncentivesController\",\"outputs\":[{\"internalType\":\"contract IPoolIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyAndAvgRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserStableRate\",\"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\":\"addressProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMaxTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMinTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"principalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"}],\"devdoc\":{\"author\":\"FluidNFT\",\"details\":\"Debt tokens are non-transferable and so diverge from the ERC20 standard.\",\"kind\":\"dev\",\"methods\":{\"POOL()\":{\"details\":\"Returns the address of the lending pool where this aToken is used*\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"details\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)*\"},\"approveDelegation(address,uint256)\":{\"details\":\"delegates borrowing power to a user on the specific debt token\",\"params\":{\"amount\":\"the maximum amount being delegated. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)*\",\"delegatee\":\"the address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Calculates the current user debt balance\",\"returns\":{\"_0\":\"The accumulated debt of the user*\"}},\"borrowAllowance(address,address)\":{\"details\":\"returns the borrow allowance of the user\",\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"the current allowance of toUser*\"}},\"burn(address,uint256)\":{\"details\":\"Burns debt of `user`\",\"params\":{\"amount\":\"The amount of debt tokens getting burned*\",\"user\":\"The address of the user getting his debt burned\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the decimals of the token.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"getAverageStableRate()\":{\"details\":\"Returns the average stable rate across all the stable rate debt\",\"returns\":{\"_0\":\"the average stable rate*\"}},\"getPoolIncentivesController()\":{\"details\":\"Returns the address of the incentives controller contract*\"},\"getSupplyData()\":{\"details\":\"Returns the principal and total supply, the average borrow rate and the last supply update timestamp*\"},\"getTotalSupplyAndAvgRate()\":{\"details\":\"Returns the the total supply and the average stable rate*\"},\"getTotalSupplyLastUpdated()\":{\"details\":\"Returns the timestamp at which the total supply was updated*\"},\"getUserLastUpdated(address)\":{\"details\":\"Returns the timestamp of the last user action\",\"returns\":{\"_0\":\"The last update timestamp*\"}},\"getUserStableRate(address)\":{\"details\":\"Returns the stable rate of the user\",\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The stable rate of user*\"}},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"initialize(address,address,address,uint256,uint256,uint8,string,string)\":{\"details\":\"Initializes the debt token.\",\"params\":{\"addressProvider\":\"The address provider \",\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"underlyingAsset\":\"The address of the underlying asset of this debtToken\",\"underlyingCollateral\":\"The address of the underlying collateral of this debtToken\",\"underlyingMaxTokenId\":\"The max tokenId of the underlying collateral of this debtToken\",\"underlyingMinTokenId\":\"The min tokenId of the underlying collateral of this debtToken\"}},\"mint(address,address,uint256,uint256)\":{\"details\":\"Mints debt token to the `onBehalfOf` address. - Only callable by the LendingPool - The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt\",\"params\":{\"amount\":\"The amount of debt tokens to mint\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"rate\":\"The rate of the debt being minted*\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"principalBalanceOf(address)\":{\"details\":\"Returns the principal debt balance of the user from\",\"params\":{\"user\":\"The user's address\"},\"returns\":{\"_0\":\"The debt balance of the user since the last burn/mint action*\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the total supply*\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.*\"}},\"title\":\"StableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Allows for the tracking of debt for the purposes of APY calculations at a stable rate mode.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/tokenization/StableDebtToken.sol\":\"StableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935\",\"dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c39b800e55781c0f7a644ec9cc615664dbe2f009198e537e6acaad3086ba093\",\"dweb:/ipfs/Qmaugq2wsB1ASX8Kv29NwXqYhZY8HRNqcdvmBe9UUNEq2V\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d\",\"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65\",\"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/ICreditDelegationToken.sol\":{\"keccak256\":\"0xd503435c6285ec39fbe57260dfa5245e8087fb336faf9a3759d345f3150247dc\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://339566f8416bbc263e4bc2de02a23fe35e232f701298d59b1c5937ab4eea3880\",\"dweb:/ipfs/QmdJyM2xuyLBZnWfQR8fUiUhvazAWsVTvD9agj2HapdmmK\"]},\"src/interfaces/IInitializableDebtToken.sol\":{\"keccak256\":\"0x29bcf86201c67f90d1620b5da4a0de05c611bf1fb15afeb6d2b30a70ec8aebca\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e17c25e400ac37f1cd29b9cfdba2d4bc34aa6e0c705a619acf0c69f9136150d6\",\"dweb:/ipfs/QmTcNqEpq8UbZf6o6AgwJVjuNbrNbsZWfRMhQnuZArJQ6Q\"]},\"src/interfaces/ILendingPool.sol\":{\"keccak256\":\"0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266\",\"dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1\"]},\"src/interfaces/IPoolIncentivesController.sol\":{\"keccak256\":\"0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466\",\"dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv\"]},\"src/interfaces/IScaledBalanceToken.sol\":{\"keccak256\":\"0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c\",\"dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z\"]},\"src/interfaces/IStableDebtToken.sol\":{\"keccak256\":\"0x964a76facf6d0ea459fd0222c5e8036efea4e9193af3851d68190052037755b4\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6eebeccfdd76a6e7691402b699c1185df09e8fe80c94cc059bd797a2931b9d3e\",\"dweb:/ipfs/QmeRY3xnu979DmjgFZSEaNgEkWgjtj4Hjpg9gW3bMoaZ1v\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/math/MathUtils.sol\":{\"keccak256\":\"0x1c856137c4ef9d713b19a65adeb47c4490bd3b8414d7f28b364625226926779f\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://15c029cd4a3becaa47c72c1f5c18986b0a3cb488d8145e0bf88ce618a3d70841\",\"dweb:/ipfs/QmSYaWpWPbEHkRCegu5edAuRS3HTwyN2mFoSKm4yfGeec9\"]},\"src/protocol/libraries/math/WadRayMath.sol\":{\"keccak256\":\"0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93\",\"dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2\"]},\"src/protocol/libraries/types/ConfigTypes.sol\":{\"keccak256\":\"0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650\",\"dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD\"]},\"src/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf\",\"dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi\"]},\"src/protocol/tokenization/StableDebtToken.sol\":{\"keccak256\":\"0x101a2f883130cd5b551f4d0e815ed7e911a1c8f35d884e2d2c4148263fc6eb81\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6406cd3edbeb703adb79752a81080ccbd87fb93394b654685cd7aad529772ba1\",\"dweb:/ipfs/QmZxvjR5oTe6jWqyuTyiiKRpSiz6nhFoRvuVEZZwbBiHCS\"]},\"src/protocol/tokenization/base/DebtTokenBase.sol\":{\"keccak256\":\"0x7a3cc782fbb4308dc2981007d00d94a507da3185db59628f209116af4e31f342\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://a709ab96e62f86169fa36f760df6cfe9db532f5ce0b95e9437cdc93ec86273dc\",\"dweb:/ipfs/QmXJ8az9pqhhp4XSufsPTA1bhz5KHGDdFsm53itWrhi3gJ\"]},\"src/protocol/tokenization/base/IncentivizedERC20.sol\":{\"keccak256\":\"0xeef558a6fb8826dd7eff89e1eb24072b5533825cbbfd3ee950623bb433ecabc6\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://4453844f67a9d9339dda3d5081073188d45b8fd274aea524b239e3462ef67236\",\"dweb:/ipfs/QmVxGsuhu1NGFd5WqnGZns8pY1VEUALhMUTx76x6hxhkn8\"]}},\"version\":1}",
"metadata": {
"compiler": {
"version": "0.8.16+commit.07a7930e"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "spender",
"type": "address",
"indexed": true
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256",
"indexed": false
}
],
"type": "event",
"name": "Approval",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "fromUser",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "toUser",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "asset",
"type": "address",
"indexed": false
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256",
"indexed": false
}
],
"type": "event",
"name": "BorrowAllowanceDelegated",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address",
"indexed": true
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256",
"indexed": false
},
{
"internalType": "uint256",
"name": "currentBalance",
"type": "uint256",
"indexed": false
},
{
"internalType": "uint256",
"name": "balanceIncrease",
"type": "uint256",
"indexed": false
},
{
"internalType": "uint256",
"name": "avgStableRate",
"type": "uint256",
"indexed": false
},
{
"internalType": "uint256",
"name": "newTotalSupply",
"type": "uint256",
"indexed": false
}
],
"type": "event",
"name": "Burn",
"anonymous": false
},
{
"inputs": [
{
"internalType": "uint8",
"name": "version",
"type": "uint8",
"indexed": false
}
],
"type": "event",
"name": "Initialized",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "underlyingCollateral",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "underlyingAsset",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "pool",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "incentivesController",
"type": "address",
"indexed": false
},
{
"internalType": "uint8",
"name": "debtTokenDecimals",
"type": "uint8",
"indexed": false
},
{
"internalType": "string",
"name": "debtTokenName",
"type": "string",
"indexed": false
},
{
"internalType": "string",
"name": "debtTokenSymbol",
"type": "string",
"indexed": false
}
],
"type": "event",
"name": "Initialized",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "onBehalfOf",
"type": "address",
"indexed": true