0 txs
8.7k calls
constructor
constructor(address evc_, address poolManager_)
functions
computeQuote
viewfunction computeQuote(address tokenIn, address tokenOut, uint256 amount, bool exactIn) view returns (uint256)
curve
viewfunction curve() view returns (bytes32)
EVC
viewfunction EVC() view returns (address)
getAssets
viewfunction getAssets() view returns (address asset0, address asset1)
getHookPermissions
purefunction getHookPermissions() pure returns (tuple)
getLimits
viewfunction getLimits(address tokenIn, address tokenOut) view returns (uint256, uint256)
getParams
purefunction getParams() pure returns (tuple)
getReserves
viewfunction getReserves() view returns (uint112, uint112, uint32)
poolKey
viewfunction poolKey() view returns (tuple)
poolManager
viewfunction poolManager() view returns (address)
activate
nonpayablefunction activate(tuple initialState)
afterAddLiquidity
nonpayablefunction afterAddLiquidity(address sender, tuple key, tuple params, int256 delta, int256 feesAccrued, bytes hookData) returns (bytes4, int256)
afterDonate
nonpayablefunction afterDonate(address sender, tuple key, uint256 amount0, uint256 amount1, bytes hookData) returns (bytes4)
afterInitialize
nonpayablefunction afterInitialize(address sender, tuple key, uint160 sqrtPriceX96, int24 tick) returns (bytes4)
afterRemoveLiquidity
nonpayablefunction afterRemoveLiquidity(address sender, tuple key, tuple params, int256 delta, int256 feesAccrued, bytes hookData) returns (bytes4, int256)
afterSwap
nonpayablefunction afterSwap(address sender, tuple key, tuple params, int256 delta, bytes hookData) returns (bytes4, int128)
beforeAddLiquidity
nonpayablefunction beforeAddLiquidity(address sender, tuple key, tuple params, bytes hookData) returns (bytes4)
beforeDonate
nonpayablefunction beforeDonate(address sender, tuple key, uint256 amount0, uint256 amount1, bytes hookData) returns (bytes4)
beforeInitialize
nonpayablefunction beforeInitialize(address sender, tuple key, uint160 sqrtPriceX96) returns (bytes4)
beforeRemoveLiquidity
nonpayablefunction beforeRemoveLiquidity(address sender, tuple key, tuple params, bytes hookData) returns (bytes4)
beforeSwap
nonpayablefunction beforeSwap(address sender, tuple key, tuple params, bytes hookData) returns (bytes4, int256, uint24)
swap
nonpayablefunction swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data)
events
EulerSwapActivated
event EulerSwapActivated(address indexed asset0, address indexed asset1)
Swap
event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, uint112 reserve0, uint112 reserve1, address indexed to)
errors
AlreadyActivated
error AlreadyActivated()
AmountTooBig
error AmountTooBig()
AssetsOutOfOrderOrEqual
error AssetsOutOfOrderOrEqual()
BadParam
error BadParam()
ControllerDisabled
error ControllerDisabled()
CurveViolation
error CurveViolation()
DepositFailure
error DepositFailure(bytes reason)
EVC_InvalidAddress
error EVC_InvalidAddress()
HookNotImplemented
error HookNotImplemented()
InsufficientCalldata
error InsufficientCalldata()
Locked
error Locked()
LockedHook
error LockedHook()
NotAuthorized
error NotAuthorized()
NotPoolManager
error NotPoolManager()
OperatorNotInstalled
error OperatorNotInstalled()
Overflow
error Overflow()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SwapLimitExceeded
error SwapLimitExceeded()
UnsupportedPair
error UnsupportedPair()
creation bytecode
0x60e060405234801561000f575f5ffd5b506040516160e43803806160e483398101604081905261002e916100d3565b81818080836001600160a01b03811661005a57604051638133abd160e01b815260040160405180910390fd5b6001600160a01b039081166080521660a05250506001600160a01b031660c0525f7fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df9180546001600160e01b0316600160e11b17905550610104915050565b80516001600160a01b03811681146100ce575f5ffd5b919050565b5f5f604083850312156100e4575f5ffd5b6100ed836100b8565b91506100fb602084016100b8565b90509250929050565b60805160a05160c051615ef96101eb5f395f81816131b401528181613201015281816133a301526134e101525f818161067801528181610c7101528181611462015281816114c7015281816116ba0152818161174901528181611a1501528181611aa201528181611b2d01528181613047015281816132b80152818161340301528181613527015261354d01525f81816104b1015281816108150152818161084b015281816108f90152818161092a0152818161135c0152818161140a015281816118410152818161196001528181611b9b015281816121e9015261223d0152615ef95ff3fe608060405234801561000f575f5ffd5b5060043610610179575f3560e01c80637165485d116100d2578063b47b2fb111610088578063dc4c90d311610063578063dc4c90d314610673578063dc98354e1461069a578063e1b4af691461056c575f5ffd5b8063b47b2fb11461051e578063b6a8b0fa1461056c578063c4e833ce1461057f575f5ffd5b80639f063efc116100b85780639f063efc14610409578063a70354a1146104af578063aaed87a3146104f6575f5ffd5b80637165485d146104675780638e0dc28d1461049c575f5ffd5b8063536aeb721161013257806367e4ac2c1161010d57806367e4ac2c146103d45780636c2bbe7e146104095780636fe7e6eb14610454575f5ffd5b8063536aeb7214610356578063575e24b4146103695780635e615a6b146103bf575f5ffd5b8063182148ef11610162578063182148ef146101d257806321d0ee7014610312578063259982e514610312575f5ffd5b8063022c0d9f1461017d5780630902f1ac14610192575b5f5ffd5b61019061018b3660046151a8565b6106ad565b005b61019a610b56565b604080516dffffffffffffffffffffffffffff948516815293909216602084015263ffffffff16908201526060015b60405180910390f35b6102876040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a0810182525f5473ffffffffffffffffffffffffffffffffffffffff9081168252600154808216602084015262ffffff740100000000000000000000000000000000000000008204169383019390935277010000000000000000000000000000000000000000000000909204600290810b606083015254909116608082015290565b6040516101c991905f60a08201905073ffffffffffffffffffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff602084015116602083015262ffffff6040840151166040830152606083015160020b606083015273ffffffffffffffffffffffffffffffffffffffff608084015116608083015292915050565b61032561032036600461522d565b610c58565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101c9565b610190610364366004615287565b610ce1565b61037c6103773660046152b0565b6114ac565b604080517fffffffff000000000000000000000000000000000000000000000000000000009094168452602084019290925262ffffff16908201526060016101c9565b6103c761153c565b6040516101c9919061530a565b6103dc6115a9565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101c9565b61041c61041736600461542f565b6116a0565b604080517fffffffff0000000000000000000000000000000000000000000000000000000090931683526020830191909152016101c9565b6103256104623660046154c8565b611730565b61048e7f45756c657253776170207631000000000000000000000000000000000000000081565b6040519081526020016101c9565b61048e6104aa36600461552e565b6117ac565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c9565b610509610504366004615573565b61187e565b604080519283526020830191909152016101c9565b61053161052c3660046155aa565b6119fb565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352600f9190910b6020830152016101c9565b61032561057a36600461562b565b611a89565b610666604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018190526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b6040516101c99190615685565b6104d17f000000000000000000000000000000000000000000000000000000000000000081565b6103256106a836600461579f565b611b14565b6106b5611b99565b5f7fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df9180549091507c0100000000000000000000000000000000000000000000000000000000900463ffffffff1660011461073b576040517f0f2e5b6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c02000000000000000000000000000000000000000000000000000000001781556dffffffffffffffffffffffffffff86118015906107a857506dffffffffffffffffffffffffffff8511155b6107de576040517f6b2f218300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df915f610808611c46565b90508715610840576108407f000000000000000000000000000000000000000000000000000000000000000082835f01518b8a611d1d565b8615610877576108777f00000000000000000000000000000000000000000000000000000000000000008283602001518a8a611d1d565b83156108f3578573ffffffffffffffffffffffffffffffffffffffff16638f536f3e6108a16121d0565b8a8a89896040518663ffffffff1660e01b81526004016108c59594939291906157e6565b5f604051808303815f87803b1580156108dc575f5ffd5b505af11580156108ee573d5f5f3e3d5ffd5b505050505b5f6109227f000000000000000000000000000000000000000000000000000000000000000083845f01516122c3565b90505f6109547f00000000000000000000000000000000000000000000000000000000000000008485602001516122c3565b84549091505f908b906109789085906dffffffffffffffffffffffffffff1661588a565b610982919061589d565b85549091505f908b906109b89085906e01000000000000000000000000000090046dffffffffffffffffffffffffffff1661588a565b6109c2919061589d565b90506109cf85838361296a565b610a05576040517fd93c670b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85546dffffffffffffffffffffffffffff9182166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909116919092161717845573ffffffffffffffffffffffffffffffffffffffff8816610a756121d0565b855460408051868152602081018690528082018f9052606081018e90526dffffffffffffffffffffffffffff80841660808301526e01000000000000000000000000000090930490921660a08301525173ffffffffffffffffffffffffffffffffffffffff92909216917f4813b0ad1586a6c47f088a07b488c1eadc58e7e7a9c3f1a71b3f33c5379133aa9181900360c00190a3505082547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c01000000000000000000000000000000000000000000000000000000001790925550505050505050565b5f8080807fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df9180549091507c0100000000000000000000000000000000000000000000000000000000900463ffffffff16600203610bdf576040517f0f2e5b6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50507fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df91546dffffffffffffffffffffffffffff808216946e010000000000000000000000000000830490911693507c010000000000000000000000000000000000000000000000000000000090910463ffffffff169150565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610cc8576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd58686868686612a9a565b90505b95945050505050565b7fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df915f610d0b611c46565b82549091507c0100000000000000000000000000000000000000000000000000000000900463ffffffff1615610d6d576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000178255610120810151670de0b6b3a764000011610df4576040517fde17a3af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160a00151118015610e0a57505f8160c00151115b610e40576040517fde17a3af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6a084595161401484a0000008160a0015111158015610e6e57506a084595161401484a0000008160c0015111155b610ea4576040517fde17a3af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400008160e0015111158015610ecd5750670de0b6b3a764000081610100015111155b610f03576040517fde17a3af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f815f015173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7491906158b0565b90505f826020015173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe891906158b0565b90508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161061104f576040517fd54a47c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe9944f93cd869a79abb7a39884b29cf3572456b35cd63ac130a2749a0d90d56d60405160405180910390a3506110b9905060208401846158e8565b82547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff9190911617825561110360408401602085016158e8565b82546dffffffffffffffffffffffffffff9182166e0100000000000000000000000000009081027fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff8316811780875561116b948694928116928116929092179290041661296a565b6111a1576040517fd93c670b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81546dffffffffffffffffffffffffffff161561124157815461120a9082906111dc906001906dffffffffffffffffffffffffffff16615901565b84546dffffffffffffffffffffffffffff918216916e0100000000000000000000000000009091041661296a565b15611241576040517fd93c670b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81546e01000000000000000000000000000090046dffffffffffffffffffffffffffff16156112f05781546112b99082906dffffffffffffffffffffffffffff808216916112a4916001916e010000000000000000000000000000900416615901565b6dffffffffffffffffffffffffffff1661296a565b156112f0576040517fd93c670b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516112fb90612acd565b6113088160200151612acd565b604081810151825191517fd44fee5a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063d44fee5a906044015f604051808303815f87803b15801561139d575f5ffd5b505af11580156113af573d5f5f3e3d5ffd5b50505050604081810151602083015191517fd44fee5a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063d44fee5a906044015f604051808303815f87803b15801561144b575f5ffd5b505af115801561145d573d5f5f3e3d5ffd5b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161590506114a7576114a781612cdd565b505050565b5f80803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461151e576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152b88888888886130ba565b925092509250955095509592505050565b60408051610180810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101919091526115a4611c46565b905090565b5f5f5f6115b4611c46565b9050805f015173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611602573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162691906158b0565b9250806020015173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611675573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169991906158b0565b9150509091565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611711576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611720898989898989896139dd565b9150915097509795505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146117a0576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd885858585612a9a565b7fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df9180545f91907c0100000000000000000000000000000000000000000000000000000000900463ffffffff16600203611831576040517f0f2e5b6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61183a611c46565b90506118737f00000000000000000000000000000000000000000000000000000000000000008261186c848b8b613a11565b8888613c1b565b979650505050505050565b7fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df9180545f9182917c0100000000000000000000000000000000000000000000000000000000900463ffffffff16600203611904576040517f0f2e5b6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61190d611c46565b60408181015190517f1647292a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201523060248201529192507f00000000000000000000000000000000000000000000000000000000000000001690631647292a90604401602060405180830381865afa1580156119a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c99190615927565b6119d9575f5f93509350506119f3565b6119ed816119e8838989613a11565b613e71565b93509350505b509250929050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a6c576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a7a8888888888886139dd565b91509150965096945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611af9576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b07878787878787612a9a565b90505b9695505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611b84576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b8f848484612a9a565b90505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81163303611bda5750565b7f1f8b5215000000000000000000000000000000000000000000000000000000005f52306004523360245234604452608060645236608452365f60a4375f3660a401525f5f601f19601f36011660a4015f34855af13d5f5f3e808015611c425760403d036040f35b3d5ffd5b60408051610180810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152610180361015611ce2576040517fa7c1249900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d10367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe808101815f615942565b8101906115a49190615a0f565b60408085015190517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201525f918291908616906370a0823190602401602060405180830381865afa158015611d91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db59190615ad2565b90508015611e4f576040517f07a2d13a0000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8616906307a2d13a90602401602060405180830381865afa158015611e26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e4a9190615ad2565b611e51565b5f5b9150508015611fd1575f818410611e685781611e6a565b835b60408088015190516024810183905273ffffffffffffffffffffffffffffffffffffffff8681166044830152828116606483015292935091891691631f8b52159188915f90608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb460af9400000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b168152611f629493929190600401615b35565b5f604051808303815f875af1158015611f7d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fc29190810190615b85565b50611fcd818561589d565b9350505b82156121c85760408581015190517fc368516c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015285821660248201529087169063c368516c906044015f604051808303815f87803b15801561204b575f5ffd5b505af115801561205d573d5f5f3e3d5ffd5b505050508573ffffffffffffffffffffffffffffffffffffffff16631f8b52158587604001515f87876040516024016120b692919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4b3fd14800000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526121669493929190600401615b35565b5f604051808303815f875af1158015612181573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526121c69190810190615b85565b505b505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681036122be576040517f18503a1e0000000000000000000000000000000000000000000000000000000081525f60048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906318503a1e906024016040805180830381865afa158015612296573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ba9190615c37565b5090505b919050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061233291906158b0565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091505f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561239f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c39190615ad2565b9050805f036123d6575f92505050611b92565b5f670de0b6b3a7640000866101200151836123f19190615c64565b6123fb9190615ca8565b61016087015190915073ffffffffffffffffffffffffffffffffffffffff161561248f575f670de0b6b3a76400008761014001518361243a9190615c64565b6124449190615ca8565b9050801561248d576101608701516124749073ffffffffffffffffffffffffffffffffffffffff86169083614399565b61247e818461589d565b925061248a818361589d565b91505b505b60408681015190517f47cfdac400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015286821660248201525f918916906347cfdac490604401602060405180830381865afa158015612508573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061252c9190615927565b156127b55760408781015190517fd283e75f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201525f9188169063d283e75f90602401602060405180830381865afa1580156125a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c69190615ad2565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663acb708158387116125f257866125f4565b835b8b604001516040518363ffffffff1660e01b815260040161263592919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b6020604051808303815f875af1158015612651573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126759190615ad2565b9050612681818661589d565b945061268d818361589d565b9150612699818461588a565b9250815f036127b2576040808a0151815160048082526024820184526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f869e50c70000000000000000000000000000000000000000000000000000000017905292517f1f8b521500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e1693631f8b521593612750938e9391925f9201615b35565b5f604051808303815f875af115801561276b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526127b09190810190615b85565b505b50505b82156129475760408781015190517f6e553f650000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff918216602482015290871690636e553f65906044016020604051808303815f875af192505050801561286f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261286c91810190615ad2565b60015b612938573d80801561289c576040519150601f19603f3d011682016040523d82523d5f602084013e6128a1565b606091505b507fca0985cf000000000000000000000000000000000000000000000000000000006128cc82615cbb565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614819061292e576040517f83428ad40000000000000000000000000000000000000000000000000000000081526004016129259190615d27565b60405180910390fd5b505f93505061293a565b505b612944838261588a565b90505b818111612954575f61295e565b61295e828261589d565b98975050505050505050565b5f6dffffffffffffffffffffffffffff83118061299457506dffffffffffffffffffffffffffff82115b156129a057505f611b92565b83606001516dffffffffffffffffffffffffffff168310612a2b5783608001516dffffffffffffffffffffffffffff1682106129de57506001611b92565b612a21828560c001518660a0015187608001516dffffffffffffffffffffffffffff1688606001516dffffffffffffffffffffffffffff1689610100015161441a565b8310159050611b92565b83608001516dffffffffffffffffffffffffffff16821015612a4e57505f611b92565b612a90838560a001518660c0015187606001516dffffffffffffffffffffffffffff1688608001516dffffffffffffffffffffffffffff168960e0015161441a565b8210159050611b92565b5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b17573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b3b91906158b0565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663c52249836040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b87573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bab91906158b0565b905073ffffffffffffffffffffffffffffffffffffffff8116612c09576114a773ffffffffffffffffffffffffffffffffffffffff8316847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6144c6565b612c4a73ffffffffffffffffffffffffffffffffffffffff8316827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6144c6565b6040517f87517c4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015284811660248301526044820181905265ffffffffffff60648301528216906387517c45906084015f604051808303815f87803b158015612ccb575f5ffd5b505af11580156121c6573d5f5f3e3d5ffd5b612dcd30612dc8604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018190526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b6145a3565b5f815f015173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e3e91906158b0565b90505f826020015173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb291906158b0565b90505f64e8d4a51000846101200151612ecb9190615ca8565b6040805160a0808201835273ffffffffffffffffffffffffffffffffffffffff8781168084528782166020850181905262ffffff8781168688018190526001606088018190523060809098018890525f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116871790915581547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff740100000000000000000000000000000000000000009094027fffffffffffffffffff000000000000000000000000000000000000000000000090911690951794909417918216770100000000000000000000000000000000000000000000001790819055600280549094168817845597517f6276cbbe0000000000000000000000000000000000000000000000000000000081526004810194909452841660248401529386901c909316604482015260b89490941c90910b606484015260848301919091526c0100000000000000000000000060a48301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636276cbbe9060c4016020604051808303815f875af115801561308f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130b39190615d39565b5050505050565b5f8080807fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df9180549091507c0100000000000000000000000000000000000000000000000000000000900463ffffffff16600114613143576040517f28561ddc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c02000000000000000000000000000000000000000000000000000000001790555f61318d611c46565b90505f80808060208b0135811380156131f5576131ad60208d0135615d54565b91506131ee7f0000000000000000000000000000000000000000000000000000000000000000878e5f0160208101906131e69190615d8a565b856001613c1b565b935061323d565b8b60200135935061323a7f0000000000000000000000000000000000000000000000000000000000000000878e5f0160208101906132339190615d8a565b875f613c1b565b91505b806132815761327c61324e8561470c565b61325790615da5565b6132608461470c565b6fffffffffffffffffffffffffffffffff1660809190911b1790565b61329f565b61329f61328d8361470c565b6132968661470c565b61326090615da5565b925073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016630b0d9c096132ea60208f018f615d8a565b613306578e60200160208101906133019190615de1565b613318565b8e5f0160208101906133189190615de1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152306024820152604481018590526064015f604051808303815f87803b158015613388575f5ffd5b505af115801561339a573d5f5f3e3d5ffd5b505050506133ea7f0000000000000000000000000000000000000000000000000000000000000000878e5f0160208101906133d59190615d8a565b6133e35788602001516122c3565b88516122c3565b945073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a584119461343560208f018f615d8a565b613450578e5f01602081019061344b9190615de1565b613463565b8e60200160208101906134639190615de1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015f604051808303815f87803b1580156134c6575f5ffd5b505af11580156134d8573d5f5f3e3d5ffd5b5050505061354b7f0000000000000000000000000000000000000000000000000000000000000000878e5f0160208101906135139190615d8a565b61351e578851613524565b88602001515b877f0000000000000000000000000000000000000000000000000000000000000000611d1d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af11580156135b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d99190615ad2565b5050505f6136047fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df9190565b90505f61361460208d018d615d8a565b61363a5781546136359085906dffffffffffffffffffffffffffff1661589d565b613657565b81546136579086906dffffffffffffffffffffffffffff1661588a565b90505f61366760208e018e615d8a565b156136a057825461369b9086906e01000000000000000000000000000090046dffffffffffffffffffffffffffff1661589d565b6136cf565b82546136cf9087906e01000000000000000000000000000090046dffffffffffffffffffffffffffff1661588a565b90506136dc87838361296a565b613712576040517fd93c670b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82546dffffffffffffffffffffffffffff8281166e010000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009092169084161717835561376f60208e018e615d8a565b15613857573373ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff167f4813b0ad1586a6c47f088a07b488c1eadc58e7e7a9c3f1a71b3f33c5379133aa885f5f8a895f015f9054906101000a90046dffffffffffffffffffffffffffff168a5f01600e9054906101000a90046dffffffffffffffffffffffffffff1660405161384a969594939291909586526020860194909452604085019290925260608401526dffffffffffffffffffffffffffff90811660808401521660a082015260c00190565b60405180910390a3613936565b3373ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff167f4813b0ad1586a6c47f088a07b488c1eadc58e7e7a9c3f1a71b3f33c5379133aa5f89895f895f015f9054906101000a90046dffffffffffffffffffffffffffff168a5f01600e9054906101000a90046dffffffffffffffffffffffffffff1660405161392d969594939291909586526020860194909452604085019290925260608401526dffffffffffffffffffffffffffff90811660808401521660a082015260c00190565b60405180910390a35b507f575e24b40000000000000000000000000000000000000000000000000000000098509196505f955050505050505f61398d7fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df9190565b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000017905550919790965090945092505050565b5f5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f845f015173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8391906158b0565b90505f856020015173ffffffffffffffffffffffffffffffffffffffff166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ad3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af791906158b0565b90508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015613b5f57508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613b6d5760019250613c12565b8073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015613bd357508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613be0575f9250613c12565b6040517f4617192b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509392505050565b5f825f03613c2a57505f610cd8565b60408581015190517f1647292a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015230602482015290871690631647292a90604401602060405180830381865afa158015613ca0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cc49190615927565b613cfa576040517f715756a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6dffffffffffffffffffffffffffff831115613d42576040517f7468c7a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101208501518215613d7857670de0b6b3a7640000613d618286615c64565b613d6b9190615ca8565b613d75908561589d565b93505b5f5f613d848888613e71565b915091505f613d958988888b614751565b90508515613de857828711158015613dad5750818111155b613de3576040517f7468c7a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e2e565b818711158015613df85750828111155b613e2e576040517f7468c7a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85613e6457613e4584670de0b6b3a764000061589d565b613e5782670de0b6b3a7640000615c64565b613e619190615ca8565b90505b9998505050505050505050565b6040820151825160208401515f9283927fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df91926dffffffffffffffffffffffffffff92839290918689613ec35781613ec5565b825b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192505f9183169063402d267d90602401602060405180830381865afa158015613f34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f589190615ad2565b6040517fd283e75f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015284169063d283e75f90602401602060405180830381865afa158015613fc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fe69190615ad2565b613ff0919061588a565b905086811015613ffe578096505b50505f8961401d5786546dffffffffffffffffffffffffffff16614042565b86546e01000000000000000000000000000090046dffffffffffffffffffffffffffff165b905084816dffffffffffffffffffffffffffff16101561407057806dffffffffffffffffffffffffffff1694505b505f8961407d578261407f565b815b90505f8173ffffffffffffffffffffffffffffffffffffffff1663961be3916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140ef9190615ad2565b9050858110156140fd578095505b5f8273ffffffffffffffffffffffffffffffffffffffff166318e22d986040518163ffffffff1660e01b81526004016040805180830381865afa158015614146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061416a9190615e0d565b9150505f61417b8261ffff16614a91565b9050808473ffffffffffffffffffffffffffffffffffffffff166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141eb9190615ad2565b1161426c578373ffffffffffffffffffffffffffffffffffffffff166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa158015614239573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061425d9190615ad2565b614267908261589d565b61426e565b5f5b905087811015614383576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528516906307a2d13a9082906370a0823190602401602060405180830381865afa1580156142ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061430e9190615ad2565b6040518263ffffffff1660e01b815260040161432c91815260200190565b602060405180830381865afa158015614347573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061436b9190615ad2565b614375908261588a565b905087811015614383578097505b50969950949750505050505050505b9250929050565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526114a791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614ad6565b5f5f61444788860388028685670de0b6b3a764000003028a8602018a670de0b6b3a7640000026001614b75565b90507effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111156144a2576040517f35278d1200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600187038201816144b6576144b6615c7b565b0484019150509695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790526145528482614bb7565b61459d5760405173ffffffffffffffffffffffffffffffffffffffff84811660248301525f604483015261459391869182169063095ea7b3906064016143d3565b61459d8482614ad6565b50505050565b80511515612000831615151415806145c75750602081015115156110008316151514155b806145de5750604081015115156108008316151514155b806145f55750606081015115156104008316151514155b8061460c5750608081015115156102008316151514155b80614623575060a081015115156101008316151514155b80614639575060c0810151151560808316151514155b8061464f575060e0810151151560408316151514155b806146665750610100810151151560208316151514155b8061467d5750610120810151151560108316151514155b806146945750610140810151151560088316151514155b806146ab5750610160810151151560048316151514155b806146c25750610180810151151560028316151514155b806146d957506101a0810151151560018316151514155b15614708576147087fe65af6a00000000000000000000000000000000000000000000000000000000083614c0f565b5050565b5f6f80000000000000000000000000000000821061474d5761474d7f93dafdf100000000000000000000000000000000000000000000000000000000614c31565b5090565b5f807fae890085f98619e96ae34ba28d74baa4a4f79785b58fd4afcd3dc0338b79df9160a087015160c0880151606089015160808a015160e08b01516101008c01518654969750949593946dffffffffffffffffffffffffffff938416949284169391929091818116916e0100000000000000000000000000009004165f808d156148e3578c15614863576147f68f6dffffffffffffffffffffffffffff861661588a565b91508782116148145761480d828b8b8b8b8b61441a565b9050614825565b614822828a8c8a8c8a614c39565b90505b80836dffffffffffffffffffffffffffff1611614842575f61485c565b61485c816dffffffffffffffffffffffffffff851661589d565b9b50614a7e565b61487d8f6dffffffffffffffffffffffffffff851661588a565b905086811161489b57614894818a8c8a8c8a61441a565b91506148ac565b6148a9818b8b8b8b8b614c39565b91505b81846dffffffffffffffffffffffffffff16116148c9575f61485c565b61485c826dffffffffffffffffffffffffffff861661589d565b8c156149b2578e836dffffffffffffffffffffffffffff1611614932576040517f7468c7a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61494c8f6dffffffffffffffffffffffffffff851661589d565b905086811161496a57614963818a8c8a8c8a61441a565b915061497b565b614978818b8b8b8b8b614c39565b91505b836dffffffffffffffffffffffffffff168211614998575f61485c565b61485c6dffffffffffffffffffffffffffff85168361589d565b8e846dffffffffffffffffffffffffffff16116149fb576040517f7468c7a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614a158f6dffffffffffffffffffffffffffff861661589d565b9150878211614a3357614a2c828b8b8b8b8b61441a565b9050614a44565b614a41828a8c8a8c8a614c39565b90505b826dffffffffffffffffffffffffffff168111614a61575f614a7b565b614a7b6dffffffffffffffffffffffffffff84168261589d565b9b505b5050505050505050505050949350505050565b5f815f03614ac057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff919050565b6064603f8316600a0a600684901c020492915050565b5f5f60205f8451602086015f885af180614af5576040513d5f823e3d81fd5b50505f513d91508115614b0c578060011415614b26565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561459d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401612925565b5f614ba2614b8283614e12565b8015614b9d57505f8480614b9857614b98615c7b565b868809115b151590565b614bad868686614e3e565b610cd8919061588a565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015614c0357508115614be85780600114614c03565b5f8673ffffffffffffffffffffffffffffffffffffffff163b115b93505050505b92915050565b815f5273ffffffffffffffffffffffffffffffffffffffff811660045260245ffd5b805f5260045ffd5b5f5f5f5f5f614c5789670de0b6b3a764000002888d038c6001614b75565b90507ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000060028702018802670de0b6b3a7640000818303059450614cb187670de0b6b3a7640000038a8b02670de0b6b3a76400006001614b75565b9350614ccb8760040285670de0b6b3a76400006001614b75565b925050505f5f841215614ce657614ce184615d54565b614ce8565b835b90505f5f5f6ec097ce7bc90715b34b9f1000000000841015614d205783840292508483019150614d19826001614f13565b9050614d7f565b5f614d2a85614f43565b9050614d42614d398287615ca8565b86836001614b75565b9350614d4e8180615c64565b614d589087615ca8565b614d62908561588a565b9250614d6f836001614f13565b9150614d7b8183615c64565b9150505b5f5f8813614dc157614daf614d94838761588a565b670de0b6b3a7640000614da88d6002615c64565b6001614b75565b614dba90600161588a565b9050614dec565b614dde614dcf886002615c64565b614dd9848861588a565b614f92565b614de990600161588a565b90505b8b8110614e03578b98505050505050505050611b0a565b9750611b0a9650505050505050565b5f6002826003811115614e2757614e27615e3e565b614e319190615e6b565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f03614e9157838281614e8757614e87615c7b565b0492505050611b92565b808411614ea857614ea86003851502601118614fc5565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f5f614f1e84614fd6565b9050614f3b614f2c84614e12565b8015614b9d5750818002851190565b019392505050565b5f805b8215614f655760019290921c9180614f5d81615e8c565b915050614f46565b6080811115614f87575f614f7a60808361589d565b6001901b9250614f8c9050565b600191505b50919050565b5f815f03614fa457614fa46012614fc5565b816001840381614fb657614fb6615c7b565b04600101831515029392505050565b634e487b715f52806020526024601cfd5b5f60018211614fe3575090565b81600170010000000000000000000000000000000082106150095760809190911c9060401b5b6801000000000000000082106150245760409190911c9060201b5b640100000000821061503b5760209190911c9060101b5b6201000082106150505760109190911c9060081b5b61010082106150645760089190911c9060041b5b601082106150775760049190911c9060021b5b600482106150835760011b5b600302600190811c9081858161509b5761509b615c7b565b048201901c905060018185816150b3576150b3615c7b565b048201901c905060018185816150cb576150cb615c7b565b048201901c905060018185816150e3576150e3615c7b565b048201901c905060018185816150fb576150fb615c7b565b048201901c9050600181858161511357615113615c7b565b048201901c905061513281858161512c5761512c615c7b565b04821190565b90039392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461515c575f5ffd5b50565b80356122be8161513b565b5f5f83601f84011261517a575f5ffd5b50813567ffffffffffffffff811115615191575f5ffd5b602083019150836020828501011115614392575f5ffd5b5f5f5f5f5f608086880312156151bc575f5ffd5b853594506020860135935060408601356151d58161513b565b9250606086013567ffffffffffffffff8111156151f0575f5ffd5b6151fc8882890161516a565b969995985093965092949392505050565b5f60a08284031215614f8c575f5ffd5b5f60808284031215614f8c575f5ffd5b5f5f5f5f5f6101608688031215615242575f5ffd5b853561524d8161513b565b945061525c876020880161520d565b935061526b8760c0880161521d565b925061014086013567ffffffffffffffff8111156151f0575f5ffd5b5f6040828403128015615298575f5ffd5b509092915050565b5f60608284031215614f8c575f5ffd5b5f5f5f5f5f61014086880312156152c5575f5ffd5b85356152d08161513b565b94506152df876020880161520d565b93506152ee8760c088016152a0565b925061012086013567ffffffffffffffff8111156151f0575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff16815261018081016020830151615350602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151615378604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015161539a60608401826dffffffffffffffffffffffffffff169052565b5060808301516153bc60808401826dffffffffffffffffffffffffffff169052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015261012083015161012083015261014083015161014083015261016083015161542861016084018273ffffffffffffffffffffffffffffffffffffffff169052565b5092915050565b5f5f5f5f5f5f5f6101a0888a031215615446575f5ffd5b87356154518161513b565b96506154608960208a0161520d565b955061546f8960c08a0161521d565b94506101408801359350610160880135925061018088013567ffffffffffffffff81111561549b575f5ffd5b6154a78a828b0161516a565b989b979a50959850939692959293505050565b8060020b811461515c575f5ffd5b5f5f5f5f61010085870312156154dc575f5ffd5b84356154e78161513b565b93506154f6866020870161520d565b925060c08501356155068161513b565b915060e0850135615516816154ba565b939692955090935050565b801515811461515c575f5ffd5b5f5f5f5f60808587031215615541575f5ffd5b843561554c8161513b565b9350602085013561555c8161513b565b925060408501359150606085013561551681615521565b5f5f60408385031215615584575f5ffd5b823561558f8161513b565b9150602083013561559f8161513b565b809150509250929050565b5f5f5f5f5f5f61016087890312156155c0575f5ffd5b86356155cb8161513b565b95506155da886020890161520d565b94506155e98860c089016152a0565b9350610120870135925061014087013567ffffffffffffffff81111561560d575f5ffd5b61561989828a0161516a565b979a9699509497509295939492505050565b5f5f5f5f5f5f6101208789031215615641575f5ffd5b863561564c8161513b565b955061565b886020890161520d565b945060c0870135935060e0870135925061010087013567ffffffffffffffff81111561560d575f5ffd5b8151151581526101c0810160208301516156a3602084018215159052565b5060408301516156b7604084018215159052565b5060608301516156cb606084018215159052565b5060808301516156df608084018215159052565b5060a08301516156f360a084018215159052565b5060c083015161570760c084018215159052565b5060e083015161571b60e084018215159052565b5061010083015161573161010084018215159052565b5061012083015161574761012084018215159052565b5061014083015161575d61014084018215159052565b5061016083015161577361016084018215159052565b5061018083015161578961018084018215159052565b506101a08301516154286101a084018215159052565b5f5f5f60e084860312156157b1575f5ffd5b83356157bc8161513b565b92506157cb856020860161520d565b915060c08401356157db8161513b565b809150509250925092565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115614c0957614c0961585d565b81810381811115614c0957614c0961585d565b5f602082840312156158c0575f5ffd5b8151611b928161513b565b80356dffffffffffffffffffffffffffff811681146122be575f5ffd5b5f602082840312156158f8575f5ffd5b611b92826158cb565b6dffffffffffffffffffffffffffff8281168282160390811115614c0957614c0961585d565b5f60208284031215615937575f5ffd5b8151611b9281615521565b5f5f85851115615950575f5ffd5b8386111561595c575f5ffd5b5050820193919092039150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610180810167ffffffffffffffff811182821017156159ba576159ba615969565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715615a0757615a07615969565b604052919050565b5f610180828403128015615a21575f5ffd5b50615a2a615996565b615a338361515f565b8152615a416020840161515f565b6020820152615a526040840161515f565b6040820152615a63606084016158cb565b6060820152615a74608084016158cb565b608082015260a0838101359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201526101408084013590820152615ac5610160840161515f565b6101608201529392505050565b5f60208284031215615ae2575f5ffd5b5051919050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b73ffffffffffffffffffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f610cd56080830184615ae9565b5f60208284031215615b95575f5ffd5b815167ffffffffffffffff811115615bab575f5ffd5b8201601f81018413615bbb575f5ffd5b805167ffffffffffffffff811115615bd557615bd5615969565b615c0660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016159c0565b818152856020838501011115615c1a575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f60408385031215615c48575f5ffd5b8251615c538161513b565b602084015190925061559f81615521565b8082028115828204841417614c0957614c0961585d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82615cb657615cb6615c7b565b500490565b805160208201517fffffffff00000000000000000000000000000000000000000000000000000000811691906004821015615d20577fffffffff00000000000000000000000000000000000000000000000000000000808360040360031b1b82161692505b5050919050565b602081525f611b926020830184615ae9565b5f60208284031215615d49575f5ffd5b8151611b92816154ba565b5f7f80000000000000000000000000000000000000000000000000000000000000008203615d8457615d8461585d565b505f0390565b5f60208284031215615d9a575f5ffd5b8135611b9281615521565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103615dd957615dd961585d565b5f0392915050565b5f60208284031215615df1575f5ffd5b8135611b928161513b565b805161ffff811681146122be575f5ffd5b5f5f60408385031215615e1e575f5ffd5b615e2783615dfc565b9150615e3560208401615dfc565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff831680615e7d57615e7d615c7b565b8060ff84160691505092915050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615ebc57615ebc61585d565b506001019056fea26469706673582212206b5dcf7d5f75d1c64e59332b295a78060cd0564a4fe2359bfd5dce7164a7c7f764736f6c634300081b00330000000000000000000000000c9a3dd6b8f28529d72d7f9ce918d493519ee383000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90