0 txs
0 calls
constructor
constructor((string assetName, string assetSymbol, address underlyingToken, address priceOracle, address[] alphas, (uint256 marketId, bytes32[] substrates)[] marketSubstratesConfigs, address[] fuses, (uint256 marketId, address fuse)[] balanceFuses, (address performanceFeeManager, uint256 performanceFeeInPercentage, address managementFeeManager, uint256 managementFeeInPercentage) feeConfig, address accessManager) initData_)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
authority
viewfunction authority() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
BASE_CURRENCY_DECIMALS
viewfunction BASE_CURRENCY_DECIMALS() view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_SLIPPAGE_IN_PERCENTAGE
viewfunction DEFAULT_SLIPPAGE_IN_PERCENTAGE() view returns (uint256)
getAccessManagerAddress
viewfunction getAccessManagerAddress() view returns (address)
getDependencyBalanceGraph
viewfunction getDependencyBalanceGraph(uint256 marketId_) view returns (uint256[])
getFuses
viewfunction getFuses() view returns (address[])
getInstantWithdrawalFuses
viewfunction getInstantWithdrawalFuses() view returns (address[])
getInstantWithdrawalFusesParams
viewfunction getInstantWithdrawalFusesParams(address fuse_, uint256 index_) view returns (bytes32[])
getManagementFeeData
viewfunction getManagementFeeData() view returns (tuple feeData)
getMarketLimit
viewfunction getMarketLimit(uint256 marketId_) view returns (uint256)
getPerformanceFeeData
viewfunction getPerformanceFeeData() view returns (tuple feeData)
getPriceOracle
viewfunction getPriceOracle() view returns (address)
getRewardsClaimManagerAddress
viewfunction getRewardsClaimManagerAddress() view returns (address)
getUniqueElements
purefunction getUniqueElements(uint256[] inputArray) pure returns (uint256[])
getUnrealizedManagementFee
viewfunction getUnrealizedManagementFee() view returns (uint256)
isBalanceFuseSupported
viewfunction isBalanceFuseSupported(uint256 marketId_, address fuse_) view returns (bool)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
isFuseSupported
viewfunction isFuseSupported(address fuse_) view returns (bool)
isMarketsLimitsActivated
viewfunction isMarketsLimitsActivated() view returns (bool)
isMarketSubstrateGranted
viewfunction isMarketSubstrateGranted(uint256 marketId_, bytes32 substrate_) view returns (bool)
maxDeposit
viewfunction maxDeposit(address) view returns (uint256)
maxMint
viewfunction maxMint(address) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256)
name
viewfunction name() view returns (string)
previewDeposit
viewfunction previewDeposit(uint256 assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 shares) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 assets) view returns (uint256)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalAssetsInMarket
viewfunction totalAssetsInMarket(uint256 marketId_) view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
activateMarketsLimits
nonpayablefunction activateMarketsLimits()
addBalanceFuse
nonpayablefunction addBalanceFuse(uint256 marketId_, address fuse_)
addFuses
nonpayablefunction addFuses(address[] fuses_)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
claimRewards
nonpayablefunction claimRewards(tuple[] calls_)
configureInstantWithdrawalFuses
nonpayablefunction configureInstantWithdrawalFuses(tuple[] fuses_)
configureManagementFee
nonpayablefunction configureManagementFee(address feeManager_, uint256 feeInPercentage_)
configurePerformanceFee
nonpayablefunction configurePerformanceFee(address feeManager_, uint256 feeInPercentage_)
deactivateMarketsLimits
nonpayablefunction deactivateMarketsLimits()
deposit
nonpayablefunction deposit(uint256 assets_, address receiver_) returns (uint256)
depositWithPermit
nonpayablefunction depositWithPermit(uint256 assets_, address owner_, address receiver_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_) returns (uint256)
execute
nonpayablefunction execute(tuple[] calls_)
executeInternal
nonpayablefunction executeInternal(tuple[] calls_)
grandMarketSubstrates
nonpayablefunction grandMarketSubstrates(uint256 marketId_, bytes32[] substrates_)
mint
nonpayablefunction mint(uint256 shares_, address receiver_) returns (uint256)
redeem
nonpayablefunction redeem(uint256 shares_, address receiver_, address owner_) returns (uint256)
removeBalanceFuse
nonpayablefunction removeBalanceFuse(uint256 marketId_, address fuse_)
removeFuses
nonpayablefunction removeFuses(address[] fuses_)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
setPriceOracle
nonpayablefunction setPriceOracle(address priceOracle_)
setRewardsClaimManagerAddress
nonpayablefunction setRewardsClaimManagerAddress(address rewardsClaimManagerAddress_)
setupMarketsLimits
nonpayablefunction setupMarketsLimits(tuple[] marketsLimits_)
transfer
nonpayablefunction transfer(address to_, uint256 value_) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from_, address to_, uint256 value_) returns (bool)
updateCallbackHandler
nonpayablefunction updateCallbackHandler(address handler_, address sender_, bytes4 sig_)
updateDependencyBalanceGraphs
nonpayablefunction updateDependencyBalanceGraphs(uint256[] marketIds_, uint256[][] dependencies_)
withdraw
nonpayablefunction withdraw(uint256 assets_, address receiver_, address owner_) returns (uint256)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
AuthorityUpdated
event AuthorityUpdated(address authority)
BalanceFuseAdded
event BalanceFuseAdded(uint256 marketId, address fuse)
BalanceFuseRemoved
event BalanceFuseRemoved(uint256 marketId, address fuse)
CallbackHandlerUpdated
event CallbackHandlerUpdated(address indexed handler, address indexed sender, bytes4 indexed sig)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
FuseAdded
event FuseAdded(address fuse)
FuseRemoved
event FuseRemoved(address fuse)
InstantWithdrawalFusesConfigured
event InstantWithdrawalFusesConfigured((address fuse, bytes32[] params)[] fuses)
ManagementFeeDataConfigured
event ManagementFeeDataConfigured(address feeManager, uint256 feeInPercentage)
ManagementFeeRealized
event ManagementFeeRealized(uint256 unrealizedFeeInUnderlying, uint256 unrealizedFeeInShares)
MarketBalancesUpdated
event MarketBalancesUpdated(uint256[] marketIds, int256 deltaInUnderlying)
MarketLimitUpdated
event MarketLimitUpdated(uint256 marketId, uint256 newLimit)
MarketsLimitsActivated
event MarketsLimitsActivated()
MarketsLimitsDeactivated
event MarketsLimitsDeactivated()
MarketSubstratesGranted
event MarketSubstratesGranted(uint256 marketId, bytes32[] substrates)
PerformanceFeeDataConfigured
event PerformanceFeeDataConfigured(address feeManager, uint256 feeInPercentage)
PriceOracleChanged
event PriceOracleChanged(address newPriceOracle)
RewardsClaimManagerAddressChanged
event RewardsClaimManagerAddressChanged(address newRewardsClaimManagerAddress)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
BalanceFuseAlreadyExists
error BalanceFuseAlreadyExists(uint256 marketId, address fuse)
BalanceFuseDoesNotExist
error BalanceFuseDoesNotExist(uint256 marketId, address fuse)
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC4626ExceededMaxDeposit
error ERC4626ExceededMaxDeposit(address receiver, uint256 assets, uint256 max)
ERC4626ExceededMaxMint
error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max)
ERC4626ExceededMaxRedeem
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max)
ERC4626ExceededMaxWithdraw
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max)
FailedInnerCall
error FailedInnerCall()
FuseAlreadyExists
error FuseAlreadyExists()
FuseDoesNotExist
error FuseDoesNotExist()
HandlerNotFound
error HandlerNotFound()
InvalidPerformanceFee
error InvalidPerformanceFee(uint256 feeInPercentage)
MarketLimitExceeded
error MarketLimitExceeded(uint256 marketId, uint256 balanceInMarket, uint256 limit)
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NoAssetsToDeposit
error NoAssetsToDeposit()
NoAssetsToWithdraw
error NoAssetsToWithdraw()
NoSharesToMint
error NoSharesToMint()
NoSharesToRedeem
error NoSharesToRedeem()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedIntToUint
error SafeCastOverflowedIntToUint(int256 value)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UnsupportedBaseCurrencyFromOracle
error UnsupportedBaseCurrencyFromOracle()
UnsupportedFuse
error UnsupportedFuse()
UnsupportedPriceOracle
error UnsupportedPriceOracle()
WrongAddress
error WrongAddress()
WrongArrayLength
error WrongArrayLength()
WrongCaller
error WrongCaller(address caller)
WrongMarketId
error WrongMarketId(uint256 marketId)
creation bytecode
0x60e06040523480156200001157600080fd5b5060405162006f6f38038062006f6f833981016040819052620000349162001015565b808061012001518082604001518360000151846020015181600390816200005c91906200122e565b5060046200006b82826200122e565b50505060008062000082836200037460201b60201c565b91509150816200009457601262000096565b805b60ff1660a05250506001600160a01b03166080526001600555620000ba8162000459565b50506000816060015190506103486001600160a01b0316816001600160a01b031663e19f47006040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000110573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001369190620012fa565b6001600160a01b0316146200015e57604051634470348f60e11b815260040160405180910390fd5b806001600160a01b031663311d5c626040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c391906200131f565b60c0526060820151620001d690620004b1565b60005b8260c00151518110156200022b57620002188360c00151828151811062000204576200020462001339565b60200260200101516200051d60201b60201c565b620002238162001365565b9050620001d9565b5060005b8260e0015151811015620002aa57620002978360e0015182815181106200025a576200025a62001339565b6020026020010151600001518460e0015183815181106200027f576200027f62001339565b6020026020010151602001516200055360201b60201c565b620002a28162001365565b90506200022f565b5060005b8260a00151518110156200032957620003168360a001518281518110620002d957620002d962001339565b6020026020010151600001518460a001518381518110620002fe57620002fe62001339565b6020026020010151602001516200058b60201b60201c565b620003218162001365565b9050620002ae565b506101008201518051602090910151620003449190620006f3565b6101008201516040810151606090910151620003619190620007e9565b6200036b620008bb565b50505062001442565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691620003bd9162001381565b600060405180830381855afa9150503d8060008114620003fa576040519150601f19603f3d011682016040523d82523d6000602084013e620003ff565b606091505b50915091508180156200041457506020815110155b156200044c576000818060200190518101906200043291906200131f565b905060ff81116200044a576001969095509350505050565b505b5060009485945092505050565b600680546001600160a01b0319166001600160a01b0383161790556040517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90620004a69083906200139f565b60405180910390a150565b7f13673b0e97c9c64fe16a7d0ebe40964562729b0147b60cb9a5240695a3704a0080546001600160a01b0319166001600160a01b0383161790556040517fb36d86785c7d32b1ad714bb705e00e93eccc37b8cf47549043e61e10908ad25190620004a69083906200139f565b6001600160a01b0381166200054557604051630d23cf4160e11b815260040160405180910390fd5b6200055081620008f6565b50565b6001600160a01b0381166200057b57604051630d23cf4160e11b815260040160405180910390fd5b620005878282620009f0565b5050565b60008281527f78e40624004925a4ef6749756748b1deddc674477302d5b7fe18e5335cde3900602052604081209050600082516001600160401b03811115620005d857620005d862000bdf565b60405190808252806020026020018201604052801562000602578160200160208202803683370190505b50905060005b8351811015620006995760018360000160008684815181106200062f576200062f62001339565b60200260200101518152602001908152602001600020819055508381815181106200065e576200065e62001339565b60200260200101518282815181106200067b576200067b62001339565b6020908102919091010152620006918162001365565b905062000608565b508051620006b1906001840190602084019062000b82565b507f7e2fec298d6e81dab091490fc6ab01dc37a9077786c1d533a01cdc6a8e0f42638484604051620006e5929190620013b3565b60405180910390a150505050565b6001600160a01b0382166200071b57604051630d23cf4160e11b815260040160405180910390fd5b6127108111156200074757604051630a7e67f960e21b8152600481018290526024015b60405180910390fd5b7f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e0528840080546001600160a01b0319166001600160a01b0384161781556200078c8262000aae565b815461ffff91909116600160a01b0261ffff60a01b199091161781556040517fb51da3e1921b4e807ca7fadcf4582ef9ebbabde509ec7cecd222ca1fd4375df590620007dc9085908590620013f6565b60405180910390a1505050565b6001600160a01b0382166200081157604051630d23cf4160e11b815260040160405180910390fd5b6127108111156200083957604051630a7e67f960e21b8152600481018290526024016200073e565b60006200084562000ae3565b80546001600160a01b0319166001600160a01b03851617815590506200086b8262000aae565b815461ffff91909116600160a01b0261ffff60a01b199091161781556040517f72a8ee4b89f4194ad7e618624c280d66eb07d10b8cd84ab0376c16534413aa4090620007dc9085908590620013f6565b6000620008c762000ae3565b9050620008d44262000b07565b815463ffffffff91909116600160b01b0263ffffffff60b01b19909116179055565b6001600160a01b03811660009081527f48932b860eb451ad240d4fe2b46522e5a0ac079d201fe50d4e0be078c75b5400602081905260409091205480156200095157604051630e5b59f760e41b815260040160405180910390fd5b60006200095d62000b3a565b546200096b9060016200140f565b6001600160a01b038516600090815260208590526040902081905590506200099262000b3a565b8054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0386161790556040517fa6900b674d94d1ecd696c66ec6762dcb661729307e0f90a5a4bc0513b1390d7390620006e59086906200139f565b6000620009fc62000b5e565b600084815260209190915260409020546001600160a01b0390811691508216810362000a41578282604051637a05655360e01b81526004016200073e9291906200142b565b8162000a4c62000b5e565b600085815260209190915260409081902080546001600160a01b0319166001600160a01b039390931692909217909155517f275b1b6e4a8352ce8fa292b767afe7d6f3cff10a31042d4f2328a51e3c17d60790620007dc90859085906200142b565b600061ffff82111562000adf576040516306dfcc6560e41b815260106004820152602481018390526044016200073e565b5090565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0090565b600063ffffffff82111562000adf576040516306dfcc6560e41b815260206004820152602481018390526044016200073e565b7fad43e358bd6e59a5a0c80f6bf25fa771408af4d80f621cdc680c8dfbf607ab0090565b7f150144dd6af711bac4392499881ec6649090601bd196a5ece5174c1400b1f70090565b82805482825590600052602060002090810192821562000bc0579160200282015b8281111562000bc057825182559160200191906001019062000ba3565b5062000adf9291505b8082111562000adf576000815560010162000bc9565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171562000c1a5762000c1a62000bdf565b60405290565b60405161014081016001600160401b038111828210171562000c1a5762000c1a62000bdf565b604051601f8201601f191681016001600160401b038111828210171562000c715762000c7162000bdf565b604052919050565b60005b8381101562000c9657818101518382015260200162000c7c565b50506000910152565b600082601f83011262000cb157600080fd5b81516001600160401b0381111562000ccd5762000ccd62000bdf565b62000ce2601f8201601f191660200162000c46565b81815284602083860101111562000cf857600080fd5b62000d0b82602083016020870162000c79565b949350505050565b80516001600160a01b038116811462000d2b57600080fd5b919050565b60006001600160401b0382111562000d4c5762000d4c62000bdf565b5060051b60200190565b600082601f83011262000d6857600080fd5b8151602062000d8162000d7b8362000d30565b62000c46565b82815260059290921b8401810191818101908684111562000da157600080fd5b8286015b8481101562000dc75762000db98162000d13565b835291830191830162000da5565b509695505050505050565b600082601f83011262000de457600080fd5b8151602062000df762000d7b8362000d30565b828152600592831b850182019282820191908785111562000e1757600080fd5b8387015b8581101562000efd5780516001600160401b038082111562000e3d5760008081fd5b908901906040828c03601f190181131562000e585760008081fd5b62000e6262000bf5565b888401518152818401518381111562000e7b5760008081fd5b8085019450508c603f85011262000e9457600092508283fd5b88840151925062000ea962000d7b8462000d30565b83815292861b8401820192898101908e85111562000ec75760008081fd5b948301945b8486101562000ee75785518252948a0194908a019062000ecc565b828b015250875250505092840192840162000e1b565b5090979650505050505050565b600082601f83011262000f1c57600080fd5b8151602062000f2f62000d7b8362000d30565b82815260069290921b8401810191818101908684111562000f4f57600080fd5b8286015b8481101562000dc7576040818903121562000f6e5760008081fd5b62000f7862000bf5565b8151815262000f8985830162000d13565b8186015283529183019160400162000f53565b60006080828403121562000faf57600080fd5b604051608081016001600160401b038111828210171562000fd45762000fd462000bdf565b60405290508062000fe58362000d13565b81526020830151602082015262000fff6040840162000d13565b6040820152606083015160608201525092915050565b6000602082840312156200102857600080fd5b81516001600160401b03808211156200104057600080fd5b908301906101a082860312156200105657600080fd5b6200106062000c20565b8251828111156200107057600080fd5b6200107e8782860162000c9f565b8252506020830151828111156200109457600080fd5b620010a28782860162000c9f565b602083015250620010b66040840162000d13565b6040820152620010c96060840162000d13565b6060820152608083015182811115620010e157600080fd5b620010ef8782860162000d56565b60808301525060a0830151828111156200110857600080fd5b620011168782860162000dd2565b60a08301525060c0830151828111156200112f57600080fd5b6200113d8782860162000d56565b60c08301525060e0830151828111156200115657600080fd5b620011648782860162000f0a565b60e08301525061010091506200117d8683850162000f9c565b8282015262001190610180840162000d13565b61012082015295945050505050565b600181811c90821680620011b457607f821691505b602082108103620011d557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200122957600081815260208120601f850160051c81016020861015620012045750805b601f850160051c820191505b81811015620012255782815560010162001210565b5050505b505050565b81516001600160401b038111156200124a576200124a62000bdf565b62001262816200125b84546200119f565b84620011db565b602080601f8311600181146200129a5760008415620012815750858301515b600019600386901b1c1916600185901b17855562001225565b600085815260208120601f198616915b82811015620012cb57888601518255948401946001909101908401620012aa565b5085821015620012ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200130d57600080fd5b620013188262000d13565b9392505050565b6000602082840312156200133257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200137a576200137a6200134f565b5060010190565b600082516200139581846020870162000c79565b9190910192915050565b6001600160a01b0391909116815260200190565b6000604082018483526020604081850152818551808452606086019150828701935060005b8181101562000efd57845183529383019391830191600101620013d8565b6001600160a01b03929092168252602082015260400190565b808201808211156200142557620014256200134f565b92915050565b9182526001600160a01b0316602082015260400190565b60805160a05160c051615ae8620014876000396000818161040d0152613388015260006124cd015260008181610be20152818161406301526141300152615ae86000f3fe608060405234801561001057600080fd5b50600436106102f65760003560e01c806301e1d1141461030d57806306fdde031461032857806307a2d13a1461033d578063095ea7b31461035057806309f75ba0146103735780630a28a477146103865780630c63abc61461039957806318160ddd146103ac5780631ce56e7e146103b457806323b872dd146103c757806327d9e8b2146103da5780633032403a146103ed57806330b75244146103f5578063311d5c6214610408578063313ce5671461042f57806331ee80ca146104495780633887fd781461048657806338d52e0f146104995780633d357c40146104ae5780633e3a86e0146104c35780634021a874146104d6578063402d267d146104e957806348e37c55146104fc5780634adb4cac1461050f5780634cdad5061461033d578063530e784f146105225780636e553f651461053557806370a08231146105485780637a28052b1461055b5780637a9e5e4b1461056e578063875a2677146105815780638fb360371461058957806390acbe9c146105aa57806394bf804d146105da57806395d89b41146105ed578063978dcd38146105f55780639879f043146105fd578063a81b0b4214610610578063a9059cbb14610618578063adeb0cdb1461062b578063afb835311461063e578063b3d7f6b914610651578063b460af9414610664578063ba08765214610677578063baae8abf1461068a578063bd6bc8f51461069d578063bf7e214f146106b0578063c63d75b6146104e9578063c6e6f592146106b8578063c74b5211146106cb578063cc53727b146106de578063ce96cb77146106f1578063d612626114610704578063d6e900b514610724578063d703ee6c1461072c578063d905777e1461073f578063dd62ed3e14610752578063e3efd95f14610765578063e52e29e714610778578063ef42276b14610780578063ef8b30f7146106b8578063f1a93fdc14610793578063f2d888df1461079b578063f3c2e99e146107ae578063f538e562146107c1578063fca513a8146107c9575b6102fe6107d1565b1561030b5761030b6107e4565b005b61031561092d565b6040519081526020015b60405180910390f35b610330610971565b60405161031f9190614c01565b61031561034b366004614c14565b610a03565b61036361035e366004614c42565b610a16565b604051901515815260200161031f565b61030b610381366004614c42565b610a2e565b610315610394366004614c14565b610a49565b61030b6103a7366004614c6e565b610a56565b600254610315565b61030b6103c2366004614d9a565b610a69565b6103636103d5366004614e6e565b610b19565b61030b6103e8366004614eaf565b610b39565b610315610b4c565b61030b610403366004614f6e565b610b63565b6103157f000000000000000000000000000000000000000000000000000000000000000081565b610437610bbb565b60405160ff909116815260200161031f565b610451610bc5565b6040805182516001600160a01b0316815260208084015161ffff16908201529181015163ffffffff169082015260600161031f565b610315610494366004614c14565b610bd5565b6104a1610be0565b60405161031f9190614faf565b6104b6610c04565b60405161031f9190614fc3565b61030b6104d1366004614f6e565b610c0e565b6103156104e4366004615010565b610c61565b6103156104f7366004615087565b610d25565b61030b61050a366004614c6e565b610d2c565b61030b61051d3660046150a4565b610d3f565b61030b610530366004615087565b610d85565b610315610543366004614c6e565b610f6b565b610315610556366004615087565b610f94565b610315610569366004614c14565b610faf565b61030b61057c366004615087565b610fca565b610363611044565b61059161104e565b6040516001600160e01b0319909116815260200161031f565b6105b2611074565b6040805182516001600160a01b0316815260209283015161ffff16928101929092520161031f565b6103156105e8366004614c6e565b611084565b6103306110f1565b6104a1611100565b61030b61060b3660046150ef565b61110a565b6104a161111e565b610363610626366004614c42565b611128565b610363610639366004615147565b61113d565b61030b61064c366004614c42565b611149565b61031561065f366004614c14565b61115c565b610315610672366004615169565b611169565b610315610685366004615169565b611280565b61030b610698366004614f6e565b6113e1565b6103636106ab366004615087565b61166e565b6104a1611679565b6103156106c6366004614c14565b611688565b61030b6106d9366004614f6e565b611695565b61030b6106ec366004615087565b611857565b6103156106ff366004615087565b61186c565b610717610712366004614c14565b611881565b60405161031f91906151db565b6104b66118ec565b61036361073a366004614c6e565b6118f6565b61031561074d366004615087565b611902565b6103156107603660046151ee565b61190d565b61030b610773366004614f6e565b611938565b61030b6119f0565b61071761078e366004614c42565b611a03565b61030b611a0f565b61030b6107a9366004614f6e565b611a20565b6107176107bc36600461521c565b611a33565b610315600281565b6104a1611bd4565b60006107db611bde565b54600114919050565b60006107ee611c02565b60405160009061080f9033906001600160e01b031984351690602001615250565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690508061085e576040516325fa6f2760e11b815260040160405180910390fd5b60006108ab6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506001600160a01b03861692915050611c26565b905080516000036108ba575050565b6000818060200190518101906108d09190615277565b60405163c74b521160e01b8152909150309063c74b5211906108f69084906004016153c4565b600060405180830381600087803b15801561091057600080fd5b505af1158015610924573d6000803e3d6000fd5b50505050505050565b600080610938611c34565b9050600061094582611dc4565b90508181106109575760009250505090565b61096082611dc4565b61096a9083615457565b9250505090565b6060600380546109809061546a565b80601f01602080910402602001604051908101604052809291908181526020018280546109ac9061546a565b80156109f95780601f106109ce576101008083540402835291602001916109f9565b820191906000526020600020905b8154815290600101906020018083116109dc57829003601f168201915b5050505050905090565b6000610a10826000611e55565b92915050565b600033610a24818585611e8f565b5060019392505050565b610a3b335b600036611e9c565b610a45828261209c565b5050565b6000610a10826001612172565b610a5f33610a33565b610a4582826121a2565b610a7233610a33565b815181518114610a955760405163150072e360e11b815260040160405180910390fd5b60005b81811015610b1357828181518110610ab257610ab26154a4565b6020026020010151610ac26121d3565b6000016000868481518110610ad957610ad96154a4565b602002602001015181526020019081526020016000209080519060200190610b02929190614aab565b50610b0c816154ba565b9050610a98565b50505050565b6000610b2433610a33565b610b2f8484846121f7565b90505b9392505050565b610b4233610a33565b610a45828261221b565b6000610b5e610b59611c34565b611dc4565b905090565b610b6c33610a33565b60005b81811015610bb657610ba6838383818110610b8c57610b8c6154a4565b9050602002016020810190610ba19190615087565b612352565b610baf816154ba565b9050610b6f565b505050565b6000610b5e6124c5565b610bcd614af2565b610b5e6124f1565b6000610a108261253f565b7f000000000000000000000000000000000000000000000000000000000000000090565b6060610b5e612549565b610c1733610a33565b60005b81811015610bb657610c51838383818110610c3757610c376154a4565b9050602002016020810190610c4c9190615087565b6125ad565b610c5a816154ba565b9050610c1a565b6000610c6b612689565b610c7433610a33565b610c7c610be0565b60405163d505accf60e01b81526001600160a01b038981166004830152306024830152604482018b90526064820188905260ff8716608483015260a4820186905260c48201859052919091169063d505accf9060e401600060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b50505050610d0e88876126b3565b9050610d1a6001600555565b979650505050505050565b5060001990565b610d3533610a33565b610a45828261270f565b610d4833610a33565b610bb6838383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127c592505050565b610d8e33610a33565b6000610d986128e8565b90506000829050806001600160a01b031663e19f47006040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0191906154d3565b6001600160a01b0316826001600160a01b031663e19f47006040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6c91906154d3565b6001600160a01b0316141580610f445750806001600160a01b031663311d5c626040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf91906154f0565b826001600160a01b031663311d5c626040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4191906154f0565b14155b15610f6257604051630eb1426f60e41b815260040160405180910390fd5b610bb683612901565b6000610f75612689565b610f7e33610a33565b610f8883836126b3565b9050610a106001600555565b6001600160a01b031660009081526020819052604090205490565b6000610fb9612963565b600092835260205250604090205490565b33610fd3611679565b6001600160a01b0316816001600160a01b03161461100e578060405162d1953b60e31b81526004016110059190614faf565b60405180910390fd5b816001600160a01b03163b60000361103b57816040516361798f2f60e11b81526004016110059190614faf565b610a4582612987565b6000610b5e6129d2565b600654600090600160a81b900460ff166110685750600090565b50638fb3603760e01b90565b61107c614b12565b610b5e6129f3565b600061108e612689565b61109733610a33565b826000036110b8576040516301aeea5160e01b815260040160405180910390fd5b6001600160a01b0382166110df57604051630d23cf4160e11b815260040160405180910390fd5b6110e7612a30565b610f888383612aa8565b6060600480546109809061546a565b6000610b5e611679565b61111333610a33565b610bb6838383612af6565b6000610b5e612b96565b600061113333610a33565b610b328383612ba0565b6000610b328383612bae565b61115233610a33565b610a458282612bd1565b6000610a10826001611e55565b6000611173612689565b61117c33610a33565b8360000361119d57604051635da3252f60e11b815260040160405180910390fd5b6001600160a01b0383166111c457604051630d23cf4160e11b815260040160405180910390fd5b6111cc612a30565b60006111d661092d565b905061125f6111e6600a87615509565b6111ee610be0565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016112199190614faf565b602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a91906154f0565b612c9a565b61126881612f48565b611273858585612f93565b915050610b326001600555565b600061128a612689565b61129333610a33565b836000036112b45760405163f10cc93760e01b815260040160405180910390fd5b6001600160a01b03831615806112d157506001600160a01b038216155b156112ef57604051630d23cf4160e11b815260040160405180910390fd5b6112f7612a30565b600080600061130461092d565b905060005b600a8110156113bd5761131b88610a03565b9350611325610be0565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016113509190614faf565b602060405180830381865afa15801561136d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139191906154f0565b9250838310156113bd576113ad6113a785612feb565b84612c9a565b6113b6816154ba565b9050611309565b506113c781612f48565b6113d287878761300c565b9350505050610b326001600555565b6113e9612689565b6113f233610a33565b806000816001600160401b0381111561140d5761140d614c9e565b604051908082528060200260200182016040528015611436578160200160208202803683370190505b509050600080600061144661092d565b905061145061305b565b60005b8581101561164457611495888883818110611470576114706154a4565b9050602002810190611482919061551c565b611490906020810190615087565b613068565b6114b257604051632356a16d60e01b815260040160405180910390fd5b8787828181106114c4576114c46154a4565b90506020028101906114d6919061551c565b6114e4906020810190615087565b6001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015611521573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154591906154f0565b92506115518584613093565b1515600003611586578285858151811061156d5761156d6154a4565b602090810291909101015283611582816154ba565b9450505b61163388888381811061159b5761159b6154a4565b90506020028101906115ad919061551c565b6115bb90602081019061553c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b9150859050818110611604576116046154a4565b9050602002810190611616919061551c565b611624906020810190615087565b6001600160a01b031690613102565b5061163d816154ba565b9050611453565b5061164d61316f565b61165684613179565b61165f81612f48565b5050505050610a456001600555565b6000610a1082613068565b6006546001600160a01b031690565b6000610a10826000612172565b3033146116b757336040516329507dbf60e01b81526004016110059190614faf565b806000816001600160401b038111156116d2576116d2614c9e565b6040519080825280602002602001820160405280156116fb578160200160208202803683370190505b509050600080600061170b61092d565b905060005b858110156118445761172d888883818110611470576114706154a4565b61174a57604051632356a16d60e01b815260040160405180910390fd5b87878281811061175c5761175c6154a4565b905060200281019061176e919061551c565b61177c906020810190615087565b6001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dd91906154f0565b92506117e98584613093565b151560000361181e5782858581518110611805576118056154a4565b60209081029190910101528361181a816154ba565b9450505b61183388888381811061159b5761159b6154a4565b5061183d816154ba565b9050611710565b5061184e84613179565b61092481612f48565b61186033610a33565b611869816134ba565b50565b6000610a1061187a83610f94565b6000611e55565b606061188b6121d3565b60008381526020918252604090819020805482518185028101850190935280835291929091908301828280156118e057602002820191906000526020600020905b8154815260200190600101908083116118cc575b50505050509050919050565b6060610b5e613511565b6000610b32838361351b565b6000610a1082610f94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611940612689565b61194933610a33565b8060005b818110156119e4576119d384848381811061196a5761196a6154a4565b905060200281019061197c919061551c565b61198a90602081019061553c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150859050818110611604576116046154a4565b506119dd816154ba565b905061194d565b5050610a456001600555565b6119f933610a33565b611a0161354f565b565b6060610b328383613595565b611a1833610a33565b611a01613630565b611a2933610a33565b610a458282613676565b6060600082516001600160401b03811115611a5057611a50614c9e565b604051908082528060200260200182016040528015611a79578160200160208202803683370190505b5090506000805b8451811015611b3057848181518110611a9b57611a9b6154a4565b6020026020010151600014158015611ad45750611ad283868381518110611ac457611ac46154a4565b6020026020010151846138ea565b155b15611b1e57848181518110611aeb57611aeb6154a4565b6020026020010151838381518110611b0557611b056154a4565b602090810291909101015281611b1a816154ba565b9250505b80611b28816154ba565b915050611a80565b506000816001600160401b03811115611b4b57611b4b614c9e565b604051908082528060200260200182016040528015611b74578160200160208202803683370190505b50905060005b82811015611bcb57838181518110611b9457611b946154a4565b6020026020010151828281518110611bae57611bae6154a4565b602090810291909101015280611bc3816154ba565b915050611b7a565b50949350505050565b6000610b5e6128e8565b7f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab660090565b7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e0090565b6060610b328383600061393d565b600080611c3f61111e565b90506001600160a01b03811615611d4857806001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb291906154f0565b611cba6139da565b611cc2610be0565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611ced9190614faf565b602060405180830381865afa158015611d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2e91906154f0565b611d389190615509565b611d429190615509565b91505090565b611d506139da565b611d58610be0565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611d839190614faf565b602060405180830381865afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3891906154f0565b600080611dcf6124f1565b6020810151909150429061ffff161580611df15750604082015163ffffffff16155b80611e065750816040015163ffffffff168111155b15611e15575060009392505050565b611e4d611e3c85846040015163ffffffff1684611e329190615457565b6301e133806139ea565b836020015161ffff166127106139ea565b949350505050565b6000610b32611e6261092d565b611e6d906001615509565b611e796000600a615666565b600254611e869190615509565b85919085613aae565b610bb68383836001613af3565b6000611eab6004828486615675565b611eb49161569f565b9050600080636e553f6560e01b6001600160e01b031984161480611ee857506394bf804d60e01b6001600160e01b03198416145b80611f035750632d182be560e21b6001600160e01b03198416145b80611f1e5750635d043b2960e11b6001600160e01b03198416145b80611f3957506310086a1d60e21b6001600160e01b03198416145b15611fc157611f46611679565b6001600160a01b03166377d973708730866040518463ffffffff1660e01b8152600401611f75939291906156cf565b60408051808303816000875af1158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615711565b9092509050611fda565b611fd4611fcc611679565b873086613bc8565b90925090505b816120945763ffffffff81161561207a576006805460ff60a81b1916600160a81b179055612006611679565b6001600160a01b03166394c7d7ee8787876040518463ffffffff1660e01b815260040161203593929190615746565b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506006805460ff60a81b19169055506120949050565b8560405162d1953b60e31b81526004016110059190614faf565b505050505050565b6001600160a01b0382166120c357604051630d23cf4160e11b815260040160405180910390fd5b6127108111156120e957604051630a7e67f960e21b815260048101829052602401611005565b60006120f3613cbf565b80546001600160a01b0319166001600160a01b038516178155905061211782613ce3565b815461ffff91909116600160a01b0261ffff60a01b199091161781556040517fb51da3e1921b4e807ca7fadcf4582ef9ebbabde509ec7cecd222ca1fd4375df5906121659085908590615786565b60405180910390a1505050565b6000610b3261218282600a615666565b60025461218f9190615509565b61219761092d565b611e86906001615509565b6001600160a01b0381166121c957604051630d23cf4160e11b815260040160405180910390fd5b610a458282613d16565b7f82411e549329f2815579116a6c5e60bff72686c93ab5dba4d06242cfaf96890090565b600033612205858285613dcb565b612210858585613e18565b506001949350505050565b8060005b81811015610b1357838382818110612239576122396154a4565b9050604002016000013560000361227f5783838281811061225c5761225c6154a4565b604080516327d3bccb60e01b815291029290920135600483015250602401611005565b838382818110612291576122916154a4565b905060400201602001356122a3612963565b60008686858181106122b7576122b76154a4565b905060400201600001358152602001908152602001600020819055507f4c6d2c98209c0ce5c8fbbcc11919604fb09cec3c5e57d44b883e0f503a7714fc848483818110612306576123066154a4565b90506040020160000135858584818110612322576123226154a4565b9050604002016020013560405161233a92919061579f565b60405180910390a161234b816154ba565b905061221f565b600061235c613e77565b6001600160a01b038316600090815260208290526040812054919250819003612398576040516323cdec1d60e21b815260040160405180910390fd5b60006123a2613e9b565b60016123ac613e9b565b546123b79190615457565b815481106123c7576123c76154a4565b60009182526020808320909101546001600160a01b039081168084529186905260408084208690559087168352822091909155905080612405613e9b565b612410600185615457565b81548110612420576124206154a4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550612456613e9b565b805480612465576124656157ad565b600082815260209020810160001990810180546001600160a01b03191690550190556040517f78464d629b261dcdc053f071c694250a86fc2a7ad6315364a81c7cd7cd98482e906124b7908690614faf565b60405180910390a150505050565b6000610b5e817f00000000000000000000000000000000000000000000000000000000000000006157c3565b6124f9614af2565b612501613ebf565b6040805160608101825291546001600160a01b0381168352600160a01b810461ffff166020840152600160b01b900463ffffffff1690820152919050565b6000610fb9613ee3565b6060612553613f07565b8054604080516020808402820181019092528281529291908301828280156109f957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612586575050505050905090565b60006125b7613e77565b6001600160a01b03831660009081526020829052604090205490915080156125f257604051630e5b59f760e41b815260040160405180910390fd5b60006125fc613e9b565b54612608906001615509565b6001600160a01b0385166000908152602085905260409020819055905061262d613e9b565b8054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0386161790556040517fa6900b674d94d1ecd696c66ec6762dcb661729307e0f90a5a4bc0513b1390d73906124b7908690614faf565b6002600554036126ac57604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6000826000036126d65760405163182b250f60e01b815260040160405180910390fd5b6001600160a01b0382166126fd57604051630d23cf4160e11b815260040160405180910390fd5b612705612a30565b610b328383613f2b565b6000612719613f79565b600084815260209190915260409020546001600160a01b0390811691508216811461275b57828260405163f278137f60e01b81526004016110059291906157dc565b6000612765613f79565b600085815260209190915260409081902080546001600160a01b0319166001600160a01b039390931692909217909155517f2667629b7f8c1784d92ff6232875e8a84cc468c00daede0da11faf72f320c25b9061216590859085906157dc565b60006127d083613f9d565b9050600082516001600160401b038111156127ed576127ed614c9e565b604051908082528060200260200182016040528015612816578160200160208202803683370190505b50905060005b83518110156128a057600183600001600086848151811061283f5761283f6154a4565b602002602001015181526020019081526020016000208190555083818151811061286b5761286b6154a4565b6020026020010151828281518110612885576128856154a4565b6020908102919091010152612899816154ba565b905061281c565b5080516128b69060018401906020840190614aab565b507f7e2fec298d6e81dab091490fc6ab01dc37a9077786c1d533a01cdc6a8e0f426384846040516124b79291906157f3565b60006128f2613fcd565b546001600160a01b0316919050565b8061290a613fcd565b80546001600160a01b0319166001600160a01b03929092169190911790556040517fb36d86785c7d32b1ad714bb705e00e93eccc37b8cf47549043e61e10908ad25190612958908390614faf565b60405180910390a150565b7fc2733c187287f795e2e6e84d35552a190e774125367241c3e99e955f4babf00090565b600680546001600160a01b0319166001600160a01b0383161790556040517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90612958908390614faf565b60006129dc612963565b600080805260209190915260409020541515919050565b6129fb614b12565b612a03613cbf565b6040805180820190915290546001600160a01b0381168252600160a01b900461ffff166020820152919050565b6000612a3a6124f1565b90506000612a46610b4c565b905080600003612a54575050565b612a5c613ff1565b6000612a6782611688565b9050612a77836000015182614028565b7fbb92eb7521ac4e9e56f7e75ea06a10cbc121c444e5d175fff5e8e0bc9e804937828260405161216592919061579f565b600080612ab483610d25565b905080841115612add5782848260405163284ff66760e01b81526004016110059392919061580c565b6000612ae88561115c565b9050611e4d3385838861405e565b82612aff611c02565b604051600090612b159086908690602001615250565b60408051808303601f1901815291815281516020928301208352908201929092528101600090812080546001600160a01b0319166001600160a01b0394851617905590516001600160e01b031984169285811692908716917ff52261028300639b867ee59a20c5b1fed5722cff7d08b923130deb8da77128a49190a4505050565b60006128f26140d9565b600033610a24818585613e18565b600080612bba84613f9d565b600093845260205250506040902054600114919050565b6001600160a01b038216612bf857604051630d23cf4160e11b815260040160405180910390fd5b612710811115612c1e57604051630a7e67f960e21b815260048101829052602401611005565b6000612c28613ebf565b80546001600160a01b0319166001600160a01b0385161781559050612c4c82613ce3565b815461ffff91909116600160a01b0261ffff60a01b199091161781556040517f72a8ee4b89f4194ad7e618624c280d66eb07d10b8cd84ab0376c16534413aa40906121659085908590615786565b81600003612ca6575050565b6000818310610bb65760008060606000612cbe612549565b9050600081516001600160401b03811115612cdb57612cdb614c9e565b604051908082528060200260200182016040528015612d04578160200160208202803683370190505b509050612d118789615457565b82519096506000905b8715801590612d2857508082105b15612f3357612d50848381518110612d4257612d426154a4565b602002602001015183613595565b94508760001b85600081518110612d6957612d696154a4565b602002602001018181525050612de685604051602401612d8991906151db565b60408051601f198184030181529190526020810180516001600160e01b0316635f0ca36d60e11b1790528551869085908110612dc757612dc76154a4565b60200260200101516001600160a01b031661310290919063ffffffff16565b50612def610be0565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612e1a9190614faf565b602060405180830381865afa158015612e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5b91906154f0565b612e65908b615457565b9750838281518110612e7957612e796154a4565b60200260200101516001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee291906154f0565b9550612eee8387613093565b1515600003612f235785838881518110612f0a57612f0a6154a4565b602090810291909101015286612f1f816154ba565b9750505b612f2c826154ba565b9150612d1a565b612f3c83613179565b50505050505050505050565b6000612f5261092d565b905081811015612f60575050565b6000612f6a6129f3565b90506000612f7b611e3c8585615457565b9050610b138260000151612f8e83611688565b614028565b600080612f9f8361186c565b905080851115612fc857828582604051633fa733bb60e21b81526004016110059392919061580c565b6000612fd386610a49565b9050612fe233868689856140fd565b95945050505050565b6000613002612ffb60028461582d565b60646141b4565b610a109083615509565b60008061301883611902565b90508085111561304157828582604051632e52afbb60e21b81526004016110059392919061580c565b600061304c86610a03565b9050612fe2338686848a6140fd565b6001613065611bde565b55565b6000613072613e77565b6001600160a01b039092166000908152602092909252506040902054151590565b6000805b83518110156130fb578381815181106130b2576130b26154a4565b6020026020010151600003156130fb57828482815181106130d5576130d56154a4565b6020026020010151036130eb57600191506130fb565b6130f4816154ba565b9050613097565b5092915050565b6060600080846001600160a01b03168460405161311f9190615844565b600060405180830381855af49150503d806000811461315a576040519150601f19603f3d011682016040523d82523d6000602084013e61315f565b606091505b5091509150612fe28583836141c0565b6000613065611bde565b6000613198604051806040016040528060008152602001606081525090565b60008060006131a686614213565b805190915060006131b56128e8565b6001600160a01b031663b3596f076131cb610be0565b6040518263ffffffff1660e01b81526004016131e79190614faf565b602060405180830381865afa158015613204573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322891906154f0565b9050816001600160401b0381111561324257613242614c9e565b60405190808252806020026020018201604052801561328757816020015b60408051808201909152600080825260208201528152602001906001900390816132605790505b50602087015260005b82811015613454578381815181106132aa576132aa6154a4565b602002602001015160000315613454576132dc8482815181106132cf576132cf6154a4565b6020026020010151614455565b955061332c306040516024016132f29190614faf565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b1790526001600160a01b03881690613102565b80602001905181019061333f91906154f0565b9750838181518110613353576133536154a4565b602002602001015187602001518281518110613371576133716154a4565b6020908102919091010151526133ce6133be6133ae7f0000000000000000000000000000000000000000000000000000000000000000600a615856565b6133b8908b61582d565b846141b4565b6133c6610bbb565b60ff16614479565b876020015182815181106133e4576133e46154a4565b60200260200101516020018181525050613438848281518110613409576134096154a4565b602002602001015188602001518381518110613427576134276154a4565b6020026020010151602001516144d9565b6134429086615862565b945061344d816154ba565b9050613290565b508315613464576134648461452b565b61346c611c34565b865261347786614591565b7ff1adf92ee604e0c353dfd4481bacd575b0419a97b473374d7822e0c3cdfb295483856040516134a8929190615882565b60405180910390a15050505050505050565b806134c36140d9565b80546001600160a01b0319166001600160a01b03929092169190911790556040517f70d04c70b02f1cb95bda0b7836754f3a59c7be75bf70a61673b9f284ce32688d90612958908390614faf565b6060612553613e9b565b6000816001600160a01b031661352f613f79565b60009485526020526040909320546001600160a01b031690921492915050565b6000613559612963565b600080805260209190915260408082209290925590517f75234aba5a783606f277af07d2159b4878f36e45d9d8e1582d682772855893119190a1565b606061359f6146b2565b6040516000906135b590869086906020016158a4565b60405160208183030381529060405280519060200120815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561362357602002820191906000526020600020905b81548152602001906001019080831161360f575b5050505050905092915050565b600161363a612963565b600080805260209190915260408082209290925590517f844e310696d5462b9717e9a9e705b0119c545a7e1848808c4b67ce45440e70c89190a1565b6000816001600160401b0381111561369057613690614c9e565b6040519080825280602002602001820160405280156136b9578160200160208202803683370190505b50905060006136c66146b2565b90506000805b8481101561387d578585828181106136e6576136e66154a4565b90506020028101906136f8919061551c565b613706906020810190615087565b848281518110613718576137186154a4565b60200260200101906001600160a01b031690816001600160a01b03168152505085858281811061374a5761374a6154a4565b905060200281019061375c919061551c565b61376a906020810190615087565b8160405160200161377c9291906158a4565b60408051601f1981840301815291815281516020928301206000818152928690529082209093506137ac91614b29565b60005b8686838181106137c1576137c16154a4565b90506020028101906137d3919061551c565b6137e19060208101906158c1565b905081101561386c57600083815260208590526040902087878481811061380a5761380a6154a4565b905060200281019061381c919061551c565b61382a9060208101906158c1565b8381811061383a5761383a6154a4565b83546001810185556000948552602094859020919094029290920135919092015550613865816154ba565b90506137af565b50613876816154ba565b90506136cc565b50613886613f07565b613891906000614b29565b8261389a613f07565b81516138a99260200190614b47565b507f709163391491f99340a8c1425dafce5e3c77ec8d2fe631cfc8900c8771b2038485856040516138db92919061590a565b60405180910390a15050505050565b6000805b828110156139325783858281518110613909576139096154a4565b602002602001015103613920576001915050610b32565b8061392a816154ba565b9150506138ee565b506000949350505050565b606081471015613962573060405163cd78605960e01b81526004016110059190614faf565b600080856001600160a01b0316848660405161397e9190615844565b60006040518083038185875af1925050503d80600081146139bb576040519150601f19603f3d011682016040523d82523d6000602084013e6139c0565b606091505b50915091506139d08683836141c0565b9695505050505050565b60006139e46146d6565b54919050565b6000838302816000198587098281108382030391505080600003613a2157838281613a1757613a176159f9565b0492505050610b32565b808411613a415760405163227bc15360e01b815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600080613abc8686866139ea565b9050613ac7836146fa565b8015613ae3575060008480613ade57613ade6159f9565b868809115b15612fe2576139d0600182615509565b6001600160a01b038416613b1d57600060405163e602df0560e01b81526004016110059190614faf565b6001600160a01b038316613b47576000604051634a1406b160e11b81526004016110059190614faf565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610b1357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051613bba91815260200190565b60405180910390a350505050565b600080600080876001600160a01b0316878787604051602401613bed939291906156cf565b60408051601f198184030181529181526020820180516001600160e01b031663b700961360e01b17905251613c229190615844565b600060405180830381855afa9150503d8060008114613c5d576040519150601f19603f3d011682016040523d82523d6000602084013e613c62565b606091505b50915091508115613cb4576040815110613c945780806020019051810190613c8a9190615711565b9094509250613cb4565b6020815110613cb45780806020019051810190613cb19190615a0f565b93505b505094509492505050565b7f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e0528840090565b600061ffff821115613d12576040516306dfcc6560e41b81526010600482015260248101839052604401611005565b5090565b6000613d20613f79565b600084815260209190915260409020546001600160a01b03908116915082168103613d62578282604051637a05655360e01b81526004016110059291906157dc565b81613d6b613f79565b600085815260209190915260409081902080546001600160a01b0319166001600160a01b039390931692909217909155517f275b1b6e4a8352ce8fa292b767afe7d6f3cff10a31042d4f2328a51e3c17d6079061216590859085906157dc565b6000613dd7848461190d565b90506000198114610b135781811015613e0957828183604051637dc7a0d960e11b81526004016110059392919061580c565b610b1384848484036000613af3565b6001600160a01b038316613e42576000604051634b637e8f60e11b81526004016110059190614faf565b6001600160a01b038216613e6c57600060405163ec442f0560e01b81526004016110059190614faf565b610bb6838383614727565b7f48932b860eb451ad240d4fe2b46522e5a0ac079d201fe50d4e0be078c75b540090565b7fad43e358bd6e59a5a0c80f6bf25fa771408af4d80f621cdc680c8dfbf607ab0090565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0090565b7f656f5ca8c676f20b936e991a840e1130bdd664385322f33b6642ec86729ee60090565b7fd243afa3da07e6bdec20fdd573a17f99411aa8a62ae64ca2c426d3a86ae0ac0090565b600080613f3783610d25565b905080841115613f6057828482604051633c8097d960e11b81526004016110059392919061580c565b6000613f6b85611688565b9050611e4d3385878461405e565b7f150144dd6af711bac4392499881ec6649090601bd196a5ece5174c1400b1f70090565b60009081527f78e40624004925a4ef6749756748b1deddc674477302d5b7fe18e5335cde39006020526040902090565b7f13673b0e97c9c64fe16a7d0ebe40964562729b0147b60cb9a5240695a3704a0090565b6000613ffb613ebf565b90506140064261483e565b815463ffffffff91909116600160b01b0263ffffffff60b01b19909116179055565b6001600160a01b03821661405257600060405163ec442f0560e01b81526004016110059190614faf565b610a4560008383614727565b61408a7f000000000000000000000000000000000000000000000000000000000000000085308561486f565b6140948382614028565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051613bba92919061579f565b7f08c469289c3f85d9b575f3ae9be6831541ff770a06ea135aa343a4de7c962d0090565b826001600160a01b0316856001600160a01b03161461412157614121838683613dcb565b61412b83826148d6565b6141567f0000000000000000000000000000000000000000000000000000000000000000858461490c565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db85856040516141a592919061579f565b60405180910390a45050505050565b6000610b328284615a2a565b6060826141d5576141d082614932565b610b32565b81511580156141ec57506001600160a01b0384163b155b1561420c5783604051639996b31560e01b81526004016110059190614faf565b5080610b32565b80516060906000819003614228575090919050565b600061423582600261582d565b6001600160401b0381111561424c5761424c614c9e565b604051908082528060200260200182016040528015614275578160200160208202803683370190505b50905083600060605b82511561444c5761429085600261582d565b6001600160401b038111156142a7576142a7614c9e565b6040519080825280602002602001820160405280156142d0578160200160208202803683370190505b5090506000805b845181101561443a57614303868683815181106142f6576142f66154a4565b6020026020010151613093565b61442a5783865103614329576143268687516002614321919061582d565b61495b565b95505b84818151811061433b5761433b6154a4565b6020026020010151868581518110614355576143556154a4565b6020908102919091010152614369846154ba565b9350600061438f868381518110614382576143826154a4565b6020026020010151611881565b51905080156144285760005b8181101561442657838551036143c0576143bd8586516002614321919061582d565b94505b6143d5878481518110614382576143826154a4565b81815181106143e6576143e66154a4565b6020026020010151858581518110614400576144006154a4565b6020908102919091010152614414846154ba565b935061441f816154ba565b905061439b565b505b505b614433816154ba565b90506142d7565b5061444482611a33565b93505061427e565b610d1a84611a33565b600061445f613f79565b60009283526020525060409020546001600160a01b031690565b60008160120361448a575081610a10565b60128211156144ba5761449e601283615457565b6144a990600a615856565b6144b3908461582d565b9050610a10565b6144b3836144c9846012615457565b6144d490600a615856565b6141b4565b6000806144e4613ee3565b600085815260209190915260409020549050826144ff613ee3565b60008681526020919091526040902055614518816149fe565b614521846149fe565b611e4d9190615a3e565b60008112156145685761454561454082615a5e565b614a2b565b61454d6146d6565b805460009061455d908490615457565b909155506118699050565b61457181614a2b565b6145796146d6565b8054600090614589908490615509565b909155505050565b6145996129d2565b6145a05750565b60208101515160005b81811015610bb65760006146076145be612963565b6000016000866020015185815181106145d9576145d96154a4565b6020026020010151600001518152602001908152602001600020548560000151670de0b6b3a76400006139ea565b90508360200151828151811061461f5761461f6154a4565b6020026020010151602001518110156146a15783602001518281518110614648576146486154a4565b6020026020010151600001518460200151838151811061466a5761466a6154a4565b6020908102919091018101510151604051638f56989d60e01b81526004810192909252602482015260448101829052606401611005565b506146ab816154ba565b90506145a9565b7f45a704819a9dcb1bb5b8cff129eda642cf0e926a9ef104e27aa53f1d1fa47b0090565b7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a7730090565b6000600282600381111561471057614710615a7a565b61471a9190615a90565b60ff166001149050919050565b6001600160a01b0383166147525780600260008282546147479190615509565b909155506147b19050565b6001600160a01b038316600090815260208190526040902054818110156147925783818360405163391434e360e21b81526004016110059392919061580c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166147cd576002805482900390556147ec565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161483191815260200190565b60405180910390a3505050565b600063ffffffff821115613d12576040516306dfcc6560e41b81526020600482015260248101839052604401611005565b6040516001600160a01b038481166024830152838116604483015260648201839052610b139186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614a51565b6001600160a01b038216614900576000604051634b637e8f60e11b81526004016110059190614faf565b610a4582600083614727565b610bb683846001600160a01b031663a9059cbb85856040516024016148a4929190615786565b8051156149425780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60606000826001600160401b0381111561497757614977614c9e565b6040519080825280602002602001820160405280156149a0578160200160208202803683370190505b50905060005b84518110156149f6578481815181106149c1576149c16154a4565b60200260200101518282815181106149db576149db6154a4565b60209081029190910101526149ef816154ba565b90506149a6565b509392505050565b60006001600160ff1b03821115613d125760405163123baf0360e11b815260048101839052602401611005565b600080821215613d1257604051635467221960e11b815260048101839052602401611005565b6000614a666001600160a01b03841683611c26565b90508051600014158015614a8b575080806020019051810190614a899190615a0f565b155b15610bb65782604051635274afe760e01b81526004016110059190614faf565b828054828255906000526020600020908101928215614ae6579160200282015b82811115614ae6578251825591602001919060010190614acb565b50613d12929150614b9c565b604080516060810182526000808252602082018190529181019190915290565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906118699190614b9c565b828054828255906000526020600020908101928215614ae6579160200282015b82811115614ae657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614b67565b5b80821115613d125760008155600101614b9d565b60005b83811015614bcc578181015183820152602001614bb4565b50506000910152565b60008151808452614bed816020860160208601614bb1565b601f01601f19169290920160200192915050565b602081526000610b326020830184614bd5565b600060208284031215614c2657600080fd5b5035919050565b6001600160a01b038116811461186957600080fd5b60008060408385031215614c5557600080fd5b8235614c6081614c2d565b946020939093013593505050565b60008060408385031215614c8157600080fd5b823591506020830135614c9381614c2d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715614cd657614cd6614c9e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614d0457614d04614c9e565b604052919050565b60006001600160401b03821115614d2557614d25614c9e565b5060051b60200190565b600082601f830112614d4057600080fd5b81356020614d55614d5083614d0c565b614cdc565b82815260059290921b84018101918181019086841115614d7457600080fd5b8286015b84811015614d8f5780358352918301918301614d78565b509695505050505050565b60008060408385031215614dad57600080fd5b82356001600160401b0380821115614dc457600080fd5b614dd086838701614d2f565b9350602091508185013581811115614de757600080fd5b8501601f81018713614df857600080fd5b8035614e06614d5082614d0c565b81815260059190911b82018401908481019089831115614e2557600080fd5b8584015b83811015614e5d57803586811115614e415760008081fd5b614e4f8c8983890101614d2f565b845250918601918601614e29565b508096505050505050509250929050565b600080600060608486031215614e8357600080fd5b8335614e8e81614c2d565b92506020840135614e9e81614c2d565b929592945050506040919091013590565b60008060208385031215614ec257600080fd5b82356001600160401b0380821115614ed957600080fd5b818501915085601f830112614eed57600080fd5b813581811115614efc57600080fd5b8660208260061b8501011115614f1157600080fd5b60209290920196919550909350505050565b60008083601f840112614f3557600080fd5b5081356001600160401b03811115614f4c57600080fd5b6020830191508360208260051b8501011115614f6757600080fd5b9250929050565b60008060208385031215614f8157600080fd5b82356001600160401b03811115614f9757600080fd5b614fa385828601614f23565b90969095509350505050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156150045783516001600160a01b031683529284019291840191600101614fdf565b50909695505050505050565b600080600080600080600060e0888a03121561502b57600080fd5b87359650602088013561503d81614c2d565b9550604088013561504d81614c2d565b945060608801359350608088013560ff8116811461506a57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60006020828403121561509957600080fd5b8135610b3281614c2d565b6000806000604084860312156150b957600080fd5b8335925060208401356001600160401b038111156150d657600080fd5b6150e286828701614f23565b9497909650939450505050565b60008060006060848603121561510457600080fd5b833561510f81614c2d565b9250602084013561511f81614c2d565b915060408401356001600160e01b03198116811461513c57600080fd5b809150509250925092565b6000806040838503121561515a57600080fd5b50508035926020909101359150565b60008060006060848603121561517e57600080fd5b83359250602084013561519081614c2d565b9150604084013561513c81614c2d565b600081518084526020808501945080840160005b838110156151d0578151875295820195908201906001016151b4565b509495945050505050565b602081526000610b3260208301846151a0565b6000806040838503121561520157600080fd5b823561520c81614c2d565b91506020830135614c9381614c2d565b60006020828403121561522e57600080fd5b81356001600160401b0381111561524457600080fd5b611e4d84828501614d2f565b60609290921b6001600160601b03191682526001600160e01b031916601482015260180190565b6000602080838503121561528a57600080fd5b82516001600160401b03808211156152a157600080fd5b818501915085601f8301126152b557600080fd5b81516152c3614d5082614d0c565b81815260059190911b830184019084810190888311156152e257600080fd5b8585015b838110156153b7578051858111156152fe5760008081fd5b86016040601f19828d0381018213156153175760008081fd5b61531f614cb4565b8a84015161532c81614c2d565b815283830151898111156153405760008081fd5b8085019450508d603f8501126153565760008081fd5b8a8401518981111561536a5761536a614c9e565b61537a8c84601f84011601614cdc565b92508083528e848287010111156153915760008081fd5b6153a0818d8501868801614bb1565b50808b0191909152855250509186019186016152e6565b5098975050505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561543357888303603f19018552815180516001600160a01b0316845287015187840187905261542087850182614bd5565b95880195935050908601906001016153eb565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a1057610a10615441565b600181811c9082168061547e57607f821691505b60208210810361549e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016154cc576154cc615441565b5060010190565b6000602082840312156154e557600080fd5b8151610b3281614c2d565b60006020828403121561550257600080fd5b5051919050565b80820180821115610a1057610a10615441565b60008235603e1983360301811261553257600080fd5b9190910192915050565b6000808335601e1984360301811261555357600080fd5b8301803591506001600160401b0382111561556d57600080fd5b602001915036819003821315614f6757600080fd5b600181815b808511156155bd5781600019048211156155a3576155a3615441565b808516156155b057918102915b93841c9390800290615587565b509250929050565b6000826155d457506001610a10565b816155e157506000610a10565b81600181146155f757600281146156015761561d565b6001915050610a10565b60ff84111561561257615612615441565b50506001821b610a10565b5060208310610133831016604e8410600b8410161715615640575081810a610a10565b61564a8383615582565b806000190482111561565e5761565e615441565b029392505050565b6000610b3260ff8416836155c5565b6000808585111561568557600080fd5b8386111561569257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156156c75780818660040360031b1b83161692505b505092915050565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b8051801515811461570c57600080fd5b919050565b6000806040838503121561572457600080fd5b61572d836156fc565b9150602083015163ffffffff81168114614c9357600080fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160a01b03929092168252602082015260400190565b918252602082015260400190565b634e487b7160e01b600052603160045260246000fd5b60ff8181168382160190811115610a1057610a10615441565b9182526001600160a01b0316602082015260400190565b828152604060208201526000610b2f60408301846151a0565b6001600160a01b039390931683526020830191909152604082015260600190565b8082028115828204841417610a1057610a10615441565b60008251615532818460208701614bb1565b6000610b3283836155c5565b80820182811260008312801582168215821617156156c7576156c7615441565b60408152600061589560408301856151a0565b90508260208301529392505050565b60609290921b6001600160601b0319168252601482015260340190565b6000808335601e198436030181126158d857600080fd5b8301803591506001600160401b038211156158f257600080fd5b6020019150600581901b3603821315614f6757600080fd5b60208082528181018390526000906040808401600586811b8601830188865b898110156159ea57888303603f190185528135368c9003603e1901811261594f57600080fd5b8b01803561595c81614c2d565b6001600160a01b031684528088013536829003601e1901811261597e57600080fd5b0187810190356001600160401b0381111561599857600080fd5b80861b8036038313156159aa57600080fd5b858a0189905285890182905260606001600160fb1b038311156159cc57600080fd5b818482890137978a0197950190940193505090860190600101615929565b50909998505050505050505050565b634e487b7160e01b600052601260045260246000fd5b600060208284031215615a2157600080fd5b610b32826156fc565b600082615a3957615a396159f9565b500490565b81810360008312801583831316838312821617156130fb576130fb615441565b6000600160ff1b8201615a7357615a73615441565b5060000390565b634e487b7160e01b600052602160045260246000fd5b600060ff831680615aa357615aa36159f9565b8060ff8416069150509291505056fea2646970667358221220534d5cf52fbd4a1b41df34f36d0f6b5713b1bc565e4792fe108195d3fe5af1d664736f6c63430008140033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000482b18ae6512277306b20774708c412b3cf97bcd0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000720000000000000000000000000ebbaa8a48e3f37fc1d35baa38a8809f2f3e6648f00000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000ebbaa8a48e3f37fc1d35baa38a8809f2f3e6648f00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000ebdfd4918e76fe8b05b0522b726e7b7afa770db000000000000000000000000000000000000000000000000000000000000001d49504f5220467573696f6e20506c61736d61205661756c742055534443000000000000000000000000000000000000000000000000000000000000000000000769706655534443000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ebbaa8a48e3f37fc1d35baa38a8809f2f3e6648f000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000890a69ef363c9c7bdd5e36eb95ceb569f63acbf6000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d0181a36b0566a8645b7eecff2148ade7ecf2be90000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001a996cb54bb95462040408c06122d45d6cdb609600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000048f89d731c5e3b5bee8235162fc2c639ba62db7d0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000d3c752ee5bb80de64f76861b800a8f3b464c50f900000000000000000000000034bcbc3f10ce46894bb39de0c667257efb35c079000000000000000000000000eb58e3adb9e537c06ebe2dee6565b248ec758a9300000000000000000000000050fbc3e2eb2ec49204a41ea47946016703ba358d0000000000000000000000000ea739e6218f67df51d1748ee153ae7b9dcd9a25000000000000000000000000962a7f0a2cbe97d4004175036a81e643463b76ec00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a18304cd502be97d2a00a6774951ccc05c7d8e1800000000000000000000000000000000000000000000000000000000000000020000000000000000000000008cc97a703c302515aa3c3130f5193d136192885300000000000000000000000000000000000000000000000000000000000000030000000000000000000000008bf42554f882584df5c16b5e60ac1aa741a215670000000000000000000000000000000000000000000000000000000000000004000000000000000000000000635a02b828a5c830afbf1e21699a8862dca4f4c000000000000000000000000000000000000000000000000000000000000000050000000000000000000000006b80b3dd68f908bb7e2e10127e6174d7d05849910000000000000000000000000000000000000000000000000000000000000006000000000000000000000000cd15728565c5090a5ba8985a56ee7fb9274bca4e