0 txs
0 calls
constructor
constructor(address trustedForwarder)
functions
__lenderVolumeFilled
viewfunction __lenderVolumeFilled(address) view returns (uint256)
__totalVolumeFilled
viewfunction __totalVolumeFilled() view returns (uint256)
bidDefaultDuration
viewfunction bidDefaultDuration(uint256) view returns (uint32)
bidExpirationTime
viewfunction bidExpirationTime(uint256) view returns (uint32)
bidId
viewfunction bidId() view returns (uint256)
bidPaymentCycleType
viewfunction bidPaymentCycleType(uint256) view returns (uint8)
bids
viewfunction bids(uint256) view returns (address borrower, address receiver, address lender, uint256 marketplaceId, bytes32 _metadataURI, tuple loanDetails, tuple terms, uint8 state, uint8 paymentType)
borrowerBids
viewfunction borrowerBids(address, uint256) view returns (uint256)
calculateAmountDue
viewfunction calculateAmountDue(uint256 _bidId, uint256 _timestamp) view returns (tuple due)
calculateAmountOwed
viewfunction calculateAmountOwed(uint256 _bidId, uint256 _timestamp) view returns (tuple owed)
calculateNextDueDate
viewfunction calculateNextDueDate(uint256 _bidId) view returns (uint32 dueDate_)
collateralManager
viewfunction collateralManager() view returns (address)
CURRENT_CODE_VERSION
viewfunction CURRENT_CODE_VERSION() view returns (uint8)
escrowVault
viewfunction escrowVault() view returns (address)
getBidState
viewfunction getBidState(uint256 _bidId) view returns (uint8)
getBorrowerActiveLoanIds
viewfunction getBorrowerActiveLoanIds(address _borrower) view returns (uint256[])
getBorrowerLoanIds
viewfunction getBorrowerLoanIds(address _borrower) view returns (uint256[])
getLoanBorrower
viewfunction getLoanBorrower(uint256 _bidId) view returns (address borrower_)
getLoanLender
viewfunction getLoanLender(uint256 _bidId) view returns (address lender_)
getLoanLendingToken
viewfunction getLoanLendingToken(uint256 _bidId) view returns (address token_)
getLoanMarketId
viewfunction getLoanMarketId(uint256 _bidId) view returns (uint256 _marketId)
getLoanSummary
viewfunction getLoanSummary(uint256 _bidId) view returns (address borrower, address lender, uint256 marketId, address principalTokenAddress, uint256 principalAmount, uint32 acceptedTimestamp, uint32 lastRepaidTimestamp, uint8 bidState)
getMetadataURI
viewfunction getMetadataURI(uint256 _bidId) view returns (string metadataURI_)
hasApprovedMarketForwarder
viewfunction hasApprovedMarketForwarder(uint256 _marketId, address _forwarder, address _account) view returns (bool)
isLoanDefaulted
viewfunction isLoanDefaulted(uint256 _bidId) view returns (bool)
isLoanExpired
viewfunction isLoanExpired(uint256 _bidId) view returns (bool)
isLoanLiquidateable
viewfunction isLoanLiquidateable(uint256 _bidId) view returns (bool)
isPaymentLate
viewfunction isPaymentLate(uint256 _bidId) view returns (bool)
isTrustedForwarder
viewfunction isTrustedForwarder(address forwarder) view returns (bool)
isTrustedMarketForwarder
viewfunction isTrustedMarketForwarder(uint256 _marketId, address _trustedMarketForwarder) view returns (bool)
lastRepaidTimestamp
viewfunction lastRepaidTimestamp(uint256 _bidId) view returns (uint32)
lenderCommitmentForwarder
viewfunction lenderCommitmentForwarder() view returns (address)
lenderManager
viewfunction lenderManager() view returns (address)
lenderVolumeFilled
viewfunction lenderVolumeFilled(address, address) view returns (uint256)
LIQUIDATION_DELAY
viewfunction LIQUIDATION_DELAY() view returns (uint32)
marketRegistry
viewfunction marketRegistry() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
protocolFee
viewfunction protocolFee() view returns (uint16)
reputationManager
viewfunction reputationManager() view returns (address)
totalVolumeFilled
viewfunction totalVolumeFilled(address) view returns (uint256)
uris
viewfunction uris(uint256) view returns (string)
version
viewfunction version() view returns (uint256)
approveMarketForwarder
nonpayablefunction approveMarketForwarder(uint256 _marketId, address _forwarder)
cancelBid
nonpayablefunction cancelBid(uint256 _bidId)
claimLoanNFT
nonpayablefunction claimLoanNFT(uint256 _bidId)
initialize
nonpayablefunction initialize(uint16 _protocolFee, address _marketRegistry, address _reputationManager, address _lenderCommitmentForwarder, address _collateralManager, address _lenderManager, address _escrowVault)
lenderAcceptBid
nonpayablefunction lenderAcceptBid(uint256 _bidId) returns (uint256 amountToProtocol, uint256 amountToMarketplace, uint256 amountToBorrower)
lenderCloseLoan
nonpayablefunction lenderCloseLoan(uint256 _bidId)
liquidateLoanFull
nonpayablefunction liquidateLoanFull(uint256 _bidId)
marketOwnerCancelBid
nonpayablefunction marketOwnerCancelBid(uint256 _bidId)
pauseProtocol
nonpayablefunction pauseProtocol()
renounceMarketForwarder
nonpayablefunction renounceMarketForwarder(uint256 _marketId, address _forwarder)
renounceOwnership
nonpayablefunction renounceOwnership()
repayLoan
nonpayablefunction repayLoan(uint256 _bidId, uint256 _amount)
repayLoanFull
nonpayablefunction repayLoanFull(uint256 _bidId)
repayLoanFullWithoutCollateralWithdraw
nonpayablefunction repayLoanFullWithoutCollateralWithdraw(uint256 _bidId)
repayLoanMinimum
nonpayablefunction repayLoanMinimum(uint256 _bidId)
repayLoanWithoutCollateralWithdraw
nonpayablefunction repayLoanWithoutCollateralWithdraw(uint256 _bidId, uint256 _amount)
setEscrowVault
nonpayablefunction setEscrowVault(address _escrowVault)
setProtocolFee
nonpayablefunction setProtocolFee(uint16 newFee)
setTrustedMarketForwarder
nonpayablefunction setTrustedMarketForwarder(uint256 _marketId, address _forwarder)
submitBid
nonpayablefunction submitBid(address _lendingToken, uint256 _marketplaceId, uint256 _principal, uint32 _duration, uint16 _APR, string _metadataURI, address _receiver, tuple[] _collateralInfo) returns (uint256 bidId_)
submitBid
nonpayablefunction submitBid(address _lendingToken, uint256 _marketplaceId, uint256 _principal, uint32 _duration, uint16 _APR, string _metadataURI, address _receiver) returns (uint256 bidId_)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpauseProtocol
nonpayablefunction unpauseProtocol()
events
AcceptedBid
event AcceptedBid(uint256 indexed bidId, address indexed lender)
CancelledBid
event CancelledBid(uint256 indexed bidId)
FeePaid
event FeePaid(uint256 indexed bidId, string indexed feeType, uint256 indexed amount)
Initialized
event Initialized(uint8 version)
LoanLiquidated
event LoanLiquidated(uint256 indexed bidId, address indexed liquidator)
LoanRepaid
event LoanRepaid(uint256 indexed bidId)
LoanRepayment
event LoanRepayment(uint256 indexed bidId)
MarketForwarderApproved
event MarketForwarderApproved(uint256 indexed marketId, address indexed forwarder, address sender)
MarketForwarderRenounced
event MarketForwarderRenounced(uint256 indexed marketId, address indexed forwarder, address sender)
MarketOwnerCancelledBid
event MarketOwnerCancelledBid(uint256 indexed bidId)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
ProtocolFeeSet
event ProtocolFeeSet(uint16 newFee, uint16 oldFee)
SubmittedBid
event SubmittedBid(uint256 indexed bidId, address indexed borrower, address receiver, bytes32 indexed metadataURI)
TrustedMarketForwarderSet
event TrustedMarketForwarderSet(uint256 indexed marketId, address forwarder, address sender)
Unpaused
event Unpaused(address account)
errors
ActionNotAllowed
error ActionNotAllowed(uint256 bidId, string action, string message)
PaymentNotMinimum
error PaymentNotMinimum(uint256 bidId, uint256 payment, uint256 minimumOwed)
creation bytecode
0x60a06040523480156200001157600080fd5b5060405162005b9938038062005b99833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b608051615afe6200009b6000396000818161080a01526141dd0152615afe6000f3fe608060405234801561001057600080fd5b50600436106103e65760003560e01c8063715018a61161020a578063ba6d5b1511610125578063dbf62489116100b8578063e8cbab0911610087578063e8cbab0914610af1578063ecb96fe614610b04578063f24df81014610b17578063f2fde38b14610b2a578063f93b6be514610b3d57600080fd5b8063dbf6248914610a9c578063dfca684e14610aa4578063e0d3d58d14610ab7578063e4467f3514610ade57600080fd5b8063c671bdec116100f4578063c671bdec14610a50578063d4eda4cf14610a63578063d87569cc14610a76578063d917233114610a8957600080fd5b8063ba6d5b15146109ee578063ba97120614610a01578063bde644fb14610a0a578063bf77ffae14610a1d57600080fd5b80639703ef351161019d578063a3b678ae1161016c578063a3b678ae14610984578063a51e2bad14610997578063a8cb5d68146109aa578063b0e21e8a146109d857600080fd5b80639703ef35146109385780639a11e3391461094b5780639d72d50c1461095e578063a10905ea1461097157600080fd5b80638a700b53116101d95780638a700b53146108eb5780638ac47319146108fe5780638da5cb5b14610907578063930fbae11461091857600080fd5b8063715018a6146108aa5780637bbd53d7146108b25780638288da8a146108c55780638a2ae60b146108d857600080fd5b806323be345c116103055780634423c5f1116102985780635c975abb116102675780635c975abb1461083a5780636aedfe681461084b5780636b76c0851461085e5780636b868afb14610884578063706a43c31461089757600080fd5b80634423c5f1146106c25780634a06f6ea146107de57806354fd4d50146107f1578063572b6c05146107fa57600080fd5b80633819bcdc116102d45780633819bcdc146106495780633ef0a2f71461065c57806340910c70146106855780634148f94c146106a857600080fd5b806323be345c146105d35780632519dc79146105e65780632e9332d414610606578063367358911461061957600080fd5b80631420a2661161037d5780631c9607641161034c5780631c960764146105905780631d1236331461059a5780631fff59d9146105ad578063206c54c7146105c057600080fd5b80631420a26614610511578063145730331461052657806318520f051461056a57806319b353de1461057d57600080fd5b80631042b85f116103b95780631042b85f1461048357806310618223146104a35780631253c546146104b6578063127caa88146104d657600080fd5b8063054de0ff146103eb57806306f33a9214610414578063089487b514610435578063093f561714610460575b600080fd5b6103fe6103f9366004614e6b565b610b45565b60405161040b9190614e88565b60405180910390f35b610427610422366004614f37565b610b6f565b60405190815260200161040b565b610427610443366004614fd9565b60a360209081526000928352604080842090915290825290205481565b61047361046e366004615012565b610b96565b604051901515815260200161040b565b61049661049136600461502b565b610beb565b60405161040b919061504d565b6104736104b1366004615012565b610c84565b6104c96104c4366004615012565b610d1a565b60405161040b91906150bc565b6104fc6104e4366004615012565b60a26020526000908152604090205463ffffffff1681565b60405163ffffffff909116815260200161040b565b61052461051f3660046150cf565b610db4565b005b610552610534366004615012565b6000908152609860205260409020600501546001600160a01b031690565b6040516001600160a01b03909116815260200161040b565b610524610578366004615012565b610f10565b61047361058b3660046150f4565b61109d565b6104fc6201518081565b6103fe6105a8366004614e6b565b6110dc565b6104736105bb366004615012565b611148565b6105246105ce366004615012565b611157565b60aa54610552906001600160a01b031681565b6104276105f4366004614e6b565b60a46020526000908152604090205481565b6105246106143660046150cf565b6112c8565b61063c610627366004615012565b60ac6020526000908152604090205460ff1681565b60405161040b919061515c565b61042761065736600461516f565b6113ab565b61055261066a366004615012565b6000908152609860205260409020546001600160a01b031690565b610427610693366004615012565b60009081526098602052604090206003015490565b6106b0600981565b60405160ff909116815260200161040b565b6107c96106d0366004615012565b60986020908152600091825260409182902080546001820154600283015460038401546004850154875160e08101895260058701546001600160a01b0390811682526006880154828a01528951808b018b52600789015481526008890154818b0152828b0152600988015463ffffffff808216606080860191909152600160201b80840483166080870152600160401b8404831660a0870152600160601b909304821660c08601528c519081018d52600a8b01548152600b8b01549182169b81019b909b520461ffff1699890199909952600c909601549488169793841696939092169490939192909160ff8082169161010090041689565b60405161040b999897969594939291906151b8565b60ab54610552906001600160a01b031681565b61042760a55481565b610473610808366004614e6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b60655462010000900460ff16610473565b61049661085936600461502b565b6113dc565b6104fc61086c366004615012565b60a16020526000908152604090205463ffffffff1681565b609f54610552906001600160a01b031681565b6104fc6108a5366004615012565b611475565b61052461157c565b6104276108c03660046152b1565b611590565b6105246108d3366004615012565b6116ab565b60ad54610552906001600160a01b031681565b6105246108f936600461502b565b611894565b61042760975481565b6033546001600160a01b0316610552565b610427610926366004614e6b565b609a6020526000908152604090205481565b610524610946366004615012565b611912565b610524610959366004615012565b6119c7565b61052461096c366004615012565b611a43565b61055261097f366004615012565b611aba565b6105246109923660046150cf565b611bba565b6104fc6109a5366004615012565b611c4a565b6109bd6109b8366004615012565b611c61565b6040805193845260208401929092529082015260600161040b565b60655460405161ffff909116815260200161040b565b60a954610552906001600160a01b031681565b610427609b5481565b6104c9610a18366004615012565b612304565b610a43610a2b366004615012565b6000908152609860205260409020600c015460ff1690565b60405161040b91906153b1565b610524610a5e366004614e6b565b612413565b610524610a71366004615012565b6124b4565b610473610a843660046150cf565b612586565b610524610a973660046153bf565b6125c0565b6105246128a2565b610524610ab236600461502b565b6128ba565b610aca610ac5366004615012565b612932565b60405161040b989796959493929190615455565b610524610aec3660046154a5565b6129d3565b610473610aff366004615012565b612a3d565b609e54610552906001600160a01b031681565b610524610b25366004615012565b612a4a565b610524610b38366004614e6b565b612b8f565b610524612c05565b6001600160a01b038116600090815260a060205260409020606090610b6990612c1d565b92915050565b6000610b79612c2a565b610b898989898989898989612c76565b9998505050505050505050565b600060036000838152609860205260409020600c015460ff166006811115610bc057610bc0615136565b14610bcd57506000919050565b610bd682611475565b63ffffffff164263ffffffff16119050919050565b604080518082019091526000808252602082015260008381526098602052604090206003600c82015460ff166006811115610c2857610c28615136565b141580610c4657506009810154600160201b900463ffffffff168311155b15610c515750610b69565b600084815260ac60205260408120548190610c72908490879060ff166132e5565b91865250602085015250505092915050565b60008181526098602052604081206001600c82015460ff166006811115610cad57610cad615136565b14610cbb5750600092915050565b600083815260a2602052604090205463ffffffff16610cdd5750600092915050565b600083815260a260205260409020546009820154610d049163ffffffff90811691166154d8565b63ffffffff164263ffffffff1611915050919050565b60a66020526000908152604090208054610d3390615500565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5f90615500565b8015610dac5780601f10610d8157610100808354040283529160200191610dac565b820191906000526020600020905b815481529060010190602001808311610d8f57829003601f168201915b505050505081565b610dbc613313565b609e54604051633d36902960e01b8152600481018590526001600160a01b039283169290911690633d3690299060240160206040518083038186803b158015610e0457600080fd5b505afa158015610e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3c919061553b565b6001600160a01b031614610e975760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d75737420626520746865206d61726b6574206f776e65720060448201526064015b60405180910390fd5b600082815260a76020526040902080546001600160a01b0319166001600160a01b038316179055817fa593acf9edc343669c7fc50d2caa3911326adef438361f0fa911be85c9e296a482610ee9613313565b604080516001600160a01b0393841681529290911660208301520160405180910390a25050565b60408051808201909152600c81526b18db185a5b531bd85b93919560a21b6020820152819060036000838152609860205260409020600c015460ff166006811115610f5d57610f5d615136565b14610f7f5781816040516347bc33cb60e11b8152600401610e8e929190615558565b610f87612c2a565b60008381526098602052604081206003810154909190610fa690613322565b60028301549091506001600160a01b038083169116146110085760405162461bcd60e51b815260206004820152601960248201527f6f6e6c79206c656e6465722063616e20636c61696d204e4654000000000000006044820152606401610e8e565b6002820180546001600160a01b0319167384d409eed89f6558fe3646397146232665788bf817905560ab5460405163096c998360e41b8152600481018790526001600160a01b038381166024830152909116906396c9983090604401600060405180830381600087803b15801561107e57600080fd5b505af1158015611092573d6000803e3d6000fd5b505050505050505050565b60006110a98484612586565b80156110d257506001600160a01b038316600090815260a8602052604090206110d290836133d9565b90505b9392505050565b6001600160a01b03811660009081526099602090815260409182902080548351818402810184019094528084526060939283018282801561113c57602002820191906000526020600020905b815481526020019060010190808311611128575b50505050509050919050565b6000610b6982620151806133fb565b609e5460008281526098602052604090819020600301549051633d36902960e01b81526001600160a01b0390921691633d3690299161119c9160040190815260200190565b60206040518083038186803b1580156111b457600080fd5b505afa1580156111c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ec919061553b565b6001600160a01b03166111fd613313565b6001600160a01b031614611291576040516347bc33cb60e11b8152600481018290526060602482015260146064820152731b585c9ad95d13dddb995c90d85b98d95b109a5960621b608482015260a06044820152602160a48201527f4f6e6c7920746865206d61726b6574206f776e65722063616e2063616e63656c60c4820152602160f81b60e482015261010401610e8e565b61129a81613493565b60405181907ff3f271d754f5264e0d143bf9be577d6eba153b0d833bd3a127d7b1a280bb13f190600090a250565b6112d28282612586565b61132e5760405162461bcd60e51b815260206004820152602760248201527f466f72776172646572206d757374206265207472757374656420627920746865604482015266081b585c9ad95d60ca1b6064820152608401610e8e565b611357611339613313565b6001600160a01b038316600090815260a86020526040902090613547565b50806001600160a01b0316827f65d6b5305e8c0e58e88454a1aeecae0f55975222338b25abd0997b4d305056a161138c613313565b6040516001600160a01b03909116815260200160405180910390a35050565b609960205281600052604060002081815481106113c757600080fd5b90600052602060002001600091509150505481565b604080518082018252600080825260208083018290528582526098905291909120600c81015460039060ff16600681111561141957611419615136565b14158061143757506009810154600160201b900463ffffffff168311155b156114425750610b69565b600084815260ac60205260408120548190611463908490879060ff166132e5565b90865260208601525050505092915050565b6000818152609860205260408120600c81015460039060ff16600681111561149f5761149f615136565b146114aa5750919050565b6009810154600b8201547369cbbd42fa2e1e4ee3db8af179703dadc880921591630dcf16589163ffffffff600160201b830481169291811691600160601b9004166114f488611c4a565b600089815260ac6020526040908190205490516001600160e01b031960e088901b16815261152c959493929160ff16906004016155a7565b60206040518083038186803b15801561154457600080fd5b505af4158015611558573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d591906155e5565b61158461355c565b61158e60006135d5565b565b600061159a612c2a565b6115aa8b8b8b8b8b8b8b8b612c76565b60aa54604051631532dc4560e01b81529192506000916001600160a01b0390911690631532dc45906115e49085908890889060040161560f565b602060405180830381600087803b1580156115fe57600080fd5b505af1158015611612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163691906156b0565b905060018115151461169c5760405162461bcd60e51b815260206004820152602960248201527f436f6c6c61746572616c2062616c616e636520636f756c64206e6f74206265206044820152681d985b1a59185d195960ba1b6064820152608401610e8e565b509a9950505050505050505050565b60408051808201909152600d81526c3634b8bab4b230ba32a637b0b760991b6020820152819060036000838152609860205260409020600c015460ff1660068111156116f9576116f9615136565b1461171b5781816040516347bc33cb60e11b8152600401610e8e929190615558565b61172483611148565b6117705760405162461bcd60e51b815260206004820152601b60248201527f4c6f616e206d757374206265206c697175696461746561626c652e00000000006044820152606401610e8e565b6000838152609860209081526040808320600c8101805460ff1916600517905560ac90925282205490919081906117ad908490429060ff166132e5565b92505091506117de8660405180604001604052808581526020018481525083856117d791906156cb565b6000613627565b60006117ed8460030154613322565b60aa5460405163f0472c4960e01b8152600481018a90526001600160a01b03808416602483015292935091169063f0472c4990604401600060405180830381600087803b15801561183d57600080fd5b505af1158015611851573d6000803e3d6000fd5b50506040516001600160a01b03841692508991507f73de9acc561f27528ab0a3b5dd63fefb4e59f95575891299a6f862a78779817690600090a350505050505050565b6040805180820190915260098152683932b830bca637b0b760b91b6020820152829060036000838152609860205260409020600c015460ff1660068111156118de576118de615136565b146119005781816040516347bc33cb60e11b8152600401610e8e929190615558565b61190c84846001613904565b50505050565b600081815260986020526040902080546003909101546001600160a01b039091169061193d90613322565b6001600160a01b0316146119bb576040516347bc33cb60e11b81526004810182905260606024820152600960648201526818d85b98d95b109a5960ba1b608482015260a06044820152601e60a48201527f4f6e6c792074686520626964206f776e65722063616e2063616e63656c21000060c482015260e401610e8e565b6119c481613493565b50565b6040805180820190915260098152683932b830bca637b0b760b91b6020820152819060036000838152609860205260409020600c015460ff166006811115611a1157611a11615136565b14611a335781816040516347bc33cb60e11b8152600401610e8e929190615558565b611a3e8360016139a9565b505050565b6040805180820190915260098152683932b830bca637b0b760b91b6020820152819060036000838152609860205260409020600c015460ff166006811115611a8d57611a8d615136565b14611aaf5781816040516347bc33cb60e11b8152600401610e8e929190615558565b611a3e8360006139a9565b6000818152609860205260409020600201546001600160a01b03167384d409eed89f6558fe3646397146232665788bf8811415611b6e5760ab546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e906024015b60206040518083038186803b158015611b3657600080fd5b505afa158015611b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b69919061553b565b60ab546001600160a01b0382811691161415611bb55760ab546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401611b1e565b919050565b611be3611bc5613313565b6001600160a01b038316600090815260a860205260409020906133d9565b15611c4657611c11611bf3613313565b6001600160a01b038316600090815260a86020526040902090613a02565b50806001600160a01b0316827f8807f55e9d8f9a1dbe3fb0185a481053b276c0866aa3b92350e4f4fe0e42aebc61138c613313565b5050565b6000818152609860205260408120610b6990613a17565b6000806000836040518060400160405280600f81526020016e1b195b99195c9058d8d95c1d109a59608a1b81525060016006811115611ca257611ca2615136565b6000838152609860205260409020600c015460ff166006811115611cc857611cc8615136565b14611cea5781816040516347bc33cb60e11b8152600401610e8e9291906156e3565b611cf2612c2a565b60008681526098602052604081206003810154909190611d1190613322565b609e546003840154604051633ef19a9b60e01b815260048101919091526001600160a01b03808416602483015292935060009290911690633ef19a9b90604401604080518083038186803b158015611d6857600080fd5b505afa158015611d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da09190615730565b50905080611de65760405162461bcd60e51b81526020600482015260136024820152722737ba103b32b934b334b2b2103632b73232b960691b6044820152606401610e8e565b609e546003840154604051631cc672df60e01b81526001600160a01b0390921691631cc672df91611e1d9160040190815260200190565b60206040518083038186803b158015611e3557600080fd5b505afa158015611e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6d91906156b0565b15611ead5760405162461bcd60e51b815260206004820152601060248201526f13585c9ad95d081a5cc818db1bdcd95960821b6044820152606401610e8e565b611eb689610c84565b15611ef55760405162461bcd60e51b815260206004820152600f60248201526e109a59081a185cc8195e1c1a5c9959608a1b6044820152606401610e8e565b6009830180546bffffffffffffffff000000001916600160201b4263ffffffff1690810263ffffffff60401b191691909117600160401b91909102179055600c830180546003919060ff191660018302179055506002830180546001600160a01b0319166001600160a01b038481169190911790915560aa546040516346f0b08b60e11b8152600481018c9052911690638de1611690602401600060405180830381600087803b158015611fa857600080fd5b505af1158015611fbc573d6000803e3d6000fd5b50505050611fdb611fd060655461ffff1690565b600685015490613a5d565b609e54600385015460405163028ba63960e21b8152929a50612069926001600160a01b0390921691630a2e98e4916120199160040190815260200190565b60206040518083038186803b15801561203157600080fd5b505afa158015612045573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd0919061575c565b96508688846005016001015461207f9190615779565b6120899190615779565b955087156120bd576120bd826120a76033546001600160a01b031690565b60058601546001600160a01b031691908b613a6f565b861561216657609e5460038401546040516332209bcb60e11b81526121669285926001600160a01b03909116916364413796916121009160040190815260200190565b60206040518083038186803b15801561211857600080fd5b505afa15801561212c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612150919061553b565b60058601546001600160a01b031691908a613a6f565b851561218f576001830154600584015461218f916001600160a01b039182169185911689613a6f565b600683015460058401546001600160a01b03908116600090815260a360209081526040808320938716835292905290812080549091906121d09084906156cb565b9091555050600683015460058401546001600160a01b0316600090815260a46020526040812080549091906122069084906156cb565b909155505082546001600160a01b0316600090815260a06020526040902061222e908a613ac9565b506040516001600160a01b038316908a907fde9d3bfa8771df6761c0afac2375c88c70a3aa30478e1bd15363294033b470ed90600090a3604051671c1c9bdd1bd8dbdb60c21b81528890600801604051908190038120908b907f476a21a61ac4a7da250e040733aa10facd2eeee584b2c009d178c3de3d8a12dc90600090a46040516a6d61726b6574706c61636560a81b81528790600b01604051908190038120908b907f476a21a61ac4a7da250e040733aa10facd2eeee584b2c009d178c3de3d8a12dc90600090a450505050509193909250565b600081815260a66020526040902080546060919061232190615500565b80601f016020809104026020016040519081016040528092919081815260200182805461234d90615500565b801561239a5780601f1061236f5761010080835404028352916020019161239a565b820191906000526020600020905b81548152906001019060200180831161237d57829003601f168201915b50505050509050806040516020016123b29190615790565b604051602081830303815290604052805190602001207fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b1415611bb557600082815260986020908152604090912060040154906110d5908290613ad5565b600054600990610100900460ff16158015612435575060005460ff8083169116105b6124515760405162461bcd60e51b8152600401610e8e906157ac565b6000805461ffff191660ff83161761010017905561246e82613c71565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b6040805180820190915260098152683932b830bca637b0b760b91b6020820152819060036000838152609860205260409020600c015460ff1660068111156124fe576124fe615136565b146125205781816040516347bc33cb60e11b8152600401610e8e929190615558565b600083815260986020908152604080832060ac9092528220548291829161254c9190429060ff166132e5565b92509250925061257e86604051806040016040528085815260200184815250838661257791906156cb565b6001613627565b505050505050565b600082815260a760205260408120546001600160a01b03838116911614806110d557505060a9546001600160a01b03908116911614919050565b600054610100900460ff16158080156125e05750600054600160ff909116105b806125fa5750303b1580156125fa575060005460ff166001145b6126165760405162461bcd60e51b8152600401610e8e906157ac565b6000805460ff191660011790558015612639576000805461ff0019166101001790555b61264288613d11565b61264a613d49565b6001600160a01b0385163b6126b65760405162461bcd60e51b815260206004820152602c60248201527f4c656e646572436f6d6d69746d656e74466f72776172646572206d757374206260448201526b1948184818dbdb9d1c9858dd60a21b6064820152608401610e8e565b60a980546001600160a01b0319166001600160a01b038781169190911790915587163b61272f5760405162461bcd60e51b815260206004820152602160248201527f4d61726b65745265676973747279206d757374206265206120636f6e747261636044820152601d60fa1b6064820152608401610e8e565b609e80546001600160a01b0319166001600160a01b038981169190911790915586163b6127aa5760405162461bcd60e51b8152602060048201526024808201527f52657075746174696f6e4d616e61676572206d757374206265206120636f6e746044820152631c9858dd60e21b6064820152608401610e8e565b609f80546001600160a01b0319166001600160a01b038881169190911790915584163b6128255760405162461bcd60e51b8152602060048201526024808201527f436f6c6c61746572616c4d616e61676572206d757374206265206120636f6e746044820152631c9858dd60e21b6064820152608401610e8e565b60aa80546001600160a01b0319166001600160a01b03861617905561284983613d78565b61285282613c71565b8015612898576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6128aa61355c565b6128b2612c2a565b61158e613e18565b6040805180820190915260098152683932b830bca637b0b760b91b6020820152829060036000838152609860205260409020600c015460ff16600681111561290457612904615136565b146129265781816040516347bc33cb60e11b8152600401610e8e929190615558565b61190c84846000613904565b600081815260986020526040812080546001600160a01b031691908190819081908190819081906129628a611aba565b600382015460058301546006840154600985015460008f8152609860205260409020949c50929a506001600160a01b0390911698509650600160201b900463ffffffff1694506129b190613a17565b925080600c0160009054906101000a900460ff16915050919395975091939597565b6129db61355c565b60655461ffff828116911614156129ef5750565b6065805461ffff83811661ffff198316811790935560408051938452911660208301819052917f4810ece076cee6c6042808956f3f65dad1bc72b75181341d7bed810d39deda0f91016124a8565b6000610b698260006133fb565b6040805180820190915260158152741b195b99195c90db185a5b50dbdb1b185d195c985b605a1b6020820152819060036000838152609860205260409020600c015460ff166006811115612aa057612aa0615136565b14612ac25781816040516347bc33cb60e11b8152600401610e8e929190615558565b612acb83612a3d565b612b175760405162461bcd60e51b815260206004820152601760248201527f4c6f616e206d7573742062652064656661756c7465642e0000000000000000006044820152606401610e8e565b60008381526098602052604090819020600c8101805460ff1916600617905560aa5491516302b201e360e41b81526004810186905290916001600160a01b031690632b201e3090602401600060405180830381600087803b158015612b7b57600080fd5b505af1158015612898573d6000803e3d6000fd5b612b9761355c565b6001600160a01b038116612bfc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e8e565b6119c4816135d5565b612c0d61355c565b612c15613e77565b61158e613ec6565b606060006110d583613f03565b60655462010000900460ff161561158e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610e8e565b600080612c8289613322565b609e5460405163066e751360e01b8152600481018c90526001600160a01b0380841660248301529293506000929091169063066e751390604401604080518083038186803b158015612cd357600080fd5b505afa158015612ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0b9190615730565b50905080612d535760405162461bcd60e51b81526020600482015260156024820152742737ba103b32b934b334b2b2103137b93937bbb2b960591b6044820152606401610e8e565b609e54604051639f33da3f60e01b8152600481018c90526001600160a01b0390911690639f33da3f9060240160206040518083038186803b158015612d9757600080fd5b505afa158015612dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcf91906156b0565b612e105760405162461bcd60e51b815260206004820152601260248201527126b0b935b2ba1034b9903737ba1037b832b760711b6044820152606401610e8e565b609754600081815260986020526040902080546001600160a01b0319166001600160a01b03858116919091178255919450908516612e585780546001600160a01b0316612e5a565b845b6001820180546001600160a01b03199081166001600160a01b0393841617909155600383018d90556005830180549091168e8316179055600682018b90556009820180546fffffffff0000000000000000ffffffff1916600160601b63ffffffff8d81169190910263ffffffff1916919091174291909116179055609e5460405163a5630f1960e01b8152600481018e905291169063a5630f1990602401604080518083038186803b158015612f0f57600080fd5b505afa158015612f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f479190615807565b609754600090815260ac602052604081208054600b86019291849160ff191660018381811115612f7957612f79615136565b021790555081546101009190910a63ffffffff8181021990921694909116029290921790915550600b8101805465ffff000000001916600160201b61ffff8b1602179055609e546040516311bed5bb60e01b8152600481018d90526001600160a01b03909116906311bed5bb9060240160206040518083038186803b15801561300157600080fd5b505afa158015613015573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303991906155e5565b609754600090815260a1602052604090819020805463ffffffff191663ffffffff9390931692909217909155609e54905163082fc54d60e01b8152600481018d90526001600160a01b039091169063082fc54d9060240160206040518083038186803b1580156130a857600080fd5b505afa1580156130bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e091906155e5565b609754600090815260a2602052604090819020805463ffffffff191663ffffffff9390931692909217909155609e54905163d6e794dd60e01b8152600481018d90526001600160a01b039091169063d6e794dd9060240160206040518083038186803b15801561314f57600080fd5b505afa158015613163573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131879190615836565b600c8201805461ff0019166101008360018111156131a7576131a7615136565b0217905550600c810154609754600090815260ac6020526040902054600b8301546131e99260ff61010090910481169216908d908d9063ffffffff168d613f5d565b600a820155609754600090815260a66020526040902061320a908888614dbd565b50600c8101805460ff1916600117905560405161322d9088908890602001615853565b60408051808303601f19018152908290528051602091820120835460975460018601546001600160a01b0390811686529294929091169290917ff887b1f393f43fb94c5d50483df4bd410ffbf286128c5f24ff56c580ac7f731c910160405180910390a480546001600160a01b031660009081526099602090815260408220609780548254600181018455928552928420909101919091558054916132d183615863565b919050555050505098975050505050505050565b6000806000613304866132f788613a17565b63ffffffff168787613ffb565b92509250925093509350939050565b600061331d6141d9565b905090565b60006014361080159061333c575061333c82610a84613313565b156133d15760131936013560601c6133798160a8600061335a613313565b6001600160a01b031681526020810191909152604001600020906133d9565b610b695760405162461bcd60e51b8152602060048201526024808201527f53656e646572206d75737420617070726f7665206d61726b657420666f727761604482015263393232b960e11b6064820152608401610e8e565b610b69613313565b6001600160a01b038116600090815260018301602052604081205415156110d5565b60008281526098602052604081206003600c82015460ff16600681111561342457613424615136565b14613433576000915050610b69565b600084815260a1602052604090205463ffffffff168061345857600092505050610b69565b600061346386611475565b90508461347083836154d8565b61347a91906154d8565b63ffffffff164263ffffffff1611935050505092915050565b60408051808201909152600981526818d85b98d95b109a5960ba1b6020820152819060016000838152609860205260409020600c015460ff1660068111156134dd576134dd615136565b146134ff5781816040516347bc33cb60e11b8152600401610e8e9291906156e3565b600083815260986020526040808220600c01805460ff191660021790555184917fa0633b09ac3029a6746aa27d4db1407f5f287a10c41a6b2ad2859f4da9b2680b91a2505050565b60006110d5836001600160a01b03841661421e565b613564613313565b6001600160a01b031661357f6033546001600160a01b031690565b6001600160a01b03161461158e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e8e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000848152609860209081526040822090850151855191929161364a91906156cb565b609f54835460405163c7312e4760e01b81526001600160a01b039182166004820152602481018a905292935060009291169063c7312e4790604401602060405180830381600087803b15801561369f57600080fd5b505af11580156136b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d7919061587e565b90508482106137cc578491506005600c84015460ff1660068111156136fe576136fe615136565b1461371357600c8301805460ff191660041790555b82546001600160a01b0316600090815260a060205260409020613736908861426d565b50831561379c5760aa54604051632e1a7d4d60e01b8152600481018990526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561378357600080fd5b505af1158015613797573d6000803e3d6000fd5b505050505b60405187907f9a7851747cd7ffb3fe0a32caf3da48b31f27cebe131267051640f8b72fc4718690600090a26137f8565b60405187907f68ca97895fe2d09eab47e752271728ade667e72dda27e68c20eaa191a9c2187d90600090a25b6138028783614279565b85516007840180546000906138189084906156cb565b909155505060208601516008840180546000906138369084906156cb565b909155505060098301805463ffffffff60401b1916600160401b4263ffffffff1602179055600081600281111561386f5761386f615136565b146138fb57609f54835460405163c7312e4760e01b81526001600160a01b039182166004820152602481018a905291169063c7312e4790604401602060405180830381600087803b1580156138c357600080fd5b505af11580156138d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612898919061587e565b50505050505050565b600083815260986020908152604080832060ac909252822054829182916139309190429060ff166132e5565b91945092509050600061394382846156cb565b9050808610156139765760405162dd9d0f60e61b8152600481018890526024810187905260448101829052606401610e8e565b6138fb876040518060400160405280858a6139919190615779565b81526020018590526139a385886156cb565b88613627565b600082815260986020908152604080832060ac90925282205482916139d291429060ff166132e5565b925050915061190c8460405180604001604052808581526020018481525083856139fc91906156cb565b86613627565b60006110d5836001600160a01b03841661458b565b6009810154600090600160401b900463ffffffff1615613a48576009820154600160401b900463ffffffff16610b69565b5060090154600160201b900463ffffffff1690565b60006110d5838361ffff16600261467e565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261190c90859061469d565b60006110d5838361421e565b60606000613ae483600261589b565b613aef9060026156cb565b67ffffffffffffffff811115613b0757613b076158ba565b6040519080825280601f01601f191660200182016040528015613b31576020820181803683370190505b509050600360fc1b81600081518110613b4c57613b4c6158d0565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613b7b57613b7b6158d0565b60200101906001600160f81b031916908160001a9053506000613b9f84600261589b565b613baa9060016156cb565b90505b6001811115613c22576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613bde57613bde6158d0565b1a60f81b828281518110613bf457613bf46158d0565b60200101906001600160f81b031916908160001a90535060049490941c93613c1b816158e6565b9050613bad565b5083156110d55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e8e565b600054610100900460ff16613c985760405162461bcd60e51b8152600401610e8e906158fd565b6001600160a01b0381163b613cef5760405162461bcd60e51b815260206004820152601e60248201527f457363726f775661756c74206d757374206265206120636f6e747261637400006044820152606401610e8e565b60ad80546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16613d385760405162461bcd60e51b8152600401610e8e906158fd565b613d4061476f565b6119c48161479e565b600054610100900460ff16613d705760405162461bcd60e51b8152600401610e8e906158fd565b61158e6147ce565b600054610100900460ff16613d9f5760405162461bcd60e51b8152600401610e8e906158fd565b6001600160a01b0381163b613df65760405162461bcd60e51b815260206004820181905260248201527f4c656e6465724d616e61676572206d757374206265206120636f6e74726163746044820152606401610e8e565b60ab80546001600160a01b0319166001600160a01b0392909216919091179055565b613e20612c2a565b6065805462ff00001916620100001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613e5a613313565b6040516001600160a01b03909116815260200160405180910390a1565b60655462010000900460ff1661158e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610e8e565b613ece613e77565b6065805462ff0000191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613e5a613313565b60608160000180548060200260200160405190810160405280929190818152602001828054801561113c57602002820191906000526020600020908154815260200190600101908083116111285750505050509050919050565b6000806001876001811115613f7457613f74615136565b14613f83576301e13380613f89565b6301da9c005b63ffffffff1690506001886001811115613fa557613fa5615136565b1415613fe057613fd8613fc563ffffffff808716908490600a9061480316565b600a613fd18987613a5d565b919061467e565b915050613ff1565b613fed8686868685614826565b9150505b9695505050505050565b600784015460068501546000918291829161401591615779565b92506000600185600181111561402d5761402d615136565b1461403c576301e13380614042565b6301da9c005b63ffffffff169050600061407489600a0160010160049054906101000a900461ffff1686613a5d90919063ffffffff16565b905060006140828989615779565b90508261408f828461589b565b614099919061595e565b600b8b015460098c015491955060009182916140c69163ffffffff91821691600160601b90910416615972565b63ffffffff169050806140e05750600b8b015463ffffffff165b60098c01546000906141089063ffffffff600160601b8204811691600160201b9004166156cb565b905060006141168383615779565b9050808c11806141335750600a8e0154614130898c6156cb565b11155b935060019250614141915050565b600c8c0154610100900460ff16600181111561415f5761415f615136565b141561417457801561416f578695505b6141cb565b6000816141a857600b8c0154600a8d015463ffffffff9091169061419990859061589b565b6141a3919061595e565b6141b2565b6141b286896156cb565b90506141c76141c18783615779565b89614957565b9650505b505050509450945094915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331415614219575060131936013560601c90565b503390565b600081815260018301602052604081205461426557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b69565b506000610b69565b60006110d5838361458b565b60008281526098602052604081209061429184611aba565b600583015460038401549192506001600160a01b0316906323b872dd90620186a0906142bc90613322565b6040516001600160e01b031960e085901b1681526001600160a01b039182166004820152908516602482015260448101879052606401602060405180830381600088803b15801561430c57600080fd5b5087f19350505050801561433d575060408051601f3d908101601f1916820190925261433a918101906156b0565b60015b6145845760006143508360030154613322565b60058401546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b15801561439b57600080fd5b505afa1580156143af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143d39190615995565b60058501549091506143f0906001600160a01b0316833088613a6f565b60058401546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561443657600080fd5b505afa15801561444a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061446e9190615995565b9050600061447c8383615779565b600587015460ad5460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b390604401602060405180830381600087803b1580156144d057600080fd5b505af11580156144e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061450891906156b0565b5060ad546005870154604051638340f54960e01b81526001600160a01b038881166004830152918216602482015260448101849052911690638340f54990606401600060405180830381600087803b15801561456357600080fd5b505af1158015614577573d6000803e3d6000fd5b505050505050505061190c565b5050505050565b600081815260018301602052604081205480156146745760006145af600183615779565b85549091506000906145c390600190615779565b90508181146146285760008660000182815481106145e3576145e36158d0565b9060005260206000200154905080876000018481548110614606576146066158d0565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614639576146396159ae565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b69565b6000915050610b69565b60006146898261496d565b614693848661589b565b6110d2919061595e565b60006146f2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149859092919063ffffffff16565b805190915015611a3e578080602001905181019061471091906156b0565b611a3e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e8e565b600054610100900460ff166147965760405162461bcd60e51b8152600401610e8e906158fd565b61158e614994565b600054610100900460ff166147c55760405162461bcd60e51b8152600401610e8e906158fd565b6119c4816129d3565b600054610100900460ff166147f55760405162461bcd60e51b8152600401610e8e906158fd565b6065805462ff000019169055565b600082614812575060006110d5565b8261481c8361496d565b614693908661589b565b60008363ffffffff168563ffffffff1610156148905760405162461bcd60e51b815260206004820152602360248201527f504d543a206379636c65206475726174696f6e203c206c6f616e20647572617460448201526234b7b760e91b6064820152608401610e8e565b61ffff83166148b9576148b2868563ffffffff168763ffffffff1660016149cb565b905061494e565b60006148d18663ffffffff168663ffffffff16614a2a565b9050670de0b6b3a76400006000614901856148fb63ffffffff8a166148f58a614a61565b90614a85565b90614ab9565b905060006149198461491384866156cb565b90614ae9565b9050600061492b826148f58d86614a85565b905060006149398584615779565b90506149458282614ab9565b96505050505050505b95945050505050565b600081831061496657816110d5565b5090919050565b600061497a82600a615aa8565b610b6990606461589b565b60606110d28484600085614b01565b600054610100900460ff166149bb5760405162461bcd60e51b8152600401610e8e906158fd565b61158e6149c6613313565b6135d5565b6000806149d9868686614bdc565b905060018360028111156149ef576149ef615136565b148015614a0c575060008480614a0757614a07615948565b868809115b15614a1f57614a1c6001826156cb565b90505b90505b949350505050565b60008215614a585781614a3e600185615779565b614a48919061595e565b614a539060016156cb565b6110d5565b50600092915050565b6000610b69612710614a7f61ffff8516670de0b6b3a7640000614c8c565b90614c98565b60006110d5670de0b6b3a7640000614a7f614aa08686614c8c565b614ab36002670de0b6b3a764000061595e565b90614ca4565b600080614ac760028461595e565b9050614a2283614a7f614ae287670de0b6b3a7640000614c8c565b8490614ca4565b60006110d58383670de0b6b3a7640000614a85614cb0565b606082471015614b625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e8e565b600080866001600160a01b03168587604051614b7e9190615790565b60006040518083038185875af1925050503d8060008114614bbb576040519150601f19603f3d011682016040523d82523d6000602084013e614bc0565b606091505b5091509150614bd187838387614d22565b979650505050505050565b600080806000198587098587029250828110838203039150508060001415614c1757838281614c0d57614c0d615948565b04925050506110d5565b808411614c2357600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60006110d5828461589b565b60006110d5828461595e565b60006110d582846156cb565b6000614cbd600285615ab4565b614cc75782614cc9565b845b9050614cd660028561595e565b93505b8315614a2257614ced85868463ffffffff16565b9450614cfa600285615ab4565b15614d1057614d0d81868463ffffffff16565b90505b614d1b60028561595e565b9350614cd9565b60608315614d8e578251614d87576001600160a01b0385163b614d875760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e8e565b5081614a22565b614a228383815115614da35781518083602001fd5b8060405162461bcd60e51b8152600401610e8e91906150bc565b828054614dc990615500565b90600052602060002090601f016020900481019282614deb5760008555614e31565b82601f10614e045782800160ff19823516178555614e31565b82800160010185558215614e31579182015b82811115614e31578235825591602001919060010190614e16565b50614e3d929150614e41565b5090565b5b80821115614e3d5760008155600101614e42565b6001600160a01b03811681146119c457600080fd5b600060208284031215614e7d57600080fd5b81356110d581614e56565b6020808252825182820181905260009190848201906040850190845b81811015614ec057835183529284019291840191600101614ea4565b50909695505050505050565b63ffffffff811681146119c457600080fd5b61ffff811681146119c457600080fd5b60008083601f840112614f0057600080fd5b50813567ffffffffffffffff811115614f1857600080fd5b602083019150836020828501011115614f3057600080fd5b9250929050565b60008060008060008060008060e0898b031215614f5357600080fd5b8835614f5e81614e56565b975060208901359650604089013595506060890135614f7c81614ecc565b94506080890135614f8c81614ede565b935060a089013567ffffffffffffffff811115614fa857600080fd5b614fb48b828c01614eee565b90945092505060c0890135614fc881614e56565b809150509295985092959890939650565b60008060408385031215614fec57600080fd5b8235614ff781614e56565b9150602083013561500781614e56565b809150509250929050565b60006020828403121561502457600080fd5b5035919050565b6000806040838503121561503e57600080fd5b50508035926020909101359150565b815181526020808301519082015260408101610b69565b60005b8381101561507f578181015183820152602001615067565b8381111561190c5750506000910152565b600081518084526150a8816020860160208601615064565b601f01601f19169290920160200192915050565b6020815260006110d56020830184615090565b600080604083850312156150e257600080fd5b82359150602083013561500781614e56565b60008060006060848603121561510957600080fd5b83359250602084013561511b81614e56565b9150604084013561512b81614e56565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b600281106119c4576119c4615136565b602081016151698361514c565b91905290565b6000806040838503121561518257600080fd5b823561518d81614e56565b946020939093013593505050565b600781106151ab576151ab615136565b9052565b6151ab8161514c565b60006102408201905060018060a01b03808c168352808b166020840152808a1660408401528860608401528760808401528087511660a084015250602086015160c0830152604086015161521960e084018280518252602090810151910152565b50606086015163ffffffff9081166101208401526080870151811661014084015260a08701511661016083015260c086015161525e61018084018263ffffffff169052565b5084516101a0830152602085015163ffffffff166101c0830152604085015161ffff166101e083015261529561020083018561519b565b6152a36102208301846151af565b9a9950505050505050505050565b6000806000806000806000806000806101008b8d0312156152d157600080fd5b8a356152dc81614e56565b995060208b0135985060408b0135975060608b01356152fa81614ecc565b965060808b013561530a81614ede565b955060a08b013567ffffffffffffffff8082111561532757600080fd5b6153338e838f01614eee565b909750955060c08d0135915061534882614e56565b90935060e08c0135908082111561535e57600080fd5b818d0191508d601f83011261537257600080fd5b81358181111561538157600080fd5b8e60208260071b850101111561539657600080fd5b6020830194508093505050509295989b9194979a5092959850565b60208101610b69828461519b565b600080600080600080600060e0888a0312156153da57600080fd5b87356153e581614ede565b965060208801356153f581614e56565b9550604088013561540581614e56565b9450606088013561541581614e56565b9350608088013561542581614e56565b925060a088013561543581614e56565b915060c088013561544581614e56565b8091505092959891949750929550565b6001600160a01b038981168252888116602083015260408201889052861660608201526080810185905263ffffffff84811660a0830152831660c08201526101008101610b8960e083018461519b565b6000602082840312156154b757600080fd5b81356110d581614ede565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8083168185168083038211156154f7576154f76154c2565b01949350505050565b600181811c9082168061551457607f821691505b6020821081141561553557634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561554d57600080fd5b81516110d581614e56565b8281526060602082015260006155716060830184615090565b8281036040938401526015815274131bd85b881b5d5cdd081899481858d8d95c1d1959605a1b6020820152919091019392505050565b63ffffffff8681168252858116602083015284811660408301528316606082015260a081016155d58361514c565b8260808301529695505050505050565b6000602082840312156155f757600080fd5b81516110d581614ecc565b600381106119c457600080fd5b838152604060208083018290528282018490526000919060609081850187855b8881101561569157813561564281615602565b6003811061565257615652615136565b8352818401358484015285820135868401528482013561567181614e56565b6001600160a01b031683860152608092830192919091019060010161562f565b50909998505050505050505050565b80518015158114611bb557600080fd5b6000602082840312156156c257600080fd5b6110d5826156a0565b600082198211156156de576156de6154c2565b500190565b8281526060602082015260006156fc6060830184615090565b8281036040938401526013815272426964206d7573742062652070656e64696e6760681b6020820152919091019392505050565b6000806040838503121561574357600080fd5b61574c836156a0565b9150602083015190509250929050565b60006020828403121561576e57600080fd5b81516110d581614ede565b60008282101561578b5761578b6154c2565b500390565b600082516157a2818460208701615064565b9190910192915050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600281106119c457600080fd5b6000806040838503121561581a57600080fd5b825161582581614ecc565b6020840151909250615007816157fa565b60006020828403121561584857600080fd5b81516110d5816157fa565b8183823760009101908152919050565b6000600019821415615877576158776154c2565b5060010190565b60006020828403121561589057600080fd5b81516110d581615602565b60008160001904831182151516156158b5576158b56154c2565b500290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816158f5576158f56154c2565b506000190190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261596d5761596d615948565b500490565b600063ffffffff8084168061598957615989615948565b92169190910692915050565b6000602082840312156159a757600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b600181815b808511156159ff5781600019048211156159e5576159e56154c2565b808516156159f257918102915b93841c93908002906159c9565b509250929050565b600082615a1657506001610b69565b81615a2357506000610b69565b8160018114615a395760028114615a4357615a5f565b6001915050610b69565b60ff841115615a5457615a546154c2565b50506001821b610b69565b5060208310610133831016604e8410600b8410161715615a82575081810a610b69565b615a8c83836159c4565b8060001904821115615aa057615aa06154c2565b029392505050565b60006110d58383615a07565b600082615ac357615ac3615948565b50069056fea2646970667358221220dc4719b1d2e8d5ec668b8de075c83b97e53afbee6d14b4f90eba424392da2ae764736f6c63430008090033000000000000000000000000bcea235c9ce3a9b61e3186cc3bbc78c601f4c5c1