0 txs
1 call
constructor
constructor(address _price_oracle_address, address _COLLATERAL, address _USDC, address _FEES_COLLECTOR, string _erc1155_uri)
functions
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
CLAIM_PERIOD
viewfunction CLAIM_PERIOD() view returns (uint96)
COLLATERAL
viewfunction COLLATERAL() view returns (address)
exists
viewfunction exists(uint256 id) view returns (bool)
FEES_COLLECTOR
viewfunction FEES_COLLECTOR() view returns (address)
getDebt
viewfunction getDebt(uint256 loan_id) view returns (uint256)
getLoanInfo
viewfunction getLoanInfo(uint256 loan_id) view returns (tuple, tuple, uint256)
getLoanStatus
viewfunction getLoanStatus(uint256 loan_id) view returns (uint8)
getRelativeCollateralValue
viewfunction getRelativeCollateralValue(uint256 loan_id, bytes offchain_price_data) view returns (uint256)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
isCollateralClaimable
viewfunction isCollateralClaimable(uint256 loan_id, bytes offchain_price_data) view returns (bool)
LIQUIDATION_RELATIVE_VALUE
viewfunction LIQUIDATION_RELATIVE_VALUE() view returns (uint32)
LOT_SIZE
viewfunction LOT_SIZE() view returns (uint256)
MAX_APY
viewfunction MAX_APY() view returns (uint32)
MAX_DURATION
viewfunction MAX_DURATION() view returns (uint32)
MIN_APY
viewfunction MIN_APY() view returns (uint32)
MIN_DURATION
viewfunction MIN_DURATION() view returns (uint32)
MIN_FILL_DURATION
viewfunction MIN_FILL_DURATION() view returns (uint32)
MIN_LOTS_AMOUNT
viewfunction MIN_LOTS_AMOUNT() view returns (uint32)
owner
viewfunction owner() view returns (address)
PRICE_ORACLE
viewfunction PRICE_ORACLE() view returns (address)
PROTOCOL_FEE
viewfunction PROTOCOL_FEE() view returns (uint32)
RATIOS_DECIMALS
viewfunction RATIOS_DECIMALS() view returns (uint8)
stopped
viewfunction stopped() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TARGET_RELATIVE_VALUE
viewfunction TARGET_RELATIVE_VALUE() view returns (uint32)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalSupply
viewfunction totalSupply(uint256 id) view returns (uint256)
uri
viewfunction uri(uint256) view returns (string)
USDC
viewfunction USDC() view returns (address)
USDCValueOf
viewfunction USDCValueOf(uint256 loan_id, uint256 amount) view returns (uint256)
WITHDRAW_COOLDOWN
viewfunction WITHDRAW_COOLDOWN() view returns (uint96)
borrow
nonpayablefunction borrow(uint256 loan_id, uint256 min_lots, uint256 max_lots, uint32 target_relative_value, uint256 min_collateral_in, uint256 max_collateral_out, bytes offchain_price_data) returns (uint256)
claimCollateral
nonpayablefunction claimCollateral(uint256 loan_id, bytes offchain_price_data)
claimUSDC
nonpayablefunction claimUSDC(uint256 loan_id)
createAsBorrower
nonpayablefunction createAsBorrower(uint256 lots, uint256 max_collateral_out, uint32 collateral_value, uint32 duration_days, uint32 apy, uint32 fill_duration_days, bytes offchain_price_data) returns (uint256)
createAsLender
nonpayablefunction createAsLender(uint256 lots, uint32 collateral_value, uint32 duration_days, uint32 apy) returns (uint256)
increaseCollateral
nonpayablefunction increaseCollateral(uint256 loan_id, uint256 collateral_amount)
lend
nonpayablefunction lend(uint256 loan_id, uint256 target_lots, uint256 min_lots) returns (uint256)
renounceOwnership
nonpayablefunction renounceOwnership()
repay
nonpayablefunction repay(uint256 loan_id)
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] values, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes data)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setFeesCollector
nonpayablefunction setFeesCollector(address _FEES_COLLECTOR)
setLiquidationRelativeValue
nonpayablefunction setLiquidationRelativeValue(uint32 _LIQUIDATION_RELATIVE_VALUE)
setLotSize
nonpayablefunction setLotSize(uint256 _LOT_SIZE)
setMaxAPY
nonpayablefunction setMaxAPY(uint32 _MAX_APY)
setMaxDuration
nonpayablefunction setMaxDuration(uint32 _MAX_DURATION)
setMinAPY
nonpayablefunction setMinAPY(uint32 _MIN_APY)
setMinDuration
nonpayablefunction setMinDuration(uint32 _MIN_DURATION)
setMinFillDuration
nonpayablefunction setMinFillDuration(uint32 _MIN_FILL_DURATION)
setMinLotsAmount
nonpayablefunction setMinLotsAmount(uint32 _MIN_LOTS_AMOUNT)
setPriceOracle
nonpayablefunction setPriceOracle(address _PRICE_ORACLE)
setProtocolFee
nonpayablefunction setProtocolFee(uint32 _PROTOCOL_FEE)
setTargetRelativeValue
nonpayablefunction setTargetRelativeValue(uint32 _TARGET_RELATIVE_VALUE)
stop
nonpayablefunction stop()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawCollateral
nonpayablefunction withdrawCollateral(uint256 loan_id)
withdrawUSDC
nonpayablefunction withdrawUSDC(uint256 loan_id, uint256 lots)
events
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
Borrow
event Borrow(uint256 indexed loan_id, uint256 lots)
ClaimCollateral
event ClaimCollateral(uint256 indexed loan_id, address indexed lender, uint256 lots, uint256 collateral_amount)
ClaimUSDC
event ClaimUSDC(uint256 indexed loan_id, address indexed lender, uint256 lots, uint256 USDC_amount)
CreateAsBorrower
event CreateAsBorrower(uint256 indexed loan_id, uint256 lots_required, uint256 lot_size, address price_oracle, uint96 duration, uint32 apy, uint32 target_relative_value, uint32 liquidation_relative_value, uint96 fill_deadline)
CreateAsLender
event CreateAsLender(uint256 indexed loan_id, address indexed lender, uint256 lots_required, uint256 lot_size, address price_oracle, uint96 duration, uint32 apy, uint32 target_relative_value, uint32 liquidation_relative_value, uint96 fill_deadline)
FullyFunded
event FullyFunded(uint256 indexed loan_id, uint96 claim_deadline)
IncreaseCollateral
event IncreaseCollateral(uint256 indexed load_id, uint256 collateral_amount)
Lend
event Lend(uint256 indexed loan_id, address indexed lender, uint256 lots)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Repay
event Repay(uint256 indexed loan_id, uint256 USDC_amount)
SetFeesCollector
event SetFeesCollector(address FEES_COLLECTOR)
SetLiquidationRelativeValue
event SetLiquidationRelativeValue(uint32 LIQUIDATION_RELATIVE_VALUE)
SetLotSize
event SetLotSize(uint256 LOT_SIZE)
SetMaxAPY
event SetMaxAPY(uint32 MAX_APY)
SetMaxDuration
event SetMaxDuration(uint32 MIN_LOTS_AMOUNT)
SetMinAPY
event SetMinAPY(uint32 MIN_APY)
SetMinDuration
event SetMinDuration(uint32 MIN_LOTS_AMOUNT)
SetMinFillDuration
event SetMinFillDuration(uint32 MIN_FILL_DURATION)
SetMinLotsAmount
event SetMinLotsAmount(uint32 MIN_LOTS_AMOUNT)
SetPriceOracle
event SetPriceOracle(address PRICE_ORACLE)
SetProtocolFee
event SetProtocolFee(uint32 PROTOCOL_FEE)
SetTargetRelativeValue
event SetTargetRelativeValue(uint32 TARGET_RELATIVE_VALUE)
StateUpdated
event StateUpdated(uint256 indexed loan_id, address indexed borrower, uint96 deadline, uint256 collateral_balance, uint256 USDC_balance, uint96 claim_deadline)
Stopped
event Stopped()
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
URI
event URI(string value, uint256 indexed id)
WithdrawCollateral
event WithdrawCollateral(uint256 indexed load_id)
WithdrawUSDC
event WithdrawUSDC(uint256 indexed loan_id, address indexed lender, uint256 lots)
errors
ERC1155InsufficientBalance
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId)
ERC1155InvalidApprover
error ERC1155InvalidApprover(address approver)
ERC1155InvalidArrayLength
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength)
ERC1155InvalidOperator
error ERC1155InvalidOperator(address operator)
ERC1155InvalidReceiver
error ERC1155InvalidReceiver(address receiver)
ERC1155InvalidSender
error ERC1155InvalidSender(address sender)
ERC1155MissingApprovalForAll
error ERC1155MissingApprovalForAll(address operator, address owner)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60e06040526007805460ff19169055600a60088190557d2cec000032c8000186a000000064000000010000016d000000070000000a600955805463ffffffff191660961790556001600e55348015610055575f5ffd5b50604051615d6d380380615d6d83398101604081905261007491610287565b80338061009a57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100a3816101f9565b506100ad81610248565b506001600655600b80546001600160a01b0319166001600160a01b0387811691909117909155841660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610113573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101379190610379565b60ff1660a0526001600160a01b03831660c08190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610185573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a99190610379565b6101b490600a610499565b6008546101c191906104a7565b60085550600a80546001600160a01b0390921664010000000002600160201b600160c01b0319909216919091179055506105fc915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60036102548282610542565b5050565b80516001600160a01b038116811461026e575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f60a0868803121561029b575f5ffd5b6102a486610258565b94506102b260208701610258565b93506102c060408701610258565b92506102ce60608701610258565b60808701519092506001600160401b038111156102e9575f5ffd5b8601601f810188136102f9575f5ffd5b80516001600160401b0381111561031257610312610273565b604051601f8201601f19908116603f011681016001600160401b038111828210171561034057610340610273565b6040528181528282016020018a1015610357575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295909350565b5f60208284031215610389575f5ffd5b815160ff81168114610399575f5ffd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156103ef578085048111156103d3576103d36103a0565b60018416156103e157908102905b60019390931c9280026103b8565b935093915050565b5f8261040557506001610493565b8161041157505f610493565b816001811461042757600281146104315761044d565b6001915050610493565b60ff841115610442576104426103a0565b50506001821b610493565b5060208310610133831016604e8410600b8410161715610470575081810a610493565b61047c5f1984846103b4565b805f190482111561048f5761048f6103a0565b0290505b92915050565b5f61039960ff8416836103f7565b8082028115828204841417610493576104936103a0565b600181811c908216806104d257607f821691505b6020821081036104f057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561053d57805f5260205f20601f840160051c8101602085101561051b5750805b601f840160051c820191505b8181101561053a575f8155600101610527565b50505b505050565b81516001600160401b0381111561055b5761055b610273565b61056f8161056984546104be565b846104f6565b6020601f8211600181146105a1575f831561058a5750848201515b5f19600385901b1c1916600184901b17845561053a565b5f84815260208120601f198516915b828110156105d057878501518255602094850194600190920191016105b0565b50848210156105ed57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a05160c0516156b46106b95f395f81816106e601528181610fca015281816115e50152818161263401528181612ebd01526134f101525f818161185a0152818161379901528181613bbc015261433a01525f81816104ef0152818161163c01528181611835015281816121090152818161232a0152818161239c015281816123f7015281816128fc015281816133560152818161342b0152818161377401528181613b9701528181613d44015261431801526156b45ff3fe608060405234801561000f575f5ffd5b506004361061039d575f3560e01c80636e5f4a89116101ea578063a8a71e0911610114578063c9dd1f3c116100a9578063ef92182611610079578063ef921826146108c4578063f08a5381146108d7578063f242432a146108ea578063f2fde38b146108fd575f5ffd5b8063c9dd1f3c1461084c578063e444f5451461085f578063e51d375a14610872578063e985e9c514610889575f5ffd5b8063b6a6d177116100e4578063b6a6d177146107e7578063bd85b039146107ff578063c5b3a3761461081e578063c5f1616614610831575f5ffd5b8063a8a71e0914610796578063aa9f7628146107ad578063acbb65af146107c0578063b1724b46146107d0575f5ffd5b80638c8dc6591161018a578063a0420e7f1161015a578063a0420e7f14610746578063a22cb4651461075d578063a45234d014610770578063a877e9ce14610783575f5ffd5b80638c8dc659146107085780638da5cb5b1461071b578063950d91e91461072b5780639d10087514610733575f5ffd5b806375f12b21116101c557806375f12b21146106b85780637fee67a2146106c557806388e08665146106ce57806389a30271146106e1575f5ffd5b80636e5f4a891461068a578063715018a61461069d5780637175030d146106a5575f5ffd5b80633273b110116102cb57806349d4a7c41161026b578063530e784f1161023b578063530e784f1461063a57806354f0cb0d1461064d5780636112fe2e14610660578063670d5b6314610673575f5ffd5b806349d4a7c4146105d35780634e1273f4146105e65780634f558e791461060657806351f740d514610627575f5ffd5b8063371fd8e6116102a6578063371fd8e614610583578063373071f2146105965780633d92f4e2146105a957806348782996146105c0575f5ffd5b80633273b1101461054a57806334591a3e1461055d57806335557e5c14610570575f5ffd5b80630e89341c1161034157806324bbab8b1161031157806324bbab8b146104ea5780632bed89e5146105115780632d4cdfc3146105245780632eb2c2d614610537575f5ffd5b80630e89341c1461048057806318160ddd146104a05780631c4fd41c146104a857806321241dfe146104c8575f5ffd5b80630714012c1161037c5780630714012c1461040457806307da68f5146104265780630a19399a146104305780630b4501fd1461045b575f5ffd5b8062fdd58e146103a157806301ffc9a7146103c757806303cc1194146103ea575b5f5ffd5b6103b46103af366004614add565b610910565b6040519081526020015b60405180910390f35b6103da6103d5366004614b1a565b610939565b60405190151581526020016103be565b6103f2600481565b60405160ff90911681526020016103be565b610417610412366004614b35565b6109d3565b6040516103be93929190614b4c565b61042e610b8e565b005b600b54610443906001600160a01b031681565b6040516001600160a01b0390911681526020016103be565b600a5461046b9063ffffffff1681565b60405163ffffffff90911681526020016103be565b61049361048e366004614b35565b610bdc565b6040516103be9190614c67565b6005546103b4565b6104bb6104b6366004614b35565b610c6e565b6040516103be9190614c8d565b6104d26202a30081565b6040516001600160601b0390911681526020016103be565b6104437f000000000000000000000000000000000000000000000000000000000000000081565b6103b461051f366004614cb3565b610d96565b6103b4610532366004614cdc565b6111b8565b61042e610545366004614e3a565b61127e565b61042e610558366004614efc565b611303565b61042e61056b366004614b35565b61139a565b61042e61057e366004614efc565b6113e2565b61042e610591366004614b35565b61148f565b61042e6105a4366004614f15565b6116ba565b60095461046b90600160a01b900463ffffffff1681565b6103b46105ce366004614f73565b611735565b61042e6105e1366004614efc565b6118ee565b6105f96105f4366004614fbb565b611984565b6040516103be91906150b8565b6103da610614366004614b35565b5f90815260046020526040902054151590565b6103b46106353660046150ca565b611a4f565b61042e610648366004614f15565b611f5d565b61042e61065b366004614cdc565b611fc0565b61042e61066e366004614b35565b612199565b60095461046b90600160e01b900463ffffffff1681565b61042e610698366004614b35565b612492565b61042e6126b7565b6103b46106b3366004615114565b6126ca565b6007546103da9060ff1681565b6103b460085481565b61042e6106dc366004614cdc565b612c2f565b6104437f000000000000000000000000000000000000000000000000000000000000000081565b6103b46107163660046151a7565b612f27565b5f546001600160a01b0316610443565b6104d2601e81565b61042e610741366004614efc565b61358f565b60095461046b90600160c01b900463ffffffff1681565b61042e61076b366004615205565b613625565b61042e61077e366004614efc565b613630565b6103da610791366004614f73565b6136c5565b60095461046b90600160601b900463ffffffff1681565b61042e6107bb366004614efc565b61383c565b60095461046b9063ffffffff1681565b60095461046b90600160401b900463ffffffff1681565b60095461046b90640100000000900463ffffffff1681565b6103b461080d366004614b35565b5f9081526004602052604090205490565b61042e61082c366004614efc565b61388c565b600a546104439064010000000090046001600160a01b031681565b6103b461085a366004614b35565b6138f4565b61042e61086d366004614f73565b613a5d565b60095461046b90600160801b900463ffffffff1681565b6103da61089736600461523e565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205460ff1690565b61042e6108d2366004614efc565b613dcd565b61042e6108e5366004614efc565b613e51565b61042e6108f836600461526f565b613eb2565b61042e61090b366004614f15565b613f2f565b5f8181526001602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061099b57506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061093357507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610933565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091526040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525f835f81118015610a4f5750600e5481105b610a935760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b60448201526064015b60405180910390fd5b5050505f91825250600c60209081526040808320600d835281842060048452938290205482516101008101845282548152600180840154828701526002808501546001600160a01b03808216858901526001600160601b03600160a01b92839004811660608088019190915260039889015463ffffffff8082166080808b01919091526401000000008304821660a0808c0191909152600160401b840490921660c08b0152600160601b909204841660e08a01528b519081018c528d5494851681529490930482169a84019a909a52938a01549782019790975290880154968101969096529290950154909116918301919091529192909190565b610b96613f82565b60075460ff1615610ba5575f5ffd5b6007805460ff191660011790556040517f7acc84e34091ae817647a4c49116f5cc07f319078ba80f8f5fde37ea7e25cbd6905f90a1565b606060038054610beb906152c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c17906152c3565b8015610c625780601f10610c3957610100808354040283529160200191610c62565b820191905f5260205f20905b815481529060010190602001808311610c4557829003601f168201915b50505050509050919050565b5f818152600c60209081526040808320600d909252822081548303610c9657505f9392505050565b80546001600160a01b0316158015610cb957505f84815260046020526040902054155b80610cda575080546001600160a01b031615801590610cda57506001810154155b15610ce9575060059392505050565b8054600160a01b90046001600160601b03165f03610d655760038101546001600160601b031615801590610d2c575060038101546001600160601b034281169116105b15610d3b575060039392505050565b5f8481526004602052604090205482541115610d5b575060019392505050565b5060029392505050565b600181015415610d8c575f8481526004602052604090205415610d8c575060049392505050565b5060059392505050565b5f610d9f613fc7565b835f81118015610db05750600e5481105b610def5760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b5f84118015610dfe5750828410155b610e705760405162461bcd60e51b815260206004820152603260248201527f5032504c656e64696e6720726571756972653a7461726765745f6c6f74733e3060448201527f202626206c6f74733e3d6d696e5f6c6f747300000000000000000000000000006064820152608401610a8a565b6001610e7b86610c6e565b6005811115610e8c57610e8c614c79565b14610eff5760405162461bcd60e51b815260206004820152602b60248201527f5032504c656e64696e673a4c6f616e537461747573206e6f7420657175616c7360448201527f2046494e414e43494e47210000000000000000000000000000000000000000006064820152608401610a8a565b5f858152600c6020908152604080832060049092528220549091908254610f26919061530f565b905084811015610f9e5760405162461bcd60e51b815260206004820152602560248201527f5032504c656e64696e673a4e6f7420656e6f75676820617661696c61626c652060448201527f6c6f7473210000000000000000000000000000000000000000000000000000006064820152608401610a8a565b5f610fa9878361400a565b9050610ff23330838660010154610fc09190615322565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190614019565b61100c33898360405180602001604052805f81525061409b565b82545f8981526004602052604090205411156110905760405162461bcd60e51b815260206004820152602860248201527f5032504c656e64696e6720726571756972653a737570706c793c3d6c6f74735f60448201527f72657175697265640000000000000000000000000000000000000000000000006064820152608401610a8a565b82545f8981526004602052604090205442919003611122576110b56202a30082615339565b5f8a8152600d602090815260409182902060030180546bffffffffffffffffffffffff19166001600160601b0394909416938417905590519182528a917f6fce911d7163d1242cd9f1727a93eb2d9232bb808db0881b448196dcd2fe412d910160405180910390a261116a565b61112d601e82615339565b335f908152600f602090815260408083208d8452909152902080546bffffffffffffffffffffffff19166001600160601b03929092169190911790555b60405182815233908a907fbc00f64d7f7fdd45626f23c5b8bfa1c1b8e64faf4200efb7da5a7439a326f9559060200160405180910390a35093505050506111b16001600655565b9392505050565b5f825f811180156111ca5750600e5481105b6112095760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b5f848152600460205260409020548015611272575f858152600d602052604081206002015415611249575f868152600d6020526040902060020154611252565b611252866138f4565b90508161125f8287615322565b6112699190615358565b93505050611277565b5f9250505b5092915050565b336001600160a01b03861681148015906112bd57506001600160a01b038087165f9081526002602090815260408083209385168352929052205460ff16155b156112ee5760405163711bec9160e11b81526001600160a01b03808316600483015287166024820152604401610a8a565b6112fb86868686866140f6565b505050505050565b61130b613f82565b5f8163ffffffff161161131c575f5ffd5b60095463ffffffff808316600160401b90920416101561133a575f5ffd5b6009805467ffffffff00000000191664010000000063ffffffff8481168202929092179283905560405192041681527f85595cb7b81d221172988f4bf171b00745e5c6f4e17760cc33dd2f02dcb57ae4906020015b60405180910390a150565b6113a2613f82565b5f81116113ad575f5ffd5b60088190556040518181527fde6a3638493f2725f743c7c5c9801d3143c92f2adf4825f0434dd9513b2943c79060200161138f565b6113ea613f82565b6113f66004600a61545a565b8163ffffffff1611611406575f5ffd5b60095463ffffffff808316600160c01b909204161015611424575f5ffd5b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e01b63ffffffff8481168202929092179283905560405192041681527f89c571e0d88872f4418634e394070dbe24a78682b16a616b1f8e02a2939d421e9060200161138f565b611497613fc7565b805f811180156114a85750600e5481105b6114e75760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b60046114f283610c6e565b600581111561150357611503614c79565b146115625760405162461bcd60e51b815260206004820152602960248201527f5032504c656e64696e673a4c6f616e537461747573206d75737420657175616c60448201526873204143544956452160b81b6064820152608401610a8a565b5f828152600d6020526040902080546001600160a01b031633146115c85760405162461bcd60e51b815260206004820152601f60248201527f5032504c656e64696e673a43616c6c6572206973206e6f74206f776e657221006044820152606401610a8a565b5f6115d2846138f4565b825490915061160f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691163084614019565b80826002015f8282546116229190615468565b909155505081546001830154611666916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169291169061415b565b5f600183015560405181815284907f552544cb36551120f07c66c5cd4b2987725a0c72198587f2ce796099bb66c58c9060200160405180910390a26116aa8461418c565b5050506116b76001600655565b50565b6116c2613f82565b600a80547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038481168202929092179283905560405192041681527f15a6d8dbe28500fe360d4a194d18559ae45775c191765d262c598c2fcb59d9679060200161138f565b5f835f811180156117475750600e5481105b6117865760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b600461179186610c6e565b60058111156117a2576117a2614c79565b146118015760405162461bcd60e51b815260206004820152602960248201527f5032504c656e64696e673a4c6f616e537461747573206d75737420657175616c60448201526873204143544956452160b81b6064820152608401610a8a565b5f858152600c6020908152604080832060020154600d909252909120600101546001600160a01b0390911690634bbf415c907f0000000000000000000000000000000000000000000000000000000000000000906004907f00000000000000000000000000000000000000000000000000000000000000006118828b6138f4565b8a8a6040518863ffffffff1660e01b81526004016118a697969594939291906154a3565b602060405180830381865afa1580156118c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e591906154f0565b95945050505050565b6118f6613f82565b60095463ffffffff600160801b90910481169082161015611915575f5ffd5b600980547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff16600160a01b63ffffffff8481168202929092179283905560405192041681527f7b0ffac54449edefe5c8b153777b5873e7673d02c8ac936f3cb37a9a2b9e00d59060200161138f565b606081518351146119b55781518351604051635b05999160e01b815260048101929092526024820152604401610a8a565b5f835167ffffffffffffffff8111156119d0576119d0614cfc565b6040519080825280602002602001820160405280156119f9578160200160208202803683370190505b5090505f5b8451811015611a4757602080820286010151611a2290602080840287010151610910565b828281518110611a3457611a34615507565b60209081029190910101526001016119fe565b509392505050565b5f611a58613fc7565b60075460ff1615611aab5760405162461bcd60e51b815260206004820152601360248201527f5032504c656e64696e673a53544f5050454421000000000000000000000000006044820152606401610a8a565b60095463ffffffff168510801590611ad6575060095463ffffffff600160c01b909104811690851610155b8015611af6575060095463ffffffff640100000000909104811690841610155b8015611b15575060095463ffffffff600160401b909104811690841611155b8015611b34575060095463ffffffff600160801b909104811690831610155b8015611b53575060095463ffffffff600160a01b909104811690831611155b611b9f5760405162461bcd60e51b815260206004820152601d60248201527f5032504c656e64696e673a496e76616c696420617267756d656e7473210000006044820152606401610a8a565b611bb2333087600854610fc09190615322565b611bce33600e548760405180602001604052805f81525061409b565b60408051610100810182528681526008546020820152600b546001600160a01b03169181019190915260608101611c08856201518061551b565b63ffffffff166001600160601b031681526020018363ffffffff1681526020018563ffffffff1681526020016009601c9054906101000a900463ffffffff1663ffffffff1681526020015f6001600160601b0316815250600c5f600e5481526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160146101000a8154816001600160601b0302191690836001600160601b031602179055506080820151816003015f6101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160030160046101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160030160086101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600301600c6101000a8154816001600160601b0302191690836001600160601b031602179055509050506040518060a001604052805f6001600160a01b031681526020015f6001600160601b031681526020015f81526020015f81526020015f6001600160601b0316815250600d5f600e5481526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151815f0160146101000a8154816001600160601b0302191690836001600160601b0316021790555060408201518160010155606082015181600201556080820151816003015f6101000a8154816001600160601b0302191690836001600160601b03160217905550905050611e763390565b600e545f818152600c60209081526040918290208054600182015460028301546003909301548551928352938201526001600160a01b03808316948201949094526001600160601b03600160a01b9092048216606082015263ffffffff80841660808301526401000000008404811660a0830152600160401b84041660c0820152600160601b9092041660e08201529216917f2f89d5518972ef9f2027aa908ae490b2bd691fbd59e127d7badcdb6bf75551d6906101000160405180910390a3600e8054905f611f458361553a565b919050559050611f556001600655565b949350505050565b611f65613f82565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f88a686e0e341d9099f2f990c3aa759a86822142a67579064b43ded9354a256629060200161138f565b611fc8613fc7565b815f81118015611fd95750600e5481105b6120185760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b600461202384610c6e565b600581111561203457612034614c79565b146120935760405162461bcd60e51b815260206004820152602960248201527f5032504c656e64696e673a4c6f616e537461747573206d75737420657175616c60448201526873204143544956452160b81b6064820152608401610a8a565b5f838152600d6020526040902080546001600160a01b031633146120f95760405162461bcd60e51b815260206004820152601f60248201527f5032504c656e64696e673a43616c6c6572206973206e6f74206f776e657221006044820152606401610a8a565b8054612133906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691163086614019565b82816001015f8282546121469190615468565b909155505060405183815284907f8cc7f16cd883f4af720102359f36f5a11402ba74ba5515e43b36eea9eddff23c9060200160405180910390a26121898461418c565b50506121956001600655565b5050565b6121a1613fc7565b805f811180156121b25750600e5481105b6121f15760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b5f828152600d6020526040902080546001600160a01b031633146122575760405162461bcd60e51b815260206004820152601f60248201527f5032504c656e64696e673a43616c6c6572206973206e6f74206f776e657221006044820152606401610a8a565b8054600160a01b90046001600160601b031615801561227957505f8160010154115b6122c55760405162461bcd60e51b815260206004820152601b60248201527f5032504c656e64696e673a43616e6e6f742057697468647261772100000000006044820152606401610a8a565b60016122d084610c6e565b60058111156122e1576122e1614c79565b14801561231057505f838152600c60205260409020600301546001600160601b03428116600160601b90920416105b156123595780546001820154612354916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169291169061415b565b612420565b5f6123666004600a61545a565b6001830154600a5461237e919063ffffffff16615322565b6123889190615358565b600a549091506123cd906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916401000000009004168361415b565b8154600183015461241e916001600160a01b0316906123ed90849061530f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919061415b565b505b5f6001828101829055848252600c6020908152604080842090920154600490915291205461244e9190615322565b600282015560405183907ffc226bcc04f8f8905af4229a5d361773b6bb568167898414274c713c6179e6cb905f90a26124868361418c565b50506116b76001600655565b61249a613fc7565b805f811180156124ab5750600e5481105b6124ea5760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b60056124f583610c6e565b600581111561250657612506614c79565b146125795760405162461bcd60e51b815260206004820152602b60248201527f5032504c656e64696e673a4c6f616e537461747573206d75737420657175616c60448201527f732046494e4953484544210000000000000000000000000000000000000000006064820152608401610a8a565b5f6125843384610910565b90505f81116125d55760405162461bcd60e51b815260206004820152601c60248201527f5032504c656e64696e673a4e6f7468696e6720746f20636c61696d21000000006044820152606401610a8a565b5f838152600d60209081526040808320600490925282205490919060028301546125ff9085615322565b6126099190615358565b905080826002015f82825461261e919061530f565b9091555061262f9050338685614217565b6126637f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316338361415b565b6040805184815260208101839052339187917ffcdaabbcac647c42f2fbf34f6c5a49ee8a8cd0b64ef5eb50b25441bdb133ddf2910160405180910390a36126a98561418c565b505050506116b76001600655565b6126bf613f82565b6126c85f61427d565b565b5f6126d3613fc7565b60075460ff16156127265760405162461bcd60e51b815260206004820152601360248201527f5032504c656e64696e673a53544f5050454421000000000000000000000000006044820152606401610a8a565b60095463ffffffff168910801590612751575060095463ffffffff600160c01b909104811690881610155b8015612771575060095463ffffffff640100000000909104811690871610155b8015612790575060095463ffffffff600160401b909104811690871611155b80156127af575060095463ffffffff600160801b909104811690861610155b80156127ce575060095463ffffffff600160a01b909104811690861611155b80156127ed575060095463ffffffff600160601b909104811690851610155b6128395760405162461bcd60e51b815260206004820152601d60248201527f5032504c656e64696e673a496e76616c696420617267756d656e7473210000006044820152606401610a8a565b5f896008546128489190615322565b90505f6128576004600a61545a565b600b546128709084906001600160a01b031688886142d9565b6128809063ffffffff8c16615322565b61288a9190615358565b9050808a1015801561289b57505f81115b6128f75760405162461bcd60e51b815260206004820152602760248201527f5032504c656e64696e673a496e637265617365206d61785f636f6c6c61746572604482015266616c5f6f75742160c81b6064820152608401610a8a565b61292c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333084614019565b60408051610100810182528c81526008546020820152600b546001600160a01b031691810191909152606081016129668a6201518061551b565b63ffffffff908116825289811660208301528b81166040830152600954600160e01b90041660608201526080016129a0886201518061551b565b6129b09063ffffffff1642615339565b6001600160601b03908116909152600e545f908152600c6020908152604091829020845181559084015160018201558382015160608501518416600160a01b026001600160a01b0390911617600282015560808401516003909101805460a08087015160c088015160e090980151909616600160601b027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff63ffffffff988916600160401b02167fffffffffffffffff00000000000000000000000000000000ffffffffffffffff9789166401000000000267ffffffffffffffff19909416989095169790971791909117949094169190911793909317909255815190810190915280612aba3390565b6001600160a01b0390811682525f6020808401829052604080850187905260608086018490526080958601849052600e80548552600d8452828520885189860151908816600160a01b6001600160601b0392831681029190911783558a8601516001808501919091558b8601516002808601919091559b8b0151600394850180546bffffffffffffffffffffffff19169185169190911790559354808952600c8852978690208054948101549b81015493015486519485529684019a909a52968116938201939093529690910484169086015263ffffffff808216948601949094526401000000008104841660a0860152600160401b810490931660c0850152600160601b9092041660e0830152907fe0b5c9ec62aade94ca24b2ac9d81b2037be7d64cb9e5730fcc727bb885ee6037906101000160405180910390a2612c02600e5461418c565b600e8054905f612c118361553a565b9190505592505050612c236001600655565b98975050505050505050565b612c37613fc7565b815f81118015612c485750600e5481105b612c875760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b5f8211612cfc5760405162461bcd60e51b815260206004820152602a60248201527f5032504c656e64696e673a6c6f7473206d75737420626520677265617465722060448201527f7468616e207a65726f21000000000000000000000000000000000000000000006064820152608401610a8a565b5f612d0684610c6e565b5f858152600d60205260409020549091506001600160a01b03161580612d3d57506003816005811115612d3b57612d3b614c79565b145b80612d8a57506001816005811115612d5757612d57614c79565b148015612d8a5750335f908152600f602090815260408083208784529091529020546001600160601b0390811642909116115b612dd65760405162461bcd60e51b815260206004820152601b60248201527f5032504c656e64696e673a43616e6e6f742077697468647261772100000000006044820152606401610a8a565b612de1338585614217565b5f848152600d60205260409020546001600160a01b0316612e93575f84815260046020526040902054801580612e1f575060095463ffffffff168110155b612e915760405162461bcd60e51b815260206004820152602860248201527f5032504c656e64696e673a537570706c792062656c6f77204d494e5f4c4f545360448201527f5f414d4f554e54210000000000000000000000000000000000000000000000006064820152608401610a8a565b505b612ee4335f868152600c6020526040902060010154612eb3908690615322565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919061415b565b604051838152339085907fbf8fb3d353686a0832043307d6f9bb618df238d387c7dbc9d0fa2fc7b7cba7269060200160405180910390a350506121956001600655565b5f612f30613fc7565b885f81118015612f415750600e5481105b612f805760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b5f8a8152600c60209081526040808320600d835281842060049093529220548b15801590612fae57508b8110155b8015612fba57508a8111155b61302c5760405162461bcd60e51b815260206004820152602f60248201527f5032504c656e64696e6720726571756972653a303c6d696e5f6c6f74733c3d7360448201527f7570706c793c3d6d61785f6c6f747300000000000000000000000000000000006064820152608401610a8a565b5f6130368e610c6e565b9050600181600581111561304c5761304c614c79565b14806130695750600281600581111561306757613067614c79565b145b6130b55760405162461bcd60e51b815260206004820152601960248201527f5032504c656e64696e673a43616e6e6f7420626f72726f7721000000000000006044820152606401610a8a565b82546001600160a01b03163314806130d5575082546001600160a01b0316155b6131215760405162461bcd60e51b815260206004820152601f60248201527f5032504c656e64696e673a43616c6c6572206973206e6f74206f776e657221006044820152606401610a8a565b818455825473ffffffffffffffffffffffffffffffffffffffff1916331783556002840154613161906001600160601b03600160a01b9091041642615339565b83546001600160601b0391909116600160a01b026001600160a01b039091161783555050600182015482545f9161319791615322565b60028401549091505f906131b79083906001600160a01b03168a8a6142d9565b90505f6131c66004600a61545a565b60038601546131e4908490640100000000900463ffffffff16615322565b6131ee9190615358565b905063ffffffff8c1615158061320357505f8b115b1561345e57600385015463ffffffff6401000000009091048116908d1610156132945760405162461bcd60e51b815260206004820152602a60248201527f5032504c656e64696e673a496e637265617365207461726765745f72656c617460448201527f6976655f76616c756521000000000000000000000000000000000000000000006064820152608401610a8a565b6132c5816132a46004600a61545a565b848f63ffffffff166132b69190615322565b6132c09190615358565b614384565b90508360010154811115613386575f8460010154826132e4919061530f565b9050808b10156133465760405162461bcd60e51b815260206004820152602760248201527f5032504c656e64696e673a496e637265617365206d61785f636f6c6c61746572604482015266616c5f6f75742160c81b6064820152608401610a8a565b8454613380906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691163084614019565b50613456565b8360010154811015613456575f8185600101546133a3919061530f565b90508b81101561341b5760405162461bcd60e51b815260206004820152602660248201527f5032504c656e64696e673a4465637265617365206d696e5f636f6c6c6174657260448201527f616c5f696e2100000000000000000000000000000000000000000000000000006064820152608401610a8a565b8454613454906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168361415b565b505b600184018190555b80846001015410156134b25760405162461bcd60e51b815260206004820152601f60248201527f5032504c656e64696e673a496e63726561736520636f6c6c61746572616c21006044820152606401610a8a565b5f6134bf6004600a61545a565b600a546134d390869063ffffffff16615322565b6134dd9190615358565b600a54909150613522906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916401000000009004168361415b565b845461353b906001600160a01b0316612eb3838761530f565b5084546040519081528f907f044ec4d36b0d76019c4b5aec2a216dbca5ad6c6d671940c8fbbcd23cfe4e804b9060200160405180910390a261357c8f61418c565b505091549350505050612c236001600655565b613597613f82565b60095463ffffffff600160e01b909104811690821610156135b6575f5ffd5b600980547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16600160c01b63ffffffff8481168202929092179283905560405192041681527fe03aa8e619c2efc3dcda53a6319b90bd43e44772026248ffaabc2a1535bba8e59060200161138f565b612195338383614393565b613638613f82565b60095463ffffffff808316600160a01b909204161015613656575f5ffd5b600980547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff16600160801b63ffffffff8481168202929092179283905560405192041681527f2519fd4cf837fefb87387523f27d23369ea51186f29f745cc4677e7c319b3ec09060200161138f565b5f5f841180156136d65750600e5484105b15806136fc575060046136e885610c6e565b60058111156136f9576136f9614c79565b14155b8061382857505f848152600d60205260409020546001600160601b03428116600160a01b90920416108061382657505f848152600c602090815260408083206003810154600290910154600d909352922060010154600160401b90920463ffffffff16916001600160a01b0390911690634bbf415c907f0000000000000000000000000000000000000000000000000000000000000000906004907f00000000000000000000000000000000000000000000000000000000000000006137c18b6138f4565b8a8a6040518863ffffffff1660e01b81526004016137e597969594939291906154a3565b602060405180830381865afa158015613800573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382491906154f0565b105b155b1561383457505f6111b1565b5060016111b1565b613844613f82565b600a805463ffffffff191663ffffffff83169081179091556040519081527f7f6f57fed03f08a846d1dd7051e9d858e85408182510ec902f0d9213079102849060200161138f565b613894613f82565b600980546fffffffff0000000000000000000000001916600160601b63ffffffff8481168202929092179283905560405192041681527f62b518624e16dadca83b89e62d9f351d869e67a350d856935f3a3083aa4cf9489060200161138f565b5f818152600d602052604081208054600160a01b90046001600160601b0316158061392157506001810154155b1561392e57505f92915050565b5f838152600c60209081526040808320600181015460049093529083205490929161395891615322565b83549091505f906001600160601b03428116600160a01b909204161161399e57600283015461399990600190600160a01b90046001600160601b0316615552565b6139d1565b600283015484546139c7916001600160601b03600160a01b918290048116929190910416615552565b6139d19042615552565b6001600160601b031690506139e96201518082615358565b6139f4906001615468565b613a019062015180615322565b90506301e13380613a146004600a61545a565b60038501548490613a2b9063ffffffff1685615322565b613a359190615322565b613a3f9190615358565b613a499190615358565b613a539083615468565b9695505050505050565b613a65613fc7565b825f81118015613a765750600e5481105b613ab55760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964204c6f616e2049442160801b6044820152606401610a8a565b6004613ac085610c6e565b6005811115613ad157613ad1614c79565b14613b305760405162461bcd60e51b815260206004820152602960248201527f5032504c656e64696e673a4c6f616e537461747573206d75737420657175616c60448201526873204143544956452160b81b6064820152608401610a8a565b5f848152600c60209081526040808320600d90925290912080546001600160601b03428116600160a01b909204161080613c4a5750600382015460028301546001830154600160401b90920463ffffffff16916001600160a01b039091169063b4e37cf9907f0000000000000000000000000000000000000000000000000000000000000000906004907f0000000000000000000000000000000000000000000000000000000000000000613be48d6138f4565b8c8c6040518863ffffffff1660e01b8152600401613c0897969594939291906154a3565b6020604051808303815f875af1158015613c24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c4891906154f0565b105b613c965760405162461bcd60e51b815260206004820152601c60248201527f5032504c656e64696e673a43616e6e6f74204c697175696461746521000000006044820152606401610a8a565b5f613ca13388610910565b90505f8111613cf25760405162461bcd60e51b815260206004820152601c60248201527f5032504c656e64696e673a4e6f7468696e6720746f20636c61696d21000000006044820152606401610a8a565b5f878152600460205260408120546001840154613d0f9084615322565b613d199190615358565b905080836001015f828254613d2e919061530f565b90915550613d3f9050338984614217565b613d737f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316338361415b565b604080518381526020810183905233918a917f1d444c28894712984a4fe069711274d086859136f702d387bda2f1cd90d66df8910160405180910390a3613db98861418c565b5050505050613dc86001600655565b505050565b613dd5613f82565b60095463ffffffff64010000000090910481169082161015613df5575f5ffd5b600980546bffffffff00000000000000001916600160401b63ffffffff8481168202929092179283905560405192041681527fa33c859c6a01d7d71b062ae88c11d026efd55b26b354dfc8844e5a74b8bf069b9060200161138f565b613e59613f82565b5f8163ffffffff1611613e6a575f5ffd5b6009805463ffffffff191663ffffffff83169081179091556040519081527f8b8bfa8b607aee8f950b269ee81087cd304216fd813ac4f3aead05d7072a3a139060200161138f565b336001600160a01b0386168114801590613ef157506001600160a01b038087165f9081526002602090815260408083209385168352929052205460ff16155b15613f225760405163711bec9160e11b81526001600160a01b03808316600483015287166024820152604401610a8a565b6112fb8686868686614441565b613f37613f82565b6001600160a01b038116613f79576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610a8a565b6116b78161427d565b5f546001600160a01b031633146126c8576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610a8a565b600260065403614003576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600655565b5f8282188284100282186111b1565b6040516001600160a01b0384811660248301528381166044830152606482018390526140959186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506144cd565b50505050565b6001600160a01b0384166140c457604051632bfa23e760e11b81525f6004820152602401610a8a565b604080516001808252602082018690528183019081526060820185905260808201909252906112fb5f87848487614552565b6001600160a01b03841661411f57604051632bfa23e760e11b81525f6004820152602401610a8a565b6001600160a01b03851661414757604051626a0d4560e21b81525f6004820152602401610a8a565b6141548585858585614552565b5050505050565b6040516001600160a01b03838116602483015260448201839052613dc891859182169063a9059cbb9060640161404e565b5f818152600d602090815260409182902080546001820154600283015460039093015485516001600160601b03600160a01b85048116825295810192909252948101929092529190921660608301526001600160a01b03169082907f289938dfd99639eb7b7174b9259eaa5a4b3a1d69d143b4d03d58b86ac502517d9060800160405180910390a350565b6001600160a01b03831661423f57604051626a0d4560e21b81525f6004820152602401610a8a565b604080516001808252602082018590528183019081526060820184905260a082019092525f6080820181815291929161415491879185908590614552565b5f80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040517fc5801aa30000000000000000000000000000000000000000000000000000000081525f906001600160a01b0385169063c5801aa390614368907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908a9089908990600401615571565b6020604051808303815f875af11580156118c1573d5f5f3e3d5ffd5b5f8282188284110282186111b1565b6001600160a01b0382166143d5576040517fced3e1000000000000000000000000000000000000000000000000000000000081525f6004820152602401610a8a565b6001600160a01b038381165f81815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661446a57604051632bfa23e760e11b81525f6004820152602401610a8a565b6001600160a01b03851661449257604051626a0d4560e21b81525f6004820152602401610a8a565b604080516001808252602082018690528183019081526060820185905260808201909252906144c48787848487614552565b50505050505050565b5f5f60205f8451602086015f885af1806144ec576040513d5f823e3d81fd5b50505f513d91508115614503578060011415614510565b6001600160a01b0384163b155b15614095576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610a8a565b61455e858585856145a5565b6001600160a01b038416156141545782513390600103614597576020848101519084015161459083898985858961468c565b50506112fb565b6112fb8187878787876147ad565b6145b184848484614894565b6001600160a01b03841661462e575f805b83518110156146155760208181028481018201519086018201515f9081526004909252604082208054919283926145fa908490615468565b9091555061460a90508184615468565b9250506001016145c2565b508060055f8282546146279190615468565b9091555050505b6001600160a01b038316614095575f805b835181101561467b5760208181028481018201519086018201515f9081526004909252604090912080548290039055919091019060010161463f565b506005805491909103905550505050565b6001600160a01b0384163b156112fb5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906146d090899089908890889088906004016155ad565b6020604051808303815f875af192505050801561470a575060408051601f3d908101601f19168201909252614707918101906155e9565b60015b614771573d808015614737576040519150601f19603f3d011682016040523d82523d5f602084013e61473c565b606091505b5080515f0361476957604051632bfa23e760e11b81526001600160a01b0386166004820152602401610a8a565b805181602001fd5b6001600160e01b0319811663f23a6e6160e01b146144c457604051632bfa23e760e11b81526001600160a01b0386166004820152602401610a8a565b6001600160a01b0384163b156112fb5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906147f19089908990889088908890600401615604565b6020604051808303815f875af192505050801561482b575060408051601f3d908101601f19168201909252614828918101906155e9565b60015b614858573d808015614737576040519150601f19603f3d011682016040523d82523d5f602084013e61473c565b6001600160e01b0319811663bc197c8160e01b146144c457604051632bfa23e760e11b81526001600160a01b0386166004820152602401610a8a565b80518251146148c35781518151604051635b05999160e01b815260048101929092526024820152604401610a8a565b335f5b83518110156149e4576020818102858101820151908501909101516001600160a01b03881615614994575f8281526001602090815260408083206001600160a01b038c1684529091529020548181101561496c576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038a166004820152602481018290526044810183905260648101849052608401610a8a565b5f8381526001602090815260408083206001600160a01b038d16845290915290209082900390555b6001600160a01b038716156149da575f8281526001602090815260408083206001600160a01b038b168452909152812080548392906149d4908490615468565b90915550505b50506001016148c6565b508251600103614a645760208301515f906020840151909150856001600160a01b0316876001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051614a55929190918252602082015260400190565b60405180910390a45050614154565b836001600160a01b0316856001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051614ab392919061565a565b60405180910390a45050505050565b80356001600160a01b0381168114614ad8575f5ffd5b919050565b5f5f60408385031215614aee575f5ffd5b614af783614ac2565b946020939093013593505050565b6001600160e01b0319811681146116b7575f5ffd5b5f60208284031215614b2a575f5ffd5b81356111b181614b05565b5f60208284031215614b45575f5ffd5b5035919050565b5f6101c08201905084518252602085015160208301526001600160a01b0360408601511660408301526001600160601b03606086015116606083015263ffffffff608086015116608083015260a0850151614baf60a084018263ffffffff169052565b5060c0850151614bc760c084018263ffffffff169052565b5060e0850151614be260e08401826001600160601b03169052565b5083516001600160a01b031661010083015260208401516001600160601b03908116610120840152604085015161014084015260608501516101608401526080909401519093166101808201526101a00152919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111b16020830184614c39565b634e487b7160e01b5f52602160045260245ffd5b6020810160068310614cad57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f5f5f60608486031215614cc5575f5ffd5b505081359360208301359350604090920135919050565b5f5f60408385031215614ced575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614d3957614d39614cfc565b604052919050565b5f67ffffffffffffffff821115614d5a57614d5a614cfc565b5060051b60200190565b5f82601f830112614d73575f5ffd5b8135614d86614d8182614d41565b614d10565b8082825260208201915060208360051b860101925085831115614da7575f5ffd5b602085015b83811015614dc4578035835260209283019201614dac565b5095945050505050565b5f82601f830112614ddd575f5ffd5b813567ffffffffffffffff811115614df757614df7614cfc565b614e0a601f8201601f1916602001614d10565b818152846020838601011115614e1e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a08688031215614e4e575f5ffd5b614e5786614ac2565b9450614e6560208701614ac2565b9350604086013567ffffffffffffffff811115614e80575f5ffd5b614e8c88828901614d64565b935050606086013567ffffffffffffffff811115614ea8575f5ffd5b614eb488828901614d64565b925050608086013567ffffffffffffffff811115614ed0575f5ffd5b614edc88828901614dce565b9150509295509295909350565b803563ffffffff81168114614ad8575f5ffd5b5f60208284031215614f0c575f5ffd5b6111b182614ee9565b5f60208284031215614f25575f5ffd5b6111b182614ac2565b5f5f83601f840112614f3e575f5ffd5b50813567ffffffffffffffff811115614f55575f5ffd5b602083019150836020828501011115614f6c575f5ffd5b9250929050565b5f5f5f60408486031215614f85575f5ffd5b83359250602084013567ffffffffffffffff811115614fa2575f5ffd5b614fae86828701614f2e565b9497909650939450505050565b5f5f60408385031215614fcc575f5ffd5b823567ffffffffffffffff811115614fe2575f5ffd5b8301601f81018513614ff2575f5ffd5b8035615000614d8182614d41565b8082825260208201915060208360051b850101925087831115615021575f5ffd5b6020840193505b8284101561504a5761503984614ac2565b825260209384019390910190615028565b9450505050602083013567ffffffffffffffff811115615068575f5ffd5b61507485828601614d64565b9150509250929050565b5f8151808452602084019350602083015f5b828110156150ae578151865260209586019590910190600101615090565b5093949350505050565b602081525f6111b1602083018461507e565b5f5f5f5f608085870312156150dd575f5ffd5b843593506150ed60208601614ee9565b92506150fb60408601614ee9565b915061510960608601614ee9565b905092959194509250565b5f5f5f5f5f5f5f5f60e0898b03121561512b575f5ffd5b883597506020890135965061514260408a01614ee9565b955061515060608a01614ee9565b945061515e60808a01614ee9565b935061516c60a08a01614ee9565b925060c089013567ffffffffffffffff811115615187575f5ffd5b6151938b828c01614f2e565b999c989b5096995094979396929594505050565b5f5f5f5f5f5f5f5f60e0898b0312156151be575f5ffd5b8835975060208901359650604089013595506151dc60608a01614ee9565b94506080890135935060a0890135925060c089013567ffffffffffffffff811115615187575f5ffd5b5f5f60408385031215615216575f5ffd5b61521f83614ac2565b915060208301358015158114615233575f5ffd5b809150509250929050565b5f5f6040838503121561524f575f5ffd5b61525883614ac2565b915061526660208401614ac2565b90509250929050565b5f5f5f5f5f60a08688031215615283575f5ffd5b61528c86614ac2565b945061529a60208701614ac2565b93506040860135925060608601359150608086013567ffffffffffffffff811115614ed0575f5ffd5b600181811c908216806152d757607f821691505b6020821081036152f557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610933576109336152fb565b8082028115828204841417610933576109336152fb565b6001600160601b038181168382160190811115610933576109336152fb565b5f8261537257634e487b7160e01b5f52601260045260245ffd5b500490565b6001815b60018411156153b257808504811115615396576153966152fb565b60018416156153a457908102905b60019390931c92800261537b565b935093915050565b5f826153c857506001610933565b816153d457505f610933565b81600181146153ea57600281146153f457615410565b6001915050610933565b60ff841115615405576154056152fb565b50506001821b610933565b5060208310610133831016604e8410600b8410161715615433575081810a610933565b61543f5f198484615377565b805f1904821115615452576154526152fb565b029392505050565b5f6111b160ff8416836153ba565b80820180821115610933576109336152fb565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038816815260ff8716602082015285604082015260ff8516606082015283608082015260c060a08201525f6154e360c08301848661547b565b9998505050505050505050565b5f60208284031215615500575f5ffd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b63ffffffff8181168382160290811690818114611277576112776152fb565b5f6001820161554b5761554b6152fb565b5060010190565b6001600160601b038281168282160390811115610933576109336152fb565b6001600160a01b038616815260ff85166020820152836040820152608060608201525f6155a260808301848661547b565b979650505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015282606082015260a060808201525f6155a260a0830184614c39565b5f602082840312156155f9575f5ffd5b81516111b181614b05565b6001600160a01b03861681526001600160a01b038516602082015260a060408201525f61563460a083018661507e565b8281036060840152615646818661507e565b90508281036080840152612c238185614c39565b604081525f61566c604083018561507e565b82810360208401526118e5818561507e56fea264697066735822122077d6282d19a0067ecf6319baec7d47c364d38b98d1aab543144556903bc6a01864736f6c634300081e0033000000000000000000000000fec50cb4921f014514c65e6b451c755d090409000000000000000000000000001265dade08e13f1c6f9706287fbe39083dc5a4b40000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000e8e5a7c6ee0cb3b15257153d4c9d9069140f0f7c00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003368747470733a2f2f746f6b656e732e637265646566692e696f2f6d657461646174612f7032702d76312f35362f78637265646900000000000000000000000000