0 txs
1 call
constructor
constructor()
functions
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
checkLeverageCriteria
viewfunction checkLeverageCriteria(uint256 _margin, uint256 _size) view
fundingAdjustedLongPnLTotal
viewfunction fundingAdjustedLongPnLTotal() view returns (int256 _fundingAdjustedPnL)
fundingAdjustedLongPnLTotal
viewfunction fundingAdjustedLongPnLTotal(uint32 _maxAge, bool _priceDiffCheck) view returns (int256 _fundingAdjustedPnL)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getMarketSummary
viewfunction getMarketSummary() view returns (tuple _marketSummary)
getPositionSummary
viewfunction getPositionSummary(uint256 _tokenId) view returns (tuple _positionSummary)
getTradeFee
viewfunction getTradeFee(uint256 _size) view returns (uint256 _tradeFee)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
isLocked
viewfunction isLocked(uint256 _tokenId) view returns (bool _lockStatus)
isLockedByModule
viewfunction isLockedByModule(uint256 _tokenId, bytes32 _moduleKey) view returns (bool _lockedByModuleStatus)
leverageMax
viewfunction leverageMax() view returns (uint256)
leverageMin
viewfunction leverageMin() view returns (uint256)
leverageTradingFee
viewfunction leverageTradingFee() view returns (uint256)
marginMin
viewfunction marginMin() view returns (uint256)
MODULE_KEY
viewfunction MODULE_KEY() view returns (bytes32)
name
viewfunction name() view returns (string)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenByIndex
viewfunction tokenByIndex(uint256 index) view returns (uint256)
tokenIdNext
viewfunction tokenIdNext() view returns (uint256)
tokenOfOwnerByIndex
viewfunction tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
vault
viewfunction vault() view returns (address)
approve
nonpayablefunction approve(address to, uint256 tokenId)
burn
nonpayablefunction burn(uint256 _tokenId, bytes32 _moduleKey)
executeAdjust
nonpayablefunction executeAdjust(address _account, address _keeper, tuple _order)
executeClose
nonpayablefunction executeClose(address _account, address _keeper, tuple _order)
executeOpen
nonpayablefunction executeOpen(address _account, address _keeper, tuple _order)
initialize
nonpayablefunction initialize(address _vault, uint256 _levTradingFee, uint256 _marginMin, uint256 _leverageMin, uint256 _leverageMax)
lock
nonpayablefunction lock(uint256 _tokenId, bytes32 _moduleKey)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setLeverageCriteria
nonpayablefunction setLeverageCriteria(uint256 _marginMin, uint256 _leverageMin, uint256 _leverageMax)
setLeverageTradingFee
nonpayablefunction setLeverageTradingFee(uint256 _leverageTradingFee)
setVault
nonpayablefunction setVault(address _vault)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
unlock
nonpayablefunction unlock(uint256 _tokenId, bytes32 _moduleKey)
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
Initialized
event Initialized(uint64 version)
LeverageAdjust
event LeverageAdjust(uint256 tokenId, uint256 averagePrice, uint256 adjustPrice, int256 marginDelta, int256 sizeDelta)
LeverageClose
event LeverageClose(uint256 tokenId, uint256 closePrice, (int256 profitLoss, int256 accruedFunding, int256 marginAfterSettlement) positionSummary, uint256 settledMargin, uint256 size)
LeverageOpen
event LeverageOpen(address account, uint256 tokenId, uint256 entryPrice, uint256 margin, uint256 size)
Locked
event Locked(uint256 indexed tokenId, bytes32 indexed moduleKey)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
Unlocked
event Unlocked(uint256 indexed tokenId, bytes32 indexed moduleKey)
UnlockedAllLocks
event UnlockedAllLocks(uint256 tokenId, bytes32 indexed moduleKey)
errors
ERC721EnumerableForbiddenBatchMint
error ERC721EnumerableForbiddenBatchMint()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
ERC721OutOfBoundsIndex
error ERC721OutOfBoundsIndex(address owner, uint256 index)
HighSlippage
error HighSlippage(uint256 supplied, uint256 accepted)
InvalidFee
error InvalidFee(uint256 fee)
InvalidInitialization
error InvalidInitialization()
InvalidLeverageCriteria
error InvalidLeverageCriteria()
LeverageTooHigh
error LeverageTooHigh(uint256 leverageMax, uint256 leverage)
LeverageTooLow
error LeverageTooLow(uint256 leverageMin, uint256 leverage)
MarginTooSmall
error MarginTooSmall(uint256 marginMin, uint256 margin)
ModuleKeyEmpty
error ModuleKeyEmpty()
NotEnoughMarginForFees
error NotEnoughMarginForFees(int256 marginAmount, uint256 feeAmount)
NotInitializing
error NotInitializing()
OnlyAuthorizedModule
error OnlyAuthorizedModule(address msgSender)
OnlyOwner
error OnlyOwner(address msgSender)
PositionCreatesBadDebt
error PositionCreatesBadDebt()
SafeCastOverflowedIntToUint
error SafeCastOverflowedIntToUint(int256 value)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
ValueNotPositive
error ValueNotPositive(string variableName)
ZeroAddress
error ZeroAddress(string variableName)
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615a3380620000e66000396000f3fe608060405234801561001057600080fd5b50600436106102635760003560e01c806370a0823111610156578063bcf64e05116100d3578063e985e9c511610097578063f92ad21911610071578063f92ad219146105ca578063fbfa77cf146105dd578063fe4f325c146105f057600080fd5b8063e985e9c514610541578063f4d151c31461059c578063f6aacfb1146105a557600080fd5b8063bcf64e05146104ce578063bfac6497146104e1578063c87b56dd146104ea578063ca414882146104fd578063e07b877a1461053857600080fd5b806395d89b411161011a57806395d89b411461047a5780639eb3386214610482578063a22cb46514610495578063a4c878c2146104a8578063b88d4fde146104bb57600080fd5b806370a082311461041857806370a9a7501461042b5780637bd351761461043e5780638bbf58b31461045e57806393b0719d1461046757600080fd5b80632f745c59116101e45780634f6ccce7116101a85780634f6ccce7146103c45780635577a97f146103d757806356cbd923146103ea5780636352211e146103f25780636817031b1461040557600080fd5b80632f745c591461036f5780633d23b9ca146103825780633fab0a341461038b57806342842e0e1461039e578063496a36f2146103b157600080fd5b8063095ea7b31161022b578063095ea7b3146102fc57806318160ddd1461030f5780631a8d51d61461033657806323b872dd146103495780632ce333ad1461035c57600080fd5b806301ffc9a71461026857806306dcdd041461029057806306fdde03146102a557806307095c33146102ba578063081812fc146102d1575b600080fd5b61027b610276366004614d1d565b610603565b60405190151581526020015b60405180910390f35b6102a361029e366004614d4f565b61062e565b005b6102ad610d54565b6040516102879190614e08565b6102c360675481565b604051908152602001610287565b6102e46102df366004614e1b565b610df8565b6040516001600160a01b039091168152602001610287565b6102a361030a366004614e34565b610e40565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed02546102c3565b6102a3610344366004614e60565b610e4f565b6102a3610357366004614e82565b610f12565b61027b61036a366004614e60565b610f9d565b6102c361037d366004614e34565b611005565b6102c360005481565b6102a3610399366004614ec3565b61108b565b6102a36103ac366004614e82565b61114f565b6102a36103bf366004614e60565b61116a565b6102c36103d2366004614e1b565b611204565b6102a36103e5366004614e1b565b6112a0565b6102c3611366565b6102e4610400366004614e1b565b61137c565b6102a3610413366004614eef565b611387565b6102c3610426366004614eef565b61147e565b6102a3610439366004614d4f565b6114da565b61045161044c366004614e1b565b611c28565b6040516102879190614f0c565b6102c360645481565b6102a3610475366004614e60565b611f2a565b6102ad611fc4565b6102c3610490366004614e1b565b612003565b6102a36104a3366004614f3b565b612013565b6102a36104b6366004614d4f565b61201e565b6102a36104c9366004615052565b612b11565b6102a36104dc366004614e60565b612b28565b6102c360655481565b6102ad6104f8366004614e1b565b612fc9565b61050561303d565b60405161028791908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b6102c360685481565b61027b61054f366004615101565b6001600160a01b0391821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b6102c360665481565b61027b6105b3366004614e1b565b60009081526032602052604090205460ff16151590565b6102a36105d836600461512f565b6132ba565b6001546102e4906001600160a01b031681565b6102c36105fe366004615173565b61345e565b60006001600160e01b0319821663780e9d6360e01b14806106285750610628826136e1565b92915050565b60015460405163399dd46360e01b81523360048201526001600160a01b039091169063399dd46390602401602060405180830381865afa158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a919061519a565b15156000036106c357604051633b9e98fd60e11b81523360048201526024015b60405180910390fd5b60006106dd6106d860608401604085016151cd565b613731565b905060006106ee60608401846151ea565b8101906106fb9190615238565b600154604051630aa10e9f60e41b81526b6f7261636c654d6f64756c6560a01b60048201529192506000916001600160a01b039091169063aa10e9f090602401602060405180830381865afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c91906152ae565b604051630dfb457160e11b815263ffffffff85166004820152600160248201526001600160a01b039190911690631bf68ae2906044016040805180830381865afa1580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f291906152cb565b509050816040015181111561082b5780826040015160405163437879d160e01b81526004016106ba929190918252602082015260400190565b60015460208301516060840151604051630ce8fe6160e01b8152600481019290925260248201526001600160a01b0390911690630ce8fe619060440160006040518083038186803b15801561087f57600080fd5b505afa158015610893573d6000803e3d6000fd5b50506001548451602086015160405163e0a1ba3760e01b81526004810187905260248101929092526044820152600093506001600160a01b03909116915063e0a1ba3790606401600060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b505050506109158761374f565b6001546040805160808101825285815286516020808301919091528781015182840152825163470cdf4760e01b815292519495506001600160a01b0390931693633658eb109391926060840192869263470cdf479260048082019392918290030181865afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af91906152ef565b9052604080516001600160e01b031960e085901b168152825160048201526020830151602482015290820151604482015260609091015160648201526084810184905260a401600060405180830381600087803b158015610a0f57600080fd5b505af1158015610a23573d6000803e3d6000fd5b5050600154604051630aa10e9f60e41b8152706c69717569646174696f6e4d6f64756c6560781b60048201526001600160a01b03909116925063aa10e9f09150602401602060405180830381865afa158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa791906152ae565b6001600160a01b0316639df411ee826040518263ffffffff1660e01b8152600401610ad491815260200190565b602060405180830381865afa158015610af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b15919061519a565b15610b3357604051632904a7fd60e11b815260040160405180910390fd5b600154604051630aa10e9f60e41b81526b706f696e74734d6f64756c6560a01b60048201526000916001600160a01b03169063aa10e9f090602401602060405180830381865afa158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf91906152ae565b6020850151604051631439d66f60e11b81526001600160a01b038b811660048301526024820192909252919250821690632873acde90604401600060405180830381600087803b158015610c0257600080fd5b505af1158015610c16573d6000803e3d6000fd5b50506001546060870151604051631bf9f06960e11b81526001600160a01b0390921693506337f3e0d29250610c519160040190815260200190565b600060405180830381600087803b158015610c6b57600080fd5b505af1158015610c7f573d6000803e3d6000fd5b5050600154604051636250216960e01b81526001600160a01b038b8116600483015260208b01356024830152909116925063625021699150604401600060405180830381600087803b158015610cd457600080fd5b505af1158015610ce8573d6000803e3d6000fd5b50508551602080880151604080516001600160a01b038f1681529283018890528281018990526060830193909352608082015290517f1e68ee95783e8e3f4c29b83db6e12d1b4cc533c90ff21ddf7be42d628f7e753c93509081900360a0019150a15050505050505050565b6000805160206159de8339815191528054606091908190610d7490615308565b80601f0160208091040260200160405190810160405280929190818152602001828054610da090615308565b8015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b505050505091505090565b6000610e038261377a565b5060008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b0316610628565b610e4b8282336137d2565b5050565b600082610e5c8382615358565b610e6e90670de0b6b3a764000061536b565b610e789190615398565b9050606754811015610eab5760675460405163e3835a2760e01b81526004810191909152602481018290526044016106ba565b606854811115610edc57606854604051633b7b1e4b60e01b81526004810191909152602481018290526044016106ba565b606654831015610f0d57606654604051631462079360e21b81526004810191909152602481018490526044016106ba565b505050565b6001600160a01b038216610f3c57604051633250574960e11b8152600060048201526024016106ba565b6000610f498383336137df565b9050836001600160a01b0316816001600160a01b031614610f97576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016106ba565b50505050565b600082815260326020908152604080832084845260010190915281205460ff168015610ffe575060008381527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260409020546001600160a01b031615155b9392505050565b60007f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed006110318461147e565b83106110625760405163295f44f760e21b81526001600160a01b0385166004820152602481018490526044016106ba565b6001600160a01b0384166000908152602091825260408082208583529092522054905092915050565b60015460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa1580156110d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f891906152ae565b6001600160a01b03161461112157604051630543601560e11b81523360048201526024016106ba565b81811161114157604051634f12301560e01b815260040160405180910390fd5b606692909255606755606855565b610f0d83838360405180602001604052806000815250612b11565b60015460405163399dd46360e01b81523360048201526001600160a01b039091169063399dd46390602401602060405180830381865afa1580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d6919061519a565b15156000036111fa57604051633b9e98fd60e11b81523360048201526024016106ba565b610e4b8282613877565b60007f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0061124f7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed025490565b83106112785760405163295f44f760e21b815260006004820152602481018490526044016106ba565b80600201838154811061128d5761128d6153ac565b9060005260206000200154915050919050565b60015460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa1580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d91906152ae565b6001600160a01b03161461133657604051630543601560e11b81523360048201526024016106ba565b662386f26fc100008111156113615760405163179c637760e11b8152600481018290526024016106ba565b606555565b600061137763ffffffff600061345e565b905090565b60006106288261377a565b60015460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f491906152ae565b6001600160a01b03161461141d57604051630543601560e11b81523360048201526024016106ba565b6001600160a01b03811661145c5760405163eac0d38960e01b81526020600482015260056024820152641d985d5b1d60da1b60448201526064016106ba565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006000805160206159de8339815191526001600160a01b0383166114b9576040516322718ad960e21b8152600060048201526024016106ba565b6001600160a01b039092166000908152600390920160205250604090205490565b60015460405163399dd46360e01b81523360048201526001600160a01b039091169063399dd46390602401602060405180830381865afa158015611522573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611546919061519a565b151560000361156a57604051633b9e98fd60e11b81523360048201526024016106ba565b600061157960608301836151ea565b81019061158691906153c2565b600154815160405163eb02c30160e01b81529293506000926001600160a01b039092169163eb02c301916115c09160040190815260200190565b608060405180830381865afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160191906153fe565b905060006116186106d860608601604087016151cd565b600154604051630aa10e9f60e41b81526b6f7261636c654d6f64756c6560a01b60048201529192506000916001600160a01b039091169063aa10e9f090602401602060405180830381865afa158015611675573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169991906152ae565b604051630dfb457160e11b815263ffffffff84166004820152600160248201526001600160a01b039190911690631bf68ae2906044016040805180830381865afa1580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f91906152cb565b509050836020015181101561174757602084015160405163437879d160e01b81526106ba918391600401918252602082015260400190565b60008061176e60405180606001604052806000815260200160008152602001600081525090565b6117ef86600160009054906101000a90046001600160a01b03166001600160a01b031663470cdf476040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e991906152ef565b866139b1565b9050806040015191508760200135876040015161180c9190615358565b92506000821361184f57604051634f686b7d60e01b815260206004820152600d60248201526c39b2ba3a3632b226b0b933b4b760991b60448201526064016106ba565b8282121561187a57604051630c46115560e31b815260048101839052602481018490526044016106ba565b600154815160408901516001600160a01b03909216916337f3e0d29161189f91615444565b6040518263ffffffff1660e01b81526004016118bd91815260200190565b600060405180830381600087803b1580156118d757600080fd5b505af11580156118eb573d6000803e3d6000fd5b50506001548851602080860151908b01516001600160a01b03909316945063e0a1ba379350909161191c919061546b565b6119259061548b565b89604001516119339061548b565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401600060405180830381600087803b15801561197957600080fd5b505af115801561198d573d6000803e3d6000fd5b505060015489516040516344b0345360e11b81526001600160a01b03909216935063896068a692506119c59160040190815260200190565b600060405180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b5050600154604051630aa10e9f60e41b8152693634b6b4ba27b93232b960b11b60048201526001600160a01b03909116925063aa10e9f09150602401602060405180830381865afa158015611a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7091906152ae565b87516040516335aea3c160e01b81526001600160a01b0392909216916335aea3c191611aa29160040190815260200190565b600060405180830381600087803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b50505050611af387600001516d6c657665726167654d6f64756c6560901b612b28565b600154604051636250216960e01b81526001600160a01b038b8116600483015260208b0135602483015290911690636250216990604401600060405180830381600087803b158015611b4457600080fd5b505af1158015611b58573d6000803e3d6000fd5b50506001546001600160a01b03169150636250216990508b611b7a86866154a7565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611bc057600080fd5b505af1158015611bd4573d6000803e3d6000fd5b505088516040808a015190517fb6521060df9a301df98313d0207e6d4866cc950b1f60d59e2d9265a94cfbb8179450611c149350889186918891906154ba565b60405180910390a150505050505050505050565b611c4c60405180606001604052806000815260200160008152602001600081525090565b60015460405163eb02c30160e01b8152600481018490526000916001600160a01b03169063eb02c30190602401608060405180830381865afa158015611c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cba91906153fe565b90506000600160009054906101000a90046001600160a01b03166001600160a01b031663c55e4a0e6040518163ffffffff1660e01b815260040161010060405180830381865afa158015611d12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3691906154fc565b600154604051630aa10e9f60e41b81526b6f7261636c654d6f64756c6560a01b60048201529192506000916001600160a01b039091169063aa10e9f090602401602060405180830381865afa158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db791906152ae565b6001600160a01b03166398d5fdca6040518163ffffffff1660e01b81526004016040805180830381865afa158015611df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1791906152cb565b5090506000611f1383600160009054906101000a90046001600160a01b03166001600160a01b0316636e3ba80c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9791906152ef565b600160009054906101000a90046001600160a01b03166001600160a01b031663700a116c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0e91906152ef565b613a2f565b9050611f208482846139b1565b9695505050505050565b60015460405163399dd46360e01b81523360048201526001600160a01b039091169063399dd46390602401602060405180830381865afa158015611f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f96919061519a565b1515600003611fba57604051633b9e98fd60e11b81523360048201526024016106ba565b610e4b8282613a4b565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060916000805160206159de83398151915291610d7490615308565b6065546000906106289083613bfe565b610e4b338383613c1d565b60015460405163399dd46360e01b81523360048201526001600160a01b039091169063399dd46390602401602060405180830381865afa158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a919061519a565b15156000036120ae57604051633b9e98fd60e11b81523360048201526024016106ba565b60006120c36106d860608401604085016151cd565b905060006120d460608401846151ea565b8101906120e19190615595565b600154815160405163eb02c30160e01b81529293506000926001600160a01b039092169163eb02c3019161211b9160040190815260200190565b608060405180830381865afa158015612138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215c91906153fe565b600154604051630aa10e9f60e41b81526b6f7261636c654d6f64756c6560a01b60048201529192506000916001600160a01b039091169063aa10e9f090602401602060405180830381865afa1580156121b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121dd91906152ae565b604051630dfb457160e11b815263ffffffff86166004820152600160248201526001600160a01b039190911690631bf68ae2906044016040805180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225391906152cb565b5090506000600160009054906101000a90046001600160a01b03166001600160a01b031663470cdf476040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cf91906152ef565b905060006122de8483856139b1565b604001511361233057604051634f686b7d60e01b815260206004820152601560248201527f6d617267696e4166746572536574746c656d656e74000000000000000000000060448201526064016106ba565b600080856020015113612356578460a0015185602001516123519190615444565b61235c565b84602001515b90506000846020015182612370919061546b565b905060006123908760400151876040015161238b919061546b565b613cce565b905060008088604001511261247f5787606001518611156123d457606088015160405163437879d160e01b81526106ba918891600401918252602082015260400190565b818860400151876123e5919061536b565b604089015189516123f6919061536b565b6124009190615358565b61240a9190615398565b60015460408a81015160808c01519151630ce8fe6160e01b8152600481019190915260248101919091529192506001600160a01b031690630ce8fe619060440160006040518083038186803b15801561246257600080fd5b505afa158015612476573d6000803e3d6000fd5b50505050612573565b87606001518610156124b457606088015160405163437879d160e01b81526106ba918891600401918252602082015260400190565b865160009087906124c59082615444565b8a604001516124d39061548b565b6124dd91906155ef565b6124e7919061561f565b90506124f3818561546b565b88519094509150612504818661546b565b6001549095506001600160a01b03166337f3e0d26125218361548b565b6040518263ffffffff1660e01b815260040161253f91815260200190565b600060405180830381600087803b15801561255957600080fd5b505af115801561256d573d6000803e3d6000fd5b50505050505b600082896040015189606001518861258b9190615444565b61259591906155ef565b61259f919061561f565b88606001516125ae919061546b565b90506125c26125bc85613cce565b84610e4f565b60015460408a01516001600160a01b039091169063e0a1ba37906000136125e957886125ec565b89515b6040808d015190516001600160e01b031960e085901b1681526004810192909252602482018990526044820152606401600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b505060015460408051608081019091528581526001600160a01b039091169250633658eb1091506020810161267e88613cce565b8152602080820188905260409182018690528d5182516001600160e01b031960e087901b168152845160048201529184015160248301529183015160448201526060909201516064830152608482015260a401600060405180830381600087803b1580156126eb57600080fd5b505af11580156126ff573d6000803e3d6000fd5b5050600154604051630aa10e9f60e41b8152706c69717569646174696f6e4d6f64756c6560781b60048201526001600160a01b03909116925063aa10e9f09150602401602060405180830381865afa15801561275f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278391906152ae565b895160405163c631d84b60e01b81526001600160a01b03929092169163c631d84b916127bc918b90600401918252602082015260400190565b602060405180830381865afa1580156127d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fd919061519a565b1561281b57604051632904a7fd60e11b815260040160405180910390fd5b6000896040015113156129265760006128378a6000015161137c565b600154604051630aa10e9f60e41b81526b706f696e74734d6f64756c6560a01b60048201529192506000916001600160a01b039091169063aa10e9f090602401602060405180830381865afa158015612894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b891906152ae565b6040808d01519051631439d66f60e11b81526001600160a01b0385811660048301526024820192909252919250821690632873acde90604401600060405180830381600087803b15801561290b57600080fd5b505af115801561291f573d6000803e3d6000fd5b5050505050505b60808901511561299a5760015460808a0151604051631bf9f06960e11b81526001600160a01b03909216916337f3e0d2916129679160040190815260200190565b600060405180830381600087803b15801561298157600080fd5b505af1158015612995573d6000803e3d6000fd5b505050505b600154604051636250216960e01b81526001600160a01b038e8116600483015260208e0135602483015290911690636250216990604401600060405180830381600087803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b50505050600089602001511215612ab15760008960200151600019612a2491906155ef565b9050600160009054906101000a90046001600160a01b03166001600160a01b031663625021698f836040518363ffffffff1660e01b8152600401612a7d9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a9757600080fd5b505af1158015612aab573d6000803e3d6000fd5b50505050505b88516040808b01518151928352602083018590528282018a9052606083018890526080830152517f4f1f996c41164fc232ed2481ec87439d8213051cf83c3583db9c1b66836272e59181900360a00190a150505050505050505050505050565b612b1c848484610f12565b610f9784848484613cf8565b60015460405163399dd46360e01b81523360048201526001600160a01b039091169063399dd46390602401602060405180830381865afa158015612b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b94919061519a565b1515600003612bb857604051633b9e98fd60e11b81523360048201526024016106ba565b60008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120546001600160a01b0316600154604051630aa10e9f60e41b81526b3232b630bcb2b227b93232b960a11b60048201529192506000916001600160a01b039091169063aa10e9f090602401602060405180830381865afa158015612c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7091906152ae565b600154604051630aa10e9f60e41b8152693634b6b4ba27b93232b960b11b60048201529192506000916001600160a01b039091169063aa10e9f090602401602060405180830381865afa158015612ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cef91906152ae565b6040516301edb60d60e61b81526001600160a01b038581166004830152919250600091841690637b6d834090602401600060405180830381865afa158015612d3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d63919081019061564d565b604051632983081360e11b8152600481018890529091506000906001600160a01b03841690635306102690602401600060405180830381865afa158015612dae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612dd6919081019061564d565b9050600582516006811115612ded57612ded615729565b1480612e0b5750600482516006811115612e0957612e09615729565b145b15612f3857600582516006811115612e2557612e25615729565b03612eb35760008260600151806020019051810190612e44919061573f565b905087816000015103612ead576040516303bb4f6960e01b81526001600160a01b0387811660048301528616906303bb4f6990602401600060405180830381600087803b158015612e9457600080fd5b505af1158015612ea8573d6000803e3d6000fd5b505050505b50612f38565b60008260600151806020019051810190612ecd9190615799565b905087816000015103612f36576040516303bb4f6960e01b81526001600160a01b0387811660048301528616906303bb4f6990602401600060405180830381600087803b158015612f1d57600080fd5b505af1158015612f31573d6000803e3d6000fd5b505050505b505b600081516006811115612f4d57612f4d615729565b14612fad5760405163742cf9b960e11b8152600481018890526001600160a01b0384169063e859f37290602401600060405180830381600087803b158015612f9457600080fd5b505af1158015612fa8573d6000803e3d6000fd5b505050505b612fb78787613e21565b612fc087613e77565b50505050505050565b6060612fd48261377a565b506000612fec60408051602081019091526000815290565b9050600081511161300c5760405180602001604052806000815250610ffe565b8061301684613eb2565b6040516020016130279291906157d5565b6040516020818303038152906040529392505050565b6130686040518060800160405280600081526020016000815260200160008152602001600081525090565b600154604080516362af250760e11b815290516000926001600160a01b03169163c55e4a0e916004808301926101009291908290030181865afa1580156130b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d791906154fc565b600154604051630aa10e9f60e41b81526b6f7261636c654d6f64756c6560a01b60048201529192506000916001600160a01b039091169063aa10e9f090602401602060405180830381865afa158015613134573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315891906152ae565b6001600160a01b03166398d5fdca6040518163ffffffff1660e01b81526004016040805180830381865afa158015613194573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b891906152cb565b5090506132b382600160009054906101000a90046001600160a01b03166001600160a01b0316636e3ba80c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613212573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323691906152ef565b600160009054906101000a90046001600160a01b03166001600160a01b031663700a116c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ad91906152ef565b84613f52565b9250505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156133055750825b905060008267ffffffffffffffff1660011480156133225750303b155b905081158015613330575080155b1561334e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561338257845468ff00000000000000001916680100000000000000001785555b61339d6d6c657665726167654d6f64756c6560901b8b61401a565b6133f76040518060400160405280601e81526020017f466c6174204d6f6e6579204c657665726167656420506f736974696f6e730000815250604051806040016040528060038152602001622622ab60e91b81525061409e565b613400896112a0565b61340b88888861108b565b831561345257845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001611c14565b50505050505050505050565b600154604051630aa10e9f60e41b81526b6f7261636c654d6f64756c6560a01b600482015260009182916001600160a01b039091169063aa10e9f090602401602060405180830381865afa1580156134ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134de91906152ae565b604051630dfb457160e11b815263ffffffff8616600482015284151560248201526001600160a01b039190911690631bf68ae2906044016040805180830381865afa158015613531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355591906152cb565b5090506000600160009054906101000a90046001600160a01b03166001600160a01b031663c55e4a0e6040518163ffffffff1660e01b815260040161010060405180830381865afa1580156135ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d291906154fc565b905060006136ce82600160009054906101000a90046001600160a01b03166001600160a01b0316636e3ba80c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561362d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365191906152ef565b600160009054906101000a90046001600160a01b03166001600160a01b031663700a116c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c891906152ef565b86613f52565b60208101518151919250611f209161546b565b60006001600160e01b031982166380ac58cd60e01b148061371257506001600160e01b03198216635b5e139f60e01b145b8061062857506301ffc9a760e01b6001600160e01b0319831614610628565b600061062861374a67ffffffffffffffff8416426154a7565b6140b0565b60645461375c82826140e1565b60016064600082825461376f9190615358565b909155509092915050565b60008181527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120546001600160a01b03168061062857604051637e27328960e01b8152600481018490526024016106ba565b610f0d83838360016140fb565b60008281526032602052604081205460ff16156138645760405162461bcd60e51b815260206004820152603460248201527f4552433732314c6f636b61626c65456e756d657261626c65557067726164656160448201527f626c653a20746f6b656e206973206c6f636b656400000000000000000000000060648201526084016106ba565b61386f84848461424f565b949350505050565b600082815260326020908152604080832084845260010190915290205460ff161561391e5760405162461bcd60e51b815260206004820152604b60248201527f4552433732314c6f636b61626c65456e756d657261626c65557067726164656160448201527f626c653a20746f6b656e20697320616c7265616479206c6f636b65642062792060648201526a74686973206d6f64756c6560a81b608482015260a4016106ba565b6000828152603260205260408120805490919061393d9060ff16615804565b825460ff9182166101009390930a928302919092021990911617905560008281526032602090815260408083208484526001908101909252808320805460ff191690921790915551829184917f7fa68068a8a33824e35790bf4856ec6fed6da80b048f3e38221680fc9b8b4d1e9190a35050565b6139d560405180606001604052806000815260200160008152602001600081525090565b60006139e1858461435a565b905060006139ef86866143da565b9050604051806060016040528083815260200182815260200182848960200151613a19919061546b565b613a23919061546b565b90529695505050505050565b6000613a3c8484846143fd565b846020015161386f919061546b565b60008281526032602052604090205460ff16613acf5760405162461bcd60e51b815260206004820152603e60248201527f4552433732314c6f636b61626c65456e756d657261626c65557067726164656160448201527f626c653a20746f6b656e20697320616c726561647920756e6c6f636b6564000060648201526084016106ba565b600082815260326020908152604080832084845260010190915290205460ff16613b715760405162461bcd60e51b815260206004820152604760248201527f4552433732314c6f636b61626c65456e756d657261626c65557067726164656160448201527f626c653a20746f6b656e206973206e6f74206c6f636b65642062792074686973606482015266206d6f64756c6560c81b608482015260a4016106ba565b60008281526032602052604081208054909190613b909060ff16615823565b825460ff9182166101009390930a92830291909202199091161790556000828152603260209081526040808320848452600101909152808220805460ff1916905551829184917fb8814802a164b708c68d5cc9456b53e5ffafe54215788fe66b08a21274d02afd9190a35050565b6000670de0b6b3a7640000613c13838561536b565b610ffe9190615398565b6000805160206159de8339815191526001600160a01b038316613c5e57604051630b61174360e31b81526001600160a01b03841660048201526024016106ba565b6001600160a01b038481166000818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b600080821215613cf457604051635467221960e11b8152600481018390526024016106ba565b5090565b6001600160a01b0383163b15610f9757604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290613d3a903390889087908790600401615840565b6020604051808303816000875af1925050508015613d75575060408051601f3d908101601f19168201909252613d7291810190615872565b60015b613dde573d808015613da3576040519150601f19603f3d011682016040523d82523d6000602084013e613da8565b606091505b508051600003613dd657604051633250574960e11b81526001600160a01b03851660048201526024016106ba565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14613e1a57604051633250574960e11b81526001600160a01b03851660048201526024016106ba565b5050505050565b60008281526032602052604090819020805460ff191690555181907f3b1d7425a8fbf513bce2c847f8da8c469327a3587a87c5917a0c5616c95a1b5f90613e6b9085815260200190565b60405180910390a25050565b6000613e8660008360006137df565b90506001600160a01b038116610e4b57604051637e27328960e01b8152600481018390526024016106ba565b60606000613ebf83614469565b600101905060008167ffffffffffffffff811115613edf57613edf614f74565b6040519080825280601f01601f191660200182016040528015613f09576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613f1357509392505050565b613f7d6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000613fa586604001518760600151613f9e89600001518a6080015161454b565b88886145ce565b90506000613fc6828860400151896060015167ffffffffffffffff166145f0565b90506040518060800160405280613fe18960a0015187614620565b8152602001613ff48960a0015184614650565b815260200183815260200161400d838a6020015161468e565b9052979650505050505050565b816140385760405163673791e360e11b815260040160405180910390fd5b6001600160a01b0381166140775760405163eac0d38960e01b81526020600482015260056024820152641d985d5b1d60da1b60448201526064016106ba565b600091909155600180546001600160a01b0319166001600160a01b03909216919091179055565b6140a661469a565b610e4b82826146ea565b600063ffffffff821115613cf4576040516306dfcc6560e41b815260206004820152602481018390526044016106ba565b610e4b82826040518060200160405280600081525061471b565b6000805160206159de833981519152818061411e57506001600160a01b03831615155b1561421e57600061412e8561377a565b90506001600160a01b0384161580159061415a5750836001600160a01b0316816001600160a01b031614155b80156141ab57506001600160a01b0380821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209388168352929052205460ff16155b156141d45760405163a9fbf51f60e01b81526001600160a01b03851660048201526024016106ba565b821561421c5784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061425d858585614732565b90506001600160a01b0381166142f8576142f3847f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed02805460008381527f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0360205260408120829055600182018355919091527fa42f15e5d656f8155fd7419d740a6073999f19cd6e061449ce4a257150545bf20155565b61431b565b846001600160a01b0316816001600160a01b03161461431b5761431b8185614861565b6001600160a01b0385166143375761433284614917565b61386f565b846001600160a01b0316816001600160a01b03161461386f5761386f8585614a12565b8151600090819061436b9084615444565b905060008382866040015161438091906155ef565b61438b90600a6155ef565b614395919061561f565b90506143a2600a8261588f565b156143c75760016143b4600a8361561f565b6143be9190615444565b92505050610628565b6143be600a8261561f565b505092915050565b6000806143eb846060015184614a7f565b604085015190915061386f9082614a8b565b6000806144268560400151866060015161441f8860000151896080015161454b565b87876145ce565b90506000600282876040015161443c919061546b565b614446919061561f565b9050611f20614462876060015167ffffffffffffffff16614aaa565b8290614a8b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106144b2577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106144de576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106144fc57662386f26fc10000830492506010015b6305f5e1008310614514576305f5e100830492506008015b612710831061452857612710830492506004015b6064831061453a576064830492506002015b600a83106106285760010192915050565b600081156145b75761455d8383614ac3565b9050670de0b6b3a763ffff1981128061457d5750670de0b6b3a764000081135b156145b2576145af6145a0614599670de0b6b3a764000061548b565b8390614ad8565b670de0b6b3a764000090614aee565b90505b610628565b82156145c5576145c56158a3565b50600092915050565b60006145e6848667ffffffffffffffff168585614afd565b611f20908761546b565b60008060026145ff868661546b565b614609919061561f565b905061461761446284614aaa565b95945050505050565b6000808360200151836146339190615444565b90508281856040015161464691906155ef565b61386f919061561f565b60008061466a838560400151614a8b90919063ffffffff16565b6146739061548b565b905080600003614683578061386f565b61386f81600161546b565b6000610ffe838361546b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166146e857604051631afcd79f60e31b815260040160405180910390fd5b565b6146f261469a565b6000805160206159de8339815191528061470c8482615907565b5060018101610f978382615907565b6147258383614b1c565b610f0d6000848484613cf8565b60008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120546000805160206159de833981519152906001600160a01b039081169084161561478e5761478e818587614b81565b6001600160a01b038116156147ce576147ab6000866000806140fb565b6001600160a01b0381166000908152600383016020526040902080546000190190555b6001600160a01b038616156147ff576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed00600061488d8461147e565b60008481526001840160205260409020549091508082146148e2576001600160a01b03851660009081526020848152604080832085845282528083205484845281842081905583526001860190915290208190555b50600092835260018201602090815260408085208590556001600160a01b039095168452918252838320908352905290812055565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed02547f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed009060009061496a906001906154a7565b6000848152600384016020526040812054600285018054939450909284908110614996576149966153ac565b90600052602060002001549050808460020183815481106149b9576149b96153ac565b6000918252602080832090910192909255828152600386019091526040808220849055868252812055600284018054806149f5576149f56159c7565b600190038181906000526020600020016000905590555050505050565b7f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed0060006001614a408561147e565b614a4a91906154a7565b6001600160a01b0390941660009081526020838152604080832087845282528083208690559482526001909301909252502055565b6000610ffe8284615444565b6000670de0b6b3a7640000614aa083856155ef565b610ffe919061561f565b600061062862015180614abd84426154a7565b90614be5565b600081614aa0670de0b6b3a7640000856155ef565b6000818313614ae75781610ffe565b5090919050565b6000818312614ae75781610ffe565b6000614617614b0b85614aaa565b614b16878686614bfa565b90614a8b565b6001600160a01b038216614b4657604051633250574960e11b8152600060048201526024016106ba565b6000614b54838360006137df565b90506001600160a01b03811615610f0d576040516339e3563760e11b8152600060048201526024016106ba565b614b8c838383614c43565b610f0d576001600160a01b038316614bba57604051637e27328960e01b8152600481018290526024016106ba565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016106ba565b600081613c13670de0b6b3a76400008561536b565b60008115614c3957600082614c0f85876155ef565b614c19919061561f565b9050614c31614c2a6145998661548b565b8590614aee565b915050610ffe565b61386f8484614a8b565b60006001600160a01b0383161580159061386f5750826001600160a01b0316846001600160a01b03161480614cbc57506001600160a01b0380851660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209387168352929052205460ff165b8061386f57505060009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114614d1a57600080fd5b50565b600060208284031215614d2f57600080fd5b8135610ffe81614d04565b6001600160a01b0381168114614d1a57600080fd5b600080600060608486031215614d6457600080fd5b8335614d6f81614d3a565b92506020840135614d7f81614d3a565b9150604084013567ffffffffffffffff811115614d9b57600080fd5b840160808187031215614dad57600080fd5b809150509250925092565b60005b83811015614dd3578181015183820152602001614dbb565b50506000910152565b60008151808452614df4816020860160208601614db8565b601f01601f19169290920160200192915050565b602081526000610ffe6020830184614ddc565b600060208284031215614e2d57600080fd5b5035919050565b60008060408385031215614e4757600080fd5b8235614e5281614d3a565b946020939093013593505050565b60008060408385031215614e7357600080fd5b50508035926020909101359150565b600080600060608486031215614e9757600080fd5b8335614ea281614d3a565b92506020840135614eb281614d3a565b929592945050506040919091013590565b600080600060608486031215614ed857600080fd5b505081359360208301359350604090920135919050565b600060208284031215614f0157600080fd5b8135610ffe81614d3a565b81518152602080830151908201526040808301519082015260608101610628565b8015158114614d1a57600080fd5b60008060408385031215614f4e57600080fd5b8235614f5981614d3a565b91506020830135614f6981614f2d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715614fad57614fad614f74565b60405290565b6040516080810167ffffffffffffffff81118282101715614fad57614fad614f74565b60405160c0810167ffffffffffffffff81118282101715614fad57614fad614f74565b604051601f8201601f1916810167ffffffffffffffff8111828210171561502257615022614f74565b604052919050565b600067ffffffffffffffff82111561504457615044614f74565b50601f01601f191660200190565b6000806000806080858703121561506857600080fd5b843561507381614d3a565b9350602085013561508381614d3a565b925060408501359150606085013567ffffffffffffffff8111156150a657600080fd5b8501601f810187136150b757600080fd5b80356150ca6150c58261502a565b614ff9565b8181528860208385010111156150df57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561511457600080fd5b823561511f81614d3a565b91506020830135614f6981614d3a565b600080600080600060a0868803121561514757600080fd5b853561515281614d3a565b97602087013597506040870135966060810135965060800135945092505050565b6000806040838503121561518657600080fd5b823563ffffffff81168114614f5957600080fd5b6000602082840312156151ac57600080fd5b8151610ffe81614f2d565b67ffffffffffffffff81168114614d1a57600080fd5b6000602082840312156151df57600080fd5b8135610ffe816151b7565b6000808335601e1984360301811261520157600080fd5b83018035915067ffffffffffffffff82111561521c57600080fd5b60200191503681900382131561523157600080fd5b9250929050565b600060a0828403121561524a57600080fd5b60405160a0810181811067ffffffffffffffff8211171561526d5761526d614f74565b80604052508235815260208301356020820152604083013560408201526060830135606082015260808301356152a281614d3a565b60808201529392505050565b6000602082840312156152c057600080fd5b8151610ffe81614d3a565b600080604083850312156152de57600080fd5b505080516020909101519092909150565b60006020828403121561530157600080fd5b5051919050565b600181811c9082168061531c57607f821691505b60208210810361533c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062857610628615342565b808202811582820484141761062857610628615342565b634e487b7160e01b600052601260045260246000fd5b6000826153a7576153a7615382565b500490565b634e487b7160e01b600052603260045260246000fd5b6000606082840312156153d457600080fd5b6153dc614f8a565b8235815260208301356020820152604083013560408201528091505092915050565b60006080828403121561541057600080fd5b615418614fb3565b825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b818103600083128015838313168383128216171561546457615464615342565b5092915050565b80820182811260008312801582168215821617156143d2576143d2615342565b6000600160ff1b82016154a0576154a0615342565b5060000390565b8181038181111561062857610628615342565b8581526020810185905260e081016154e960408301868051825260208082015190830152604090810151910152565b60a082019390935260c001529392505050565b600081830361010081121561551057600080fd5b615518614fd6565b835181526020840151602082015260408401516040820152606084015161553e816151b7565b80606083015250608084015160808201526060609f198301121561556157600080fd5b615569614f8a565b60a085810151825260c0860151602083015260e090950151604082015293810193909352509092915050565b600060c082840312156155a757600080fd5b6155af614fd6565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201528091505092915050565b80820260008212600160ff1b8414161561560b5761560b615342565b818105831482151761062857610628615342565b60008261562e5761562e615382565b600160ff1b82146000198414161561564857615648615342565b500590565b6000602080838503121561566057600080fd5b825167ffffffffffffffff8082111561567857600080fd5b908401906080828703121561568c57600080fd5b615694614fb3565b8251600781106156a357600080fd5b8152828401518482015260408301516156bb816151b7565b60408201526060830151828111156156d257600080fd5b80840193505086601f8401126156e757600080fd5b825191506156f76150c58361502a565b828152878584860101111561570b57600080fd5b61571a83868301878701614db8565b60608201529695505050505050565b634e487b7160e01b600052602160045260246000fd5b600060c0828403121561575157600080fd5b615759614fd6565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000606082840312156157ab57600080fd5b6157b3614f8a565b8251815260208301516020820152604083015160408201528091505092915050565b600083516157e7818460208801614db8565b8351908301906157fb818360208801614db8565b01949350505050565b600060ff821660ff810361581a5761581a615342565b60010192915050565b600060ff82168061583657615836615342565b6000190192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611f206080830184614ddc565b60006020828403121561588457600080fd5b8151610ffe81614d04565b60008261589e5761589e615382565b500790565b634e487b7160e01b600052600160045260246000fd5b601f821115610f0d57600081815260208120601f850160051c810160208610156158e05750805b601f850160051c820191505b818110156158ff578281556001016158ec565b505050505050565b815167ffffffffffffffff81111561592157615921614f74565b6159358161592f8454615308565b846158b9565b602080601f83116001811461596a57600084156159525750858301515b600019600386901b1c1916600185901b1785556158ff565b600085815260208120601f198616915b828110156159995788860151825594840194600190910190840161597a565b50858210156159b75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603160045260246000fdfe80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300a2646970667358221220e3c7eb162eab309f2fc55434a2af3284064d173695e5ad1735fd7a90476cbdd364736f6c63430008140033