24 txs
358 calls
constructor
constructor()
functions
allLPTokens
viewfunction allLPTokens(uint256) view returns (address)
collateral
viewfunction collateral(address, address) view returns (uint256)
creditPools
viewfunction creditPools(address) view returns (bool)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
epochUpdater
viewfunction epochUpdater() view returns (address)
feeWithdrawer
viewfunction feeWithdrawer() view returns (address)
lastEpochUpdateTimestamp
viewfunction lastEpochUpdateTimestamp(address) view returns (uint256)
liquidators
viewfunction liquidators(address) view returns (bool)
liquidatorToRecipient
viewfunction liquidatorToRecipient(address) view returns (address)
lpTokens
viewfunction lpTokens(address) view returns (address)
nonces
viewfunction nonces(uint256) view returns (bool)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
positions
viewfunction positions(address, address) view returns (int256)
rebalanceCaps
viewfunction rebalanceCaps(address, address) view returns (uint256 limit, uint256 used, uint256 lastDay)
reserveFees
viewfunction reserveFees(address) view returns (uint256)
signer
viewfunction signer() view returns (address)
supportedMarkets
viewfunction supportedMarkets(address) view returns (bool)
traders
viewfunction traders(address) view returns (bool)
traderToRecipient
viewfunction traderToRecipient(address) view returns (address)
traderToSettler
viewfunction traderToSettler(address) view returns (address)
whitelistTraders
viewfunction whitelistTraders(address) view returns (bool)
acceptOwnership
nonpayablefunction acceptOwnership()
addCollateral
nonpayablefunction addCollateral(tuple[] tokens, address trader)
epochUpdate
nonpayablefunction epochUpdate(tuple[] accruedFees)
liquidate
nonpayablefunction liquidate(tuple request, bytes signature)
pay
nonpayablefunction pay(address to, uint256 amount)
removeCollateral
nonpayablefunction removeCollateral(tuple request, bytes signature)
renounceOwnership
nonpayablefunction renounceOwnership()
repay
nonpayablefunction repay(tuple[] positionUpdates, address trader)
setAllowance
nonpayablefunction setAllowance(tuple[] tokens, address pool)
setCreditPool
nonpayablefunction setCreditPool(address pool, bool isActive)
setEpochUpdater
nonpayablefunction setEpochUpdater(address _epochUpdater)
setFeeWithdrawer
nonpayablefunction setFeeWithdrawer(address _feeWithdrawer)
setLiquidator
nonpayablefunction setLiquidator(address liquidator, address recipient, bool status)
setRebalanceCap
nonpayablefunction setRebalanceCap(address operator, address token, uint256 limit)
setSigner
nonpayablefunction setSigner(address _signer)
settle
nonpayablefunction settle(tuple request, bytes signature)
setTrader
nonpayablefunction setTrader(address trader, address settler, address recipient, bool isTrader, bool isWhitelistTrader)
supportMarket
nonpayablefunction supportMarket(address lpToken)
swapCallback
nonpayablefunction swapCallback(address trader, address tokenIn, int256 amountIn, address tokenOut, int256 amountOut)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawReserve
nonpayablefunction withdrawReserve(address underlying, address recipient, uint256 amount)
events
CollateralAdded
event CollateralAdded(address trader, (address token, uint256 amount)[] collateralUpdates)
CollateralRemoved
event CollateralRemoved(address trader, (address token, uint256 amount)[] collateralUpdates)
CreditPoolUpdated
event CreditPoolUpdated(address indexed pool, bool isActive)
EIP712DomainChanged
event EIP712DomainChanged()
EpochUpdated
event EpochUpdated((address trader, (address token, uint256 fundingFee, uint256 reserveFee)[] feeUpdates)[] accruedFundingFees)
EpochUpdaterSet
event EpochUpdaterSet(address epochUpdater)
FeeWithdrawerSet
event FeeWithdrawerSet(address feeWithdrawer)
Liquidated
event Liquidated(address trader, address liquidator, (address token, int256 amount)[] positionUpdates, (address token, uint256 amount)[] claimCollaterals)
LiquidatorSet
event LiquidatorSet(address liquidator, bool status)
MarketListed
event MarketListed(address lpToken)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
RebalanceCapUpdated
event RebalanceCapUpdated(address indexed operator, address indexed token, uint256 limit)
Repaid
event Repaid(address trader, (address token, int256 amount)[] repayments)
ReserveWithdrawn
event ReserveWithdrawn(address underlying, address recipient, uint256 amount)
Settled
event Settled(address trader, (address token, int256 amount)[] positionUpdates)
SignerSet
event SignerSet(address signer)
TraderSet
event TraderSet(address indexed trader, bool isTrader, bool isWhitelistTrader, address settler, address recipient)
errors
EpochUpdateInCoolDown
error EpochUpdateInCoolDown()
ExchangeRateIncreaseTooMuch
error ExchangeRateIncreaseTooMuch()
InsufficientFundingFees
error InsufficientFundingFees()
InsufficientUnderlying
error InsufficientUnderlying()
InvalidLPToken
error InvalidLPToken()
InvalidMarket
error InvalidMarket()
InvalidPositionUpdateAmount
error InvalidPositionUpdateAmount()
InvalidShortString
error InvalidShortString()
InvalidSignature
error InvalidSignature()
InvalidUnderlying
error InvalidUnderlying()
LiquidatorRecipientConflict
error LiquidatorRecipientConflict()
NonceUsed
error NonceUsed()
NotTraderOrLiquidator
error NotTraderOrLiquidator()
OnlyCreditPool
error OnlyCreditPool()
OnlyEpochUpdater
error OnlyEpochUpdater()
OnlyFeeWithdrawer
error OnlyFeeWithdrawer()
OnlyLiquidator
error OnlyLiquidator()
OnlyLpToken
error OnlyLpToken()
OnlyTrader
error OnlyTrader()
RebalanceLimitExceeded
error RebalanceLimitExceeded()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RequestExpired
error RequestExpired()
StringTooLong
error StringTooLong(string str)
TokenAlreadyListed
error TokenAlreadyListed()
TraderRecipientConflict
error TraderRecipientConflict()
ZeroAddress
error ZeroAddress()
creation bytecode
0x610160604052348015610010575f5ffd5b50604080518082018252601381527f4e617469766520437265646974205661756c7400000000000000000000000000602080830191909152825180840190935260018352603160f81b9083015290610068825f61011a565b6101205261007781600161011a565b61014052815160208084019190912060e052815190820120610100524660a05261010360e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526101153361014c565b6103a9565b5f6020835110156101355761012e83610168565b9050610146565b816101408482610297565b5060ff90505b92915050565b600380546001600160a01b0319169055610165816101ae565b50565b5f5f829050601f8151111561019b578260405163305a27a960e01b81526004016101929190610351565b60405180910390fd5b80516101a682610386565b179392505050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061022757607f821691505b60208210810361024557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561029257805f5260205f20601f840160051c810160208510156102705750805b601f840160051c820191505b8181101561028f575f815560010161027c565b50505b505050565b81516001600160401b038111156102b0576102b06101ff565b6102c4816102be8454610213565b8461024b565b6020601f8211600181146102f6575f83156102df5750848201515b5f19600385901b1c1916600184901b17845561028f565b5f84815260208120601f198516915b828110156103255787850151825560209485019460019092019101610305565b508482101561034257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610245575f1960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516151076103fa5f395f611abf01525f611a9501525f613f5301525f613f2b01525f613e8601525f613eb001525f613eda01526151075ff3fe608060405234801561000f575f5ffd5b50600436106102d7575f3560e01c806379ba509711610187578063b17b658d116100dd578063cab4f84c11610093578063f2fde38b1161006e578063f2fde38b14610784578063f6d95efd14610797578063f90cdb36146107cc575f5ffd5b8063cab4f84c14610729578063cc218ece1461073c578063e30c397814610766575f5ffd5b8063b7477674116100c3578063b7477674146106af578063c2b7307614610703578063c407687614610716575f5ffd5b8063b17b658d14610667578063b6bdff031461069c575f5ffd5b806392a88fa21161013d578063abb49f1911610118578063abb49f1914610622578063ae1914f814610635578063b0ab63ec14610648575f5ffd5b806392a88fa2146105da57806398221e94146105fc5780639be41fdb1461060f575f5ffd5b806384b0196e1161016d57806384b0196e1461058e5780638da5cb5b146105a95780639246261c146105c7575f5ffd5b806379ba50971461057357806381377bfd1461057b575f5ffd5b806341b1fa761161023c5780634e293ee9116101f2578063715018a6116101cd578063715018a6146105455780637362ecbe1461054d57806373eb513314610560575f5ffd5b80634e293ee9146104ff5780634f487eb8146105125780636c19e78314610532575f5ffd5b8063464b38bc11610222578063464b38bc1461049557806347de43e2146104c25780634bd21445146104d5575f5ffd5b806341b1fa761461043e578063422e0af014610460575f5ffd5b8063141a468c1161029157806320761fc41161027757806320761fc4146103dc578063238ac933146103fe57806332b4fa6b1461041e575f5ffd5b8063141a468c146103a75780631e777ad3146103c9575f5ffd5b80630d2a7ae8116102c15780630d2a7ae8146103035780630dfbe91b146103625780631241177214610394575f5ffd5b8062fc59c0146102db578063097a8ec4146102f0575b5f5ffd5b6102ee6102e93660046144e9565b6107ee565b005b6102ee6102fe36600461450b565b6108bd565b6103386103113660046144e9565b60116020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103846103703660046144e9565b60086020525f908152604090205460ff1681565b6040519015158152602001610359565b6102ee6103a2366004614587565b610a4b565b6103846103b53660046145f4565b600c6020525f908152604090205460ff1681565b6102ee6103d736600461464c565b610e9b565b6103846103ea3660046144e9565b600f6020525f908152604090205460ff1681565b6005546103389073ffffffffffffffffffffffffffffffffffffffff1681565b6004546103389073ffffffffffffffffffffffffffffffffffffffff1681565b61038461044c3660046144e9565b60136020525f908152604090205460ff1681565b61033861046e3660046144e9565b60126020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6104b46104a33660046144e9565b60096020525f908152604090205481565b604051908152602001610359565b6102ee6104d03660046146ac565b610fac565b6104b46104e33660046146e9565b600d60209081525f928352604080842090915290825290205481565b6102ee61050d366004614736565b61114d565b6006546103389073ffffffffffffffffffffffffffffffffffffffff1681565b6102ee6105403660046144e9565b6114b4565b6102ee61157c565b6102ee61055b366004614786565b61158f565b6102ee61056e3660046144e9565b6116fe565b6102ee6117c6565b6102ee61058936600461464c565b611880565b610596611a88565b6040516103599796959493929190614829565b60025473ffffffffffffffffffffffffffffffffffffffff16610338565b6103386105d53660046145f4565b611b2a565b6103846105e83660046144e9565b60106020525f908152604090205460ff1681565b6102ee61060a3660046148e8565b611b5f565b6102ee61061d366004614736565b61213f565b6102ee610630366004614959565b6123f3565b6102ee61064336600461450b565b6124d1565b6104b46106563660046144e9565b600a6020525f908152604090205481565b6103386106753660046144e9565b600b6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102ee6106aa36600461464c565b61267d565b6106e86106bd3660046146e9565b601660209081525f928352604080842090915290825290208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610359565b6102ee610711366004614985565b612893565b6102ee6107243660046149f2565b612acb565b6102ee6107373660046144e9565b612c4c565b6104b461074a3660046146e9565b600e60209081525f928352604080842090915290825290205481565b60035473ffffffffffffffffffffffffffffffffffffffff16610338565b6102ee6107923660046144e9565b612f65565b6103386107a53660046144e9565b60156020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6103846107da3660046144e9565b60146020525f908152604090205460ff1681565b6107f6613015565b73ffffffffffffffffffffffffffffffffffffffff8116610843576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f15d0b1a02a4902c4788ceda199eb43e4a753d86c0dbb7412e8ba63feecb070fa906020015b60405180910390a150565b6108c5613015565b73ffffffffffffffffffffffffffffffffffffffff8216610912576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83165f9081526010602052604090205460ff1680610969575073ffffffffffffffffffffffffffffffffffffffff83165f9081526014602052604090205460ff165b61099f576040517f3be3aba200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516060810182528281525f60208201529081016109c26201518042614a49565b905273ffffffffffffffffffffffffffffffffffffffff8481165f81815260166020908152604080832094881680845294825291829020855181558582015160018201559482015160029095019490945551848152919290917f39ff4a05a64bdf7e1dcb0b2d6b7e35b6a720a9412386a9e193c0e93d29a18470910160405180910390a3505050565b335f9081526014602052604090205460ff16610a93576040517f99b01c4700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a9b613096565b610aa683838361311a565b610b1d610ab66060850185614a81565b808060200260200160405190810160405280939291908181526020015f905b82821015610b0157610af260408302860136819003810190614ae5565b81526020019060010190610ad5565b50610b1893505060608801915050604087016144e9565b61335f565b335f9081526015602052604081205473ffffffffffffffffffffffffffffffffffffffff16905b610b516080860186614a81565b9050811015610c4657610b676080860186614a81565b82818110610b7757610b77614b62565b90506040020160200135600e5f876040016020810190610b9791906144e9565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f90812090610bcc6080890189614a81565b85818110610bdc57610bdc614b62565b610bf292602060409092020190810191506144e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c399190614b8f565b9091555050600101610b44565b505f5b610c566060860186614a81565b9050811015610d4c575f610c6d6060870187614a81565b83818110610c7d57610c7d614b62565b610c9392602060409092020190810191506144e9565b90505f610ca36060880188614a81565b84818110610cb357610cb3614b62565b9050604002016020013590505f811315610cf957610cf43330610cd58461354d565b73ffffffffffffffffffffffffffffffffffffffff86169291906135bc565b610d42565b610d143383610d0f610d0a85614ba2565b61354d565b613698565b610d4284610d24610d0a84614ba2565b73ffffffffffffffffffffffffffffffffffffffff851691906137aa565b5050600101610c49565b505f5b610d5c6080860186614a81565b9050811015610e26575f610d736080870187614a81565b83818110610d8357610d83614b62565b610d9992602060409092020190810191506144e9565b9050610dcc3382610dad60808a018a614a81565b86818110610dbd57610dbd614b62565b90506040020160200135613698565b610e1d83610ddd6080890189614a81565b85818110610ded57610ded614b62565b905060400201602001358373ffffffffffffffffffffffffffffffffffffffff166137aa9092919063ffffffff16565b50600101610d4f565b507fb5689a012cf77dd0a99ac07ed6f83009d7fbfca323bca73b34d6ed02bf413ab8610e5860608601604087016144e9565b33610e666060880188614a81565b610e7360808a018a614a81565b604051610e8596959493929190614c36565b60405180910390a150610e96613800565b505050565b610ea3613015565b5f5b82811015610fa6575f600b81868685818110610ec357610ec3614b62565b610ed992602060409092020190810191506144e9565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040015f20541603610f39576040517fa7466cd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f9e82858584818110610f4f57610f4f614b62565b90506040020160200135868685818110610f6b57610f6b614b62565b610f8192602060409092020190810191506144e9565b73ffffffffffffffffffffffffffffffffffffffff16919061382a565b600101610ea5565b50505050565b610fb4613015565b73ffffffffffffffffffffffffffffffffffffffff831615801590610fee575073ffffffffffffffffffffffffffffffffffffffff821615155b611024576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611089576040517f88b43fad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8381165f81815260146020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016871515908117909155601583529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169588169590951790945583519283528201527f81e020344174972c59f6c11a8f6c90b141866214e3d9b544d030f0b532f5a10f91015b60405180910390a1505050565b61115d60608401604085016144e9565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526010602052604090205460ff1680156111a6575073ffffffffffffffffffffffffffffffffffffffff811633145b80611205575073ffffffffffffffffffffffffffffffffffffffff81165f9081526010602052604090205460ff168015611205575073ffffffffffffffffffffffffffffffffffffffff8181165f908152601160205260409020541633145b61123b576040517f897e65bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611243613096565b61124e848484613880565b5f5b61125d6060860186614a81565b9050811015611352576112736060860186614a81565b8281811061128357611283614b62565b90506040020160200135600e5f8760400160208101906112a391906144e9565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f908120906112d86060890189614a81565b858181106112e8576112e8614b62565b6112fe92602060409092020190810191506144e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113459190614b8f565b9091555050600101611250565b505f60128161136760608801604089016144e9565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040015f9081205490911691505b6113a46060870187614a81565b9050811015611455575f6113bb6060880188614a81565b838181106113cb576113cb614b62565b6113e192602060409092020190810191506144e9565b90505f6113f16060890189614a81565b8481811061140157611401614b62565b90506040020160200135905061142a88604001602081019061142391906144e9565b8383613698565b61144b73ffffffffffffffffffffffffffffffffffffffff831685836137aa565b5050600101611397565b507f455917442c530b052ee826d2556fad794f64a294e455930a63599688abbffa3c61148760608701604088016144e9565b6114946060880188614a81565b6040516114a393929190614ca1565b60405180910390a150610fa6613800565b6114bc613015565b73ffffffffffffffffffffffffffffffffffffffff8116611509576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f9eaa897564d022fb8c5efaf0acdb5d9d27b440b2aad44400b6e1c702e65b9ed3906020016108b2565b611584613015565b61158d5f6139aa565b565b335f9081526008602052604090205460ff166115d7576040517fd687c5f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8481165f908152600b60205260409020541615801590611631575073ffffffffffffffffffffffffffffffffffffffff8281165f908152600b60205260409020541615155b611667576040517fa7466cd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8086165f908152600d60209081526040808320938816835292905290812080548592906116aa908490614cd9565b909155505073ffffffffffffffffffffffffffffffffffffffff8086165f908152600d60209081526040808320938616835292905290812080548392906116f2908490614d00565b90915550505050505050565b611706613015565b73ffffffffffffffffffffffffffffffffffffffff8116611753576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f538bd377a1e0d2ceca49908f540bafa1d8616cf49a7bcefcd0b479e7531ff8aa906020016108b2565b600354339073ffffffffffffffffffffffffffffffffffffffff168114611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61187d816139aa565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260106020526040902054819060ff1680156118cb575073ffffffffffffffffffffffffffffffffffffffff811633145b8061192a575073ffffffffffffffffffffffffffffffffffffffff81165f9081526010602052604090205460ff16801561192a575073ffffffffffffffffffffffffffffffffffffffff8181165f908152601160205260409020541633145b611960576040517f897e65bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611968613096565b6119c38484808060200260200160405190810160405280939291908181526020015f905b828210156119b8576119a960408302860136819003810190614ae5565b8152602001906001019061198c565b50505050508361335f565b5f5b83811015611a4457611a3c33306119f68888868181106119e7576119e7614b62565b9050604002016020013561354d565b888886818110611a0857611a08614b62565b611a1e92602060409092020190810191506144e9565b73ffffffffffffffffffffffffffffffffffffffff169291906135bc565b6001016119c5565b507fc8aa82285b2a9e22e0bda601a759e4f578e78f18015e543a4f66bb120a726953828585604051611a7893929190614ca1565b60405180910390a1610fa6613800565b5f60608082808083611aba7f0000000000000000000000000000000000000000000000000000000000000000836139db565b611ae57f000000000000000000000000000000000000000000000000000000000000000060016139db565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60078181548110611b39575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60065473ffffffffffffffffffffffffffffffffffffffff163314611bb0576040517f16ced9a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015612101575f838383818110611bcd57611bcd614b62565b9050602002810190611bdf9190614d26565b611bed9060208101906144e9565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600a602052604090205490915061708090611c239042614b8f565b1015611c5b576040517f0dc2dde400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b848484818110611c6f57611c6f614b62565b9050602002810190611c819190614d26565b611c8f906020810190614d62565b90508110156120d2575f858585818110611cab57611cab614b62565b9050602002810190611cbd9190614d26565b611ccb906020810190614d62565b83818110611cdb57611cdb614b62565b611cf192602060609092020190810191506144e9565b90505f868686818110611d0657611d06614b62565b9050602002810190611d189190614d26565b611d26906020810190614d62565b84818110611d3657611d36614b62565b9050606002016020013590505f878787818110611d5557611d55614b62565b9050602002810190611d679190614d26565b611d75906020810190614d62565b85818110611d8557611d85614b62565b73ffffffffffffffffffffffffffffffffffffffff8681165f908152600b60205260409081902054606090930294909401939093013593509091169050611df8576040517fa7466cd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81156120295773ffffffffffffffffffffffffffffffffffffffff8084165f908152600b602090815260408083205481517f3ba0b9a9000000000000000000000000000000000000000000000000000000008152915193941692633ba0b9a9926004808401939192918290030181865afa158015611e78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9c9190614dc5565b73ffffffffffffffffffffffffffffffffffffffff8581165f908152600b6020526040908190205490517fc8cc5cd800000000000000000000000000000000000000000000000000000000815260048101879052929350169063c8cc5cd8906024015f604051808303815f87803b158015611f15575f5ffd5b505af1158015611f27573d5f5f3e3d5ffd5b50505050806064611f389190614ddc565b73ffffffffffffffffffffffffffffffffffffffff8086165f908152600b60209081526040918290205482517f3ba0b9a9000000000000000000000000000000000000000000000000000000008152925186949190911692633ba0b9a99260048083019391928290030181865afa158015611fb5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd99190614dc5565b611fe39190614b8f565b611fef90612710614ddc565b1115612027576040517f0aa1e28500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b80156120695773ffffffffffffffffffffffffffffffffffffffff83165f9081526009602052604081208054839290612063908490614df3565b90915550505b61207b6120768383614df3565b613a86565b73ffffffffffffffffffffffffffffffffffffffff8087165f908152600d60209081526040808320938816835292905290812080549091906120be908490614d00565b909155505060019093019250611c5d915050565b5073ffffffffffffffffffffffffffffffffffffffff165f908152600a60205260409020429055600101611bb2565b507f90e0333a7f11b37e50e152c45bb5ebfc2ce2ace82e290567861d3ae8529688748282604051612133929190614e06565b60405180910390a15050565b61214f60608401604085016144e9565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526010602052604090205460ff168015612198575073ffffffffffffffffffffffffffffffffffffffff811633145b806121f7575073ffffffffffffffffffffffffffffffffffffffff81165f9081526010602052604090205460ff1680156121f7575073ffffffffffffffffffffffffffffffffffffffff8181165f908152601160205260409020541633145b61222d576040517f897e65bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612235613096565b612240848484613b37565b6122b26122506060860186614a81565b808060200260200160405190810160405280939291908181526020015f905b8282101561229b5761228c60408302860136819003810190614ae5565b8152602001906001019061226f565b50610b1893505060608901915050604088016144e9565b5f6012816122c660608801604089016144e9565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040015f9081205490911691505b6123036060870187614a81565b90508110156123c1575f61231a6060880188614a81565b8381811061232a5761232a614b62565b61234092602060409092020190810191506144e9565b90505f6123506060890189614a81565b8481811061236057612360614b62565b9050604002016020013590505f811315612387576123823330610cd58461354d565b6123b7565b6123a761239a60608a0160408b016144e9565b83610d0f610d0a85614ba2565b6123b784610d24610d0a84614ba2565b50506001016122f6565b507f0279bcc316c233db88e8f3e463dcefc7fa661da21bc66eadc60f3835e41bba1161148760608701604088016144e9565b6123fb613015565b73ffffffffffffffffffffffffffffffffffffffff8216612448576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181526008602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f947aca305c9b8d94b31792a7f80d331c9452e743508d61331561378673b50103910160405180910390a25050565b73ffffffffffffffffffffffffffffffffffffffff821661251e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045473ffffffffffffffffffffffffffffffffffffffff16331461256f576040517fdcdd32f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83165f908152600960205260409020548111156125cd576040517fce11c63900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83165f9081526009602052604081208054839290612601908490614b8f565b90915550612628905073ffffffffffffffffffffffffffffffffffffffff841683836137aa565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fde13184e8cbb6eccbcecfc796bf8820e5ffde0534c01b4fabed4b05982964a4490606001611140565b612685613096565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526010602052604090205460ff166126e3576040517f897e65bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8281101561284f575f84848381811061270057612700614b62565b61271692602060409092020190810191506144e9565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600f602052604090205490915060ff16612777576040517f918aa47f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f85858481811061278a5761278a614b62565b90506040020160200135905080600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461281d9190614df3565b90915550612845905073ffffffffffffffffffffffffffffffffffffffff83163330846135bc565b50506001016126e5565b507f770dafe0b413d5c277b5f1a9d1d725e5ebafe92b5a16f3ebaae6e49e43b6649981848460405161288393929190614ca1565b60405180910390a1610e96613800565b61289b613015565b73ffffffffffffffffffffffffffffffffffffffff8516158015906128d5575073ffffffffffffffffffffffffffffffffffffffff841615155b80156128f6575073ffffffffffffffffffffffffffffffffffffffff831615155b61292c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561299457508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6129ca576040517f5bc7a3a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8581165f81815260106020908152604080832080548815157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091821681179092556011845282852080548c89167fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255601286528487208054998d169990911689179055601385529483902080548915159216821790558251918252928101929092528101919091526060810192909252907f2353ec0fe56a376d3269d3e65521f1ce07dc5f544cc5b0ba4eb2ff03f771a4ad9060800160405180910390a25050505050565b335f908152600f602052604090205460ff16612b13576040517f918aa47f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1663c70920bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b809190614dc5565b811115612bb9576040517fff75bad100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c4882823373ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2b9190614f9d565b73ffffffffffffffffffffffffffffffffffffffff1691906137aa565b5050565b612c54613015565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600f602052604090205460ff1615612cb3576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cfd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d219190614f9d565b73ffffffffffffffffffffffffffffffffffffffff8082165f908152600b602052604090205491925016158015612def57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663e2498f726040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dd79190614f9d565b73ffffffffffffffffffffffffffffffffffffffff16145b612e25576040517f9db8d5b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116612e72576040517ff418616400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8181165f908152600b6020908152604080832080549487167fffffffffffffffffffffffff00000000000000000000000000000000000000009586168117909155808452600f835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556007805491820181559094527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889093018054909416831790935591519081527fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f9101612133565b612f6d613015565b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155612fd060025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60025473ffffffffffffffffffffffffffffffffffffffff16331461158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161186b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c156130ef576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158d7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006001613bbd565b4283602001351015613158576040517ffef01cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131628335613bc4565b5f7f76c5f3d53a01a9f0a59b081b22aba3a0f03248e9241993e97d1d025ef2ffaac28435602086013561319b60608801604089016144e9565b6131a86060890189614a81565b6040516020016131b9929190614fb8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101206131fc60808a018a614a81565b60405160200161320d929190614fb8565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181528282528051602091820120335f90815260158352839020549184019890985290820195909552606081019390935273ffffffffffffffffffffffffffffffffffffffff918216608084015260a083015260c0820193909352911660e0820152610100015b6040516020818303038152906040528051906020012090505f6132be82613c44565b90505f6133008286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613c8b92505050565b60055490915073ffffffffffffffffffffffffffffffffffffffff808316911614613357576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b81515f5b81811015610fa6575f84828151811061337e5761337e614b62565b60200260200101515f015190505f85838151811061339e5761339e614b62565b60209081029190910181015181015173ffffffffffffffffffffffffffffffffffffffff8088165f908152600d845260408082209287168252919093528220549092506133ec908390614cd9565b73ffffffffffffffffffffffffffffffffffffffff8481165f908152600b60205260409020549192501661344c576040517ff418616400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8087165f908152600d6020908152604080832093871683529290529081205461348b908490614fcb565b1215806134d4575073ffffffffffffffffffffffffffffffffffffffff8087165f908152600d602090815260408083209387168352929052908120546134d2908390614fcb565b125b1561350b576040517f09a09f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8087165f908152600d60209081526040808320969093168252949094529092209190915550600101613363565b5f5f8212156135b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015260640161186b565b5090565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610fa69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613cad565b73ffffffffffffffffffffffffffffffffffffffff8084165f9081526016602090815260408083209386168352929052908120906136d96201518042614a49565b90505f82600201548211156136ef575082613702565b8383600101546136ff9190614df3565b90505b82541580613711575082548111155b613747576040517ff5b71ffc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825293548452602080850192835284820193845273ffffffffffffffffffffffffffffffffffffffff9788165f9081526016825282812097909816885295909552939094209051815591516001830155509051600290910155565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610e969084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613616565b61158d7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005f613bbd565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610e969084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401613616565b42836020013510156138be576040517ffef01cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6138c88335613bc4565b5f7f6b9aa5f8de278806afcc63bb2d2e633b4da3536375ca60f09ae8fae5829b3c468435602086013561390160608801604089016144e9565b61390e6060890189614a81565b60405160200161391f929190614fb8565b6040516020818303038152906040528051906020012060125f8a604001602081019061394b91906144e9565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182015f2054825193840198909852908201959095526060810193909352908316608083015260a0820152911660c082015260e00161329c565b600380547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561187d81613dba565b606060ff83146139f5576139ee83613e30565b9050613a80565b818054613a0190615016565b80601f0160208091040260200160405190810160405280929190818152602001828054613a2d90615016565b8015613a785780601f10613a4f57610100808354040283529160200191613a78565b820191905f5260205f20905b815481529060010190602001808311613a5b57829003601f168201915b505050505090505b92915050565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156135b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e74323536000000000000000000000000000000000000000000000000606482015260840161186b565b4283602001351015613b75576040517ffef01cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b7f8335613bc4565b5f7fe83563cdfbb4d31bd8759eea5a634fbe67ea13b6739d04d2426c621fee979fa48435602086013561390160608801604089016144e9565b905090565b80825d5050565b5f818152600c602052604090205460ff1615613c0c576040517f1f6d5aef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b5f613a80613c50613e6d565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f5f5f613c988585613fa3565b91509150613ca581613fe5565b509392505050565b5f613d0e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166141979092919063ffffffff16565b905080515f1480613d2e575080806020019051810190613d2e9190615061565b610e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161186b565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60605f613e3c836141ad565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015613ed257507f000000000000000000000000000000000000000000000000000000000000000046145b15613efc57507f000000000000000000000000000000000000000000000000000000000000000090565b613bb8604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f5f8251604103613fd7576020830151604084015160608501515f1a613fcb878285856141ed565b94509450505050613fde565b505f905060025b9250929050565b5f816004811115613ff857613ff861507c565b036140005750565b60018160048111156140145761401461507c565b0361407b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161186b565b600281600481111561408f5761408f61507c565b036140f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161186b565b600381600481111561410a5761410a61507c565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161186b565b60606141a584845f856142d5565b949350505050565b5f60ff8216601f811115613a80576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561422257505f905060036142cc565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614273573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166142c6575f600192509250506142cc565b91505f90505b94509492505050565b606082471015614367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161186b565b5f5f8673ffffffffffffffffffffffffffffffffffffffff16858760405161438f91906150a9565b5f6040518083038185875af1925050503d805f81146143c9576040519150601f19603f3d011682016040523d82523d5f602084013e6143ce565b606091505b50915091506143df878383876143ea565b979650505050505050565b6060831561447f5782515f036144785773ffffffffffffffffffffffffffffffffffffffff85163b614478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161186b565b50816141a5565b6141a583838151156144945781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b91906150bf565b73ffffffffffffffffffffffffffffffffffffffff8116811461187d575f5ffd5b5f602082840312156144f9575f5ffd5b8135614504816144c8565b9392505050565b5f5f5f6060848603121561451d575f5ffd5b8335614528816144c8565b92506020840135614538816144c8565b929592945050506040919091013590565b5f5f83601f840112614559575f5ffd5b50813567ffffffffffffffff811115614570575f5ffd5b602083019150836020828501011115613fde575f5ffd5b5f5f5f60408486031215614599575f5ffd5b833567ffffffffffffffff8111156145af575f5ffd5b840160a081870312156145c0575f5ffd5b9250602084013567ffffffffffffffff8111156145db575f5ffd5b6145e786828701614549565b9497909650939450505050565b5f60208284031215614604575f5ffd5b5035919050565b5f5f83601f84011261461b575f5ffd5b50813567ffffffffffffffff811115614632575f5ffd5b6020830191508360208260061b8501011115613fde575f5ffd5b5f5f5f6040848603121561465e575f5ffd5b833567ffffffffffffffff811115614674575f5ffd5b6146808682870161460b565b9094509250506020840135614694816144c8565b809150509250925092565b801515811461187d575f5ffd5b5f5f5f606084860312156146be575f5ffd5b83356146c9816144c8565b925060208401356146d9816144c8565b915060408401356146948161469f565b5f5f604083850312156146fa575f5ffd5b8235614705816144c8565b91506020830135614715816144c8565b809150509250929050565b5f60808284031215614730575f5ffd5b50919050565b5f5f5f60408486031215614748575f5ffd5b833567ffffffffffffffff81111561475e575f5ffd5b61476a86828701614720565b935050602084013567ffffffffffffffff8111156145db575f5ffd5b5f5f5f5f5f60a0868803121561479a575f5ffd5b85356147a5816144c8565b945060208601356147b5816144c8565b93506040860135925060608601356147cc816144c8565b949793965091946080013592915050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f61486360e08301896147dd565b828103604084015261487581896147dd565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156148d75783518352602093840193909201916001016148b9565b50909b9a5050505050505050505050565b5f5f602083850312156148f9575f5ffd5b823567ffffffffffffffff81111561490f575f5ffd5b8301601f8101851361491f575f5ffd5b803567ffffffffffffffff811115614935575f5ffd5b8560208260051b8401011115614949575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561496a575f5ffd5b8235614975816144c8565b915060208301356147158161469f565b5f5f5f5f5f60a08688031215614999575f5ffd5b85356149a4816144c8565b945060208601356149b4816144c8565b935060408601356149c4816144c8565b925060608601356149d48161469f565b915060808601356149e48161469f565b809150509295509295909350565b5f5f60408385031215614a03575f5ffd5b8235614a0e816144c8565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82614a7c577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ab4575f5ffd5b83018035915067ffffffffffffffff821115614ace575f5ffd5b6020019150600681901b3603821315613fde575f5ffd5b5f6040828403128015614af6575f5ffd5b506040805190810167ffffffffffffffff81118282101715614b3f577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040528235614b4d816144c8565b81526020928301359281019290925250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b81810381811115613a8057613a80614a1c565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614bd257614bd2614a1c565b505f0390565b8183526020830192505f815f5b84811015614c2c578135614bf8816144c8565b73ffffffffffffffffffffffffffffffffffffffff1686526020828101359087015260409586019590910190600101614be5565b5093949350505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff86166020820152608060408201525f614c81608083018688614bd8565b8281036060840152614c94818587614bd8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201525f614cd0604083018486614bd8565b95945050505050565b8082018281125f831280158216821582161715614cf857614cf8614a1c565b505092915050565b8181035f831280158383131683831282161715614d1f57614d1f614a1c565b5092915050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614d58575f5ffd5b9190910192915050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614d95575f5ffd5b83018035915067ffffffffffffffff821115614daf575f5ffd5b6020019150606081023603821315613fde575f5ffd5b5f60208284031215614dd5575f5ffd5b5051919050565b8082028115828204841417613a8057613a80614a1c565b80820180821115613a8057613a80614a1c565b602080825281018290525f6040600584901b8301810190830185837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc136839003015b87821015614f90577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528235818112614e84575f5ffd5b8901604086018135614e95816144c8565b73ffffffffffffffffffffffffffffffffffffffff1687526020820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112614ee2575f5ffd5b60209201918201913567ffffffffffffffff811115614eff575f5ffd5b606081023603831315614f10575f5ffd5b60406020890152908190525f90606088015b81831015614f74578335614f35816144c8565b73ffffffffffffffffffffffffffffffffffffffff16815260208481013590820152604080850135908201526060938401936001939093019201614f22565b9750505060209485019493909301925060019190910190614e48565b5092979650505050505050565b5f60208284031215614fad575f5ffd5b8151614504816144c8565b602081525f6141a5602083018486614bd8565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561500257615002614a1c565b8181058314821517613a8057613a80614a1c565b600181811c9082168061502a57607f821691505b602082108103614730577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215615071575f5ffd5b81516145048161469f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f82518060208501845e5f920191825250919050565b602081525f61450460208301846147dd56fea2646970667358221220a0ba8db9f3d9a667e49717c5614618d481311d4c3e69e51e9b53166a80821e6764736f6c634300081c0033