0 txs
1 call
constructor
constructor()
functions
ETH
viewfunction ETH() view returns (address)
getPricesAndLiquidities
viewfunction getPricesAndLiquidities(tuple[] pools) view returns (uint256[] pricesX96, uint256[] kAtTick)
mulDiv
purefunction mulDiv(uint256 a, uint256 b, uint256 denominator) pure returns (uint256 result)
owner
viewfunction owner() view returns (address)
PANCAKE
viewfunction PANCAKE() view returns (uint32)
permit2
viewfunction permit2() view returns (address)
poolManager
viewfunction poolManager() view returns (address)
router
viewfunction router() view returns (address)
sqrt
purefunction sqrt(uint256 x) pure returns (uint128)
SUSHI
viewfunction SUSHI() view returns (uint32)
UNISWAP
viewfunction UNISWAP() view returns (uint32)
WETH
viewfunction WETH() view returns (address)
_callThenRevert
nonpayablefunction _callThenRevert(bytes data)
_swapTest
nonpayablefunction _swapTest(tuple swap) returns (uint256 tokensOutActual, uint256 gasUsed)
findOptimalRoute
nonpayablefunction findOptimalRoute(tuple[] pools, tuple[] tokens, uint256 startAmountEth) returns (tuple optimalPath, int256 profitEth)
getOutTokensOfSwap
nonpayablefunction getOutTokensOfSwap(tuple swap) returns (bool success, uint256 tokensOutActual, uint256 gasUsed)
getOutTokensOfSwapSimple
nonpayablefunction getOutTokensOfSwapSimple(tuple swap) returns (bool success, uint256 tokensOutActual, uint256 gasUsed)
pancakeV3SwapCallback
nonpayablefunction pancakeV3SwapCallback(int256 a, int256 b, bytes _data)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address[] tokens)
setCanCollect
nonpayablefunction setCanCollect(address collector, bool canCollect)
swapManyWithLend
nonpayablefunction swapManyWithLend(tuple[] groups, uint256 deadline) returns (uint256 ethEarned)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 a, int256 b, bytes _data)
unlockCallback
nonpayablefunction unlockCallback(bytes data) returns (bytes)
events
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RecoverableInternalError
event RecoverableInternalError()
RevenueGenerated
event RevenueGenerated(uint256 ethEarned, uint256 estimatedTransactionFee, uint256 txFeeRefund)
SwapGroupFailed
event SwapGroupFailed(((uint128 amountIn, uint128 amountOutMin, (address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) key, uint32 swapType, bool zeroForOne)[] swaps, address[] toTake) group)
errors
DeltaNotNegative
error DeltaNotNegative(address currency)
DeltaNotPositive
error DeltaNotPositive(address currency)
InsufficientBalance
error InsufficientBalance()
NotPoolManager
error NotPoolManager()
creation bytecode
0x60a0604052600680546001600160a01b031916905534801561001f575f5ffd5b506e04444c5dc75cb358380d2e3de08a908061003a33610088565b6001600160a01b0316608052506001805f61005c5f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556100d7565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6080516158956101585f395f81816103d5015281816104b40152818161060c01528181610d0f01528181610dfa015281816110a1015281816110db01528181611c23015281816120b50152818161309701528181613174015281816131e6015281816132740152818161330201528181613eed0152613f7d01526158955ff3fe608060405260043610610125575f3560e01c80630254a2d91461012757806312261ee71461015e57806323a69e751461018d57806335db1c25146101ac5780633d9b9ce7146101cb578063677342ce146101f85780636e1f95171461022f578063715018a61461024e5780637e4fadf7146102625780638322fff21461028d57806385678980146102a05780638da5cb5b146102cd57806391dd7346146102e1578063aa9a09121461030d578063ab560e101461032c578063abbbca1614610342578063ad5c464814610361578063c6b0d14614610381578063c745d9e7146103ae578063dc4c90d3146103c4578063df71e4de146103f7578063e144cca81461042b578063f2fde38b1461044a578063f887ea4014610469578063fa461e3314610490575b005b348015610132575f5ffd5b50610146610141366004614485565b6104af565b60405161015593929190614500565b60405180910390f35b348015610169575f5ffd5b506101806e22d473030f116ddee9f6b43ac78ba381565b6040516101559190614518565b348015610198575f5ffd5b506101256101a7366004614570565b61059f565b3480156101b7575f5ffd5b506101256101c63660046145be565b6105b1565b3480156101d6575f5ffd5b506101ea6101e5366004614635565b6105e3565b604051908152602001610155565b348015610203575f5ffd5b5061021761021236600461467c565b610847565b6040516001600160801b039091168152602001610155565b34801561023a575f5ffd5b5061012561024936600461470b565b6109b5565b348015610259575f5ffd5b50610125610a3c565b34801561026d575f5ffd5b506102786202000081565b60405163ffffffff9091168152602001610155565b348015610298575f5ffd5b506101805f81565b3480156102ab575f5ffd5b506102bf6102ba366004614784565b610a4f565b6040516101559291906148b5565b3480156102d8575f5ffd5b50610180610ddf565b3480156102ec575f5ffd5b506103006102fb366004614967565b610ded565b60405161015591906149d3565b348015610318575f5ffd5b506101ea6103273660046149e5565b610e4b565b348015610337575f5ffd5b506102786203000081565b34801561034d575f5ffd5b5061014661035c366004614485565b610ef5565b34801561036c575f5ffd5b506101805f5160206158405f395f51905f5281565b34801561038c575f5ffd5b506103a061039b366004614a0e565b610f72565b604051610155929190614ab7565b3480156103b9575f5ffd5b506102786201000081565b3480156103cf575f5ffd5b506101807f000000000000000000000000000000000000000000000000000000000000000081565b348015610402575f5ffd5b50610416610411366004614485565b6114de565b60408051928352602083019190915201610155565b348015610436575f5ffd5b50610125610445366004614adb565b611543565b348015610455575f5ffd5b50610125610464366004614b0d565b611712565b348015610474575f5ffd5b506101807366a9893cc07d91d95644aedd05d03f95e1dba8af81565b34801561049b575f5ffd5b506101256104aa366004614570565b61178b565b5f5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916001866040516020016104f49190614b28565b60408051601f19818403018152908290526105129291602001614b37565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161053d91906149d3565b5f604051808303815f875af1158015610558573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261057f9190810190614b52565b8060200190518101906105929190614bd1565b9250925092509193909250565b6105ab8484848461178b565b50505050565b6105b96119ae565b6001600160a01b03919091165f908152600160205260409020805460ff1916911515919091179055565b5f5f5a9050428310156105f9575f915050610840565b5f9150815b61ffff8116851115610797577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894915f88888561ffff1681811061065057610650614c05565b90506020028101906106629190614c19565b6040516020016106729190614cb9565b60408051601f19818403018152908290526106909291602001614b37565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016106bb91906149d3565b5f604051808303815f875af19250505080156106f857506040513d5f823e601f3d908101601f191682016040526106f59190810190614b52565b60015b61075f577f1716b6fb5d07c9d68640cd43d048c32252b3cb0443a4b3c7841d5da81c311afd86868361ffff1681811061073357610733614c05565b90506020028101906107459190614c19565b6040516107529190614cb9565b60405180910390a1610785565b5f818060200190518101906107749190614e39565b90506107808186614e64565b945050505b8061078f81614e77565b9150506105fe565b505a6107a39082614e97565b90505f3a6107b3836161a8614e64565b6107bd9190614eaa565b90505f3233036107fb578184116107d457836107d6565b815b604051909150329082156108fc029083905f818181858888f193505050506107fb57505f5b60408051858152602081018490529081018290527f7595fd16636bf3cf86d46d699438dc239f70845e8d9607be21306e61a1bdf0079060600160405180910390a15050505b9392505050565b5f815f0361085657505f919050565b816001600160801b821061086f5760809190911c9060401b5b600160401b82106108855760409190911c9060201b5b600160201b821061089b5760209190911c9060101b5b6201000082106108b05760109190911c9060081b5b61010082106108c45760089190911c9060041b5b601082106108d75760049190911c9060021b5b600882106108e35760011b5b60018185816108f4576108f4614ec1565b048201901c9050600181858161090c5761090c614ec1565b048201901c9050600181858161092457610924614ec1565b048201901c9050600181858161093c5761093c614ec1565b048201901c9050600181858161095457610954614ec1565b048201901c9050600181858161096c5761096c614ec1565b048201901c9050600181858161098457610984614ec1565b0491909101901c5f6109968286614ed5565b90508082106109a557806109a7565b815b95945050505050565b919050565b60015f805c60ff19168217905d505f5f306001600160a01b0316836040516109dd9190614ef4565b5f60405180830381855af49150503d805f8114610a15576040519150601f19603f3d011682016040523d82523d5f602084013e610a1a565b606091505b5090925090505f60ff19815c16815d5081610a3757805160208201fd5b505050565b610a446119ae565b610a4d5f611a0d565b565b60408051808201909152606080825260208201525f3315610ac25760405162461bcd60e51b815260206004820152602260248201527f546869732063616c6c2063616e6e6f74206265206d616465206f6e2d63686169604482015261371760f11b60648201526084015b60405180910390fd5b5f5b63ffffffff8116871115610c59575f88888363ffffffff16818110610aeb57610aeb614c05565b610b02926020610100909202019081019150614b0d565b90505f89898463ffffffff16818110610b1d57610b1d614c05565b610b37926040610100909202019081019150602001614b0d565b905089898463ffffffff16818110610b5157610b51614c05565b6001600160a01b038086165f90815260026020908152604080832093881683529290522061010090910292909201919050610b8c8282614f42565b50506001600160a01b0382165f9081526003602052604090208a8a63ffffffff8616818110610bbd57610bbd614c05565b83546001810185555f948552602090942061010090910292909201926006029091019050610beb8282614f42565b50506001600160a01b0381165f9081526003602052604090208a8a63ffffffff8616818110610c1c57610c1c614c05565b83546001810185555f948552602090942061010090910292909201926006029091019050610c4a8282614f42565b50508260010192505050610ac4565b505f5b63ffffffff8116851115610ce55785858263ffffffff16818110610c8257610c82614c05565b90506080020160045f88888563ffffffff16818110610ca357610ca3614c05565b610cb99260206080909202019081019150614b0d565b6001600160a01b0316815260208101919091526040015f20610cdb828261501a565b5050600101610c5c565b505f858585604051602001610cfc9392919061506c565b60405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c89491600283604051602001610d50929190614b37565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610d7b91906149d3565b5f604051808303815f875af1158015610d96573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dbd9190810190614b52565b806020019051810190610dd0919061532c565b90999098509650505050505050565b5f546001600160a01b031690565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e385760405163570c108560e11b815260040160405180910390fd5b610e428383611a5c565b90505b92915050565b5f80805f19858709858702925082811083820303915050805f03610e7f575f8411610e74575f5ffd5b508290049050610840565b808411610e8a575f5ffd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f5f5f6060610f4d63df71e4de60e01b86604051602401610f169190614b28565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611dd9565b80519195509150610f67908201602090810190830161536f565b949690955092505050565b606080826001600160401b03811115610f8d57610f8d614304565b604051908082528060200260200182016040528015610fb6578160200160208202803683370190505b509150826001600160401b03811115610fd157610fd1614304565b604051908082528060200260200182016040528015610ffa578160200160208202803683370190505b5090505f5b63ffffffff81168411156114d6575f85858363ffffffff1681811061102657611026614c05565b905060c0020180360381019061103c9190615391565b602081015190915063ffff000081169061ffff165f806201000084148061106b575063ffffffff841662030000145b156112ec5760038363ffffffff161061122f575f5f8463ffffffff1660040361110957865160a090206110c76001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682611e86565b509194506111019150506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682611f38565b9150506111f9565b8463ffffffff166003036111f957865f0151608001516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561115a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117e91906153e2565b50508b516080015160408051630d34328160e11b815290519698506001600160a01b0390911695631a68650295506004808301955060209450909250908290030181865afa1580156111d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f69190615474565b90505b6112116001600160a01b03831680600160601b610e4b565b93506112266001600160801b03821680614eaa565b9250505061147c565b8263ffffffff166002036112e7575f5f865f0151608001516001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611282573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a691906154a5565b5090925090506112cf6001600160701b038316600160601b600160d01b03606084901b16614ed5565b93506112266001600160701b03808316908416614eaa565b61147c565b6201ffff1963ffffffff85160161147c578263ffffffff166003036113bf575f855f0151608001516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561134f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137391906154e9565b50505050505090505f865f0151608001516001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d2573d5f5f3e3d5ffd5b8263ffffffff1660020361147c575f5f865f0151608001516001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611412573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143691906154a5565b50909250905061145f6001600160701b038316600160601b600160d01b03606084901b16614ed5565b93506114776001600160701b03808316908416614eaa565b925050505b81888763ffffffff168151811061149557611495614c05565b60200260200101818152505080878763ffffffff16815181106114ba576114ba614c05565b6020026020010181815250508560010195505050505050610fff565b509250929050565b5f8060ff815c1661151a5760405162461bcd60e51b8152600401610ab9906020808252600490820152632327a7a360e11b604082015260600190565b5a905061152683611fbc565b6001600160801b031691505a61153c9082614e97565b9050915091565b335f8181526001602052604090205460ff166115975760405162461bcd60e51b81526020600482015260136024820152722737ba1030903332b29031b7b63632b1ba37b960691b6044820152606401610ab9565b5f5b61ffff81168311156116df575f84848361ffff168181106115bc576115bc614c05565b90506020020160208101906115d19190614b0d565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016115fc9190614518565b602060405180830381865afa158015611617573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163b9190614e39565b905084848361ffff1681811061165357611653614c05565b90506020020160208101906116689190614b0d565b6001600160a01b031663a9059cbb84836040518363ffffffff1660e01b8152600401611695929190615555565b6020604051808303815f875af11580156116b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d5919061556e565b5050600101611599565b506040516001600160a01b038216904780156108fc02915f818181858888f193505050501580156105ab573d5f5f3e3d5ffd5b61171a6119ae565b6001600160a01b03811661177f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab9565b61178881611a0d565b50565b5f8061179983850185615589565b90925090506101005f5c046001600160a01b031633146117b7575f5ffd5b5f861380156117c557508086125b156117d15750846117e7565b5f851380156117df57508085125b156117e75750835b5f6001600160a01b0383165f5160206158405f395f51905f5214611875576040516370a0823160e01b81526001600160a01b038416906370a0823190611831903090600401614518565b602060405180830381865afa15801561184c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118709190614e39565b611877565b475b90508082111561192d575f61188c8284614e97565b905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b03851601611920576118be5f3083613074565b5f5160206158405f395f51905f526001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611904575f5ffd5b505af1158015611916573d5f5f3e3d5ffd5b505050505061192b565b61192b843083613074565b505b60405163a9059cbb60e01b81526001600160a01b038085169163a9059cbb91611964916101005f5c04909116908690600401615555565b6020604051808303815f875af1158015611980573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a4919061556e565b5050505050505050565b336119b7610ddf565b6001600160a01b031614610a4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ab9565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60605f80611a6c848601866155b3565b91509150815f03611d55575f81806020019051810190611a8c91906155f6565b90505f805b82515163ffffffff83161015611b42578251805163ffffffff8416908110611abb57611abb614c05565b60200260200101515f01516001600160801b03165f03611b0a5780835f01518363ffffffff1681518110611af157611af1614c05565b60209081029190910101516001600160801b0390911690525b611b35835f01518363ffffffff1681518110611b2857611b28614c05565b6020026020010151611fbc565b6001909201919050611a91565b6040516370a0823160e01b81525f905f5160206158405f395f51905f52906370a0823190611b74903090600401614518565b602060405180830381865afa158015611b8f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb39190614e39565b90508015611c1557604051632e1a7d4d60e01b8152600481018290525f5160206158405f395f51905f5290632e1a7d4d906024015f604051808303815f87803b158015611bfe575f5ffd5b505af1158015611c10573d5f5f3e3d5ffd5b505050505b5f611c4a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163083613102565b90505f811315611c6457611c5f5f3083613074565b611c7f565b5f811215611c7f57611c7f5f30611c7a84615627565b613151565b5f611c8a8284615641565b90505f811215611cce5760405162461bcd60e51b815260206004820152600f60248201526e086c2dcdcdee840d8dee6ca40cae8d608b1b6044820152606401610ab9565b5f94505b8560200151518563ffffffff161015611d2b575f86602001518663ffffffff1681518110611d0257611d02614c05565b60200260200101519050611d1f8130611d1a846132f3565b613074565b50600190940193611cd2565b60408051602081018390520160405160208183030381529060405298505050505050505050610e45565b81600103611db7575f81806020019051810190611d729190615660565b90505f5f5f611d8084610ef5565b925092509250828282604051602001611d9b93929190614500565b6040516020818303038152906040529650505050505050610e45565b81600203611dd157611dc88161334e565b92505050610e45565b505092915050565b5f6060306001600160a01b0316636e1f951760e01b84604051602401611dff91906149d3565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611e3d9190614ef4565b5f60405180830381855af49150503d805f8114611e75576040519150601f19603f3d011682016040523d82523d5f602084013e611e7a565b606091505b50901594909350915050565b5f5f5f5f5f611e9486613d64565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015611edc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190614e39565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f5f611f4383613d64565b90505f611f51600383614e64565b604051631e2eaeaf60e01b8152600481018290529091506001600160a01b03861690631e2eaeaf906024015b602060405180830381865afa158015611f98573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a79190614e39565b60608101515f9061ffff811690829063ffff000016620100001480611fed5750606084015163ffff00001662030000145b156128e3578163ffffffff1660040361218d575f846080015161203757612032855f01516001600160801b0316600160c01b87602001516001600160801b0316610e4b565b61205f565b61205f85602001516001600160801b0316600160c01b875f01516001600160801b0316610e4b565b90505f61206b82610847565b6001600160801b031690505f6040518060600160405280886080015115158152602001885f015161209b9061567b565b600f0b8152602001836001600160a01b031681525090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3cd914c89604001518460405180602001604052805f8152506040518463ffffffff1660e01b81526004016121159392919061569c565b6020604051808303815f875af1158015612131573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121559190614e39565b9050876080015161216f5761216a8160801d90565b612179565b61217981600f0b90565b6121829061567b565b965050505050613022565b60408401516080015163ffffffff831660030361249c57805f60016101000a815c816001600160a01b0302191690836001600160a01b03160217905d505f856080015161223957816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612210573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061223491906156e5565b612299565b816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612275573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061229991906156e5565b9050856080015161230957816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122e0573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230491906156e5565b612369565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612345573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236991906156e5565b92505f6123c887608001516123a057610212885f01516001600160801b0316600160c01b8a602001516001600160801b0316610e4b565b61021288602001516001600160801b0316600160c01b8a5f01516001600160801b0316610e4b565b6001600160801b031690505f5f846001600160a01b031663128acb08308b608001518c5f015187898f5f0151604051602001612405929190615700565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612434959493929190615722565b60408051808303815f875af115801561244f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612473919061536f565b9150915088608001516124865781612488565b805b61249190615627565b9750505050506128dd565b8263ffffffff166002036128dd575f856080015161251957816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124f0573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061251491906156e5565b612579565b816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612555573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061257991906156e5565b905085608001516125e957816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e491906156e5565b612649565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612625573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061264991906156e5565b925073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b038216016126f5576126875f30885f01516001600160801b0316613074565b5f5160206158405f395f51905f526001600160a01b031663d0e30db0875f01516001600160801b03166040518263ffffffff1660e01b81526004015f604051808303818588803b1580156126d9575f5ffd5b505af11580156126eb573d5f5f3e3d5ffd5b505050505061270c565b61270c8130885f01516001600160801b0316613074565b855160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb9161273a918691600401615700565b6020604051808303815f875af1158015612756573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061277a919061556e565b505f5f836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156127b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127dd91906154a5565b50915091508760800151156127ee57905b5f612818895f01516001600160801b0316836001600160701b0316856001600160701b0316613da0565b905080975088602001516001600160801b031681101561284a5760405162461bcd60e51b8152600401610ab99061575f565b846001600160a01b031663022c0d9f8a60800151612868578261286a565b5f5b8b60800151612879575f61287b565b835b604080516020810182525f815290516001600160e01b031960e086901b1681526128ab9392913091600401615790565b5f604051808303815f87803b1580156128c2575f5ffd5b505af11580156128d4573d5f5f3e3d5ffd5b50505050505050505b50613022565b606084015163ffff0000166201ffff19016130225760408401516080015163ffffffff8316600303612bdf57805f60016101000a815c816001600160a01b0302191690836001600160a01b03160217905d505f85608001516129a457816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561297b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299f91906156e5565b612a04565b816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0491906156e5565b90508560800151612a7457816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6f91906156e5565b612ad4565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad491906156e5565b92505f612b0b87608001516123a057610212885f01516001600160801b0316600160c01b8a602001516001600160801b0316610e4b565b6001600160801b031690505f5f846001600160a01b031663128acb08308b608001518c5f015187898f5f0151604051602001612b48929190615700565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612b77959493929190615722565b60408051808303815f875af1158015612b92573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb6919061536f565b915091508860800151612bc95781612bcb565b805b612bd490615627565b975050505050613020565b8263ffffffff16600203613020575f8560800151612c5c57816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c5791906156e5565b612cbc565b816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c98573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cbc91906156e5565b90508560800151612d2c57816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d03573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2791906156e5565b612d8c565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8c91906156e5565b925073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b03821601612e3857612dca5f30885f01516001600160801b0316613074565b5f5160206158405f395f51905f526001600160a01b031663d0e30db0875f01516001600160801b03166040518263ffffffff1660e01b81526004015f604051808303818588803b158015612e1c575f5ffd5b505af1158015612e2e573d5f5f3e3d5ffd5b5050505050612e4f565b612e4f8130885f01516001600160801b0316613074565b855160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91612e7d918691600401615700565b6020604051808303815f875af1158015612e99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ebd919061556e565b505f5f836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612efc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2091906154a5565b5091509150876080015115612f3157905b5f612f5b895f01516001600160801b0316836001600160701b0316856001600160701b0316613da0565b905080975088602001516001600160801b0316811015612f8d5760405162461bcd60e51b8152600401610ab99061575f565b846001600160a01b031663022c0d9f8a60800151612fab5782612fad565b5f5b8b60800151612fbc575f612fbe565b835b604080516020810182525f815290516001600160e01b031960e086901b168152612fee9392913091600401615790565b5f604051808303815f87803b158015613005575f5ffd5b505af1158015613017573d5f5f3e3d5ffd5b50505050505050505b505b6001600160a01b0381165f5160206158405f395f51905f521480159061305057506001600160a01b03811615155b1561306d5761306d813086602001516001600160801b0316613151565b5050919050565b805f0361308057505050565b604051630b0d9c0960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906130d0908690869086906004016157c6565b5f604051808303815f87803b1580156130e7575f5ffd5b505af11580156130f9573d5f5f3e3d5ffd5b50505050505050565b5f5f6001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401611f7d91815260200190565b805f0361315d57505050565b604051632961046560e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906131a9908690600401614518565b5f604051808303815f87803b1580156131c0575f5ffd5b505af11580156131d2573d5f5f3e3d5ffd5b505050506001600160a01b038316613267577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af1158015613242573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906105ab9190614e39565b613272838383613eb9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af11580156132cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ab9190614e39565b5f806133296001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163085613102565b90505f811215610e455782604051634c085bf160e01b8152600401610ab99190614518565b60605f5f83806020019051810190613366919061536f565b6040805160a080820183526006546001600160a01b0390811683526020808401868152855180850187525f8082528184018190528751958601885280865285840181905285880181905260608087018290526080808801839052838a01979097528083018290528683018290528789019283528088018281528789018381526005805460018101825590855299516009909a027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0810180549b8a166001600160a01b03199c8d1617905595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db187015593518051818801516001600160801b03908116600160801b029116177f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2870155808b015180517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db388018054918b16918d16919091179055968701517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db4870180549c8901518986015162ffffff908116600160b81b0262ffffff60b81b1992909116600160a01b026001600160b81b0319909f16938c16939093179d909d179c909c1617909a55948701517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db58501805491909716981697909717909455948601517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db68201805497909501511515600160201b0264ffffffffff1990971663ffffffff91909116179590951790925590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db784015590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db8909201919091559193509150805b60055415613b4c575f60015b60055463ffffffff821610156136a45760058263ffffffff168154811061364f5761364f614c05565b905f5260205f2090600902016001015460058263ffffffff168154811061367857613678614c05565b905f5260205f209060090201600101541315613692578091505b8061369c816157ea565b915050613626565b505f60058263ffffffff16815481106136bf576136bf614c05565b5f9182526020918290206040805160a08082018352600990940290920180546001600160a01b03908116845260018083015485880152835180870185526002808501546001600160801b038082168452600160801b90910416828a01528551978801865260038501548416885260048501548085169989019990995262ffffff600160a01b8a041688870152600160b81b90980490970b60608088019190915260058085015490931660808089019190915288860197909752600684015463ffffffff8116828a015260ff600160201b90910416151587890152938501969096526007820154928401929092526008015492820192909252815490935090916137c791614e97565b815481106137d7576137d7614c05565b905f5260205f20906009020160058363ffffffff16815481106137fc576137fc614c05565b5f9182526020909120825460099092020180546001600160a01b03199081166001600160a01b03938416178255600180850154908301556002808501805491840180546001600160801b0319166001600160801b0393841690811782559154600160801b90819004909316909202179055600380850154908301805483169185169190911790556004808501805491840180548085169387169384178255825462ffffff600160a01b9182900481169091026001600160b81b0319909216909417178082559154600160b81b9081900490931690920262ffffff60b81b199091161790556005808501548184018054909316941693909317905560068084018054918301805463ffffffff19811663ffffffff9094169384178255915460ff600160201b918290041615150264ffffffffff199092169092171790556007808401549082015560089283015492019190915580548061395d5761395d615805565b5f828152602080822060095f199094019384020180546001600160a01b0319908116825560018201849055600282018490556003808301805483169055600480840180546001600160d01b031916905560058401805490931690925560068301805464ffffffffff191690556007830185905560089092018490559390945584516001600160a01b0316825291909152604090209081015460ff1615613a055750505061361a565b60038101805460ff1916600117905560065482516001600160a01b039081169116148015613a3657505f8260800151115b15613a5a578382602001511315613a5257816020015193508294505b50505061361a565b81516001600160a01b03165f908152600360205260408120905b815463ffffffff82161015613b42575f828263ffffffff1681548110613a9c57613a9c614c05565b5f9182526020918290206040805160e081018252600690930290910180546001600160a01b03908116928401928352600180830154808316606087015262ffffff600160a01b8204166080870152600160b81b9004600290810b60a087015283015490911660c0850152918352600381015463ffffffff1693830193909352860154919250613b2f918791908d8a613fa7565b5080613b3a816157ea565b915050613a74565b505050505061361a565b5f60058363ffffffff1681548110613b6657613b66614c05565b905f5260205f20906009020190505f81600801546001600160401b03811115613b9157613b91614304565b604051908082528060200260200182016040528015613c1557816020015b613c026040805160a080820183525f8083526020808401829052845192830185528183528201819052818401819052606082018190526080820152909182019081525f6020820181905260409091015290565b815260200190600190039081613baf5790505b5060088301549091505b8015613d0a576040805160a080820183526002808701546001600160801b038082168552600160801b909104166020808501919091528451928301855260038801546001600160a01b03908116845260048901548082169285019290925262ffffff600160a01b83041684870152600160b81b90910490910b606080840191909152600588015490911660808084019190915293830191909152600686015463ffffffff81169183019190915260ff600160201b9091041615159181019190915282515f1990920191839083908110613cfa57613cfa614c05565b6020026020010181905250613c1f565b5060408051808201825282815281515f808252602082810190945292820152905080613d368786615819565b604051602001613d479291906148b5565b604051602081830303815290604052975050505050505050919050565b6040515f90613d83908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b5f5f8411613e045760405162461bcd60e51b815260206004820152602b60248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960448201526a1394155517d05353d5539560aa1b6064820152608401610ab9565b5f83118015613e1257505f82115b613e6f5760405162461bcd60e51b815260206004820152602860248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604482015267495155494449545960c01b6064820152608401610ab9565b5f613e7c856103e5614202565b90505f613e898285614202565b90505f613ea283613e9c886103e8614202565b90614268565b9050613eae8183614ed5565b979650505050505050565b306001600160a01b03831603613f575760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90613f17907f0000000000000000000000000000000000000000000000000000000000000000908590600401615555565b6020604051808303815f875af1158015613f33573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ab919061556e565b6040516323b872dd60e01b81526001600160a01b038416906323b872dd90613f179085907f00000000000000000000000000000000000000000000000000000000000000009086906004016157c6565b8351805160209091015186515f92839290916001600160a01b0390811690831603613fd85780935060019250614030565b885f01516001600160a01b0316816001600160a01b031603613fff578193505f9250614030565b6040517f3dd9b4f8a093abbf14c407a598373ac56513ada1171320a84319fe6607fefbe5905f90a1505050506141fb565b50506040805160a0810182526020808a01516001600160801b031682526001818301528851928201929092529087015163ffffffff16606082015281151560808201525f61407f8288886142bc565b905060056040518060a00160405280866001600160a01b031681526020018381526020018481526020018763ffffffff1681526020018b6080015160016140c69190614e64565b90528154600180820184555f938452602093849020835160099093020180546001600160a01b03199081166001600160a01b0394851617825584860151928201929092556040808501518051818801516001600160801b03918216600160801b9290911691909102176002840155808201518051600385018054871691881691909117905596870151600484018054938901516060808b01519389166001600160b81b031990961695909517600160a01b62ffffff928316021762ffffff60b81b1916600160b81b9190931602919091179055608096870151600584018054909516951694909417909255818301516006820180549487015163ffffffff90921664ffffffffff1990951694909417600160201b91151591909102179092558201516007820155910151600890910155505050505b5050505050565b5f811580614225575082826142178183614eaa565b92506142239083614ed5565b145b610e455760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610ab9565b5f826142748382614e64565b9150811015610e455760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610ab9565b5f5f5f5f6142c987610ef5565b925092509250826142df575f9350505050610840565b6142ee8287600160601b610e4b565b93506142fa8186614eaa565b613eae9085615819565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b038111828210171561433a5761433a614304565b60405290565b604080519081016001600160401b038111828210171561433a5761433a614304565b604051601f8201601f191681016001600160401b038111828210171561438a5761438a614304565b604052919050565b6001600160801b0381168114611788575f5ffd5b6001600160a01b0381168114611788575f5ffd5b62ffffff81168114611788575f5ffd5b8060020b8114611788575f5ffd5b5f60a082840312156143e8575f5ffd5b6143f0614318565b905081356143fd816143a6565b8152602082013561440d816143a6565b60208201526040820135614420816143ba565b60408201526060820135614433816143ca565b60608201526080820135614446816143a6565b608082015292915050565b63ffffffff81168114611788575f5ffd5b80356109b081614451565b8015158114611788575f5ffd5b80356109b08161446d565b5f610120828403128015614497575f5ffd5b506144a0614318565b82356144ab81614392565b815260208301356144bb81614392565b60208201526144cd84604085016143d8565b604082015260e08301356144e081614451565b60608201526101008301356144f48161446d565b60808201529392505050565b92151583526020830191909152604082015260600190565b6001600160a01b0391909116815260200190565b5f5f83601f84011261453c575f5ffd5b5081356001600160401b03811115614552575f5ffd5b602083019150836020828501011115614569575f5ffd5b9250929050565b5f5f5f5f60608587031215614583575f5ffd5b843593506020850135925060408501356001600160401b038111156145a6575f5ffd5b6145b28782880161452c565b95989497509550505050565b5f5f604083850312156145cf575f5ffd5b82356145da816143a6565b915060208301356145ea8161446d565b809150509250929050565b5f5f83601f840112614605575f5ffd5b5081356001600160401b0381111561461b575f5ffd5b6020830191508360208260051b8501011115614569575f5ffd5b5f5f5f60408486031215614647575f5ffd5b83356001600160401b0381111561465c575f5ffd5b614668868287016145f5565b909790965060209590950135949350505050565b5f6020828403121561468c575f5ffd5b5035919050565b5f6001600160401b038211156146ab576146ab614304565b50601f01601f191660200190565b5f82601f8301126146c8575f5ffd5b81356146db6146d682614693565b614362565b8181528460208386010111156146ef575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f6020828403121561471b575f5ffd5b81356001600160401b03811115614730575f5ffd5b61473c848285016146b9565b949350505050565b5f5f83601f840112614754575f5ffd5b5081356001600160401b0381111561476a575f5ffd5b6020830191508360208260071b8501011115614569575f5ffd5b5f5f5f5f5f60608688031215614798575f5ffd5b85356001600160401b038111156147ad575f5ffd5b8601601f810188136147bd575f5ffd5b80356001600160401b038111156147d2575f5ffd5b8860208260081b84010111156147e6575f5ffd5b6020918201965094508601356001600160401b03811115614805575f5ffd5b61481188828901614744565b96999598509660400135949350505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b80516001600160801b039081168352602080830151909116908301526040808201519061489590840182614823565b50606081015163ffffffff1660e083015260800151151561010090910152565b60408082528351828201919091528051608083018190525f9160200190829060a08501905b80831015614905576148ed828551614866565b610120820191506020840193506001830192506148da565b50602087810151868303603f1901606088015280518084529082019450910191505f905b808210156149545783516001600160a01b031683526020938401939092019160019190910190614929565b5050602093909301939093525092915050565b5f5f60208385031215614978575f5ffd5b82356001600160401b0381111561498d575f5ffd5b6149998582860161452c565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e4260208301846149a5565b5f5f5f606084860312156149f7575f5ffd5b505081359360208301359350604090920135919050565b5f5f60208385031215614a1f575f5ffd5b82356001600160401b03811115614a34575f5ffd5b8301601f81018513614a44575f5ffd5b80356001600160401b03811115614a59575f5ffd5b85602060c083028401011115614a6d575f5ffd5b6020919091019590945092505050565b5f8151808452602084019350602083015f5b82811015614aad578151865260209586019590910190600101614a8f565b5093949350505050565b604081525f614ac96040830185614a7d565b82810360208401526109a78185614a7d565b5f5f60208385031215614aec575f5ffd5b82356001600160401b03811115614b01575f5ffd5b614999858286016145f5565b5f60208284031215614b1d575f5ffd5b8135610840816143a6565b6101208101610e458284614866565b60ff83168152604060208201525f61473c60408301846149a5565b5f60208284031215614b62575f5ffd5b81516001600160401b03811115614b77575f5ffd5b8201601f81018413614b87575f5ffd5b8051614b956146d682614693565b818152856020838501011115614ba9575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b80516109b08161446d565b5f5f5f60608486031215614be3575f5ffd5b8351614bee8161446d565b602085015160409095015190969495509392505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112614c2d575f5ffd5b9190910192915050565b5f5f8335601e19843603018112614c4c575f5ffd5b83016020810192503590506001600160401b03811115614c6a575f5ffd5b8060051b3603821315614569575f5ffd5b8183526020830192505f815f5b84811015614aad578135614c9b816143a6565b6001600160a01b031686526020958601959190910190600101614c88565b602081525f606082018335601e19853603018112614cd5575f5ffd5b84016020810190356001600160401b03811115614cf0575f5ffd5b61012081023603821315614d02575f5ffd5b6040602086015291829052905f90608085015b81831015614e11578335614d2881614392565b6001600160801b031681526020840135614d4181614392565b6001600160801b031660208201526040840135614d5d816143a6565b6001600160a01b031660408201526060840135614d79816143a6565b6001600160a01b031660608201526080840135614d95816143ba565b62ffffff16608082015260a0840135614dad816143ca565b60020b60a082015260c0840135614dc3816143a6565b6001600160a01b031660c0820152614ddd60e08501614462565b63ffffffff1660e0820152614df5610100850161447a565b1515610100820152610120938401936001939093019201614d15565b614e1e6020880188614c37565b878303601f1901604089015294509250613eae818585614c7b565b5f60208284031215614e49575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e4557610e45614e50565b5f61ffff821661ffff8103614e8e57614e8e614e50565b60010192915050565b81810381811115610e4557610e45614e50565b8082028115828204841417610e4557610e45614e50565b634e487b7160e01b5f52601260045260245ffd5b5f82614eef57634e487b7160e01b5f52601260045260245ffd5b500490565b5f82518060208501845e5f920191825250919050565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8135610e45816143a6565b5f8135610e4581614451565b8135614f4d816143a6565b614f578183614f0a565b50600181016020830135614f6a816143a6565b614f748183614f0a565b506040830135614f83816143ba565b81546060850135614f93816143ca565b8060b81b62ffffff60b81b1662ffffff60a01b8460a01b1665ffffffffffff60a01b1984161717845550505050614fd8614fcf60808401614f2a565b60028301614f0a565b615002614fe760a08401614f36565b6003830163ffffffff821663ffffffff198254161781555050565b60c0820135600482015560e090910135600590910155565b8135615025816143a6565b61502f8183614f0a565b5060208201356001820155604082013560028201556003810160608301356150568161446d565b815490151560ff1660ff19919091161790555050565b604080825281018390525f8460608301825b868110156150d7578235615091816143a6565b6001600160a01b03168252602083810135908301526040808401359083015260608301356150be8161446d565b151560608301526080928301929091019060010161507e565b5060209390930193909352509392505050565b5f6001600160401b0382111561510257615102614304565b5060051b60200190565b80516109b081614451565b5f818303610120811215615129575f5ffd5b615131614318565b9150825161513e81614392565b8252602083015161514e81614392565b602083015260a0603f1982011215615164575f5ffd5b5061516d614318565b604083015161517b816143a6565b8152606083015161518b816143a6565b6020820152608083015161519e816143ba565b604082015260a08301516151b1816143ca565b606082015260c08301516151c4816143a6565b608082015260408201526151da60e0830161510c565b60608201526144466101008301614bc6565b5f82601f8301126151fb575f5ffd5b81516152096146d6826150ea565b8082825260208201915060208360051b86010192508583111561522a575f5ffd5b602085015b83811015615250578051615242816143a6565b83526020928301920161522f565b5095945050505050565b5f6040828403121561526a575f5ffd5b615272614340565b82519091506001600160401b0381111561528a575f5ffd5b8201601f8101841361529a575f5ffd5b80516152a86146d6826150ea565b80828252602082019150602061012084028501019250868311156152ca575f5ffd5b6020840193505b828410156152f7576152e38785615117565b8252602082019150610120840193506152d1565b845250505060208201516001600160401b03811115615314575f5ffd5b615320848285016151ec565b60208301525092915050565b5f5f6040838503121561533d575f5ffd5b82516001600160401b03811115615352575f5ffd5b61535e8582860161525a565b602094909401519395939450505050565b5f5f60408385031215615380575f5ffd5b505080516020909101519092909150565b5f60c08284031280156153a2575f5ffd5b506153ab614340565b6153b584846143d8565b815260a08301356153c581614451565b60208201529392505050565b805161ffff811681146109b0575f5ffd5b5f5f5f5f5f5f5f60e0888a0312156153f8575f5ffd5b8751615403816143a6565b6020890151909750615414816143ca565b9550615422604089016153d1565b9450615430606089016153d1565b935061543e608089016153d1565b925060a088015160ff81168114615453575f5ffd5b60c08901519092506154648161446d565b8091505092959891949750929550565b5f60208284031215615484575f5ffd5b815161084081614392565b80516001600160701b03811681146109b0575f5ffd5b5f5f5f606084860312156154b7575f5ffd5b6154c08461548f565b92506154ce6020850161548f565b915060408401516154de81614451565b809150509250925092565b5f5f5f5f5f5f5f60e0888a0312156154ff575f5ffd5b875161550a816143a6565b602089015190975061551b816143ca565b9550615529604089016153d1565b9450615537606089016153d1565b9350615545608089016153d1565b925060a088015161545381614451565b6001600160a01b03929092168252602082015260400190565b5f6020828403121561557e575f5ffd5b81516108408161446d565b5f5f6040838503121561559a575f5ffd5b82356155a5816143a6565b946020939093013593505050565b5f5f604083850312156155c4575f5ffd5b8235915060208301356001600160401b038111156155e0575f5ffd5b6155ec858286016146b9565b9150509250929050565b5f60208284031215615606575f5ffd5b81516001600160401b0381111561561b575f5ffd5b61473c8482850161525a565b5f600160ff1b820161563b5761563b614e50565b505f0390565b8082018281125f831280158216821582161715611dd157611dd1614e50565b5f6101208284031215615671575f5ffd5b610e428383615117565b5f600f82900b6001607f1b810161569457615694614e50565b5f0392915050565b6156a68185614823565b8251151560a0820152602083015160c082015260408301516001600160a01b031660e082015261012061010082018190525f906109a7908301846149a5565b5f602082840312156156f5575f5ffd5b8151610840816143a6565b6001600160a01b039290921682526001600160801b0316602082015260400190565b6001600160a01b0386811682528515156020830152600f85900b60408301528316606082015260a0608082018190525f90613eae908301846149a5565b602080825260179082015276158c8e88139bdd08195b9bdd59da081c9958d95a5d9959604a1b604082015260600190565b84815283602082015260018060a01b0383166040820152608060608201525f6157bc60808301846149a5565b9695505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f63ffffffff821663ffffffff8103614e8e57614e8e614e50565b634e487b7160e01b5f52603160045260245ffd5b8181035f83128015838313168383128216171561583857615838614e50565b509291505056fe000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2a2646970667358221220cc02c6d2235a3efdaf569f5d6d1471363ffd31e26f6753e576da0cf94f679fb764736f6c634300081e0033