0 txs
30 calls
constructor
constructor()
functions
BATCH_OPEN_OPERATOR
viewfunction BATCH_OPEN_OPERATOR() view returns (bytes32)
calculateAssets
viewfunction calculateAssets(uint256 amount) view returns (uint256)
calculateFee
viewfunction calculateFee(uint256 amount) view returns (uint256)
closeFunctionDisables
viewfunction closeFunctionDisables(address, uint256) view returns (bool)
closeRequestId
viewfunction closeRequestId() view returns (uint256)
convertToAssets
viewfunction convertToAssets(address token, uint256 strategyId, uint256 shares) view returns (uint128)
convertToShares
viewfunction convertToShares(address token, uint256 strategyId, uint256 assets) view returns (uint128)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
feeRate
viewfunction feeRate() view returns (uint256)
feeReceiver
viewfunction feeReceiver() view returns (address)
forwardTo
viewfunction forwardTo() view returns (address)
get30DaysAPR
viewfunction get30DaysAPR(address token, uint256 strategyId) view returns (uint256)
get7DaysAPR
viewfunction get7DaysAPR(address token, uint256 strategyId) view returns (uint256)
getCloseInfo
viewfunction getCloseInfo(address token, uint256 strategyId, address account, uint128 principal) view returns (uint128 assets, uint128 shares, uint128 fee, uint128 _principal)
getForwardTo
viewfunction getForwardTo(address token) view returns (address)
getInfoByAccount
viewfunction getInfoByAccount(address token, uint256 strategyId, address account) view returns (uint256 _totalPrincipal, uint256 _totalShares, uint256 _totalRewards)
getMinimalAmount
viewfunction getMinimalAmount(address token, uint256 strategyId) view returns (uint256)
getOpenInfoByAccount
viewfunction getOpenInfoByAccount(address token, uint256 strategyId, address account) view returns (uint128 _normalShares, uint128 _normalAssets, uint128 _fastPrincipal, uint128 _fastAssets)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStrategyIds
viewfunction getStrategyIds(address token) view returns (uint256[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MAX_RATE_DENOMINATOR
viewfunction MAX_RATE_DENOMINATOR() view returns (uint256)
maxCloseRequestSize
viewfunction maxCloseRequestSize() view returns (uint256)
maxOpenRequestSize
viewfunction maxOpenRequestSize() view returns (uint256)
minimalAmounts
viewfunction minimalAmounts(address) view returns (uint256)
NATIVE_ADDRESS
viewfunction NATIVE_ADDRESS() view returns (address)
openFunctionEnables
viewfunction openFunctionEnables(address, uint256) view returns (bool)
REBASE_ADVANCE_OPERATOR
viewfunction REBASE_ADVANCE_OPERATOR() view returns (bytes32)
REBASE_PRIMARY_OPERATOR
viewfunction REBASE_PRIMARY_OPERATOR() view returns (bytes32)
rebaseRateData
viewfunction rebaseRateData() view returns (uint256, uint256)
rebaseRateLimit
viewfunction rebaseRateLimit() view returns (uint256)
REQUEST_ID_OFFSET
viewfunction REQUEST_ID_OFFSET() view returns (uint256)
STRATEGY_AUTO_ID
viewfunction STRATEGY_AUTO_ID() view returns (uint256)
STRATEGY_FIX_ID
viewfunction STRATEGY_FIX_ID() view returns (uint256)
STRATEGY_MANUAL_START_ID
viewfunction STRATEGY_MANUAL_START_ID() view returns (uint256)
strategyMinimalAmounts
viewfunction strategyMinimalAmounts(address, uint256) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenForwardTo
viewfunction tokenForwardTo(address) view returns (address)
vaultRegistries
viewfunction vaultRegistries(address, uint256) view returns (address)
batchClaim
nonpayablefunction batchClaim(address token, uint256 strategyId, uint256[] closeIds)
batchOpenFor
nonpayablefunction batchOpenFor(address token, uint256 strategyId, address[] accounts, uint128[] amounts)
close
nonpayablefunction close(address token, uint256 strategyId, uint128 normalShares, uint128 fastPrincipal)
closeAll
nonpayablefunction closeAll(address token, uint256 strategyId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(tuple _addresses, uint256 _maxOpenRequestSize, uint256 _maxCloseRequestSize, uint256 _feeRate, address[] _tokens, uint256[] _minAmounts, uint256 _rebaseRateLimit)
initializeVault
payablefunction initializeVault(address token, uint256 strategyId, uint128 assets) payable
open
payablefunction open(address token, uint256 strategyId, uint128 assets) payable
rebase
nonpayablefunction rebase(address token, uint256 strategyId, uint256 dateNo, uint128 amount)
registerVault
nonpayablefunction registerVault(address token, uint256 strategyId, address vault)
removeStrategyId
nonpayablefunction removeStrategyId(address token, uint256 strategyId)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setFeeRate
nonpayablefunction setFeeRate(uint256 _feeRate)
setFeeReceiver
nonpayablefunction setFeeReceiver(address _feeReceiver)
setForwardTo
nonpayablefunction setForwardTo(address _forwardTo)
setFunctionClose
nonpayablefunction setFunctionClose(address token, uint256 strategyId, bool enable)
setFunctionOpen
nonpayablefunction setFunctionOpen(address token, uint256 strategyId, bool enable)
setMaxCloseRequestSize
nonpayablefunction setMaxCloseRequestSize(uint256 _maxCloseRequestSize)
setMaxOpenRequestSize
nonpayablefunction setMaxOpenRequestSize(uint256 _maxOpenRequestSize)
setMinimalAmount
nonpayablefunction setMinimalAmount(address _token, uint256 _amount)
setRebaseRateLimit
nonpayablefunction setRebaseRateLimit(uint256 _rebaseRateLimit)
setStrategyMinimalAmount
nonpayablefunction setStrategyMinimalAmount(address _token, uint256 _strategy, uint256 _amount)
setTokenForwardTo
nonpayablefunction setTokenForwardTo(address _token, address _forwardTo)
transferAdmin
nonpayablefunction transferAdmin(address _newAdmin)
unregisterVault
nonpayablefunction unregisterVault(address token, uint256 strategyId)
events
BatchClaimed
event BatchClaimed(address indexed token, uint256 indexed strategyId, address indexed account, uint256[] closeIds, uint256 totalAmount, uint256 totalFee)
Claimed
event Claimed(address indexed token, uint256 indexed strategyId, address indexed account, uint256 closeId, uint256 amount, uint256 fee)
EthReceived
event EthReceived(address indexed sender, uint256 value)
FastClosed
event FastClosed(address indexed token, uint256 indexed strategyId, address indexed account, uint256 dateNo, uint256 closeId, uint128 assets, uint128 shares, uint128 fee)
FeeRateSet
event FeeRateSet(address indexed sender, uint256 indexed feeRate)
FeeReceiverSet
event FeeReceiverSet(address indexed sender, address indexed feeReceiver)
ForwardToSet
event ForwardToSet(address indexed sender, address indexed forwardTo)
FunctionCloseAutoSet
event FunctionCloseAutoSet(address indexed token, bool enable)
FunctionCloseFixSet
event FunctionCloseFixSet(address indexed token, bool enable)
FunctionCloseManualSet
event FunctionCloseManualSet(address indexed token, uint256 indexed strategyId, bool enable)
FunctionOpenAutoSet
event FunctionOpenAutoSet(address indexed token, bool enable)
FunctionOpenFixSet
event FunctionOpenFixSet(address indexed token, bool enable)
FunctionOpenManualSet
event FunctionOpenManualSet(address indexed token, uint256 indexed strategyId, bool enable)
Initialized
event Initialized(uint64 version)
MaxCloseRequestSizeSet
event MaxCloseRequestSizeSet(address indexed sender, uint256 maxCloseRequestSize)
MaxOpenRequestSizeSet
event MaxOpenRequestSizeSet(address indexed sender, uint256 maxOpenRequestSize)
MinimalAmountSet
event MinimalAmountSet(address indexed sender, address indexed token, uint256 minAmount)
NormalClosed
event NormalClosed(address indexed token, uint256 indexed strategyId, address indexed account, uint256 dateNo, uint256 closeId, uint128 shares, uint128 sharesAmount)
Opened
event Opened(address indexed token, uint256 indexed strategyId, address indexed account, uint256 createDateNo, uint256 dateNo, uint128 assets)
Rebased
event Rebased(address indexed token, address indexed account, uint256 indexed strategy, uint256 dateNo, uint256 amount)
RebaseRateLimitSet
event RebaseRateLimitSet(address indexed sender, uint256 indexed rebaseRateLimit)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
StrategyAdded
event StrategyAdded(address indexed sender, address indexed token, uint256 indexed strategyId)
StrategyMinimalAmountSet
event StrategyMinimalAmountSet(address indexed sender, address indexed token, uint256 indexed strategyId, uint256 minAmount)
StrategyRemoved
event StrategyRemoved(address indexed sender, address indexed token, uint256 indexed strategyId)
TokenForwardToSet
event TokenForwardToSet(address indexed sender, address indexed token, address indexed forwardTo)
VaultRegistered
event VaultRegistered(address indexed sender, address indexed token, uint256 indexed strategy, address vault)
VaultUnregistered
event VaultUnregistered(address indexed sender, address indexed token, uint256 indexed strategy, address vault)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AmountTooSmall
error AmountTooSmall()
CanNotFastClose
error CanNotFastClose()
ExceedMaxValue
error ExceedMaxValue()
FailedInnerCall
error FailedInnerCall()
FailedToExec
error FailedToExec()
FunctionDisabled
error FunctionDisabled()
InvalidInitialization
error InvalidInitialization()
InvalidSender
error InvalidSender()
InvalidStrategyId
error InvalidStrategyId()
MismatchValue
error MismatchValue()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RequestAmountTooLarge
error RequestAmountTooLarge()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
VaultNotFound
error VaultNotFound()
ZeroAddress
error ZeroAddress()
ZeroValue
error ZeroValue()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61533680620000e66000396000f3fe6080604052600436106103d25760003560e01c806377faf29a116101fd578063c4d7ca2711610118578063dbe2c3f8116100ab578063e6aa87401161007a578063e6aa874014610c84578063eb36583b14610ca4578063efdcd97414610cc4578063f2c7977814610ce4578063fbde525b14610d0457600080fd5b8063dbe2c3f814610c0e578063dc837b4614610c24578063e45bf7a614610c44578063e4a6fb1014610c6457600080fd5b8063d547741f116100e7578063d547741f14610b90578063d5728ba714610bb0578063d5bcb61014610bd0578063d707a78914610bf857600080fd5b8063c4d7ca2714610af5578063d283fa4c14610b15578063d403fdc714610b50578063d4b2700114610b7057600080fd5b8063af0fdafc11610190578063b89a06e31161015f578063b89a06e314610a6c578063b9faa87014610a8c578063bdc27af114610aa1578063c2301eec14610ad557600080fd5b8063af0fdafc146109ec578063b3f0067414610a0c578063b3fdd96214610a2c578063b87b5a3a14610a4c57600080fd5b8063978bbdb9116101cc578063978bbdb91461098c57806399a5d747146109a25780639b0d2b58146109c2578063a217fddf146109d757600080fd5b806377faf29a146108f65780637d0337801461092c5780638ec0d0b21461094c57806391d148541461096c57600080fd5b80633c15eb1b116102ed57806356b3f19e116102805780636ebdd0231161024f5780636ebdd023146108255780636f11c2a31461084557806373f190e41461087d57806375829def146108d657600080fd5b806356b3f19e1461078e57806358fe1f4e146107a35780635b5e7ccf146107b6578063633b6f26146107f157600080fd5b806345596e2e116102bc57806345596e2e146106ff5780634c2c8e2b1461071f57806352a846a31461073f578063545b70dc1461076157600080fd5b80633c15eb1b14610619578063410c351b1461066c578063423a2b5e146106a4578063452e6d6e146106c457600080fd5b806320eb672a11610365578063279c626511610334578063279c6265146105995780632f2ff15d146105b957806336568abe146105d957806338a2541b146105f957600080fd5b806320eb672a1461052b57806322cb188e14610541578063248a9ca314610561578063251897541461058157600080fd5b80630ba4fefa116103a15780630ba4fefa146104c057806314876e2e146104e257806318a85c5b146104f55780631ef322ea1461051557600080fd5b806301ffc9a7146104135780630474135d1461044857806304c714381461046d57806308473ece1461049357600080fd5b3661040e5760405134815233907f85177f287940f2f05425a4029951af0e047a7f9c4eaa9a6e6917bcd869f866959060200160405180910390a2005b600080fd5b34801561041f57600080fd5b5061043361042e3660046147c2565b610d24565b60405190151581526020015b60405180910390f35b34801561045457600080fd5b5061045f620f424081565b60405190815260200161043f565b34801561047957600080fd5b5060065460408051918252620f424060208301520161043f565b34801561049f57600080fd5b5061045f6104ae366004614808565b60086020526000908152604090205481565b3480156104cc57600080fd5b506104e06104db36600461498c565b610d5b565b005b6104e06104f0366004614a9e565b610f20565b34801561050157600080fd5b506104e0610510366004614ade565b6111cf565b34801561052157600080fd5b5061045f60035481565b34801561053757600080fd5b5061045f60065481565b34801561054d57600080fd5b506104e061055c366004614b08565b6112e3565b34801561056d57600080fd5b5061045f61057c366004614b08565b61131c565b34801561058d57600080fd5b5061045f6305f5e10081565b3480156105a557600080fd5b5061045f6105b4366004614ade565b61133e565b3480156105c557600080fd5b506104e06105d4366004614b21565b6113c9565b3480156105e557600080fd5b506104e06105f4366004614b21565b6113eb565b34801561060557600080fd5b5061045f610614366004614ade565b61141e565b34801561062557600080fd5b50610639610634366004614b4d565b61146d565b604080516001600160801b039586168152938516602085015291841691830191909152909116606082015260800161043f565b34801561067857600080fd5b5061068c610687366004614b9c565b611b8a565b6040516001600160801b03909116815260200161043f565b3480156106b057600080fd5b506104e06106bf366004614bcf565b611c1f565b3480156106d057600080fd5b506104336106df366004614ade565b600b60209081526000928352604080842090915290825290205460ff1681565b34801561070b57600080fd5b506104e061071a366004614b08565b611e00565b34801561072b57600080fd5b506104e061073a366004614c0c565b611e36565b34801561074b57600080fd5b5061045f6000805160206152a183398151915281565b34801561076d57600080fd5b5061078161077c366004614808565b61208c565b60405161043f9190614d23565b34801561079a57600080fd5b5061045f600a81565b6104e06107b1366004614a9e565b6120b0565b3480156107c257600080fd5b506104336107d1366004614ade565b600c60209081526000928352604080842090915290825290205460ff1681565b3480156107fd57600080fd5b5061045f7fd6f86f3f145deb04cb1dc3193ca5e359535c1504e8784c8c9a429ab1f9e161bf81565b34801561083157600080fd5b506104e0610840366004614d44565b6122de565b34801561085157600080fd5b5061045f610860366004614ade565b600960209081526000928352604080842090915290825290205481565b34801561088957600080fd5b506108be610898366004614ade565b600a6020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b03909116815260200161043f565b3480156108e257600080fd5b506104e06108f1366004614808565b6123c2565b34801561090257600080fd5b506108be610911366004614808565b600d602052600090815260409020546001600160a01b031681565b34801561093857600080fd5b506104e0610947366004614d79565b61240a565b34801561095857600080fd5b506104e0610967366004614da3565b612441565b34801561097857600080fd5b50610433610987366004614b21565b6125f0565b34801561099857600080fd5b5061045f60045481565b3480156109ae57600080fd5b5061045f6109bd366004614b08565b612628565b3480156109ce57600080fd5b5061045f600281565b3480156109e357600080fd5b5061045f600081565b3480156109f857600080fd5b506104e0610a07366004614ade565b612633565b348015610a1857600080fd5b506001546108be906001600160a01b031681565b348015610a3857600080fd5b5061045f610a47366004614b08565b61266a565b348015610a5857600080fd5b506104e0610a67366004614ade565b612675565b348015610a7857600080fd5b5061068c610a87366004614b9c565b612a41565b348015610a9857600080fd5b5061045f600181565b348015610aad57600080fd5b5061045f7f82497c405bd284f6efbbed9c604cbedd7f1630f15563a63dbea8eefd91e2be1d81565b348015610ae157600080fd5b5061045f610af0366004614ade565b612a8e565b348015610b0157600080fd5b506104e0610b10366004614dfa565b612aed565b348015610b2157600080fd5b50610b35610b30366004614e30565b612f50565b6040805193845260208401929092529082015260600161043f565b348015610b5c57600080fd5b506104e0610b6b366004614b08565b6132ec565b348015610b7c57600080fd5b506104e0610b8b366004614808565b613322565b348015610b9c57600080fd5b506104e0610bab366004614b21565b613358565b348015610bbc57600080fd5b506104e0610bcb366004614e30565b613374565b348015610bdc57600080fd5b506108be73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b348015610c0457600080fd5b5061045f60025481565b348015610c1a57600080fd5b5061045f60055481565b348015610c3057600080fd5b506108be610c3f366004614808565b61347f565b348015610c5057600080fd5b506000546108be906001600160a01b031681565b348015610c7057600080fd5b506104e0610c7f366004614b08565b6134d1565b348015610c9057600080fd5b506104e0610c9f366004614ade565b613507565b348015610cb057600080fd5b506104e0610cbf366004614d44565b61353e565b348015610cd057600080fd5b506104e0610cdf366004614808565b6135c0565b348015610cf057600080fd5b50610639610cff366004614e30565b6135f6565b348015610d1057600080fd5b506104e0610d1f366004614b9c565b613a30565b60006001600160e01b03198216637965db0b60e01b1480610d5557506301ffc9a760e01b6001600160e01b03198316145b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610da15750825b905060008267ffffffffffffffff166001148015610dbe5750303b155b905081158015610dcc575080155b15610dea5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e1457845460ff60401b1916600160401b1785555b610e1c613ab6565b610e24613ac0565b610e2d8c613ad0565b8651885114610e4f5760405163631e916b60e01b815260040160405180910390fd5b6305f5e100600555610e608b613b44565b610e698a613b82565b610e7289613bb9565b610e7b86613c15565b60005b8851811015610ecb57610ec3898281518110610e9c57610e9c614e6c565b6020026020010151898381518110610eb657610eb6614e6c565b6020026020010151613c71565b600101610e7e565b508315610f1257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b610f28613ccc565b6001600160a01b038316600090815260076020526040902083908390610f4e9082613d04565b610f6b57604051639931e72960e01b815260040160405180910390fd5b6001600160a01b0385166000908152600b6020908152604080832087845290915290205460ff16610faf576040516317e4829160e31b815260040160405180910390fd5b826001600160801b0316610fc3868661141e565b1115610fe25760405163617ab12d60e11b815260040160405180910390fd5b6001600160a01b038086166000908152600a6020908152604080832088845290915290205416806110265760405163dee790fb60e01b815260040160405180910390fd5b60006110318761347f565b90506001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611097576110756001600160a01b03881633306001600160801b038916613d1c565b6110926001600160a01b038816826001600160801b038816613d83565b6110d3565b846001600160801b031634146110c05760405163631e916b60e01b815260040160405180910390fd5b6110d381866001600160801b0316613da9565b6040516303d94bbf60e31b81523360048201526001600160801b038616602482015260009081906001600160a01b03851690631eca5df89060440160408051808303816000875af115801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190614e82565b60408051838152602081018390526001600160801b038b1681830152905192945090925033918a916001600160a01b038d16917f0267b5ba596625864ff2ea09bacaa5d24b6089a4cbd9e727316aa2d32e8ed3609181900360600190a45050505050506111ca60016000805160206152e183398151915255565b505050565b6111da6000336125f0565b6112055760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b60405180910390fd5b6001600160a01b03821660009081526007602052604090208290829061122b9082613d04565b61124857604051639931e72960e01b815260040160405180910390fd5b6001600160a01b03841661126f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038481166000818152600a6020908152604080832088845282529182902080546001600160a01b03198116909155825194168085529151919387939233927f7d4975d448edddfe8ae9a1a20f394a66ed80f78c8922b99f390b8f6c03c0c3f9928290030190a45050505050565b6112ee6000336125f0565b6113105760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b61131981613b44565b50565b60009081526000805160206152c1833981519152602052604090206001015490565b6001600160a01b038083166000908152600a602090815260408083208584528252808320548151639187c44160e01b81529151939416928392639187c44192600480820193918290030181865afa15801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190614ebf565b949350505050565b6113d28261131c565b6113db81613e54565b6113e58383613e5e565b50505050565b6001600160a01b03811633146114145760405163334bd91960e11b815260040160405180910390fd5b6111ca8282613f0a565b6001600160a01b0382166000908152600960209081526040808320848452909152812054801561144f579050610d55565b5050506001600160a01b031660009081526008602052604090205490565b6001600160a01b038481166000908152600a602090815260408083208784529091528082205490516367a2d93160e01b8152858416600482015291928392839283921690829061150d9083906367a2d931906024015b600060405180830381865afa1580156114e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115089190810190614ed8565b613f86565b905060005b8151811015611b2557604080516080810182526000808252602082018190529181018290526060810191909152836001600160a01b03166366646ba88b85858151811061156157611561614e6c565b60200260200101516040518363ffffffff1660e01b8152600401611586929190614ea6565b608060405180830381865afa1580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c79190614f7d565b5063ffffffff166040808501919091526001600160801b03918216602080860191909152929091168352805162abb0b560e11b815290516001600160a01b03871692630157616a92600480820193918290030181865afa15801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190614ebf565b83838151811061166557611665614e6c565b602002602001015111156116db5780516001600160801b03808b16911611156116aa576116928989614fec565b975061169e8986614fec565b94506000985050611b25565b80516116b69089614fec565b81519098506116c59086614fec565b81519095506116d4908a61500c565b9850611b1c565b836001600160a01b031663924082bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173d9190614ebf565b816040015163ffffffff161115611b1c57600080856001600160a01b03166318443b7e8460000151856020015188888151811061177c5761177c614e6c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160801b03938416600482015292909116602483015260448201526064016040805180830381865afa1580156117d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fc919061502c565b915091508a6001600160801b0316826001600160801b031611156119ea576000866001600160a01b03166323f42e368d88888151811061183e5761183e614e6c565b60200260200101516040518363ffffffff1660e01b81526004016118779291906001600160801b03929092168252602082015260400190565b602060405180830381865afa158015611894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b89190615066565b90506118c4818b614fec565b9950866001600160a01b0316630157616a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119289190614ebf565b86868151811061193a5761193a614e6c565b6020026020010151146119d1576040516303d1689d60e11b81526001600160801b03821660048201528c906001600160a01b038916906307a2d13a90602401602060405180830381865afa158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190615066565b6119c4919061500c565b6119ce908a614fec565b98505b6119db8c8c614fec565b9a5060009b5050505050611b25565b6119f4828c61500c565b9a50856001600160a01b0316630157616a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a589190614ebf565b858581518110611a6a57611a6a614e6c565b602002602001015114611b01576040516303d1689d60e11b81526001600160801b038216600482015282906001600160a01b038816906307a2d13a90602401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190615066565b611af4919061500c565b611afe9089614fec565b97505b611b0b818a614fec565b9850611b17828b614fec565b995050505b50600101611512565b506001600160801b03871615611b4e576040516359892ced60e01b815260040160405180910390fd5b6000611b62876001600160801b0316613f9b565b9050611b6e8186614fec565b9450611b7a818861500c565b9650505050945094509450949050565b6001600160a01b038381166000908152600a602090815260408083208684529091528082205490516303d1689d60e11b8152600481018590529192169081906307a2d13a906024015b602060405180830381865afa158015611bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c149190615066565b9150505b9392505050565b6001600160a01b038416600090815260076020526040902084908490611c459082613d04565b611c6257604051639931e72960e01b815260040160405180910390fd5b6001600160a01b038087166000908152600a602090815260408083208984529091529020541680611ca65760405163dee790fb60e01b815260040160405180910390fd5b6000611cd27fd6f86f3f145deb04cb1dc3193ca5e359535c1504e8784c8c9a429ab1f9e161bf336125f0565b15611cdf57506000611d2f565b611cf76000805160206152a1833981519152336125f0565b15611d0457506001611d2f565b336000805160206152a183398151915260405163e2517d3f60e01b81526004016111fc929190614ea6565b60405163a9f6567360e01b8152336004820152602481018790526001600160801b038616604482015281151560648201526001600160a01b0383169063a9f6567390608401600060405180830381600087803b158015611d8e57600080fd5b505af1158015611da2573d6000803e3d6000fd5b5050604080518981526001600160801b03891660208201528a93503392506001600160a01b038c16917f9ba01bfbd1abdae22ef89e290397b701f17fabada181012fb5175c674dc6f4a2910160405180910390a45050505050505050565b611e0b6000336125f0565b611e2d5760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b61131981613bb9565b7f82497c405bd284f6efbbed9c604cbedd7f1630f15563a63dbea8eefd91e2be1d611e6081613e54565b6001600160a01b038516600090815260076020526040902085908590611e869082613d04565b611ea357604051639931e72960e01b815260040160405180910390fd5b6001600160a01b038088166000908152600a602090815260408083208a84529091529020541680611ee75760405163dee790fb60e01b815260040160405180910390fd5b8451865114611f095760405163631e916b60e01b815260040160405180910390fd5b60005b865181101561208157600080836001600160a01b0316631eca5df88a8581518110611f3957611f39614e6c565b60200260200101518a8681518110611f5357611f53614e6c565b60200260200101516040518363ffffffff1660e01b8152600401611f959291906001600160a01b039290921682526001600160801b0316602082015260400190565b60408051808303816000875af1158015611fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd79190614e82565b91509150888381518110611fed57611fed614e6c565b60200260200101516001600160a01b03168a8c6001600160a01b03167f0267b5ba596625864ff2ea09bacaa5d24b6089a4cbd9e727316aa2d32e8ed36085858d898151811061203e5761203e614e6c565b602002602001015160405161206f9392919092835260208301919091526001600160801b0316604082015260600190565b60405180910390a45050600101611f0c565b505050505050505050565b6001600160a01b0381166000908152600760205260409020606090610d5590613fb9565b6120bb6000336125f0565b6120dd5760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b6001600160a01b0383166000908152600760205260409020839083906121039082613d04565b61212057604051639931e72960e01b815260040160405180910390fd5b6001600160a01b038086166000908152600a602090815260408083208884529091529020541661215286866001613fc6565b600061215d8761347f565b90506001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146121c3576121a16001600160a01b03881633306001600160801b038916613d1c565b6121be6001600160a01b038816826001600160801b038816613d83565b6121ff565b846001600160801b031634146121ec5760405163631e916b60e01b815260040160405180910390fd5b6121ff81866001600160801b0316613da9565b6040516302aa71fb60e51b81526001600160801b038616600482015260009081906001600160a01b0385169063554e3f609060240160408051808303816000875af1158015612252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122769190614e82565b60408051838152602081018390526001600160801b038b1681830152905192945090925030918a916001600160a01b038d16917f0267b5ba596625864ff2ea09bacaa5d24b6089a4cbd9e727316aa2d32e8ed3609181900360600190a4505050505050505050565b6122e96000336125f0565b61230b5760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b6001600160a01b0383166000908152600760205260409020839083906123319082613d04565b61234e57604051639931e72960e01b815260040160405180910390fd5b6001600160a01b0385166000818152600c6020908152604080832088845290915290819020805460ff19168615179055518591907f702533f43228c4d22549dec603d64134e49bbbe5c9ff822facfbaf6790c4f098906123b390871515815260200190565b60405180910390a35050505050565b6123cd6000336125f0565b6123ef5760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b6123fa600082613e5e565b50612406600033613f0a565b5050565b6124156000336125f0565b6124375760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b6124068282614031565b612449613ccc565b6001600160a01b03831660009081526007602052604090208390839061246f9082613d04565b61248c57604051639931e72960e01b815260040160405180910390fd5b6001600160a01b038086166000908152600a6020908152604080832088845290915290205416806124d05760405163dee790fb60e01b815260040160405180910390fd5b600080826001600160a01b031663ddd6346b33886040518363ffffffff1660e01b8152600401612501929190615083565b60408051808303816000875af115801561251f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612543919061502c565b6001600160801b031691506001600160801b0316915080600014612579576001546125799089906001600160a01b0316836140d7565b6125848833846140d7565b336001600160a01b031687896001600160a01b03167f5de660cddb587a3a1cbc51a4440a838b1d5fb73614a4acf85d07a598ff2208488986866040516125cc939291906150a7565b60405180910390a450505050506111ca60016000805160206152e183398151915255565b60009182526000805160206152c1833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610d5582613f9b565b61263e6000336125f0565b6126605760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b612406828261411a565b6000610d5582614199565b61267d613ccc565b6001600160a01b0382166000908152600760205260409020829082906126a39082613d04565b6126c057604051639931e72960e01b815260040160405180910390fd5b6001600160a01b0384166000908152600c6020908152604080832086845290915290205460ff1615612705576040516317e4829160e31b815260040160405180910390fd5b6001600160a01b038085166000908152600a6020908152604080832087845290915290205416806127495760405163dee790fb60e01b815260040160405180910390fd5b600554604051635c3dad1d60e11b815260009182916001600160a01b0385169163b87b5a3a9161277d913391600401614ea6565b610100604051808303816000875af115801561279d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c19190615157565b915091506002861480156127ed5750606081015181516127e19190614fec565b6001600160801b031615155b1561280b57604051635c5cd30b60e11b815260040160405180910390fd5b6000836001600160a01b031663924082bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286f9190614ebf565b83519091506001600160801b03161561291957336001600160a01b031687896001600160a01b03167f224282f8be4992654d94d4c85ac7cb330e5816984a67e566004978248b57145384600554886020015189604001518a600001516128d59190614fec565b6040805194855260208501939093526001600160801b0391821684840152166060830152519081900360800190a46005805490600061291383615184565b91905055505b6060820151825161292a9190614fec565b6001600160801b031615612a24576000612967612962846060015185600001516129549190614fec565b6001600160801b0316613f9b565b6141b9565b9050336001600160a01b0316888a6001600160a01b03167ffce6a69a0d23d783f8e99b9474c89e1fb73305c9deffb4076c31c24e52c04af9856005548689606001518a600001516129b89190614fec565b6129c2919061500c565b8960200151888b604001516129d79190614fec565b6040805195865260208601949094526001600160801b03928316858501529082166060850152166080830152519081900360a00190a460058054906000612a1d83615184565b9190505550505b50505050505061240660016000805160206152e183398151915255565b6001600160a01b038381166000908152600a602090815260408083208684529091528082205490516363737ac960e11b81526004810185905291921690819063c6e6f59290602401611bd3565b6001600160a01b038083166000908152600a602090815260408083208584528252808320548151630b7f0dcd60e11b815291519394169283926316fe1b9a92600480820193918290030181865afa15801561139d573d6000803e3d6000fd5b612af5613ccc565b6001600160a01b038416600090815260076020526040902084908490612b1b9082613d04565b612b3857604051639931e72960e01b815260040160405180910390fd5b6001600160a01b0386166000908152600c6020908152604080832088845290915290205460ff1615612b7d576040516317e4829160e31b815260040160405180910390fd5b600285148015612b9557506001600160801b03831615155b15612bb357604051635c5cd30b60e11b815260040160405180910390fd5b6001600160a01b038087166000908152600a602090815260408083208984529091529020541680612bf75760405163dee790fb60e01b815260040160405180910390fd5b6040516303d1689d60e11b81526001600160801b03861660048201526000906001600160a01b038316906307a2d13a90602401602060405180830381865afa158015612c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6b9190615066565b9050612c778582614fec565b6001600160801b0316612c8a898961141e565b1115612ca95760405163617ab12d60e11b815260040160405180910390fd5b6000826001600160a01b031663924082bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d9190614ebf565b90506001600160801b03871615612e0a57600554604051633c60670760e11b81523360048201526001600160801b038916602482015260448101919091526001600160a01b038416906378c0ce0e90606401600060405180830381600087803b158015612d7957600080fd5b505af1158015612d8d573d6000803e3d6000fd5b50506005546040805185815260208101929092526001600160801b038b81168383015286166060830152513393508b92506001600160a01b038d16917f224282f8be4992654d94d4c85ac7cb330e5816984a67e566004978248b571453919081900360800190a460058054906000612e0483615184565b91905055505b6001600160801b03861615612f3457600554604051633df3800560e01b81523360048201526001600160801b03881660248201526044810191909152600090819081906001600160a01b03871690633df38005906064016060604051808303816000875af1158015612e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea4919061519d565b6005546040805189815260208101929092526001600160801b0380861691830191909152808416606083015282166080820152929550909350915033908c906001600160a01b038f16907ffce6a69a0d23d783f8e99b9474c89e1fb73305c9deffb4076c31c24e52c04af99060a00160405180910390a460058054906000612f2b83615184565b91905055505050505b50505050506113e560016000805160206152e183398151915255565b6001600160a01b038381166000908152600a602090815260408083208684529091528082205490516367a2d93160e01b81528484166004820152919283928392909116908290612faa9083906367a2d931906024016114c3565b905060005b81518110156132e0576000828281518110612fcc57612fcc614e6c565b6020026020010151905061300060408051608081018252600080825260208201819052918101829052606081019190915290565b604051630ccc8d7560e31b81526001600160a01b038616906366646ba89061302e908c908690600401614ea6565b608060405180830381865afa15801561304b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306f9190614f7d565b5063ffffffff166040808501919091526001600160801b03918216602080860191909152929091168352805162abb0b560e11b815290516001600160a01b03881692630157616a92600480820193918290030181865afa1580156130d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fb9190614ebf565b82111561311e578051613117906001600160801b0316896151df565b97506132d6565b80516020820151604051630c221dbf60e11b81526001600160801b039283166004820152911660248201526044810183905260009081906001600160a01b038816906318443b7e906064016040805180830381865afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a9919061502c565b90925090506131c16001600160801b0383168b6151df565b99506131d66001600160801b0382168a6151df565b9850866001600160a01b0316630157616a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323a9190614ebf565b84146132d3576040516303d1689d60e11b81526001600160801b038216600482015282906001600160a01b038916906307a2d13a90602401602060405180830381865afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b39190615066565b6132bd919061500c565b6132d0906001600160801b0316896151df565b97505b50505b5050600101612faf565b50505093509350939050565b6132f76000336125f0565b6133195760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b61131981613c15565b61332d6000336125f0565b61334f5760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b611319816141f1565b6133618261131c565b61336a81613e54565b6113e58383613f0a565b61337f6000336125f0565b6133a15760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b6001600160a01b03831615806133be57506001600160a01b038116155b156133dc5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090206133fe9083613d04565b61340c5761340c8383614263565b6001600160a01b038381166000818152600a6020908152604080832087845282529182902080546001600160a01b03191694861694851790559051928352849233917fb06773017197c19ff2a3ea6326d9db8bcc51f5d10f66070160a63bdd75684b6f91015b60405180910390a4505050565b6001600160a01b038181166000908152600d6020526040812054909116156134c057506001600160a01b039081166000908152600d60205260409020541690565b50506000546001600160a01b031690565b6134dc6000336125f0565b6134fe5760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b61131981613b82565b6135126000336125f0565b6135345760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b6124068282613c71565b6135496000336125f0565b61356b5760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b6001600160a01b0383166000908152600760205260409020839083906135919082613d04565b6135ae57604051639931e72960e01b815260040160405180910390fd5b6135b9858585613fc6565b5050505050565b6135cb6000336125f0565b6135ed5760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b611319816142e2565b6001600160a01b038084166000908152600a60209081526040808320868452825280832054815163924082bb60e01b81529151939485948594859493909216928492849263924082bb9260048082019392918290030181865afa158015613661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136859190614ebf565b6040516367a2d93160e01b81526001600160a01b0389811660048301529192506000916136be91908516906367a2d931906024016114c3565b905060005b8151811015613a235760008282815181106136e0576136e0614e6c565b6020026020010151905061371460408051608081018252600080825260208201819052918101829052606081019190915290565b604051630ccc8d7560e31b81526001600160a01b038716906366646ba890613742908e908690600401614ea6565b608060405180830381865afa15801561375f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137839190614f7d565b5063ffffffff166040808501919091526001600160801b03918216602080860191909152929091168352805162abb0b560e11b815290516001600160a01b03891692630157616a92600480820193918290030181865afa1580156137eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380f9190614ebf565b8211156138385780516138229089614fec565b81519098506138319088614fec565b9650613a19565b600080876001600160a01b03166318443b7e8460000151856020015189898151811061386657613866614e6c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160801b03938416600482015292909116602483015260448201526064016040805180830381865afa1580156138c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e6919061502c565b9150915086836040015163ffffffff16111561398b57613906828b614fec565b6040516303d1689d60e11b81526001600160801b0383166004820152909a506001600160a01b038916906307a2d13a90602401602060405180830381865afa158015613956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397a9190615066565b613984908a614fec565b9850613a16565b613995818d614fec565b6040516303d1689d60e11b81526001600160801b0383166004820152909c506001600160a01b038916906307a2d13a90602401602060405180830381865afa1580156139e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a099190615066565b613a13908c614fec565b9a505b50505b50506001016136c3565b5050505093509350935093565b613a3b6000336125f0565b613a5d5760405163e2517d3f60e01b81526111fc903390600090600401614ea6565b6001600160a01b0383166000818152600960209081526040808320868452825291829020849055905183815284929133917f3367bc1d02009445d03178d39a8dc102c1abb26a664baf4f984f5be40423fc799101613472565b613abe614355565b565b613ac8614355565b613abe61439e565b613add81606001516141f1565b613aea81608001516142e2565b8051613af890600090613e5e565b50613b156000805160206152a18339815191528260200151613e5e565b506124067fd6f86f3f145deb04cb1dc3193ca5e359535c1504e8784c8c9a429ab1f9e161bf8260400151613e5e565b600281905560405181815233907f1529b6dd94db164a1b60c9fe1296d8aeabe75f148712998bd354c0b2af6d5f5d906020015b60405180910390a250565b600381905560405181815233907fdaad5d145076159f479ba7469638b007fb2beb1ba231495a528b8a02240926ac90602001613b77565b620f4240811115613be057604051600162b3477960e01b0319815260040160405180910390fd5b6004819055604051819033907f021ec04e349d47f898250a9525e5ab79abae4d9a0a3f0e6c5a5d61f3a8b8737890600090a350565b620f4240811115613c3c57604051600162b3477960e01b0319815260040160405180910390fd5b6006819055604051819033907f2d0bb2580aab83995b4dc7a9f6a41270574ad875c17e23c534e99d9058d5899990600090a350565b6001600160a01b038216600081815260086020526040908190208390555133907f28dd0953f501fd1cd272f43666b49fceafaf7fd92e7bb07e765c2c92252d493490613cc09085815260200190565b60405180910390a35050565b6000805160206152e1833981519152805460011901613cfe57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60008181526001830160205260408120541515611c18565b6040516001600160a01b0384811660248301528381166044830152606482018390526113e59186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506143a6565b6111ca83846001600160a01b031663a9059cbb8585604051602401613d51929190614ea6565b80471015613dcc5760405163cd78605960e01b81523060048201526024016111fc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613e19576040519150601f19603f3d011682016040523d82523d6000602084013e613e1e565b606091505b50509050806111ca57604051630a12f52160e11b815260040160405180910390fd5b60016000805160206152e183398151915255565b6113198133614409565b60006000805160206152c1833981519152613e7984846125f0565b613ef9576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055613eaf3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610d55565b6000915050610d55565b5092915050565b60006000805160206152c1833981519152613f2584846125f0565b15613ef9576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610d55565b6060613f9482614434614438565b5090919050565b6000620f424060045483613faf91906151f2565b610d559190615209565b60606000611c1883614450565b6001600160a01b0383166000818152600b60209081526040808320868452825291829020805460ff191685151590811790915591519182528492917fa9dbcdc9f7ca04ab1cf3227435d7ec7ee4ed86567deb8159282c811ad8509757910160405180910390a3505050565b6001600160a01b0382166140585760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03811661407f5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038281166000818152600d602052604080822080546001600160a01b03191694861694851790555133917f633305d4c6b0f4b12cb948c28eb3ec559ccf84ddf06a60c855dc1c5706e54f0c91a45050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03841601614106576111ca8282613da9565b6111ca6001600160a01b0384168383613d83565b6001600160a01b038216600090815260076020526040812061413c90836144ac565b90508061415c57604051632141ece760e11b815260040160405180910390fd5b60405182906001600160a01b0385169033907fdd3e131c7baafda30070fc3f53c5153570a3e6552809d20e2b682dd30fa7cc6e90600090a4505050565b6000600454620f42406141ac919061522b565b613faf620f4240846151f2565b60006001600160801b038211156141ed576040516306dfcc6560e41b815260806004820152602481018390526044016111fc565b5090565b6001600160a01b0381166142185760405163d92e233d60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f5475047bc3faecfd968079803844abd1e6a8c8432521044b44773932efcd825a9190a350565b6001600160a01b038216600090815260076020526040812061428590836144b8565b9050806142a557604051632141ece760e11b815260040160405180910390fd5b60405182906001600160a01b0385169033907fc2008aa15e9b0989ec7ae02bc3d8054428c527c989269ffb2a5bff829028a01290600090a4505050565b6001600160a01b0381166143095760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907f49bc8f1c292131e71bfca22660d0716072ff2442b58d72840474dd83a390411c90600090a350565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613abe57604051631afcd79f60e31b815260040160405180910390fd5b613e40614355565b60006143bb6001600160a01b038416836144c4565b905080516000141580156143e05750808060200190518101906143de919061523e565b155b156111ca57604051635274afe760e01b81526001600160a01b03841660048201526024016111fc565b61441382826125f0565b61240657808260405163e2517d3f60e01b81526004016111fc929190614ea6565b1190565b6060613f946020840161444a856144d2565b846144ea565b6060816000018054806020026020016040519081016040528092919081815260200182805480156144a057602002820191906000526020600020905b81548152602001906001019080831161448c575b50505050509050919050565b6000611c188383614568565b6000611c188383614651565b6060611c18838360006146a0565b600081516020026144e38360200190565b0192915050565b604083830310156144fa57505050565b6000614504845190565b905083602081015b848110156145465761452961451f825190565b848663ffffffff16565b1561453e576020919091018051825182528252905b60200161450c565b50845181518652815261455a8582856144ea565b6135b98160200185856144ea565b60008181526001830160205260408120548015613ef957600061458c60018361522b565b85549091506000906145a09060019061522b565b90508082146146055760008660000182815481106145c0576145c0614e6c565b90600052602060002001549050808760000184815481106145e3576145e3614e6c565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806146165761461661525b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d55565b600081815260018301602052604081205461469857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d55565b506000610d55565b6060814710156146c55760405163cd78605960e01b81523060048201526024016111fc565b600080856001600160a01b031684866040516146e19190615271565b60006040518083038185875af1925050503d806000811461471e576040519150601f19603f3d011682016040523d82523d6000602084013e614723565b606091505b509150915061473386838361473d565b9695505050505050565b6060826147525761474d82614799565b611c18565b815115801561476957506001600160a01b0384163b155b1561479257604051639996b31560e01b81526001600160a01b03851660048201526024016111fc565b5080611c18565b8051156147a95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000602082840312156147d457600080fd5b81356001600160e01b031981168114611c1857600080fd5b80356001600160a01b038116811461480357600080fd5b919050565b60006020828403121561481a57600080fd5b611c18826147ec565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561485c5761485c614823565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561488b5761488b614823565b604052919050565b600067ffffffffffffffff8211156148ad576148ad614823565b5060051b60200190565b600082601f8301126148c857600080fd5b813560206148dd6148d883614893565b614862565b8083825260208201915060208460051b8701019350868411156148ff57600080fd5b602086015b8481101561492257614915816147ec565b8352918301918301614904565b509695505050505050565b600082601f83011261493e57600080fd5b8135602061494e6148d883614893565b8083825260208201915060208460051b87010193508684111561497057600080fd5b602086015b848110156149225780358352918301918301614975565b60008060008060008060008789036101608112156149a957600080fd5b60a08112156149b757600080fd5b506149c0614839565b6149c9896147ec565b81526149d760208a016147ec565b60208201526149e860408a016147ec565b60408201526149f960608a016147ec565b6060820152614a0a60808a016147ec565b6080820152965060a0880135955060c0880135945060e0880135935061010088013567ffffffffffffffff80821115614a4257600080fd5b614a4e8b838c016148b7565b94506101208a0135915080821115614a6557600080fd5b50614a728a828b0161492d565b925050610140880135905092959891949750929550565b6001600160801b038116811461131957600080fd5b600080600060608486031215614ab357600080fd5b614abc846147ec565b9250602084013591506040840135614ad381614a89565b809150509250925092565b60008060408385031215614af157600080fd5b614afa836147ec565b946020939093013593505050565b600060208284031215614b1a57600080fd5b5035919050565b60008060408385031215614b3457600080fd5b82359150614b44602084016147ec565b90509250929050565b60008060008060808587031215614b6357600080fd5b614b6c856147ec565b935060208501359250614b81604086016147ec565b91506060850135614b9181614a89565b939692955090935050565b600080600060608486031215614bb157600080fd5b614bba846147ec565b95602085013595506040909401359392505050565b60008060008060808587031215614be557600080fd5b614bee856147ec565b935060208501359250604085013591506060850135614b9181614a89565b60008060008060808587031215614c2257600080fd5b614c2b856147ec565b93506020808601359350604086013567ffffffffffffffff80821115614c5057600080fd5b614c5c89838a016148b7565b94506060880135915080821115614c7257600080fd5b508601601f81018813614c8457600080fd5b8035614c926148d882614893565b81815260059190911b8201830190838101908a831115614cb157600080fd5b928401925b82841015614cd8578335614cc981614a89565b82529284019290840190614cb6565b979a9699509497505050505050565b60008151808452602080850194506020840160005b83811015614d1857815187529582019590820190600101614cfc565b509495945050505050565b602081526000611c186020830184614ce7565b801515811461131957600080fd5b600080600060608486031215614d5957600080fd5b614d62846147ec565b9250602084013591506040840135614ad381614d36565b60008060408385031215614d8c57600080fd5b614d95836147ec565b9150614b44602084016147ec565b600080600060608486031215614db857600080fd5b614dc1846147ec565b925060208401359150604084013567ffffffffffffffff811115614de457600080fd5b614df08682870161492d565b9150509250925092565b60008060008060808587031215614e1057600080fd5b614e19856147ec565b9350602085013592506040850135614b8181614a89565b600080600060608486031215614e4557600080fd5b614e4e846147ec565b925060208401359150614e63604085016147ec565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b60008060408385031215614e9557600080fd5b505080516020909101519092909150565b6001600160a01b03929092168252602082015260400190565b600060208284031215614ed157600080fd5b5051919050565b60006020808385031215614eeb57600080fd5b825167ffffffffffffffff811115614f0257600080fd5b8301601f81018513614f1357600080fd5b8051614f216148d882614893565b81815260059190911b82018301908381019087831115614f4057600080fd5b928401925b82841015614f5e57835182529284019290840190614f45565b979650505050505050565b805163ffffffff8116811461480357600080fd5b60008060008060808587031215614f9357600080fd5b8451614f9e81614a89565b6020860151909450614faf81614a89565b9250614fbd60408601614f69565b9150614fcb60608601614f69565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b6001600160801b03818116838216019080821115613f0357613f03614fd6565b6001600160801b03828116828216039080821115613f0357613f03614fd6565b6000806040838503121561503f57600080fd5b825161504a81614a89565b602084015190925061505b81614a89565b809150509250929050565b60006020828403121561507857600080fd5b8151611c1881614a89565b6001600160a01b03831681526040602082018190526000906113c190830184614ce7565b6060815260006150ba6060830186614ce7565b60208301949094525060400152919050565b6000608082840312156150de57600080fd5b6040516080810181811067ffffffffffffffff8211171561510157615101614823565b8060405250809150825161511481614a89565b8152602083015161512481614a89565b6020820152604083015161513781614a89565b6040820152606083015161514a81614a89565b6060919091015292915050565b600080610100838503121561516b57600080fd5b61517584846150cc565b9150614b4484608085016150cc565b60006001820161519657615196614fd6565b5060010190565b6000806000606084860312156151b257600080fd5b83516151bd81614a89565b60208501519093506151ce81614a89565b6040850151909250614ad381614a89565b80820180821115610d5557610d55614fd6565b8082028115828204841417610d5557610d55614fd6565b60008261522657634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610d5557610d55614fd6565b60006020828403121561525057600080fd5b8151611c1881614d36565b634e487b7160e01b600052603160045260246000fd5b6000825160005b818110156152925760208186018101518583015201615278565b50600092019182525091905056fee42ad9a56a3bd64fce8a1a9a25bc12cb909b41374f13fdc2e98236ba9386dcfe02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122050dca187e0d724ba11f3fca6fb2a2aa7567f172dbbc649759ce3dd3ab8fe384c64736f6c63430008170033