0 txs
0 calls
constructor
constructor((string assetName, string assetSymbol, address underlyingToken, address priceOracleMiddleware, (uint256 marketId, bytes32[] substrates)[] marketSubstratesConfigs, address[] fuses, (uint256 marketId, address fuse)[] balanceFuses, (address performanceFeeManager, uint256 performanceFeeInPercentage, address managementFeeManager, uint256 managementFeeInPercentage) feeConfig, address accessManager, address plasmaVaultBase, uint256 totalSupplyCap) 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)
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)
getUnrealizedManagementFee
viewfunction getUnrealizedManagementFee() view returns (uint256)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
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)
PLASMA_VAULT_BASE
viewfunction PLASMA_VAULT_BASE() view returns (address)
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)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
claimRewards
nonpayablefunction claimRewards(tuple[] calls_)
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_)
mint
nonpayablefunction mint(uint256 shares_, address receiver_) returns (uint256)
redeem
nonpayablefunction redeem(uint256 shares_, address receiver_, address owner_) returns (uint256)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
transfer
nonpayablefunction transfer(address to_, uint256 value_) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from_, address to_, uint256 value_) returns (bool)
updateInternal
nonpayablefunction updateInternal(address, address, uint256)
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)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
Initialized
event Initialized(uint64 version)
ManagementFeeDataConfigured
event ManagementFeeDataConfigured(address feeManager, uint256 feeInPercentage)
ManagementFeeRealized
event ManagementFeeRealized(uint256 unrealizedFeeInUnderlying, uint256 unrealizedFeeInShares)
MarketBalancesUpdated
event MarketBalancesUpdated(uint256[] marketIds, int256 deltaInUnderlying)
MarketSubstratesGranted
event MarketSubstratesGranted(uint256 marketId, bytes32[] substrates)
PerformanceFeeDataConfigured
event PerformanceFeeDataConfigured(address feeManager, uint256 feeInPercentage)
PriceOracleMiddlewareChanged
event PriceOracleMiddlewareChanged(address newPriceOracleMiddleware)
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)
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()
HandlerNotFound
error HandlerNotFound()
InvalidInitialization
error InvalidInitialization()
InvalidManagementFee
error InvalidManagementFee(uint256 feeInPercentage)
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()
NotInitializing
error NotInitializing()
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)
UnsupportedFuse
error UnsupportedFuse()
UnsupportedMethod
error UnsupportedMethod()
UnsupportedQuoteCurrencyFromOracle
error UnsupportedQuoteCurrencyFromOracle()
WrongAddress
error WrongAddress()
WrongCaller
error WrongCaller(address caller)
creation bytecode
0x60a060405234801561001057600080fd5b5060405161693a38038061693a83398101604081905261002f91610fce565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03166000811580156100795750825b90506000826001600160401b031660011480156100955750303b155b9050811580156100a3575080155b156100c15760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156100ef57845460ff60401b1916680100000000000000001785555b8551602087015161010091906103e3565b604086015161010e906103f9565b6101208601516001600160a01b0316608052855161010087015161014088015160405161019393634a5dc1b760e01b9361014f939192909190602401611151565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b039384161790526080516001600160a01b03169161040d16565b506000866060015190506103486001600160a01b0316816001600160a01b031663f4a6e4586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020b919061119c565b6001600160a01b03161461023257604051630dee4f2f60e41b815260040160405180910390fd5b606087015161024090610484565b610260633e3a86e060e01b8860a0015160405160240161014f91906111b7565b5060005b8760c00151518110156102ec576102e3630c63abc660e01b8960c00151838151811061029257610292611203565b6020026020010151600001518a60c0015184815181106102b4576102b4611203565b60200260200101516020015160405160240161014f9291909182526001600160a01b0316602082015260400190565b50600101610264565b5060005b8760800151518110156103575761034f8860800151828151811061031657610316611203565b6020026020010151600001518960800151838151811061033857610338611203565b6020026020010151602001516104f860201b60201c565b6001016102f0565b5060e0870151805160209091015161036f9190610643565b60e08701516040810151606090910151610389919061073c565b610391610827565b5083156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050506113e4565b6103eb610873565b6103f582826108c3565b5050565b610401610873565b61040a8161092c565b50565b6060600080846001600160a01b03168460405161042a9190611219565b600060405180830381855af49150503d8060008114610465576040519150601f19603f3d011682016040523d82523d6000602084013e61046a565b606091505b50909250905061047b8583836109b0565b95945050505050565b807f0d761ae54d86fc3be4f1f2b44ade677efb1c84a85fc6bb1d087dc42f1e319a0080546001600160a01b0319166001600160a01b0392831617905560405190821681527fd51f0f0ead29844497f2889430c7143324b01211d610174de544ac915ae5943f9060200160405180910390a150565b60008281527f78e40624004925a4ef6749756748b1deddc674477302d5b7fe18e5335cde3900602052604081209050600082516001600160401b0381111561054257610542610bcf565b60405190808252806020026020018201604052801561056b578160200160208202803683370190505b50905060005b83518110156105ed57600183600001600086848151811061059457610594611203565b60200260200101518152602001908152602001600020819055508381815181106105c0576105c0611203565b60200260200101518282815181106105da576105da611203565b6020908102919091010152600101610571565b5080516106039060018401906020840190610b78565b507f7e2fec298d6e81dab091490fc6ab01dc37a9077786c1d533a01cdc6a8e0f42638484604051610635929190611235565b60405180910390a150505050565b6001600160a01b03821661066a57604051630d23cf4160e11b815260040160405180910390fd5b61138881111561069557604051630a7e67f960e21b8152600481018290526024015b60405180910390fd5b7f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e0528840080546001600160a01b0319166001600160a01b0384161781556106d882610a0f565b815461ffff91909116600160a01b0261ffff60a01b19909116178155604080516001600160a01b0385168152602081018490527fb51da3e1921b4e807ca7fadcf4582ef9ebbabde509ec7cecd222ca1fd4375df591015b60405180910390a1505050565b6001600160a01b03821661076357604051630d23cf4160e11b815260040160405180910390fd5b6101f4811115610789576040516324f8f43160e11b81526004810182905260240161068c565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0080546001600160a01b0319166001600160a01b0384161781556107cc82610a0f565b815461ffff91909116600160a01b0261ffff60a01b19909116178155604080516001600160a01b0385168152602081018490527f72a8ee4b89f4194ad7e618624c280d66eb07d10b8cd84ab0376c16534413aa40910161072f565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0061085142610a42565b815463ffffffff91909116600160b01b0263ffffffff60b01b19909116179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166108c157604051631afcd79f60e31b815260040160405180910390fd5b565b6108cb610873565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610917848261130d565b5060048101610926838261130d565b50505050565b610934610873565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0060008061096184610a73565b9150915081610971576012610973565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b6060826109c5576109c082610b4f565b610a08565b81511580156109dc57506001600160a01b0384163b155b15610a0557604051639996b31560e01b81526001600160a01b038516600482015260240161068c565b50805b9392505050565b600061ffff821115610a3e576040516306dfcc6560e41b8152601060048201526024810183905260440161068c565b5090565b600063ffffffff821115610a3e576040516306dfcc6560e41b8152602060048201526024810183905260440161068c565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691610aba91611219565b600060405180830381855afa9150503d8060008114610af5576040519150601f19603f3d011682016040523d82523d6000602084013e610afa565b606091505b5091509150818015610b0e57506020815110155b15610b4257600081806020019051810190610b2991906113cb565b905060ff8111610b40576001969095509350505050565b505b5060009485945092505050565b805115610b5f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b828054828255906000526020600020908101928215610bb3579160200282015b82811115610bb3578251825591602001919060010190610b98565b50610a3e9291505b80821115610a3e5760008155600101610bbb565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610c0757610c07610bcf565b60405290565b60405161016081016001600160401b0381118282101715610c0757610c07610bcf565b604051601f8201601f191681016001600160401b0381118282101715610c5857610c58610bcf565b604052919050565b60005b83811015610c7b578181015183820152602001610c63565b50506000910152565b600082601f830112610c9557600080fd5b81516001600160401b03811115610cae57610cae610bcf565b610cc1601f8201601f1916602001610c30565b818152846020838601011115610cd657600080fd5b610ce7826020830160208701610c60565b949350505050565b80516001600160a01b0381168114610d0657600080fd5b919050565b60006001600160401b03821115610d2457610d24610bcf565b5060051b60200190565b600082601f830112610d3f57600080fd5b8151610d52610d4d82610d0b565b610c30565b8082825260208201915060208360051b860101925085831115610d7457600080fd5b602085015b83811015610e5e5780516001600160401b03811115610d9757600080fd5b86016040818903601f19011215610dad57600080fd5b610db5610be5565b6020820151815260408201516001600160401b03811115610dd557600080fd5b60208184010192505088601f830112610ded57600080fd5b8151610dfb610d4d82610d0b565b8082825260208201915060208360051b86010192508b831115610e1d57600080fd5b6020850194505b82851015610e3f578451825260209485019490910190610e24565b8060208501525050508085525050602083019250602081019050610d79565b5095945050505050565b600082601f830112610e7957600080fd5b8151610e87610d4d82610d0b565b8082825260208201915060208360051b860101925085831115610ea957600080fd5b602085015b83811015610e5e57610ebf81610cef565b835260209283019201610eae565b600082601f830112610ede57600080fd5b8151610eec610d4d82610d0b565b8082825260208201915060208360061b860101925085831115610f0e57600080fd5b602085015b83811015610e5e5760408188031215610f2b57600080fd5b610f33610be5565b81518152610f4360208301610cef565b602082015280845250602083019250604081019050610f13565b600060808284031215610f6f57600080fd5b604051608081016001600160401b0381118282101715610f9157610f91610bcf565b604052905080610fa083610cef565b815260208381015190820152610fb860408401610cef565b6040820152606092830151920191909152919050565b600060208284031215610fe057600080fd5b81516001600160401b03811115610ff657600080fd5b82016101c0818503121561100957600080fd5b611011610c0d565b81516001600160401b0381111561102757600080fd5b61103386828501610c84565b82525060208201516001600160401b0381111561104f57600080fd5b61105b86828501610c84565b60208301525061106d60408301610cef565b604082015261107e60608301610cef565b606082015260808201516001600160401b0381111561109c57600080fd5b6110a886828501610d2e565b60808301525060a08201516001600160401b038111156110c757600080fd5b6110d386828501610e68565b60a08301525060c08201516001600160401b038111156110f257600080fd5b6110fe86828501610ecd565b60c0830152506111118560e08401610f5d565b60e08201526111236101608301610cef565b6101008201526111366101808301610cef565b6101208201526101a091909101516101408201529392505050565b6060815260008451806060840152611170816080850160208901610c60565b6001600160a01b039490941660208301525060408101919091526080601f909201601f19160101919050565b6000602082840312156111ae57600080fd5b610a0882610cef565b602080825282518282018190526000918401906040840190835b818110156111f85783516001600160a01b03168352602093840193909201916001016111d1565b509095945050505050565b634e487b7160e01b600052603260045260246000fd5b6000825161122b818460208701610c60565b9190910192915050565b6000604082018483526040602084015280845180835260608501915060208601925060005b8181101561127857835183526020938401939092019160010161125a565b50909695505050505050565b600181811c9082168061129857607f821691505b6020821081036112b857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561130857806000526020600020601f840160051c810160208510156112e55750805b601f840160051c820191505b8181101561130557600081556001016112f1565b50505b505050565b81516001600160401b0381111561132657611326610bcf565b61133a816113348454611284565b846112be565b6020601f82116001811461136e57600083156113565750848201515b600019600385901b1c1916600184901b178455611305565b600084815260208120601f198516915b8281101561139e578785015182556020948501946001909201910161137e565b50848210156113bc5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156113dd57600080fd5b5051919050565b60805161552d61140d60003960008181610318015281816103ba01526142c8015261552d6000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c80637a9e5e4b11610160578063bf7e214f116100d8578063d905777e1161008c578063e3efd95f11610071578063e3efd95f146106c0578063ef8b30f71461060f578063f538e562146106d357610277565b8063d905777e14610648578063dd62ed3e1461065b57610277565b8063c6e6f592116100bd578063c6e6f5921461060f578063c74b521114610622578063ce96cb771461063557610277565b8063bf7e214f146105f4578063c63d75b6146105fc57610277565b8063a9059cbb1161012f578063b460af9411610114578063b460af94146105bb578063ba087652146105ce578063baae8abf146105e157610277565b8063a9059cbb14610595578063b3d7f6b9146105a857610277565b80637a9e5e4b1461052e5780638fb360371461054157806394bf804d1461057a57806395d89b411461058d57610277565b8063313ce567116101f35780634021a874116101c25780634cdad506116101a75780634cdad5061461037f5780636e553f65146104c657806370a08231146104d957610277565b80634021a874146104a0578063402d267d146104b357610277565b8063313ce5671461045657806332293ccc146104705780633887fd781461048557806338d52e0f1461049857610277565b80630971a9d01161024a57806318160ddd1161022f57806318160ddd1461041457806323b872dd1461043b5780633032403a1461044e57610277565b80630971a9d0146103b55780630a28a4771461040157610277565b806301e1d1141461034f57806306fdde031461036a57806307a2d13a1461037f578063095ea7b314610392575b60003660606102a77f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab66005460011490565b156102c9576102b46106db565b50604080516020810190915260008152610344565b6103416000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929150506108bc565b90505b915050805190602001f35b610357610941565b6040519081526020015b60405180910390f35b610372610985565b60405161036191906148f6565b61035761038d366004614909565b610a5a565b6103a56103a0366004614944565b610a67565b6040519015158152602001610361565b6103dc7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610361565b61035761040f366004614909565b610a7f565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610357565b6103a5610449366004614970565b610a8c565b610357610ab0565b61045e610ac7565b60405160ff9091168152602001610361565b61048361047e366004614970565b610ad1565b005b610357610493366004614909565b610b03565b6103dc610b36565b6103576104ae3660046149b1565b610b78565b6103576104c1366004614a28565b610c81565b6103576104d4366004614a45565b610ce0565b6103576104e7366004614a28565b73ffffffffffffffffffffffffffffffffffffffff1660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b61048361053c366004614a28565b610d28565b610549610e28565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610361565b610357610588366004614a45565b610e9d565b610372610f49565b6103a56105a3366004614944565b610f9a565b6103576105b6366004614909565b610faf565b6103576105c9366004614a75565b610fbc565b6103576105dc366004614a75565b611155565b6104836105ef366004614ab7565b61133d565b6103dc61169b565b61035761060a366004614a28565b6116c4565b61035761061d366004614909565b611718565b610483610630366004614ab7565b611725565b610357610643366004614a28565b61191f565b610357610656366004614a28565b61196f565b610357610669366004614b2e565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104836106ce366004614ab7565b6119b9565b610357600281565b604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16602080830191909152600080357fffffffff00000000000000000000000000000000000000000000000000000000166034840152835180840360180181526038909301845282519282019290922082527fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e009052205473ffffffffffffffffffffffffffffffffffffffff16806107c7576040517f4bf4de4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108216000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505073ffffffffffffffffffffffffffffffffffffffff861692915050611a88565b90508051600003610830575050565b6000818060200190518101906108469190614c03565b6040517fc74b5211000000000000000000000000000000000000000000000000000000008152909150309063c74b521190610885908490600401614db6565b600060405180830381600087803b15801561089f57600080fd5b505af11580156108b3573d6000803e3d6000fd5b50505050505050565b60606000808473ffffffffffffffffffffffffffffffffffffffff16846040516108e69190614e66565b600060405180830381855af49150503d8060008114610921576040519150601f19603f3d011682016040523d82523d6000602084013e610926565b606091505b5091509150610936858383611a96565b925050505b92915050565b60008061094c611b25565b9050600061095982611d11565b905081811061096b5760009250505090565b61097482611d11565b61097e9083614eb1565b9250505090565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916109d690614ec4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0290614ec4565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b505050505091505090565b600061093b826000611e42565b600033610a75818585611e9b565b5060019392505050565b600061093b826001611ead565b6000610a9b335b600036611efd565b610aa68484846122e4565b90505b9392505050565b6000610ac2610abd611b25565b611d11565b905090565b6000610ac2612308565b6040517f1b517b1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181527f656f5ca8c676f20b936e991a840e1130bdd664385322f33b6642ec86729ee600602052604081205461093b565b6000807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610b82612357565b610b8b33610a93565b610b93610b36565b6040517fd505accf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152306024830152604482018b90526064820188905260ff8716608483015260a4820186905260c48201859052919091169063d505accf9060e401600060405180830381600087803b158015610c2957600080fd5b505af1158015610c3d573d6000803e3d6000fd5b50505050610c4b88876123d8565b9050610c7660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b979650505050505050565b600080610c8c612473565b90506000610cb87f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b9050818110610ccb575060009392505050565b610cd861038d8284614eb1565b949350505050565b6000610cea612357565b610cf333610a93565b610cfd83836123d8565b905061093b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b33610d3161169b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f068ca9d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163b600003610e1b576040517fc2f31e5e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610da9565b610e248261249d565b5050565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080546000919074010000000000000000000000000000000000000000900460ff16610e75576000610e97565b7f8fb36037000000000000000000000000000000000000000000000000000000005b91505090565b6000610ea7612357565b610eb033610a93565b82600003610eea576040517f01aeea5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f37576040517f1a479e8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3f612535565b610cfd83836126b2565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916109d690614ec4565b6000610fa533610a93565b610aa98383612739565b600061093b826001611e42565b6000610fc6612357565b610fcf33610a93565b83600003611009576040517fbb464a5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611056576040517f1a479e8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105e612535565b6000611068610941565b9050611115611078600a87614f17565b611080610b36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156110ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111109190614f2a565b612747565b61111e81612a98565b611129858585612baf565b915050610aa960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061115f612357565b61116833610a93565b836000036111a2576040517ff10cc93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831615806111d9575073ffffffffffffffffffffffffffffffffffffffff8216155b15611210576040517f1a479e8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611218612535565b6000806000611225610941565b905060005b600a8110156112fa5761123c88610a5a565b9350611246610b36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156112b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d69190614f2a565b9250838310156112fa576112f26112ec85612c40565b84612747565b60010161122a565b5061130481612a98565b61130f878787612c61565b9350505050610aa960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611345612357565b61134e33610a93565b8060008167ffffffffffffffff81111561136a5761136a614b5c565b604051908082528060200260200182016040528015611393578160200160208202803683370190505b50905060008060006113a3610941565b90506113ce60017f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab660055565b60005b85811015611631576114578888838181106113ee576113ee614f43565b90506020028101906114009190614f72565b61140e906020810190614a28565b73ffffffffffffffffffffffffffffffffffffffff1660009081527f48932b860eb451ad240d4fe2b46522e5a0ac079d201fe50d4e0be078c75b54006020526040902054151590565b61148d576040517f2356a16d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87878281811061149f5761149f614f43565b90506020028101906114b19190614f72565b6114bf906020810190614a28565b73ffffffffffffffffffffffffffffffffffffffff1663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015611509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152d9190614f2a565b92506115398584612ce9565b151560000361156e578285858151811061155557611555614f43565b60209081029190910101528361156a81614fa6565b9450505b61162888888381811061158357611583614f43565b90506020028101906115959190614f72565b6115a3906020810190614fde565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b91508590508181106115ec576115ec614f43565b90506020028101906115fe9190614f72565b61160c906020810190614a28565b73ffffffffffffffffffffffffffffffffffffffff16906108bc565b506001016113d1565b5061165b60007f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab660055565b61166484612d50565b61166d81612a98565b5050505050610e2460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000807ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00610b5b565b6000806116cf612473565b905060006116fb7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b905081811061170e575060009392505050565b610cd88183614eb1565b600061093b826000611ead565b303314611760576040517f29507dbf000000000000000000000000000000000000000000000000000000008152336004820152602401610da9565b8060008167ffffffffffffffff81111561177c5761177c614b5c565b6040519080825280602002602001820160405280156117a5578160200160208202803683370190505b50905060008060006117b5610941565b905060005b8581101561190c576117d78888838181106113ee576113ee614f43565b61180d576040517f2356a16d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87878281811061181f5761181f614f43565b90506020028101906118319190614f72565b61183f906020810190614a28565b73ffffffffffffffffffffffffffffffffffffffff1663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015611889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ad9190614f2a565b92506118b98584612ce9565b15156000036118ee57828585815181106118d5576118d5614f43565b6020908102919091010152836118ea81614fa6565b9450505b61190388888381811061158357611583614f43565b506001016117ba565b5061191684612d50565b6108b381612a98565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604081205461093b906000611e42565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604081205461093b565b6119c1612357565b6119ca33610a93565b8060005b81811015611a5d57611a548484838181106119eb576119eb614f43565b90506020028101906119fd9190614f72565b611a0b906020810190614fde565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791508590508181106115ec576115ec614f43565b506001016119ce565b5050610e2460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060610aa983836000613123565b606082611aab57611aa6826131e6565b610aa9565b8151158015611acf575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611b1e576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610da9565b5080610aa9565b600080611b3061322b565b905073ffffffffffffffffffffffffffffffffffffffff811615611c71578073ffffffffffffffffffffffffffffffffffffffff1663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbd9190614f2a565b611bc561326b565b611bcd610b36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015611c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5d9190614f2a565b611c679190614f17565b610e979190614f17565b611c7961326b565b611c81610b36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015611ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c679190614f2a565b600080611dc460408051606081018252600080825260208201819052918101919091527f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0060408051606081018252915473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000810461ffff166020840152760100000000000000000000000000000000000000000000900463ffffffff1690820152919050565b6020810151909150429061ffff161580611de65750604082015163ffffffff16155b80611dfb5750816040015163ffffffff168111155b15611e0a575060009392505050565b610cd8611e3185846040015163ffffffff1684611e279190614eb1565b6301e13380613293565b836020015161ffff16612710613293565b6000610aa9611e4f610941565b611e5a906001614f17565b611e666002600a61516d565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254611e929190614f17565b8591908561338e565b611ea883838360016133d3565b505050565b6000610aa9611ebe6002600a61516d565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254611eea9190614f17565b611ef2610941565b611e92906001614f17565b6000611f0c600482848661517c565b611f15916151a6565b90506000807f6e553f65000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084161480611fab57507f94bf804d000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416145b80611ff757507fb460af94000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416145b8061204357507fba087652000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416145b8061208f57507f4021a874000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416145b156121675761209c61169b565b6040517f77d9737000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008616604483015291909116906377d973709060640160408051808303816000875af1158015612139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215d9190615220565b9092509050612180565b61217a61217261169b565b873086613540565b90925090505b816122dc5763ffffffff811615612292577ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001781556121f761169b565b73ffffffffffffffffffffffffffffffffffffffff166394c7d7ee8888886040518463ffffffff1660e01b815260040161223393929190615255565b600060405180830381600087803b15801561224d57600080fd5b505af1158015612261573d6000803e3d6000fd5b505082547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16909255506122dc9050565b6040517f068ca9d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602401610da9565b505050505050565b6000336122f28582856136bd565b6122fd8585856137a5565b506001949350505050565b6000807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00905060028154610e97919074010000000000000000000000000000000000000000900460ff166152bf565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016123d2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b600082600003612414576040517f182b250f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216612461576040517f1a479e8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612469612535565b610aa98383613850565b60007f0f070392f17d5f958cc1ac31867dabecfc5c9758b4a419a200803226d7155d005b54919050565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b60006125e760408051606081018252600080825260208201819052918101919091527f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0060408051606081018252915473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000810461ffff166020840152760100000000000000000000000000000000000000000000900463ffffffff1690820152919050565b905060006125f3610ab0565b905080600003612601575050565b6126096138d7565b600061261482611718565b905061263f60017faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b825161264b908261394e565b61267460007faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b60408051838152602081018390527fbb92eb7521ac4e9e56f7e75ea06a10cbc121c444e5d175fff5e8e0bc9e804937910160405180910390a1505050565b6000806126be836116c4565b905080841115612720576040517f284ff66700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810185905260448101829052606401610da9565b600061272b85610faf565b9050610cd8338583886139aa565b600033610a758185856137a5565b81600003612753575050565b6000818310611ea8576000806060600061276b613a61565b90506000815167ffffffffffffffff81111561278957612789614b5c565b6040519080825280602002602001820160405280156127b2578160200160208202803683370190505b5090506127bf8789614eb1565b95506000806000845190505b88158015906127d957508083105b15612a82576128018584815181106127f3576127f3614f43565b602002602001015184613aec565b95508860001b8660008151811061281a5761281a614f43565b6020026020010181815250506128f08660405160240161283a91906152d8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbe1946da0000000000000000000000000000000000000000000000000000000017905286518790869081106128c4576128c4614f43565b602002602001015173ffffffffffffffffffffffffffffffffffffffff166108bc90919063ffffffff16565b506128f9610b36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015612965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129899190614f2a565b9150818b11156129a45761299d828c614eb1565b98506129a9565b600098505b8483815181106129bb576129bb614f43565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a319190614f2a565b9650612a3d8488612ce9565b1515600003612a725786848981518110612a5957612a59614f43565b602090810291909101015287612a6e81614fa6565b9850505b612a7b83614fa6565b92506127cb565b612a8b84612d50565b5050505050505050505050565b6000612aa2610941565b905081811015612ab0575050565b6000612b30604080518082018252600080825260209182015281518083019092527f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e052884005473ffffffffffffffffffffffffffffffffffffffff8116835261ffff74010000000000000000000000000000000000000000909104169082015290565b90506000612b41611e318585614eb1565b9050612b6c60017faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b8151612b8090612b7b83611718565b61394e565b612ba960007faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b50505050565b600080612bbb8361191f565b905080851115612c1d576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810186905260448101829052606401610da9565b6000612c2886610a7f565b9050612c373386868985613bc6565b95945050505050565b6000612c57612c5060028461531b565b6064613cce565b61093b9083614f17565b600080612c6d8361196f565b905080851115612ccf576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810186905260448101829052606401610da9565b6000612cda86610a5a565b9050612c37338686848a613bc6565b6000805b8351811015612d4957838181518110612d0857612d08614f43565b602002602001015160000315612d495782848281518110612d2b57612d2b614f43565b602002602001015103612d415760019150612d49565b600101612ced565b5092915050565b6000612d6f604051806040016040528060008152602001606081525090565b6000806000612d7d86613cda565b8051909150600080612d8d613f0e565b73ffffffffffffffffffffffffffffffffffffffff1663b3596f07612db0610b36565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016040805180830381865afa158015612e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3c9190615332565b915091508267ffffffffffffffff811115612e5957612e59614b5c565b604051908082528060200260200182016040528015612e9e57816020015b6040805180820190915260008082526020820152815260200190600190039081612e775790505b50602088015260005b838110156130bc57848181518110612ec157612ec1614f43565b6020026020010151600003156130bc57612f35858281518110612ee657612ee6614f43565b602002602001015160009081527f150144dd6af711bac4392499881ec6649090601bd196a5ece5174c1400b1f700602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f722713f700000000000000000000000000000000000000000000000000000000179052909750612fb09073ffffffffffffffffffffffffffffffffffffffff8916906108bc565b806020019051810190612fc39190614f2a565b9850848181518110612fd757612fd7614f43565b602002602001015188602001518281518110612ff557612ff5614f43565b60209081029190910101515261303e61302261301284600a615356565b61301c908c61531b565b85613cce565b600261302c610ac7565b6130369190615362565b60ff16613f36565b8860200151828151811061305457613054614f43565b602002602001015160200181815250506130a885828151811061307957613079614f43565b60200260200101518960200151838151811061309757613097614f43565b602002602001015160200151613f96565b6130b2908761537b565b9550600101612ea7565b5084156130cc576130cc85613fe5565b6130d4611b25565b87526130df8761407d565b7ff1adf92ee604e0c353dfd4481bacd575b0419a97b473374d7822e0c3cdfb295484866040516131109291906153a3565b60405180910390a1505050505050505050565b606081471015613161576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610da9565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161318a9190614e66565b60006040518083038185875af1925050503d80600081146131c7576040519150601f19603f3d011682016040523d82523d6000602084013e6131cc565b606091505b50915091506131dc868383611a96565b9695505050505050565b8051156131f65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60007f08c469289c3f85d9b575f3ae9be6831541ff770a06ea135aa343a4de7c962d005b5473ffffffffffffffffffffffffffffffffffffffff16919050565b60007f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a77300612497565b6000838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050806000036132e8578382816132de576132de6153f0565b0492505050610aa9565b808411613321576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60008061339c868686613293565b90506133a78361420a565b80156133c35750600084806133be576133be6153f0565b868809115b15612c37576131dc600182614f17565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0073ffffffffffffffffffffffffffffffffffffffff8516613444576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610da9565b73ffffffffffffffffffffffffffffffffffffffff8416613494576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610da9565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260018301602090815260408083209388168352929052208390558115613539578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161353091815260200190565b60405180910390a35b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301527fffffffff0000000000000000000000000000000000000000000000000000000083166064830152600091829182918291891690608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb700961300000000000000000000000000000000000000000000000000000000179052516136209190614e66565b600060405180830381855afa9150503d806000811461365b576040519150601f19603f3d011682016040523d82523d6000602084013e613660565b606091505b509150915081156136b257604081511061369257808060200190518101906136889190615220565b90945092506136b2565b60208151106136b257808060200190518101906136af919061541f565b93505b505094509492505050565b73ffffffffffffffffffffffffffffffffffffffff83811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612ba95781811015613796576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610da9565b612ba9848484840360006133d3565b73ffffffffffffffffffffffffffffffffffffffff83166137f5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610da9565b73ffffffffffffffffffffffffffffffffffffffff8216613845576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610da9565b611ea8838383614237565b60008061385c83610c81565b9050808411156138be576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810185905260448101829052606401610da9565b60006138c985611718565b9050610cd8338587846139aa565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f00613901426142ee565b815463ffffffff91909116760100000000000000000000000000000000000000000000027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff909116179055565b73ffffffffffffffffffffffffffffffffffffffff821661399e576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610da9565b610e2460008383614237565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0080546139ef9073ffffffffffffffffffffffffffffffffffffffff1686308661433c565b6139f9848361394e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051613530929190918252602082015260400190565b60607fd243afa3da07e6bdec20fdd573a17f99411aa8a62ae64ca2c426d3a86ae0ac00805460408051602080840282018101909252828152929190830182828015613ae257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311613ab7575b5050505050905090565b60607f45a704819a9dcb1bb5b8cff129eda642cf0e926a9ef104e27aa53f1d1fa47b006040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602082015260348101849052600090605401604051602081830303815290604052805190602001208152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613bb957602002820191906000526020600020905b815481526020019060010190808311613ba5575b5050505050905092915050565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0073ffffffffffffffffffffffffffffffffffffffff86811690851614613c1257613c128487846136bd565b613c1c84836143c5565b8054613c3f9073ffffffffffffffffffffffffffffffffffffffff168685614421565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8686604051613cbe929190918252602082015260400190565b60405180910390a4505050505050565b6000610aa9828461543a565b80516060906000819003613cef575090919050565b6000613cfc82600261531b565b67ffffffffffffffff811115613d1457613d14614b5c565b604051908082528060200260200182016040528015613d3d578160200160208202803683370190505b50905083600060605b825115613f0557613d5885600261531b565b67ffffffffffffffff811115613d7057613d70614b5c565b604051908082528060200260200182016040528015613d99578160200160208202803683370190505b5090506000805b8451811015613ef357613dcc86868381518110613dbf57613dbf614f43565b6020026020010151612ce9565b613eeb5783865103613df257613def8687516002613dea919061531b565b61445f565b95505b848181518110613e0457613e04614f43565b6020026020010151868581518110613e1e57613e1e614f43565b6020908102919091010152613e3284614fa6565b93506000613e58868381518110613e4b57613e4b614f43565b60200260200101516144fb565b5190508015613ee95760005b81811015613ee75783855103613e8957613e868586516002613dea919061531b565b94505b613e9e878481518110613e4b57613e4b614f43565b8181518110613eaf57613eaf614f43565b6020026020010151858581518110613ec957613ec9614f43565b6020908102919091010152613edd84614fa6565b9350600101613e64565b505b505b600101613da0565b50613efd8261457c565b935050613d46565b610c768461457c565b60007f0d761ae54d86fc3be4f1f2b44ade677efb1c84a85fc6bb1d087dc42f1e319a0061324f565b600060128203613f4757508161093b565b6012821115613f7757613f5b601283614eb1565b613f66906012615356565b613f70908461531b565b905061093b565b613f7083613f86846012614eb1565b613f9190600a615356565b613cce565b60008281527f656f5ca8c676f20b936e991a840e1130bdd664385322f33b6642ec86729ee60060205260408120805490839055613fd28161470b565b613fdb8461470b565b610cd8919061544e565b600081121561403b57613fff613ffa8261546e565b61476a565b7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a773008054600090614030908490614eb1565b909155506132289050565b6140448161476a565b7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a773008054600090614075908490614f17565b909155505050565b600080527fc2733c187287f795e2e6e84d35552a190e774125367241c3e99e955f4babf0006020527ff1a5acf64f330322c7b96c9822a41f340e067e2cefe46839a37cd61f2a91150c546140ce5750565b60208101515160005b81811015611ea857600061414e7fc2733c187287f795e2e6e84d35552a190e774125367241c3e99e955f4babf00060000160008660200151858151811061412057614120614f43565b6020026020010151600001518152602001908152602001600020548560000151670de0b6b3a7640000613293565b90508360200151828151811061416657614166614f43565b602002602001015160200151811015614201578360200151828151811061418f5761418f614f43565b602002602001015160000151846020015183815181106141b1576141b1614f43565b60209081029190910181015101516040517f8f56989d0000000000000000000000000000000000000000000000000000000081526004810192909252602482015260448101829052606401610da9565b506001016140d7565b60006002826003811115614220576142206154a6565b61422a91906154d5565b60ff166001149050919050565b6040805173ffffffffffffffffffffffffffffffffffffffff8581166024830152848116604483015260648083018590528351808403909101815260849092019092526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f32293ccc00000000000000000000000000000000000000000000000000000000179052612ba9917f000000000000000000000000000000000000000000000000000000000000000016906108bc565b600063ffffffff821115614338576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526020600482015260248101839052604401610da9565b5090565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052612ba99186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506147a9565b73ffffffffffffffffffffffffffffffffffffffff8216614415576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610da9565b610e2482600083614237565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611ea891859182169063a9059cbb9060640161437e565b606060008267ffffffffffffffff81111561447c5761447c614b5c565b6040519080825280602002602001820160405280156144a5578160200160208202803683370190505b50905060005b84518110156144f3578481815181106144c6576144c6614f43565b60200260200101518282815181106144e0576144e0614f43565b60209081029190910101526001016144ab565b509392505050565b60008181527f82411e549329f2815579116a6c5e60bff72686c93ab5dba4d06242cfaf968900602090815260409182902080548351818402810184019094528084526060939283018282801561457057602002820191906000526020600020905b81548152602001906001019080831161455c575b50505050509050919050565b60606000825167ffffffffffffffff81111561459a5761459a614b5c565b6040519080825280602002602001820160405280156145c3578160200160208202803683370190505b5090506000805b8451811015614670578481815181106145e5576145e5614f43565b602002602001015160001415801561461e575061461c8386838151811061460e5761460e614f43565b60200260200101518461483f565b155b156146685784818151811061463557614635614f43565b602002602001015183838151811061464f5761464f614f43565b60209081029190910101528161466481614fa6565b9250505b6001016145ca565b5060008167ffffffffffffffff81111561468c5761468c614b5c565b6040519080825280602002602001820160405280156146b5578160200160208202803683370190505b50905060005b82811015614702578381815181106146d5576146d5614f43565b60200260200101518282815181106146ef576146ef614f43565b60209081029190910101526001016146bb565b50949350505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115614338576040517f24775e0600000000000000000000000000000000000000000000000000000000815260048101839052602401610da9565b600080821215614338576040517fa8ce443200000000000000000000000000000000000000000000000000000000815260048101839052602401610da9565b60006147cb73ffffffffffffffffffffffffffffffffffffffff841683611a88565b905080516000141580156147f05750808060200190518101906147ee919061541f565b155b15611ea8576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610da9565b6000805b8281101561487d578385828151811061485e5761485e614f43565b602002602001015103614875576001915050610aa9565b600101614843565b506000949350505050565b60005b838110156148a357818101518382015260200161488b565b50506000910152565b600081518084526148c4816020860160208601614888565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610aa960208301846148ac565b60006020828403121561491b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461322857600080fd5b6000806040838503121561495757600080fd5b823561496281614922565b946020939093013593505050565b60008060006060848603121561498557600080fd5b833561499081614922565b925060208401356149a081614922565b929592945050506040919091013590565b600080600080600080600060e0888a0312156149cc57600080fd5b8735965060208801356149de81614922565b955060408801356149ee81614922565b945060608801359350608088013560ff81168114614a0b57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600060208284031215614a3a57600080fd5b8135610aa981614922565b60008060408385031215614a5857600080fd5b823591506020830135614a6a81614922565b809150509250929050565b600080600060608486031215614a8a57600080fd5b833592506020840135614a9c81614922565b91506040840135614aac81614922565b809150509250925092565b60008060208385031215614aca57600080fd5b823567ffffffffffffffff811115614ae157600080fd5b8301601f81018513614af257600080fd5b803567ffffffffffffffff811115614b0957600080fd5b8560208260051b8401011115614b1e57600080fd5b6020919091019590945092505050565b60008060408385031215614b4157600080fd5b8235614b4c81614922565b91506020830135614a6a81614922565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614bae57614bae614b5c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614bfb57614bfb614b5c565b604052919050565b600060208284031215614c1557600080fd5b815167ffffffffffffffff811115614c2c57600080fd5b8201601f81018413614c3d57600080fd5b805167ffffffffffffffff811115614c5757614c57614b5c565b8060051b614c6760208201614bb4565b91825260208184018101929081019087841115614c8357600080fd5b6020850192505b83831015610c7657825167ffffffffffffffff811115614ca957600080fd5b85016040818a037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215614cdd57600080fd5b614ce5614b8b565b6020820151614cf381614922565b8152604082015167ffffffffffffffff811115614d0f57600080fd5b60208184010192505089601f830112614d2757600080fd5b815167ffffffffffffffff811115614d4157614d41614b5c565b614d7260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614bb4565b8181528b6020838601011115614d8757600080fd5b614d98826020830160208701614888565b80602084015250508084525050602082019150602083019250614c8a565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015614e5a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff81511686526020810151905060406020870152614e4460408701826148ac565b9550506020938401939190910190600101614dde565b50929695505050505050565b60008251614e78818460208701614888565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561093b5761093b614e82565b600181811c90821680614ed857607f821691505b602082108103614f11577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561093b5761093b614e82565b600060208284031215614f3c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614e7857600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fd757614fd7614e82565b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261501357600080fd5b83018035915067ffffffffffffffff82111561502e57600080fd5b60200191503681900382131561504357600080fd5b9250929050565b6001815b60018411156150855780850481111561506957615069614e82565b600184161561507757908102905b60019390931c92800261504e565b935093915050565b60008261509c5750600161093b565b816150a95750600061093b565b81600181146150bf57600281146150c9576150e5565b600191505061093b565b60ff8411156150da576150da614e82565b50506001821b61093b565b5060208310610133831016604e8410600b8410161715615108575081810a61093b565b6151337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461504a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561516557615165614e82565b029392505050565b6000610aa960ff84168361508d565b6000808585111561518c57600080fd5b8386111561519957600080fd5b5050820193919092039150565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015612d49577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505092915050565b8051801515811461521b57600080fd5b919050565b6000806040838503121561523357600080fd5b61523c8361520b565b9150602083015163ffffffff81168114614a6a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b60ff818116838216019081111561093b5761093b614e82565b602080825282518282018190526000918401906040840190835b818110156153105783518352602093840193909201916001016152f2565b509095945050505050565b808202811582820484141761093b5761093b614e82565b6000806040838503121561534557600080fd5b505080516020909101519092909150565b6000610aa9838361508d565b60ff828116828216039081111561093b5761093b614e82565b808201828112600083128015821682158216171561539b5761539b614e82565b505092915050565b6040808252835190820181905260009060208501906060840190835b818110156153dd5783518352602093840193909201916001016153bf565b5050602093909301939093525092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006020828403121561543157600080fd5b610aa98261520b565b600082615449576154496153f0565b500490565b8181036000831280158383131683831282161715612d4957612d49614e82565b60007f8000000000000000000000000000000000000000000000000000000000000000820361549f5761549f614e82565b5060000390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff8316806154e8576154e86153f0565b8060ff8416069150509291505056fea26469706673582212205dcb5fc06a92fa3026c47cba2a61ff205a478c6268ea063609049f7ec718411e64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e58310000000000000000000000009838c0d15b439816d25d5fd1aebd259eeddb66b400000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000a200000000000000000000000000000000000000000000000000000000000000be0000000000000000000000000ebbaa8a48e3f37fc1d35baa38a8809f2f3e6648f00000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000ebbaa8a48e3f37fc1d35baa38a8809f2f3e6648f0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000a5e8be2172f98a8e188a94af47fe2d5527a674bc000000000000000000000000f273ae429cf5860ba62949f4194b7a39a2a79a84ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000002449504f52205553444320417262697472756d204f7074696d697a65722050696c6f74204d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012697055534443667573696f6e50696c6f744d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003e00000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005a0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000890a69ef363c9c7bdd5e36eb95ceb569f63acbf6000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d0181a36b0566a8645b7eecff2148ade7ecf2be90000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001a996cb54bb95462040408c06122d45d6cdb609600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000048f89d731c5e3b5bee8235162fc2c639ba62db7d000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e58310000000000000000000000005e325eda8064b456f4781070c0738d849c824258000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000009339acd4e73c8a11109f77bc87221bdfc7b7a4fc000000000000000000000000b0b3dc1b27c6c8007c9b01a768d6717f6813fe9400000000000000000000000007cd27531ee9df28292b26eeba3f457609deae07000000000000000000000000b0fbf6b7d0586c0a5bc1c3b8a98773f4ed02c9830000000000000000000000004ae8640b3a6b71fa1a05372a59946e66beb05f9f0000000000000000000000002b83f05e463cbc34861b10cb020b6eb4740bd89000000000000000000000000028264e8b70902f6c55420eaf66aeee12b602302e000000000000000000000000ada9bf3c599db229601dd1220d0b3ccab6c7db8400000000000000000000000084c5ab008c66d664681698a9e4536d942b916f890000000000000000000000000ce06c57173b7e4079b2afb132cb9ce846ddac9b000000000000000000000000ba503b6f2b95a4a47ee9884bbbcd80cace2d2eb300000000000000000000000075781ab6cdce9c505dbd0848f4ad8a97c68f53c1000000000000000000000000b052b0d983e493b4d40dec75a03d21b70b83c2ca000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000004cb1c4774ba1b65802c68adb33de99abf8b212280000000000000000000000000000000000000000000000000000000000000002000000000000000000000000cf730baa5542dc7570907696271ba96019fcd10c0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000d347f4bb96531b01c8fab953cf8e920419193a8c0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000aa6c8db1da40f685e02564de92bc2276c12729f60000000000000000000000000000000000000000000000000000000000000005000000000000000000000000db26af00177bfae4439eb881b7742ef47eddfaf60000000000000000000000000000000000000000000000000000000000000006000000000000000000000000a99ab2d4709c9fc83779bd4b230e888dccaedaf600000000000000000000000000000000000000000000000000000000000000090000000000000000000000000f0f43b3559be3319a63082755ad05c158d3b011000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000043f3ca257b7e2d6bbe088b85ef2c2c57e2a3142c0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000c34478138da02e84d004fc84785385783b3b941a00000000000000000000000000000000000000000000000000000000000000070000000000000000000000001a047137f2d4dae60853f87dc13ae92c0db2c123000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000007ceae29f467db23210c6fdb95247355c87026ed0