From c7c00fd4c37ca8ca2c10650eea2adf6d50b6ba50 Mon Sep 17 00:00:00 2001 From: ts0yu <120932697+ts0yu@users.noreply.github.com> Date: Fri, 20 Sep 2024 20:48:08 +0000 Subject: [PATCH] feat: working fixed arbitrageur --- contracts/utils/src/ArenaController.sol | 17 +++++----- src/arena.rs | 19 ++++++++++-- src/artifacts/ArenaController.json | 2 +- src/engine/arbitrageur.rs | 4 ++- src/lib.rs | 41 ++++++++++++------------- 5 files changed, 49 insertions(+), 34 deletions(-) diff --git a/contracts/utils/src/ArenaController.sol b/contracts/utils/src/ArenaController.sol index b5e7dc6..859eae9 100644 --- a/contracts/utils/src/ArenaController.sol +++ b/contracts/utils/src/ArenaController.sol @@ -61,8 +61,8 @@ contract ArenaController { lex = new LiquidExchange(address(currency0), address(currency1), initialPrice); - require(currency0.mint(address(this), 100000000000000), "Minting currency0 to liquid exchange failed"); - require(currency1.mint(address(this), 100000000000000), "Minting currency1 to liquid exchange failed"); + require(currency0.mint(address(this), 10000000000000000000), "Minting currency0 to liquid exchange failed"); + require(currency1.mint(address(this), 10000000000000000000), "Minting currency1 to liquid exchange failed"); } function getRouter() external view returns (address) { @@ -90,13 +90,13 @@ contract ArenaController { lex.swap(tokenIn, amountIn); } - function equalizePrice() public { + function equalizePrice(int256 depth) public { require(currency0.approve(address(swapRouter), type(uint256).max), "Approval for currency0 failed"); require(currency1.approve(address(swapRouter), type(uint256).max), "Approval for currency1 failed"); (uint160 sqrtPriceX96, int24 tick,,) = fetcher.getSlot0(poolManager, fetcher.toId(poolKey)); - uint256 uniswapPrice = FullMath.mulDiv(sqrtPriceX96, sqrtPriceX96, 1 << 192) * 1e18; + uint256 uniswapPrice = FullMath.mulDiv(uint256(sqrtPriceX96) * 10**18, uint256(sqrtPriceX96), 1 << 192); uint256 lexPrice = lex.price(); if (uniswapPrice > lexPrice) { @@ -104,7 +104,7 @@ contract ArenaController { IPoolManager.SwapParams memory params = IPoolManager.SwapParams({ zeroForOne: zeroForOne, - amountSpecified: 1000000, + amountSpecified: depth, sqrtPriceLimitX96: zeroForOne ? MIN_PRICE_LIMIT : MAX_PRICE_LIMIT // unlimited impact }); @@ -112,12 +112,13 @@ contract ArenaController { PoolSwapTest.TestSettings({takeClaims: false, settleUsingBurn: false}); swapRouter.swap(poolKey, params, testSettings, ""); + } else if (uniswapPrice < lexPrice) { bool zeroForOne = false; IPoolManager.SwapParams memory params = IPoolManager.SwapParams({ zeroForOne: zeroForOne, - amountSpecified: 10000, + amountSpecified: depth, sqrtPriceLimitX96: zeroForOne ? MIN_PRICE_LIMIT : MAX_PRICE_LIMIT // unlimited impact }); @@ -161,7 +162,7 @@ contract ArenaController { router.modifyLiquidity(poolKey, params, ""); } - function getPositionInfo( + /*function getPositionInfo( address owner, int24 tickLower, int24 tickUpper, @@ -204,7 +205,7 @@ contract ArenaController { function _getPoolStateSlot(PoolId poolId) internal pure returns (bytes32) { return keccak256(abi.encodePacked(PoolId.unwrap(poolId), POOLS_SLOT)); - } + }*/ function computeSwapStep( uint160 sqrtPriceCurrentX96, diff --git a/src/arena.rs b/src/arena.rs index df3dd82..48bf5d5 100644 --- a/src/arena.rs +++ b/src/arena.rs @@ -15,6 +15,7 @@ use crate::{ strategy::Strategy, types::controller::ArenaController, }; + /// Represents an [`Arena`] that can be used to run a simulation and execute strategies. pub struct Arena { /// The underlying Anvil execution environment. @@ -46,10 +47,10 @@ impl Arena { controller .setPool( - Uint::from(10000), + Uint::from(0), Signed::try_from(2).unwrap(), Address::default(), - Uint::from(24028916059024274524587271040_u128), + Uint::from(79228162514264337593543950336_u128), Bytes::new(), ) .send() @@ -125,6 +126,20 @@ impl Arena { .await .map_err(|e| ArenaError::PendingTransactionError(e))?; + let signal = controller.constructSignal().call().await?._0; + + let signal = Signal::new( + signal.lexPrice, + None, + signal.currentTick, + signal.sqrtPriceX96, + signal.manager, + signal.pool, + signal.fetcher, + self.feed.current_value(), + *controller.address(), + ); + self.arbitrageur .arbitrage(&signal, admin_provider.clone()) .await; diff --git a/src/artifacts/ArenaController.json b/src/artifacts/ArenaController.json index c1220ba..02a7d50 100644 --- a/src/artifacts/ArenaController.json +++ b/src/artifacts/ArenaController.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"fee","type":"uint256","internalType":"uint256"},{"name":"initialPrice","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"POOLS_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"POSITIONS_OFFSET","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addLiquidity","inputs":[{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeSwapStep","inputs":[{"name":"sqrtPriceCurrentX96","type":"uint160","internalType":"uint160"},{"name":"sqrtPriceTargetX96","type":"uint160","internalType":"uint160"},{"name":"liquidity","type":"uint128","internalType":"uint128"},{"name":"amountRemaining","type":"int256","internalType":"int256"},{"name":"feePips","type":"uint24","internalType":"uint24"}],"outputs":[{"name":"sqrtPriceNextX96","type":"uint160","internalType":"uint160"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"amountOut","type":"uint256","internalType":"uint256"},{"name":"feeAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"constructSignal","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct ArenaController.Signal","components":[{"name":"currentTick","type":"int24","internalType":"int24"},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"manager","type":"address","internalType":"address"},{"name":"lexPrice","type":"uint256","internalType":"uint256"},{"name":"pool","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"fetcher","type":"address","internalType":"address"}]}],"stateMutability":"view"},{"type":"function","name":"equalizePrice","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getPositionInfo","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"liquidity","type":"uint128","internalType":"uint128"},{"name":"feeGrowthInside0LastX128","type":"uint256","internalType":"uint256"},{"name":"feeGrowthInside1LastX128","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRouter","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"poolKey","inputs":[],"outputs":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}],"stateMutability":"view"},{"type":"function","name":"setPool","inputs":[{"name":"poolFee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPrice","inputs":[{"name":"price","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"swapOnLex","inputs":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x610160604052348015610010575f80fd5b5060405161bf6738038061bf6783398101604081905261002f916104a2565b8160405161003c90610454565b908152602001604051809103905ff08015801561005b573d5f803e3d5ffd5b506001600160a01b0316608081905260405161007690610461565b6001600160a01b039091168152602001604051809103905ff08015801561009f573d5f803e3d5ffd5b506001600160a01b031660a0526080516040516100bb9061046e565b6001600160a01b039091168152602001604051809103905ff0801580156100e4573d5f803e3d5ffd5b506001600160a01b031660c0526040516100fd9061047b565b604051809103905ff080158015610116573d5f803e3d5ffd5b506001600160a01b03166101005260405160129061013390610488565b606080825260099082015268063757272656e6379360bc1b608082015260a06020820181905260029082015261063360f41b60c082015260ff909116604082015260e001604051809103905ff080158015610190573d5f803e3d5ffd5b506001600160a01b0316610120526040516012906101ad90610488565b60608082526009908201526863757272656e63793160b81b608082015260a06020820181905260029082015261633160f01b60c082015260ff909116604082015260e001604051809103905ff08015801561020a573d5f803e3d5ffd5b506001600160a01b0390811661014081905261012051909116111561024657610140805161012080516001600160a01b03908116909352911690525b61012051610140518260405161025b90610495565b6001600160a01b0393841681529290911660208301526040820152606001604051809103905ff080158015610292573d5f803e3d5ffd5b506001600160a01b0390811660e052610120516040516340c10f1960e01b8152306004820152655af3107a400060248201529116906340c10f19906044016020604051808303815f875af11580156102ec573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031091906104c4565b6103755760405162461bcd60e51b815260206004820152602b60248201527f4d696e74696e672063757272656e63793020746f206c6971756964206578636860448201526a185b99d94819985a5b195960aa1b60648201526084015b60405180910390fd5b610140516040516340c10f1960e01b8152306004820152655af3107a400060248201526001600160a01b03909116906340c10f19906044016020604051808303815f875af11580156103c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ed91906104c4565b61044d5760405162461bcd60e51b815260206004820152602b60248201527f4d696e74696e672063757272656e63793120746f206c6971756964206578636860448201526a185b99d94819985a5b195960aa1b606482015260840161036c565b50506104ea565b61502b806126f483390190565b6116ad8061771f83390190565b6117d480618dcc83390190565b6105bc8061a5a083390190565b610eea8061ab5c83390190565b6105218061ba4683390190565b5f80604083850312156104b3575f80fd5b505080516020909101519092909150565b5f602082840312156104d4575f80fd5b815180151581146104e3575f80fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516121186105dc5f395f81816107020152818161090201528181610d18015261121901525f81816106230152818161080601528181610c1c01526111ea01525f8181610398015281816105d501528181610dd201528181610e22015261143901525f81816104fb01528181610f550152818161135f01526113e001525f8181610bed01528181610ce90152818161103f015261113801525f81816102ff015281816107d7015281816108d301526109f701525f81816103c1015281816104cc01528181610e01015281816112c801526114fe01526121185ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806357eb1da71161008857806396f5e27c1161006357806396f5e27c146102b25780639bc2ce36146102c5578063b0f479a1146102fd578063c7b8e15d14610323575f80fd5b806357eb1da71461024e5780636af577411461028c57806391b7f5ed1461029f575f80fd5b8063182148ef116100c3578063182148ef146101d55780632ba31c531461024e57806334d9900a14610264578063542524dd1461026c575f80fd5b806301480703146100e957806306ba06fa14610183578063100d3f7414610198575b5f80fd5b6100f161032b565b604080518251600290810b82526020808501516001600160a01b03908116828501528585015181168486015260608087015181860152608080880151805184168288015293840151831660a0808801919091529684015162ffffff1660c08701529083015190930b60e08501529101518116610100830152919092015116610120820152610140015b60405180910390f35b610196610191366004611afe565b6105ff565b005b6101ab6101a6366004611b61565b610a73565b604080516001600160a01b039095168552602085019390935291830152606082015260800161017a565b5f546001546002805461020e936001600160a01b03908116938082169362ffffff600160a01b83041693600160b81b909204900b911685565b604080516001600160a01b039687168152948616602086015262ffffff9093169284019290925260020b606083015291909116608082015260a00161017a565b610256600681565b60405190815260200161017a565b610196610bd6565b6102746111bc565b6040516001600160a01b03909116815260200161017a565b61019661029a366004611c15565b6111de565b6101966102ad366004611cf2565b611349565b6101966102c0366004611d09565b6113ba565b6102d86102d3366004611d33565b611433565b604080516001600160801b03909416845260208401929092529082015260600161017a565b7f0000000000000000000000000000000000000000000000000000000000000000610274565b610274611536565b6040805160c0810182525f80825260208083018290528284018290526060808401839052845160a080820187528482529281018490528086018490529081018390526080808201849052840152820181905291516332c961d960e01b815290919081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e631bcbf907f00000000000000000000000000000000000000000000000000000000000000009083906332c961d9906103f7908790600401611dc6565b602060405180830381865afa158015610412573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104369190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa15801561047d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a19190611deb565b5050915091506040518060c001604052808260020b8152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610555573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105799190611dd4565b81526040805160a0810182525f546001600160a01b03908116825260015480821660208481019190915262ffffff600160a01b83041684860152600160b81b909104600290810b606085015254821660808401528401919091527f0000000000000000000000000000000000000000000000000000000000000000169101529392505050565b5f8313156107c0576040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610671573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106959190611e47565b6106e65760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637930206661696c6564000000000000000060448201526064015b60405180910390fd5b6040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610750573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107749190611e47565b6107c05760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637931206661696c6564000000000000000060448201526064016106dd565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af115801561084c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108709190611e47565b6108bc5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c656400000060448201526064016106dd565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610948573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096c9190611e47565b6109b85760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c656400000060448201526064016106dd565b60408051608081018252600284810b825283900b60208201528082018590525f606082018190529151632d35e7ed60e11b815290916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691635a6bcfda91610a2c918590600401611e66565b6020604051808303815f875af1158015610a48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6c9190611dd4565b5050505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015610b49575f610aac8a5f0385620f424003620f4240611546565b905082610ac557610ac08d8d8d60016115e3565b610ad2565b610ad28c8e8d600161162f565b9650868110610b06578b9750620f42408414610afd57610af8878586620f4240036116f4565b610aff565b865b9450610b1f565b809650610b158d8c8386611724565b9750868a5f030394505b82610b3557610b308d898d5f61162f565b610b41565b610b41888e8d5f6115e3565b955050610bc7565b81610b5f57610b5a8c8c8c5f61162f565b610b6b565b610b6b8b8d8c5f6115e3565b9450848910610b7c578a9650610b8e565b889450610b8b8c8b878561177b565b96505b81610ba557610ba08c888c60016115e3565b610bb2565b610bb2878d8c600161162f565b9550610bc4868485620f4240036116f4565b93505b50505095509550955095915050565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610c62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c869190611e47565b610cd25760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c656400000060448201526064016106dd565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610d5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d829190611e47565b610dce5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c656400000060448201526064016106dd565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e631bcbf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b8152600401610e6c9190611dc6565b602060405180830381865afa158015610e87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eab9190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610ef2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f169190611deb565b5050915091505f610f3e836001600160a01b0316846001600160a01b0316600160c01b611546565b610f5090670de0b6b3a7640000611ecb565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610faf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd39190611dd4565b9050808211156110c157604080516060810182526001808252620f42406020830152915f9190810161100b6401000276a36001611f01565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b4916110789186908690600401611f20565b6020604051808303815f875af1158015611094573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b89190611dd4565b505050506111b6565b808210156111b657604080516060810182525f8082526127106020830152918291908101611104600173fffd8963efd1fc6a506488495d951d5263988d26611ee2565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b4916111719186908690600401611f20565b6020604051808303815f875af115801561118d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b19190611dd4565b505050505b50505050565b6111db600173fffd8963efd1fc6a506488495d951d5263988d26611ee2565b81565b6040805160a0810182527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168083527f000000000000000000000000000000000000000000000000000000000000000082166020840181905262ffffff8a811685870181905260028b810b60608801528a861660809097018790525f80546001600160a01b03199081169096178155600180546001600160b81b031916909517600160a01b9093029290921762ffffff60b81b1916600160b81b938d16939093029290921790925580549092169093179055915163695c5bf560e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695c5bf5916113019186908690600401611f80565b6020604051808303815f875af115801561131d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113419190611fd5565b505050505050565b6040516391b7f5ed60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391b7f5ed906024015f604051808303815f87803b1580156113a8575f80fd5b505af1158015610a6c573d5f803e3d5ffd5b60405163d004f0f760e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d004f0f7906044015f604051808303815f87803b158015611421575f80fd5b505af1158015611341573d5f803e3d5ffd5b5f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b81526004016114839190611dc6565b602060405180830381865afa15801561149e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c29190611dd4565b604080516026810188905260068101899052600381018a90528a8152603a600c8201205f928201839052602082018390529190529091506115247f000000000000000000000000000000000000000000000000000000000000000083836117c2565b919b909a509098509650505050505050565b6111db6401000276a36001611f01565b5f838302815f1985870982811083820303915050808411611565575f80fd5b805f03611577575082900490506115dc565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516611616818484611546565b9350845f83858409111684019350505050949350505050565b5f836001600160a01b0316856001600160a01b0316111561164e579293925b6001600160a01b0385166116685762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b0386860316836116bb57866001600160a01b03166116a88383896001600160a01b0316611546565b816116b5576116b5611ff0565b046116e7565b6116e76116d28383896001600160a01b03166116f4565b886001600160a01b0316808204910615150190565b925050505b949350505050565b5f611700848484611546565b9050818061171057611710611ff0565b838509156115dc57600101806115dc575f80fd5b5f6001600160801b038416156001600160a01b03861615171561174e57634f2461b85f526004601cfd5b81611765576117608585856001611865565b611772565b6117728585856001611950565b95945050505050565b5f6001600160801b038416156001600160a01b0386161517156117a557634f2461b85f526004601cfd5b816117b6576117608585855f611950565b6117728585855f611865565b5f805f806117d08686611a32565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa15801561181e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118459190810190612004565b60208101516040820151606090920151909a919950975095505050505050565b5f81156118d5575f6001600160a01b038411156118995761189484600160601b876001600160801b0316611546565b6118b0565b6118b06001600160801b038616606086901b6120b0565b90506118cd6118c8826001600160a01b0389166120cf565b611a83565b9150506116ec565b5f6001600160a01b03841115611902576118fd84600160601b876001600160801b03166116f4565b61191f565b61191f606085901b6001600160801b038716808204910615150190565b9050806001600160a01b0387161161193e57634323a5555f526004601cfd5b6001600160a01b0386160390506116ec565b5f825f0361195f5750836116ec565b600160601b600160e01b03606085901b1682156119f1576001600160a01b0386168481029085828161199357611993611ff0565b04036119c3578181018281106119c1576119b783896001600160a01b0316836116f4565b93505050506116ec565b505b506118cd81856119dc6001600160a01b038a16836120b0565b6119e691906120cf565b808204910615150190565b6001600160a01b038616848102908582041481831116611a185763f5c787f15f526004601cfd5b8082036119b76118c8846001600160a01b038b16846116f4565b5f80611a3d84611aa9565b90505f611a4b6006836120cf565b604080516020810187905290810182905290915060600160405160208183030381529060405280519060200120925050505b92915050565b806001600160a01b0381168114611aa457611aa46393dafdf160e01b611ae5565b919050565b6040515f90611ac8908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b805f5260045ffd5b8060020b8114611afb575f80fd5b50565b5f805f60608486031215611b10575f80fd5b833592506020840135611b2281611aed565b91506040840135611b3281611aed565b809150509250925092565b6001600160a01b0381168114611afb575f80fd5b62ffffff81168114611afb575f80fd5b5f805f805f60a08688031215611b75575f80fd5b8535611b8081611b3d565b94506020860135611b9081611b3d565b935060408601356001600160801b0381168114611bab575f80fd5b9250606086013591506080860135611bc281611b51565b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c0d57611c0d611bd0565b604052919050565b5f805f805f60a08688031215611c29575f80fd5b8535611c3481611b51565b94506020860135611c4481611aed565b93506040860135611c5481611b3d565b92506060860135611c6481611b3d565b9150608086013567ffffffffffffffff811115611c7f575f80fd5b8601601f81018813611c8f575f80fd5b803567ffffffffffffffff811115611ca957611ca9611bd0565b611cbc601f8201601f1916602001611be4565b818152896020838501011115611cd0575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b5f60208284031215611d02575f80fd5b5035919050565b5f8060408385031215611d1a575f80fd5b8235611d2581611b3d565b946020939093013593505050565b5f805f8060808587031215611d46575f80fd5b8435611d5181611b3d565b93506020850135611d6181611aed565b92506040850135611d7181611aed565b9396929550929360600135925050565b80546001600160a01b0390811683526001820154808216602085015260a081901c62ffffff16604085015260b81c600290810b60608501529091015416608090910152565b60a08101611a7d8284611d81565b5f60208284031215611de4575f80fd5b5051919050565b5f805f8060808587031215611dfe575f80fd5b8451611e0981611b3d565b6020860151909450611e1a81611aed565b6040860151909350611e2b81611b51565b6060860151909250611e3c81611b51565b939692955090935050565b5f60208284031215611e57575f80fd5b815180151581146115dc575f80fd5b611e708184611d81565b8151600290810b60a08301526020830151900b60c0820152604082015160e082015260609091015161010082015261014061012082018190525f9082015261016001919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611a7d57611a7d611eb7565b6001600160a01b038281168282160390811115611a7d57611a7d611eb7565b6001600160a01b038181168382160190811115611a7d57611a7d611eb7565b611f2a8185611d81565b8251151560a082015260208084015160c08301526040909301516001600160a01b031660e082015281511515610100820152910151151561012082015261016061014082018190525f9082015261018001919050565b611f8a8185611d81565b60018060a01b03831660a082015260e060c08201525f82518060e0840152806020850161010085015e5f6101008285010152610100601f19601f830116840101915050949350505050565b5f60208284031215611fe5575f80fd5b81516115dc81611aed565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215612014575f80fd5b815167ffffffffffffffff81111561202a575f80fd5b8201601f8101841361203a575f80fd5b805167ffffffffffffffff81111561205457612054611bd0565b8060051b61206460208201611be4565b9182526020818401810192908101908784111561207f575f80fd5b6020850194505b838510156120a557845180835260209586019590935090910190612086565b979650505050505050565b5f826120ca57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115611a7d57611a7d611eb756fea2646970667358221220877ced38546816c85b904367c43f1cc801c6c1677203063d25edd1749f574c2164736f6c634300081a003360c0604052348015600e575f80fd5b5060405161502b38038061502b833981016040819052602b916077565b5f80546001600160a01b031916339081178255604051839282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350608052503060a052608d565b5f602082840312156086575f80fd5b5051919050565b60805160a051614f766100b55f395f6117e201525f818161220b01526122490152614f765ff3fe6080604052600436106101fb575f3560e01c80635a6bcfda11610113578063a58411941161009d578063f135baaa1161006d578063f135baaa14610641578063f2fde38b14610660578063f3cd914c1461067f578063f5298aca1461069e578063fe99049a146106bd575f80fd5b8063a5841194146105ab578063b6363cf2146105ca578063dbd035ff14610603578063f02de3b214610622575f80fd5b806380f0b44c116100e357806380f0b44c146104ed5780638161b8741461050c5780638da5cb5b1461052b57806397e8cd4e146105615780639bf6645f1461058c575f80fd5b80635a6bcfda1461046657806360460f061461049a578063695c5bf5146104af5780637e87ce7d146104ce575f80fd5b8063234266d711610194578063426a849311610164578063426a8493146103a157806348c89491146103c057806352759651146103ec578063558a72971461040b578063598af9e71461042a575f80fd5b8063234266d7146103245780632d7713891461034357806335fd631a146103625780633dd45adb1461038e575f80fd5b80630b0d9c09116101cf5780630b0d9c09146102bd57806311da60b4146102de578063156e29f6146102e65780631e2eaeaf14610305575f80fd5b8062fdd58e146101ff57806301ffc9a71461024857806307eff0dd14610277578063095bcdb61461029e575b5f80fd5b34801561020a575f80fd5b50610235610219366004614397565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b348015610253575f80fd5b506102676102623660046143c1565b6106dc565b604051901515815260200161023f565b348015610282575f80fd5b5061028b600181565b60405160029190910b815260200161023f565b3480156102a9575f80fd5b506102676102b83660046143e8565b610712565b3480156102c8575f80fd5b506102dc6102d736600461441a565b6107b9565b005b61023561080a565b3480156102f1575f80fd5b506102dc6103003660046143e8565b61083c565b348015610310575f80fd5b5061023561031f366004614458565b610887565b34801561032f575f80fd5b5061023561033e3660046145d7565b610891565b34801561034e575f80fd5b506102dc61035d36600461463b565b610941565b34801561036d575f80fd5b5061038161037c366004614656565b6109d7565b60405161023f9190614676565b61023561039c36600461463b565b610a14565b3480156103ac575f80fd5b506102676103bb3660046143e8565b610a46565b3480156103cb575f80fd5b506103df6103da3660046146b8565b610aaa565b60405161023f91906146f6565b3480156103f7575f80fd5b506102dc61040636600461472b565b610b6d565b348015610416575f80fd5b5061026761042536600461476c565b610bdc565b348015610435575f80fd5b5061023561044436600461441a565b600560209081525f938452604080852082529284528284209052825290205481565b348015610471575f80fd5b50610485610480366004614796565b610c4b565b6040805192835260208301919091520161023f565b3480156104a5575f80fd5b5061028b617fff81565b3480156104ba575f80fd5b5061028b6104c9366004614838565b610dde565b3480156104d9575f80fd5b506102dc6104e836600461472b565b610fcd565b3480156104f8575f80fd5b506102dc610507366004614397565b61107f565b348015610517575f80fd5b5061023561052636600461441a565b6110f2565b348015610536575f80fd5b505f54610549906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561056c575f80fd5b5061023561057b36600461463b565b60016020525f908152604090205481565b348015610597575f80fd5b506103816105a636600461487f565b611181565b3480156105b6575f80fd5b506102dc6105c536600461463b565b6111ba565b3480156105d5575f80fd5b506102676105e43660046148ee565b600360209081525f928352604080842090915290825290205460ff1681565b34801561060e575f80fd5b5061038161061d36600461487f565b6111f6565b34801561062d575f80fd5b50600254610549906001600160a01b031681565b34801561064c575f80fd5b5061023561065b366004614458565b61122d565b34801561066b575f80fd5b506102dc61067a36600461463b565b611237565b34801561068a575f80fd5b50610235610699366004614925565b6112c9565b3480156106a9575f80fd5b506102dc6106b83660046143e8565b61140f565b3480156106c8575f80fd5b506102676106d73660046149c3565b611454565b5f6301ffc9a760e01b6001600160e01b03198316148061070c5750630f632fb360e01b6001600160e01b03198316145b92915050565b335f90815260046020908152604080832085845290915281208054839190839061073d908490614a1a565b90915550506001600160a01b0384165f90815260046020908152604080832086845290915281208054849290610774908490614a2d565b909155505060408051338082526020820185905285926001600160a01b038816925f80516020614ee183398151915291015b60405180910390a45060015b9392505050565b5f80516020614f018339815191525c6107dc576107dc6354e3ca0d60e01b6115b3565b6107f1836107e9836115bb565b5f03336115db565b6108056001600160a01b038416838361162e565b505050565b5f5f80516020614f018339815191525c61082e5761082e6354e3ca0d60e01b6115b3565b610837336116c2565b905090565b5f80516020614f018339815191525c61085f5761085f6354e3ca0d60e01b6115b3565b8161086d816107e9846115bb565b610881846001600160a01b03831684611765565b50505050565b5f81545f5260205ff35b5f5f80516020614f018339815191525c6108b5576108b56354e3ca0d60e01b6115b3565b6108bd6117d7565b5f6108dc6108cc8860a0902090565b5f90815260066020526040902090565b90506108e781611819565b6080870151610903906001600160a01b0316888888888861183d565b61090e8187876118ba565b915061091b87833361196d565b6080870151610937906001600160a01b03168888888888611995565b5095945050505050565b5f546001600160a01b0316331461098e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b855483526020830192506001860195508083106109f75781810382f35b5f5f80516020614f018339815191525c610a3857610a386354e3ca0d60e01b6115b3565b61070c826116c2565b919050565b335f8181526005602090815260408083206001600160a01b03881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7906107a69087815260200190565b60605f80516020614f018339815191525c15610ad057610ad06328486b6360e11b6115b3565b610ad8611a07565b6040516348eeb9a360e11b815233906391dd734690610afd9086908690600401614a68565b5f604051808303815f875af1158015610b18573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b3f9190810190614a7b565b90505f80516020614f218339815191525c15610b6557610b65635212cba160e01b6115b3565b61070c611a1a565b604082015162ffffff1662800000141580610b9e575081608001516001600160a01b0316336001600160a01b031614155b15610bb357610bb36330d2164160e01b6115b3565b610bc18162ffffff16611a2c565b60a082205f8181526006602052604090206108059083611a52565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff191687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f805f80516020614f018339815191525c610c7057610c706354e3ca0d60e01b6115b3565b610c786117d7565b60a086205f818152600660205260409020610c9281611819565b6080880151610cad906001600160a01b031689898989611a6d565b5f610d146040518060c00160405280336001600160a01b031681526020018a5f015160020b81526020018a6020015160020b8152602001610cf18b60400151611b6f565b600f0b81526060808d015160020b60208301528b01516040909101528390611b8b565b94509050610d228185611f05565b9450336001600160a01b0316837f541c041c2cce48e614b3de043c9280f06b6164c0a1741649e2de3c3d375f79748a5f01518b602001518c60400151604051610d8693929190600293840b81529190920b6020820152604081019190915260600190565b60405180910390a360808901515f90610dac906001600160a01b03168b8b898c8c611f38565b90965090508015610dc657610dc68a828c6080015161196d565b610dd18a873361196d565b5050505094509492505050565b5f610de76117d7565b6060850151617fff60029190910b1315610e12576060850151610e12906316e0049f60e31b90612057565b600160020b856060015160020b1215610e3c576060850151610e3c90631d3d20b160e31b90612057565b845160208601516001600160a01b03908116911610610e6e5784516020860151610e6e916306e6c98360e41b91612066565b610e92856040015186608001516001600160a01b031661208890919063ffffffff16565b610ead576080850151610ead90630732d7b560e51b90612149565b5f610ec0866040015162ffffff1661215e565b6080870151909150610ede906001600160a01b031687878787612183565b60a086205f610eec886121f4565b5f848152600660205260409020909250610f099150888386612326565b6080890151909450610f28906001600160a01b03168989878a8a612385565b87602001516001600160a01b0316885f01516001600160a01b0316837fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d64388b604001518c606001518d608001518d8b604051610fba95949392919062ffffff959095168552600293840b60208601526001600160a01b03928316604086015291166060840152900b608082015260a00190565b60405180910390a4505050949350505050565b6002546001600160a01b03163314610fef57610fef6348f5c3ed60e01b6115b3565b6103e9610fff821610623e900062fff0008316101661101e5761101e63a7abe2f760e01b62ffffff8316612149565b60a082206110408261103a835f90815260066020526040902090565b906123f8565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b5f80516020614f018339815191525c6110a2576110a26354e3ca0d60e01b6115b3565b335f9081526001600160a01b038316602052604081205c906110c3836115bb565b90508181600f0b146110df576110df63bda73abf60e01b6115b3565b610881846110ec83614b0d565b336115db565b6002545f906001600160a01b03163314611116576111166348f5c3ed60e01b6115b3565b8115611122578161113b565b6001600160a01b0383165f908152600160205260409020545b6001600160a01b0384165f90815260016020526040812080549293508392909190611167908490614a1a565b909155506107b290506001600160a01b038416858361162e565b606060405180602082528360208301526040820191508360051b8201855b80355c84526020938401930181841061119f575b5081810382f35b6111c261240d565b6001600160a01b0381166111d35750565b5f6111e6826001600160a01b0316612441565b90506111f282826124bd565b5050565b606060405180602082528360208301526040820191508360051b8201855b803554845260209384019301818410156111b357611214565b5f815c5f5260205ff35b5f546001600160a01b0316331461127f5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610985565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f5f80516020614f018339815191525c6112ed576112ed6354e3ca0d60e01b6115b3565b6112f56117d7565b83602001515f036113105761131063be8b850760e01b6115b3565b60a085205f81815260066020526040902061132a81611819565b60808701515f908190819061134b906001600160a01b03168b8b8b8b6124fd565b8093508195508294505050506113ba84866040518060a001604052808e6060015160020b81526020018d5f0151151581526020018681526020018d604001516001600160a01b031681526020018562ffffff168152508c5f01516113b3578d60200151612619565b8d51612619565b60808b01519096505f92506113de91506001600160a01b03168a8a888b8b88612707565b909550905080156113f8576113f889828b6080015161196d565b61140389863361196d565b50505050949350505050565b5f80516020614f018339815191525c611432576114326354e3ca0d60e01b6115b3565b81611440816110ec846115bb565b610881846001600160a01b0383168461282a565b5f336001600160a01b0386161480159061149157506001600160a01b0385165f90815260036020908152604080832033845290915290205460ff16155b15611501576001600160a01b0385165f90815260056020908152604080832033845282528083208684529091529020545f1981146114ff576114d38382614a1a565b6001600160a01b0387165f90815260056020908152604080832033845282528083208884529091529020555b505b6001600160a01b0385165f90815260046020908152604080832086845290915281208054849290611533908490614a1a565b90915550506001600160a01b0384165f9081526004602090815260408083208684529091528120805484929061156a908490614a2d565b9091555050604080513381526020810184905284916001600160a01b0380881692908916915f80516020614ee1833981519152910160405180910390a45060015b949350505050565b805f5260045ffd5b5f6001607f1b82106115d7576115d76393dafdf160e01b6115b3565b5090565b81600f0b5f036115ea57505050565b5f806116006001600160a01b03861684866128e8565b91509150805f0361161857611613612921565b611627565b815f0361162757611627612949565b5050505050565b5f6001600160a01b038416611661575f805f8085875af190508061165c5761165c6356cdd02560e11b612971565b610881565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f6040820152508061088157610881632745a14f60e21b612971565b5f5f80516020614ec18339815191525c6001600160a01b0381166116e85734915061174c565b34156116fe576116fe6319d245cf60e01b6115b3565b7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c5f6117336001600160a01b038416612441565b905061173f8282614a1a565b935061174961299e565b50505b61175f81611759846115bb565b856115db565b50919050565b6001600160a01b0383165f90815260046020908152604080832085845290915281208054839290611797908490614a2d565b9091555050604080513381526020810183905283916001600160a01b038616915f915f80516020614ee183398151915291015b60405180910390a4505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611817576118176306c4a1c760e11b6115b3565b565b80546001600160a01b03165f0361183a5761183a63486aa30760e01b6115b3565b50565b85336001600160a01b038216146118b15760208716156118b1576118af33878787878760405160240161187596959493929190614b74565b60408051601f198184030181529190526020810180516001600160e01b0316635b54587d60e11b1790526001600160a01b038916906129b0565b505b50505050505050565b60038301545f906001600160801b03168082036118e1576118e163a74f97ab60e01b6115b3565b61190f6118ed856115bb565b5f036118f8856115bb565b5f0360809190911b6001600160801b039091161790565b9150831561193b5761192f84600160801b836001600160801b0316612a40565b60018601805490910190555b82156119655761195983600160801b836001600160801b0316612a40565b60028601805490910190555b509392505050565b82516119839061197d8460801d90565b836115db565b610805836020015161197d84600f0b90565b85336001600160a01b038216146118b15760108716156118b1576118af3387878787876040516024016119cd96959493929190614b74565b60408051601f198184030181529190526020810180516001600160e01b031663e1b4af6960e01b1790526001600160a01b038916906129b0565b60015f80516020614f018339815191525d565b5f5f80516020614f018339815191525d565b620f424062ffffff8216111561183a5761183a631400211360e01b62ffffff8316612149565b611a5b82611819565b8154611a679082612adc565b90915550565b84336001600160a01b03821614611b67575f8460400151138015611a945750610800861615155b15611af557611aef3386868686604051602401611ab5959493929190614bbe565b60408051601f198184030181529190526020810180516001600160e01b031663259982e560e01b1790526001600160a01b038816906129b0565b50611b67565b5f846040015113158015611b0c5750610200861615155b15611b67576118b13386868686604051602401611b2d959493929190614bbe565b60408051601f198184030181529190526020810180516001600160e01b031663021d0ee760e41b1790526001600160a01b038816906129b0565b505050505050565b80600f81900b8114610a4157610a416393dafdf160e01b6115b3565b6060810151602082015160408301515f9283929091611baa8282612af7565b604080516080810182525f80825260208201819052918101829052606081019190915283600f0b5f14611cef57611be38884865f612b57565b6001600160801b0316602083015215158152611c028883866001612b57565b6001600160801b03166060830152151560408201525f600f85900b12611cb4575f611c52886080015160020b620d89e7198190058102620d89e8829005820203056001016001600160801b030490565b9050806001600160801b031682602001516001600160801b03161115611c8357611c8363b8e3c38560e01b85612057565b806001600160801b031682606001516001600160801b03161115611cb257611cb263b8e3c38560e01b84612057565b505b805115611cd0576080870151611cd09060058a01908590612c11565b806040015115611cef576080870151611cef9060058a01908490612c11565b5f80611cfc8a8686612c63565b8a5160a08c015160408051602681019290925260068083018a9052600383018b9052928252603a600c8301205f838301819052602080850182905293819052908152928f01909152812092945090925080611d59838a8787612d17565b91509150611d85611d69836115bb565b611d72836115bb565b6001600160801b031660809190911b1790565b995050505050505f84600f0b1215611dee57805115611dc157600283810b5f90815260048a016020526040812081815560018101829055909101555b806040015115611dee57600282810b5f90815260048a016020526040812081815560018101829055909101555b5082600f0b5f14611efb5786545f80611e0a8360a01c60020b90565b6001600160a01b038416915091508460020b8260020b1215611e5957611e52611e4c611e47611e3888612dd0565b611e4188612dd0565b8a613088565b611b6f565b60801b90565b9750611ef7565b8360020b8260020b1215611ed257611e90611e7a611e4783611e4188612dd0565b611d72611e47611e8989612dd0565b858b6130c0565b60038b0154909850611eab906001600160801b0316876130ec565b60038b0180546001600160801b0319166001600160801b0392909216919091179055611ef7565b611ef45f611d72611e47611ee589612dd0565b611eee89612dd0565b8b6130c0565b97505b5050505b5050509250929050565b5f608082811d9084901d01600f83810b9085900b01611f2f611f2683611b6f565b611d7283611b6f565b95945050505050565b5f806001600160a01b0388163303611f5457508390505f61204c565b8491505f86604001511315611fe057610400881615611fdb57611fcc338888888888604051602401611f8b96959493929190614c1e565b60408051601f198184030181529190526020810180516001600160e01b0316625a2a8160e81b17905260028a1615155b6001600160a01b038b169190613113565b9050611fd88282613154565b91505b61204c565b61010088161561204c5761203d33888888888860405160240161200896959493929190614c1e565b60408051601f198184030181529190526020810180516001600160e01b03166346d95b2960e11b17905260018a161515611fbb565b90506120498282613154565b91505b965096945050505050565b815f528060020b60045260245ffd5b825f526001600160a01b0382166004526001600160a01b03811660245260445ffd5b5f6080831615801561209c57506008831615155b156120a857505f61070c565b604083161580156120bb57506004831615155b156120c757505f61070c565b61040083161580156120db57506002831615155b156120e757505f61070c565b61010083161580156120fb57506001831615155b1561210757505f61070c565b6001600160a01b0383161561213857613fff831615158061213357506280000062ffffff8316146107b2565b6107b2565b5062ffffff16628000001415919050565b815f526001600160a01b03811660045260245ffd5b5f6280000062ffffff83160361217557505f919050565b6115d78262ffffff16611a2c565b84336001600160a01b03821614611b6757612000861615611b67576118b133868686866040516024016121ba959493929190614c85565b60408051601f198184030181529190526020810180516001600160e01b03166301a206c160e51b1790526001600160a01b038816906129b0565b6002545f9081906001600160a01b031615612321577f00000000000000000000000000000000000000000000000000000000000000005a101561224157612241630f724b8160e11b6115b3565b6002546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316905f90612283908790602401614cc6565b60408051601f198184030181529190526020810180516001600160e01b031663553bfc3760e01b17815281519192505f918291829190828789f13d60201416955085156122da576040513d5f823e805191505f8152505b8580156122eb57508062ffffff1681145b801561230857506103e9610fff821610623e900062fff000831610165b612313575f80612317565b6001815b9096509450505050505b915091565b83545f906001600160a01b03161561234857612348637983c05160e01b6115b3565b61235184613175565b905061237a826123748561236e6001600160a01b03891686613460565b9061347b565b90612adc565b909455509192915050565b85336001600160a01b038216146118b1576110008716156118b1576118af3387878787876040516024016123be96959493929190614cd4565b60408051601f198184030181529190526020810180516001600160e01b031663a910f80f60e01b1790526001600160a01b038916906129b0565b61240182611819565b8154611a67908261347b565b61242d5f80516020614ec18339815191525c6001600160a01b0316613496565b6118175761181763996caf6560e01b6115b3565b5f6001600160a01b038216612457575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015612499573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070c9190614d1d565b6001600160a01b0382165f80516020614ec18339815191525d807f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d5050565b60208301515f806001600160a01b038816330361251c575f915061260e565b608088161561260e575f61257289338a8a8a8a604051602401612543959493929190614d34565b60408051601f198184030181529190526020810180516001600160e01b03166315d7892d60e21b1790526129b0565b9050805160601461258d5761258d631e048e1d60e01b6115b3565b604088015162ffffff1662800000036125a857606081015191505b600889161561260c57604081015192505f6125c38460801d90565b905080600f0b5f1461260a575f85126125e0600f83900b87614d8d565b9550806125ef575f86126125f3565b5f86135b1561260857612608637d05b8eb60e11b6115b3565b505b505b505b955095509592505050565b5f8080808061262889886134a7565b93509350935093505f831115612656576001600160a01b0386165f9081526001602052604090208054840190555b33887f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f6126838760801d90565b61268d88600f0b90565b60408087015160a0880151606089015192516126f2959493908b90600f96870b81529490950b60208501526001600160a01b039290921660408401526001600160801b0316606083015260020b608082015262ffffff9190911660a082015260c00190565b60405180910390a35091979650505050505050565b5f806001600160a01b038916330361272357508490505f61281e565b5f61272e8460801d90565b90505f61273b85600f0b90565b905060408b16156127b5576127a8611e47338c8c8c8c8c60405160240161276796959493929190614db4565b60408051601f198184030181529190526020810180516001600160e01b031663b47b2fb160e01b17905260048e1615156001600160a01b038f169190613113565b6127b29082614e14565b90505b5f81600f0b5f1415806127cb575082600f0b5f14155b1561281657895160208b01515f13901515146127f6576001600160801b038316608083901b17612807565b6001600160801b038216608084901b175b90506128138982613154565b98505b889450925050505b97509795505050505050565b336001600160a01b038416811480159061286957506001600160a01b038085165f9081526003602090815260408083209385168352929052205460ff16155b156128dd576001600160a01b038085165f9081526005602090815260408083209385168352928152828220868352905220545f1981146128db576128ad8382614a1a565b6001600160a01b038087165f9081526005602090815260408083209387168352928152828220888352905220555b505b610881848484613b54565b6001600160a01b038281165f90815290841660205260408120805c9190612913600f85900b84614d8d565b915081815d50935093915050565b5f80516020614f218339815191525c600181039050805f80516020614f218339815191525d50565b5f80516020614f218339815191525c600181019050805f80516020614f218339815191525d50565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f5f80516020614ec18339815191525d565b60605f805f8451602086015f885af19050806129d6576129d663fb6a608160e01b612971565b6040519150601f19603f3d011682016040523d82523d5f602084013e602082511080612a24575060208301516001600160e01b031916612a17836020015190565b6001600160e01b03191614155b15612a3957612a39631e048e1d60e01b6115b3565b5092915050565b5f838302815f1985870982811083820303915050808411612a5f575f80fd5b805f03612a71575082900490506107b2565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60d01b62ffffff60d01b1662ffffff60d01b19919091161790565b8060020b8260020b12612b1657612b1663c4433ed560e01b8383613bbd565b620d89e719600283900b1215612b3757612b3763d5e2f7ab60e01b83612057565b620d89e8600282900b13156111f2576111f263035aeeff60e31b82612057565b600283900b5f908152600485016020526040812080548291906001600160801b0381169060801d612b8882886130ec565b6001600160801b03808216159084168015919091141596509094505f03612bd257885460a01c60020b60020b8860020b13612bd2576001808a0154908401556002808a0154908401555b5f86612be757612be28883614e14565b612bf1565b612bf18883614e41565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b80820715612c3e5760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b600282810b5f81815260048601602052604080822085850b83529082208754929485949293919260a09290921c900b90811215612cb9578160010154836001015403945081600201548360020154039350612d0c565b8560020b8160020b12612ce5578260010154826001015403945082600201548260020154039350612d0c565b81600101548360010154896001015403039450816002015483600201548960020154030393505b505050935093915050565b83545f9081906001600160801b0316600f86900b8203612d5657806001600160801b03165f03612d5157612d51632bbfae4960e21b6115b3565b612d7c565b612d6081876130ec565b87546001600160801b0319166001600160801b03919091161787555b612d9a87600101548603826001600160801b0316600160801b612a40565b9250612dba87600201548503826001600160801b0316600160801b612a40565b6001880195909555505060029094015591929050565b60020b5f60ff82901d80830118620d89e8811115612df957612df96345c3193d60e11b84612057565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612e35576ffff97272373d413259a46990580e213a0260801c5b6004821615612e54576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e73576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e92576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612eb1576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ed0576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612eef576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612f0f576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f2f576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f4f576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f6f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f8f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612faf576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fcf576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fef576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613010576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613030576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561304f576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561306c576b048a170391f7dc42444e8fa20260801c5b5f841315613078575f19045b63ffffffff0160201c9392505050565b5f8082600f0b126130af576130a86130a38585856001613bda565b613c9d565b5f036115ab565b6115ab6130a38585855f035f613bda565b5f8082600f0b126130db576130a86130a38585856001613cb6565b6115ab6130a38585855f035f613cb6565b6001600160801b038216600f82900b01608081901c1561070c576393dafdf15f526004601cfd5b5f8061311f85856129b0565b90508261312f575f9150506107b2565b805160401461314857613148631e048e1d60e01b6115b3565b60400151949350505050565b5f608082811d9084901d03600f83810b9085900b03611f2f611f2683611b6f565b5f73fffd8963efd1fc6a506488495d951d51639616826401000276a21983016001600160a01b031611156131b4576131b46318521d4960e21b83612149565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061324757607f810383901c9150613251565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461345157886001600160a01b031661343682612dd0565b6001600160a01b0316111561344b5781613453565b80613453565b815b9998505050505050505050565b60a01b62ffffff60a01b1662ffffff60a01b19919091161790565b60b81b62ffffff60b81b1662ffffff60b81b19919091161790565b5f6001600160a01b0382161561070c565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101829052819081908554602086015160038801546001600160801b03165f8261350457610fff60c485901c1661350e565b610fff60b885901c165b60408a81015187525f60208801526001600160a01b0386169087015260a085901c60020b606087015261ffff1690508261354c578960020154613552565b89600101545b6080868101919091526001600160801b03831660a08701528901515f9062400000166135875760d085901c62ffffff16613599565b6135998a6080015162ffffff16613d02565b905081156135c757620f424062ffffff821661ffff84168181028381061515939004929092019101036135c9565b805b60408b01519097505f13905062ffffff8716620f42401480156135ea575080155b156135ff576135ff634b10312360e11b6115b3565b89604001515f0361361a575f80985098505050505050613b4b565b83156136985760608a01516001600160a01b03868116911610613659576136596001600160a01b0386165b60608c0151637c9c6e8f60e01b9190613d11565b6401000276a36001600160a01b03168a606001516001600160a01b031610156136935760608a015161369390639e4d7cc760e01b90612149565b613709565b60608a01516001600160a01b038681169116116136c1576136c16001600160a01b038616613645565b73fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168a606001516001600160a01b0316106137095760608a015161370990639e4d7cc760e01b90612149565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091525b8651158061376957508a606001516001600160a01b031687604001516001600160a01b0316145b613a545760408701516001600160a01b0316815260608701518b516137939160058f019188613d3a565b1515604083015260020b60208201819052620d89e719126137b957620d89e71960208201525b620d89e860020b816020015160020b126137d757620d89e860208201525b6137e48160200151612dd0565b6001600160a01b03908116606083810182905260408a0151908e0151613825939192911680821891811160ff8a1618919091021860a08a01518a518c613e23565b60c085015260a084015260808301526001600160a01b0316604088015281613889576138548160a00151613c9d565b875103875260c08101516080820151613870916130a391614a2d565b876020018181516138819190614e6e565b9052506138c4565b61389c8160c00151826080015101613c9d565b875101875260a08101516138af90613c9d565b876020018181516138c09190614d8d565b9052505b8215613900575f620f4240848360c0015184608001510102816138e9576138e9614e8d565b60c084018051929091049182900390529990990198505b60a08701516001600160801b03161561393f576139338160c00151600160801b8960a001516001600160801b0316612a40565b60808801805190910190525b80606001516001600160a01b031687604001516001600160a01b031603613a1957806040015115613a01575f8086613980578d60010154896080015161398b565b88608001518e600201545b915091505f6139d68f85602001518585600292830b5f90815260049094016020526040909320600181018054909203909155908101805490920390915554600160801b9004600f0b90565b905087156139e1575f035b6139ef8a60a00151826130ec565b6001600160801b031660a08b01525050505b602081015160ff8616900360020b6060880152613742565b805f01516001600160a01b031687604001516001600160a01b031614613a4f57613a468760400151613175565b60020b60608801525b613742565b613a8c8760400151613a7389606001518961346090919063ffffffff16565b6001600160a01b0319166001600160a01b039091161790565b8c5560a08701516001600160801b03858116911614613acc5760a087015160038d0180546001600160801b0319166001600160801b039092169190911790555b84613ae057608087015160028d0155613aeb565b608087015160018d01555b81151585151514613b1f57613b18613b068860200151611b6f565b611d72895f01518e6040015103611b6f565b9950613b44565b613b41613b34885f01518d6040015103611b6f565b611d728960200151611b6f565b99505b5050505050505b92959194509250565b6001600160a01b0383165f90815260046020908152604080832085845290915281208054839290613b86908490614a1a565b9091555050604080513381526020810183905283915f916001600160a01b038716915f80516020614ee183398151915291016117ca565b6040518381528260020b60048201528160020b6024820152604481fd5b5f836001600160a01b0316856001600160a01b03161115613bf9579293925b6001600160a01b038516613c135762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b038686031683613c6657866001600160a01b0316613c538383896001600160a01b0316612a40565b81613c6057613c60614e8d565b04613c92565b613c92613c7d8383896001600160a01b0316613fa9565b886001600160a01b0316808204910615150190565b979650505050505050565b805f811215610a4157610a416393dafdf160e01b6115b3565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516613ce9818484612a40565b9350845f83858409111684019350505050949350505050565b62bfffff8116610a4181611a2c565b6040518381526001600160a01b03831660048201526001600160a01b0382166024820152604481fd5b5f80600284810b9086900b8181078313919005038315613db557600281900b60081d600181810b5f90815260208a905260409020545f1960ff85168381019390931b01908116801515955085613d9757888360ff16860302613daa565b88613da182613fd9565b840360ff168603025b965050505050613e19565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b011990811680151595509293919285613dff57888360ff0360ff16860102613e12565b8883613e0a83614069565b0360ff168601025b9650505050505b5094509492505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015613f1c575f613e5c8a5f0385620f424003620f4240612a40565b905082613e7557613e708d8d8d6001613cb6565b613e82565b613e828c8e8d6001613bda565b9650868110613eb6578b9750620f42408414613ead57613ea8878586620f424003613fa9565b613eaf565b865b9450613ef2565b613ec28d8c8386614104565b975082613edb57613ed68d898d6001613cb6565b613ee8565b613ee8888e8d6001613bda565b9650868a5f030394505b82613f0857613f038d898d5f613bda565b613f14565b613f14888e8d5f613cb6565b955050613f9a565b81613f3257613f2d8c8c8c5f613bda565b613f3e565b613f3e8b8d8c5f613cb6565b9450848910613f4f578a9650613f61565b889450613f5e8c8b8785614152565b96505b81613f7857613f738c888c6001613cb6565b613f85565b613f85878d8c6001613bda565b9550613f97868485620f424003613fa9565b93505b50505095509550955095915050565b5f613fb5848484612a40565b90508180613fc557613fc5614e8d565b838509156107b257600101806107b2575f80fd5b5f808211613fe5575f80fd5b507f0706060506020504060203020504030106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be831560081b6001600160801b03851160071b1784811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b5f808211614075575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b150316040581196001019091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f6001600160801b038416156001600160a01b03861615171561412e57634f2461b85f526004601cfd5b81614145576141408585856001614195565b611f2f565b611f2f8585856001614280565b5f6001600160801b038416156001600160a01b03861615171561417c57634f2461b85f526004601cfd5b8161418d576141408585855f614280565b611f2f8585855f5b5f8115614205575f6001600160a01b038411156141c9576141c484600160601b876001600160801b0316612a40565b6141e0565b6141e06001600160801b038616606086901b614ea1565b90506141fd6141f8826001600160a01b038916614a2d565b614362565b9150506115ab565b5f6001600160a01b038411156142325761422d84600160601b876001600160801b0316613fa9565b61424f565b61424f606085901b6001600160801b038716808204910615150190565b9050806001600160a01b0387161161426e57634323a5555f526004601cfd5b6001600160a01b0386160390506115ab565b5f825f0361428f5750836115ab565b600160601b600160e01b03606085901b168215614321576001600160a01b038616848102908582816142c3576142c3614e8d565b04036142f3578181018281106142f1576142e783896001600160a01b031683613fa9565b93505050506115ab565b505b506141fd818561430c6001600160a01b038a1683614ea1565b6143169190614a2d565b808204910615150190565b6001600160a01b0386168481029085820414818311166143485763f5c787f15f526004601cfd5b8082036142e76141f8846001600160a01b038b1684613fa9565b806001600160a01b0381168114610a4157610a416393dafdf160e01b6115b3565b6001600160a01b038116811461183a575f80fd5b5f80604083850312156143a8575f80fd5b82356143b381614383565b946020939093013593505050565b5f602082840312156143d1575f80fd5b81356001600160e01b0319811681146107b2575f80fd5b5f805f606084860312156143fa575f80fd5b833561440581614383565b95602085013595506040909401359392505050565b5f805f6060848603121561442c575f80fd5b833561443781614383565b9250602084013561444781614383565b929592945050506040919091013590565b5f60208284031215614468575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156144a5576144a561446f565b60405290565b604051601f8201601f191681016001600160401b03811182821017156144d3576144d361446f565b604052919050565b803562ffffff81168114610a41575f80fd5b8035600281900b8114610a41575f80fd5b5f60a0828403121561450e575f80fd5b60405160a081016001600160401b03811182821017156145305761453061446f565b604052905080823561454181614383565b8152602083013561455181614383565b6020820152614562604084016144db565b6040820152614573606084016144ed565b6060820152608083013561458681614383565b6080919091015292915050565b5f8083601f8401126145a3575f80fd5b5081356001600160401b038111156145b9575f80fd5b6020830191508360208285010111156145d0575f80fd5b9250929050565b5f805f805f61010086880312156145ec575f80fd5b6145f687876144fe565b945060a0860135935060c0860135925060e08601356001600160401b0381111561461e575f80fd5b61462a88828901614593565b969995985093965092949392505050565b5f6020828403121561464b575f80fd5b81356107b281614383565b5f8060408385031215614667575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b818110156146ad57835183526020938401939092019160010161468f565b509095945050505050565b5f80602083850312156146c9575f80fd5b82356001600160401b038111156146de575f80fd5b6146ea85828601614593565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060c0838503121561473c575f80fd5b61474684846144fe565b915061475460a084016144db565b90509250929050565b80358015158114610a41575f80fd5b5f806040838503121561477d575f80fd5b823561478881614383565b91506147546020840161475d565b5f805f808486036101408112156147ab575f80fd5b6147b587876144fe565b94506080609f19820112156147c8575f80fd5b506147d1614483565b6147dd60a087016144ed565b81526147eb60c087016144ed565b602082015260e08601356040820152610100860135606082015292506101208501356001600160401b03811115614820575f80fd5b61482c87828801614593565b95989497509550505050565b5f805f8060e0858703121561484b575f80fd5b61485586866144fe565b935060a085013561486581614383565b925060c08501356001600160401b03811115614820575f80fd5b5f8060208385031215614890575f80fd5b82356001600160401b038111156148a5575f80fd5b8301601f810185136148b5575f80fd5b80356001600160401b038111156148ca575f80fd5b8560208260051b84010111156148de575f80fd5b6020919091019590945092505050565b5f80604083850312156148ff575f80fd5b823561490a81614383565b9150602083013561491a81614383565b809150509250929050565b5f805f8084860361012081121561493a575f80fd5b61494487876144fe565b94506060609f1982011215614957575f80fd5b50604051606081016001600160401b038111828210171561497a5761497a61446f565b60405261498960a0870161475d565b815260c0860135602082015260e08601356149a381614383565b604082015292506101008501356001600160401b03811115614820575f80fd5b5f805f80608085870312156149d6575f80fd5b84356149e181614383565b935060208501356149f181614383565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561070c5761070c614a06565b8082018082111561070c5761070c614a06565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6115ab602083018486614a40565b5f60208284031215614a8b575f80fd5b81516001600160401b03811115614aa0575f80fd5b8201601f81018413614ab0575f80fd5b80516001600160401b03811115614ac957614ac961446f565b614adc601f8201601f19166020016144ab565b818152856020838501011115614af0575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f81600f0b60016001607f1b03198103614b2957614b29614a06565b5f0392915050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b6001600160a01b0387168152614b8d6020820187614b31565b8460c08201528360e08201526101206101008201525f614bb261012083018486614a40565b98975050505050505050565b6001600160a01b0386168152614bd76020820186614b31565b8351600290810b60c08301526020850151900b60e0820152604084015161010082015260608401516101208201526101606101408201525f613c9261016083018486614a40565b6001600160a01b0387168152614c376020820187614b31565b8451600290810b60c08301526020860151900b60e082015260408501516101008201526060850151610120820152836101408201526101806101608201525f614bb261018083018486614a40565b6001600160a01b0386168152614c9e6020820186614b31565b6001600160a01b03841660c082015261010060e082018190525f90613c929083018486614a40565b60a0810161070c8284614b31565b6001600160a01b0387168152614ced6020820187614b31565b60018060a01b03851660c08201528360020b60e08201526101206101008201525f614bb261012083018486614a40565b5f60208284031215614d2d575f80fd5b5051919050565b6001600160a01b0386168152614d4d6020820186614b31565b8351151560c0820152602084015160e082015260408401516001600160a01b03166101008201526101406101208201525f613c9261014083018486614a40565b8082018281125f831280158216821582161715614dac57614dac614a06565b505092915050565b6001600160a01b0387168152614dcd6020820187614b31565b8451151560c0820152602085015160e082015260408501516001600160a01b0316610100820152836101208201526101606101408201525f614bb261016083018486614a40565b600f81810b9083900b0160016001607f1b03811360016001607f1b03198212171561070c5761070c614a06565b600f82810b9082900b0360016001607f1b0319811260016001607f1b038213171561070c5761070c614a06565b8181035f831280158383131683831282161715612a3957612a39614a06565b634e487b7160e01b5f52601260045260245ffd5b5f82614ebb57634e487b7160e01b5f52601260045260245ffd5b50049056fe27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b91b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859c090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab237d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0ba2646970667358221220c720af38850bace8901ec0c414e9cc6b7600fdc66c58c62bb119ab202e9502fe64736f6c634300081a003360a0604052348015600e575f80fd5b506040516116ad3803806116ad833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516115e46100c95f395f818160790152818160f50152818161022d01528181610294015281816102c501528181610390015281816104fa01528181610550015281816105bf015281816106100152818161077a01526107ad01526115e45ff3fe60806040526004361061003e575f3560e01c80630a5b11e414610042578063481c6a75146100685780635a6bcfda146100b357806391dd7346146100c6575b5f80fd5b610055610050366004611035565b6100f2565b6040519081526020015b60405180910390f35b348015610073575f80fd5b5061009b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005f565b6100556100c13660046110bb565b61020a565b3480156100d1575f80fd5b506100e56100e0366004611118565b610220565b60405161005f91906111b2565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060c00160405280336001600160a01b03168152602001898152602001888152602001878152602001861515815260200185151581525060405160200161016c919061120e565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161019791906111b2565b5f604051808303815f875af11580156101b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d991908101906112aa565b8060200190518101906101ec919061131e565b9050478015610200576102005f3383610662565b5095945050505050565b5f6102188484845f806100f2565b949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610256575f80fd5b5f61026383850185611335565b90505f6102be610278836020015160a0902090565b6040840151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a6bcfda8460200151856040015186606001516040518463ffffffff1660e01b815260040161031f939291906113fc565b60408051808303815f875af115801561033a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035e919061144b565b5090505f6103ba610374856020015160a0902090565b6040860151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f6103d485602001515f0151865f015130610753565b925050505f6103ef866020015160200151875f015130610753565b9250505082600f0b86604001516040015186600f0b61040e9190611481565b1461045f5760405162461bcd60e51b815260206004820152601a60248201527f6c6971756964697479206368616e676520696e636f7272656374000000000000604482015260640160405180910390fd5b5f86604001516040015112156104a7575f82138061047c57505f81135b610488576104886114a8565b5f82128061049557505f81125b156104a2576104a26114a8565b6104ea565b5f86604001516040015113156104ea575f8212806104c457505f81125b6104d0576104d06114a8565b5f8213806104dd57505f81135b156104ea576104ea6114a8565b5f821215610540578551610540907f000000000000000000000000000000000000000000000000000000000000000090610523856114bc565b60808a015160208b0151516001600160a01b0316939291906107df565b5f811215610598578551610598907f000000000000000000000000000000000000000000000000000000000000000090610579846114bc565b60808a01516020808c015101516001600160a01b0316939291906107df565b5f8213156105e757855160a08701516020880151516105e7926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610aab565b5f81131561063857855160a08701516020808901510151610638926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610aab565b60408051602081018690520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610695575f805f8085875af1905080610690576106906356cdd02560e11b610b7d565b6106f6565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806106f6576106f6632745a14f60e21b610b7d565b50505050565b60408051602681018390526006810184905260038101859052858152603a600c8201205f9282018390526020820183905290829052819081906107408a8a83610baa565b919c909b50909950975050505050505050565b5f80806107696001600160a01b03871686610c4d565b925061079e6001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610c4d565b91506107d46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610cdc565b905093509350939050565b801561087457836001600160a01b031663f5298aca8461080e886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610859575f80fd5b505af115801561086b573d5f803e3d5ffd5b50505050610aa4565b6001600160a01b0385166108eb57836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af11580156108c0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e5919061131e565b50610aa4565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b15801561092b575f80fd5b505af115801561093d573d5f803e3d5ffd5b505050506001600160a01b03831630146109cf576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af11580156109a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c991906114d6565b50610a41565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610a1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3f91906114d6565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610a7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa2919061131e565b505b5050505050565b80610aed57604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610842565b836001600160a01b031663156e29f684610b16886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610b60575f80fd5b505af1158015610b72573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f805f80610bb88686610d73565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa158015610c06573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c2d91908101906114f1565b60208101516040820151606090920151909a919950975095505050505050565b5f6001600160a01b038316610c6d57506001600160a01b0381163161065c565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd5919061131e565b905061065c565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610d2b91815260200190565b602060405180830381865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a919061131e565b95945050505050565b5f80610d7e84610dc3565b90505f610d8c60068361159b565b6040805160208101879052908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b6040515f90610de2908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715610e3557610e35610dff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610e6357610e63610dff565b604052919050565b6001600160a01b0381168114610e7f575f80fd5b50565b8035600281900b8114610e93575f80fd5b919050565b5f60a08284031215610ea8575f80fd5b60405160a081016001600160401b0381118282101715610eca57610eca610dff565b6040529050808235610edb81610e6b565b81526020830135610eeb81610e6b565b6020820152604083013562ffffff81168114610f05575f80fd5b6040820152610f1660608401610e82565b60608201526080830135610f2981610e6b565b6080919091015292915050565b5f60808284031215610f46575f80fd5b604051608081016001600160401b0381118282101715610f6857610f68610dff565b604052905080610f7783610e82565b8152610f8560208401610e82565b602082015260408301356040820152606083013560608201525092915050565b5f6001600160401b03821115610fbd57610fbd610dff565b50601f01601f191660200190565b5f82601f830112610fda575f80fd5b8135610fed610fe882610fa5565b610e3b565b818152846020838601011115611001575f80fd5b816020850160208301375f918101602001919091529392505050565b8015158114610e7f575f80fd5b8035610e938161101d565b5f805f805f610180868803121561104a575f80fd5b6110548787610e98565b94506110638760a08801610f36565b93506101208601356001600160401b0381111561107e575f80fd5b61108a88828901610fcb565b93505061014086013561109c8161101d565b91506101608601356110ad8161101d565b809150509295509295909350565b5f805f61014084860312156110ce575f80fd5b6110d88585610e98565b92506110e78560a08601610f36565b91506101208401356001600160401b03811115611102575f80fd5b61110e86828701610fcb565b9150509250925092565b5f8060208385031215611129575f80fd5b82356001600160401b0381111561113e575f80fd5b8301601f8101851361114e575f80fd5b80356001600160401b03811115611163575f80fd5b856020828401011115611174575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111c46020830184611184565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528201515f9061123460408401826111cb565b506040838101518051600290810b60e08601526020820151900b610100850152908101516101208401526060908101516101408401528301516101a06101608401526112846101c0840182611184565b90506080840151151561018084015260a084015115156101a08401528091505092915050565b5f602082840312156112ba575f80fd5b81516001600160401b038111156112cf575f80fd5b8201601f810184136112df575f80fd5b80516112ed610fe882610fa5565b818152856020838501011115611301575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f6020828403121561132e575f80fd5b5051919050565b5f60208284031215611345575f80fd5b81356001600160401b0381111561135a575f80fd5b82016101a0818503121561136c575f80fd5b611374610e13565b813561137f81610e6b565b815261138e8560208401610e98565b60208201526113a08560c08401610f36565b60408201526101408201356001600160401b038111156113be575f80fd5b6113ca86828501610fcb565b6060830152506113dd610160830161102a565b60808201526113ef610180830161102a565b60a0820152949350505050565b61140681856111cb565b8251600290810b60a08301526020840151900b60c0820152604083015160e082015260608301516101008201526101406101208201525f610d6a610140830184611184565b5f806040838503121561145c575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f8312801582168215821617156114a0576114a061146d565b505092915050565b634e487b7160e01b5f52600160045260245ffd5b5f600160ff1b82016114d0576114d061146d565b505f0390565b5f602082840312156114e6575f80fd5b81516111c48161101d565b5f60208284031215611501575f80fd5b81516001600160401b03811115611516575f80fd5b8201601f81018413611526575f80fd5b80516001600160401b0381111561153f5761153f610dff565b8060051b61154f60208201610e3b565b9182526020818401810192908101908784111561156a575f80fd5b6020850194505b8385101561159057845180835260209586019590935090910190611571565b979650505050505050565b8082018082111561065c5761065c61146d56fea2646970667358221220022bb587431beddd1b3a2d4e57eee388a80ee14cf23bcb0c201ec0029fc9cb7a64736f6c634300081a003360a0604052348015600e575f80fd5b506040516117d43803806117d4833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516117196100bb5f395f8181606e0152818160d7015281816101ee0152818161030001528181610888015281816108e10152818161095e015281816109b201528181610ac50152610af801526117195ff3fe608060405260043610610033575f3560e01c80632229d0b414610037578063481c6a751461005d57806391dd7346146100a8575b5f80fd5b61004a610045366004611286565b6100d4565b6040519081526020015b60405180910390f35b348015610068575f80fd5b506100907f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610054565b3480156100b3575f80fd5b506100c76100c23660046112f7565b6101e1565b6040516100549190611393565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060a00160405280336001600160a01b031681526020018681526020018881526020018781526020018581525060405160200161014491906113ef565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161016f9190611393565b5f604051808303815f875af115801561018a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101b19190810190611480565b8060200190518101906101c491906114f5565b90504780156101d8576101d85f3383610a04565b50949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610217575f80fd5b5f6102248385018561150c565b90505f61023c82604001515f0151835f015130610a9e565b925050505f610257836040015160200151845f015130610a9e565b92505050815f146102af5760405162461bcd60e51b815260206004820152601e60248201527f64656c74614265666f726530206973206e6f7420657175616c20746f2030000060448201526064015b60405180910390fd5b80156102fd5760405162461bcd60e51b815260206004820152601e60248201527f64656c74614265666f726531206973206e6f7420657175616c20746f2030000060448201526064016102a6565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3cd914c8560400151866060015187608001516040518463ffffffff1660e01b815260040161035a939291906115c4565b6020604051808303815f875af1158015610376573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039a91906114f5565b90505f6103b285604001515f0151865f015130610a9e565b925050505f6103cd866040015160200151875f015130610a9e565b9250505085606001515f01511561062f575f86606001516020015112156105125785606001516020015182121561047c5760405162461bcd60e51b815260206004820152604760248201527f64656c7461416674657230206973206e6f742067726561746572207468616e2060448201527f6f7220657175616c20746f20646174612e706172616d732e616d6f756e7453706064820152661958da599a595960ca1b608482015260a4016102a6565b816104878460801d90565b600f0b146104a75760405162461bcd60e51b81526004016102a69061160c565b5f81121561050d5760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657231206973206e6f742067726561746572207468616e2060448201526c06f7220657175616c20746f203609c1b60648201526084016102a6565b610878565b5f8213156105785760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657230206973206e6f74206c657373207468616e206f722060448201526c657175616c20746f207a65726f60981b60648201526084016102a6565b8061058384600f0b90565b600f0b146105a35760405162461bcd60e51b81526004016102a690611657565b85606001516020015181131561050d5760405162461bcd60e51b8152602060048201526044602482018190527f64656c7461416674657231206973206e6f74206c657373207468616e206f7220908201527f657175616c20746f20646174612e706172616d732e616d6f756e745370656369606482015263199a595960e21b608482015260a4016102a6565b5f866060015160200151121561075e578560600151602001518112156106cd5760405162461bcd60e51b815260206004820152604760248201527f64656c7461416674657231206973206e6f742067726561746572207468616e2060448201527f6f7220657175616c20746f20646174612e706172616d732e616d6f756e7453706064820152661958da599a595960ca1b608482015260a4016102a6565b806106d884600f0b90565b600f0b146106f85760405162461bcd60e51b81526004016102a690611657565b5f82121561050d5760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657230206973206e6f742067726561746572207468616e2060448201526c06f7220657175616c20746f203609c1b60648201526084016102a6565b5f8113156107c15760405162461bcd60e51b815260206004820152602a60248201527f64656c7461416674657231206973206e6f74206c657373207468616e206f72206044820152690657175616c20746f20360b41b60648201526084016102a6565b816107cc8460801d90565b600f0b146107ec5760405162461bcd60e51b81526004016102a69061160c565b8560600151602001518213156108785760405162461bcd60e51b8152602060048201526044602482018190527f64656c7461416674657230206973206e6f74206c657373207468616e206f7220908201527f657175616c20746f20646174612e706172616d732e616d6f756e745370656369606482015263199a595960e21b608482015260a4016102a6565b5f8212156108d15785516108d1907f0000000000000000000000000000000000000000000000000000000000000000906108b1856116a2565b6020808b0151015160408b0151516001600160a01b031693929190610b2a565b5f811215610936578551610936907f00000000000000000000000000000000000000000000000000000000000000009061090a846116a2565b8960200151602001518a60400151602001516001600160a01b0316610b2a90949392919063ffffffff16565b5f821315610986578551602087015151604088015151610986926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610df6565b5f8113156109da578551602080880151516040890151909101516109da926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610df6565b60408051602081018590520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610a37575f805f8085875af1905080610a3257610a326356cdd02560e11b610ec8565b610a98565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f60408201525080610a9857610a98632745a14f60e21b610ec8565b50505050565b5f8080610ab46001600160a01b03871686610ef5565b9250610ae96001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610ef5565b9150610b1f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610f84565b905093509350939050565b8015610bbf57836001600160a01b031663f5298aca84610b59886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610ba4575f80fd5b505af1158015610bb6573d5f803e3d5ffd5b50505050610def565b6001600160a01b038516610c3657836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af1158015610c0b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c3091906114f5565b50610def565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b158015610c76575f80fd5b505af1158015610c88573d5f803e3d5ffd5b505050506001600160a01b0383163014610d1a576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af1158015610cf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1491906116c8565b50610d8c565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610d66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8a91906116c8565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610dc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ded91906114f5565b505b5050505050565b80610e3857604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610b8d565b836001600160a01b031663156e29f684610e61886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610eab575f80fd5b505af1158015610ebd573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f6001600160a01b038316610f1557506001600160a01b038116316109fe565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610f59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7d91906114f5565b90506109fe565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610fd391815260200190565b602060405180830381865afa158015610fee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101291906114f5565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156110525761105261101b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156110815761108161101b565b604052919050565b6001600160a01b038116811461109d575f80fd5b50565b80356110ab81611089565b919050565b5f60a082840312156110c0575f80fd5b6110c861102f565b905081356110d581611089565b815260208201356110e581611089565b6020820152604082013562ffffff811681146110ff575f80fd5b60408201526060820135600281900b8114611118575f80fd5b6060820152611129608083016110a0565b608082015292915050565b801515811461109d575f80fd5b5f60608284031215611151575f80fd5b6040516060810167ffffffffffffffff811182821017156111745761117461101b565b604052905080823561118581611134565b815260208381013590820152604083013561119f81611089565b6040919091015292915050565b5f604082840312156111bc575f80fd5b6040805190810167ffffffffffffffff811182821017156111df576111df61101b565b60405290508082356111f081611134565b8152602083013561120081611134565b6020919091015292915050565b5f67ffffffffffffffff8211156112265761122661101b565b50601f01601f191660200190565b5f82601f830112611243575f80fd5b81356112566112518261120d565b611058565b81815284602083860101111561126a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80610160858703121561129a575f80fd5b6112a486866110b0565b93506112b38660a08701611141565b92506112c38661010087016111ac565b915061014085013567ffffffffffffffff8111156112df575f80fd5b6112eb87828801611234565b91505092959194509250565b5f8060208385031215611308575f80fd5b823567ffffffffffffffff81111561131e575f80fd5b8301601f8101851361132e575f80fd5b803567ffffffffffffffff811115611344575f80fd5b856020828401011115611355575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6113a56020830184611365565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528281015180511515604080850191909152910151151560608301528201515f9061143060808401826113ac565b506060830151805115156101208401526020810151610140840152604001516001600160a01b03166101608301526080830151610180808401526114786101a0840182611365565b949350505050565b5f60208284031215611490575f80fd5b815167ffffffffffffffff8111156114a6575f80fd5b8201601f810184136114b6575f80fd5b80516114c46112518261120d565b8181528560208385010111156114d8575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215611505575f80fd5b5051919050565b5f6020828403121561151c575f80fd5b813567ffffffffffffffff811115611532575f80fd5b82016101808185031215611544575f80fd5b61154c61102f565b813561155781611089565b815261156685602084016111ac565b602082015261157885606084016110b0565b604082015261158b856101008401611141565b606082015261016082013567ffffffffffffffff8111156115aa575f80fd5b6115b686828501611234565b608083015250949350505050565b6115ce81856113ac565b8251151560a0820152602083015160c082015260408301516001600160a01b031660e08201526101206101008201525f611012610120830184611365565b6020808252602b908201527f64656c74612e616d6f756e74302829206973206e6f7420657175616c20746f2060408201526a064656c74614166746572360ac1b606082015260800190565b6020808252602b908201527f64656c74612e616d6f756e74312829206973206e6f7420657175616c20746f2060408201526a64656c746141667465723160a81b606082015260800190565b5f600160ff1b82016116c257634e487b7160e01b5f52601160045260245ffd5b505f0390565b5f602082840312156116d8575f80fd5b81516113a58161113456fea2646970667358221220ab101dfe4b4748d245c1716f79d45f12181b0ade83665d9ec819f86559f0b77264736f6c634300081a00336080604052348015600e575f80fd5b506105a08061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c806332c961d91461005957806357eb1da714610081578063769323e314610089578063b08d3fe214610091578063e631bcbf146100d1575b5f80fd5b61006e610067366004610386565b60a0902090565b6040519081526020015b60405180910390f35b61006e600681565b61006e600481565b6100a461009f366004610423565b61011c565b604080516001600160801b039095168552600f9390930b6020850152918301526060820152608001610078565b6100e46100df36600461045e565b6101d2565b604080516001600160a01b03909516855260029390930b602085015262ffffff91821692840192909252166060820152608001610078565b5f805f805f61012b8787610284565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038a16906335fd631a906044015f60405180830381865afa158015610179573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101a09190810190610488565b602081015160408201516060909201516001600160801b0382169c60809290921d9b5091995090975095505050505050565b5f805f805f6101e0866102d8565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015610228573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024c9190610534565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f8061028f846102d8565b90505f61029d60048361054b565b60408051600287900b602082015290810182905290915060600160405160208183030381529060405280519060200120925050505b92915050565b6040515f906102f7908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561035157610351610314565b604052919050565b6001600160a01b038116811461036d575f80fd5b50565b8035600281900b8114610381575f80fd5b919050565b5f60a0828403128015610397575f80fd5b5060405160a0810167ffffffffffffffff811182821017156103bb576103bb610314565b60405282356103c981610359565b815260208301356103d981610359565b6020820152604083013562ffffff811681146103f3575f80fd5b604082015261040460608401610370565b6060820152608083013561041781610359565b60808201529392505050565b5f805f60608486031215610435575f80fd5b833561044081610359565b92506020840135915061045560408501610370565b90509250925092565b5f806040838503121561046f575f80fd5b823561047a81610359565b946020939093013593505050565b5f60208284031215610498575f80fd5b815167ffffffffffffffff8111156104ae575f80fd5b8201601f810184136104be575f80fd5b805167ffffffffffffffff8111156104d8576104d8610314565b8060051b6104e860208201610328565b91825260208184018101929081019087841115610503575f80fd5b6020850194505b838510156105295784518083526020958601959093509091019061050a565b979650505050505050565b5f60208284031215610544575f80fd5b5051919050565b808201808211156102d257634e487b7160e01b5f52601160045260245ffdfea26469706673582212200f59ae3b20597ee5b9c8afd86ef4272903aea11220ba5f5248dea7997a9f1cfe64736f6c634300081a003360e060405234801561000f575f80fd5b50604051610eea380380610eea83398101604081905261002e916101a1565b8282825f61003c84826102a2565b50600161004983826102a2565b5060ff81166080524660a05261005d61006c565b60c052506103cd945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161009c919061035c565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610127575f80fd5b81516001600160401b0381111561014057610140610104565b604051601f8201601f19908116603f011681016001600160401b038111828210171561016e5761016e610104565b604052818152838201602001851015610185575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f805f606084860312156101b3575f80fd5b83516001600160401b038111156101c8575f80fd5b6101d486828701610118565b602086015190945090506001600160401b038111156101f1575f80fd5b6101fd86828701610118565b925050604084015160ff81168114610213575f80fd5b809150509250925092565b600181811c9082168061023257607f821691505b60208210810361025057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561029d57805f5260205f20601f840160051c8101602085101561027b5750805b601f840160051c820191505b8181101561029a575f8155600101610287565b50505b505050565b81516001600160401b038111156102bb576102bb610104565b6102cf816102c9845461021e565b84610256565b6020601f821160018114610301575f83156102ea5750848201515b5f19600385901b1c1916600184901b17845561029a565b5f84815260208120601f198516915b828110156103305787850151825560209485019460019092019101610310565b508482101561034d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8083546103698161021e565b6001821680156103805760018114610395576103c2565b60ff19831686528115158202860193506103c2565b865f5260205f205f5b838110156103ba5781548882015260019091019060200161039e565b505081860193505b509195945050505050565b60805160a05160c051610af36103f75f395f61044201525f61040d01525f61013f0152610af35ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c806340c10f191161008857806395d89b411161006357806395d89b41146101cc578063a9059cbb146101d4578063d505accf146101e7578063dd62ed3e146101fc575f80fd5b806340c10f191461017b57806370a082311461018e5780637ecebe00146101ad575f80fd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610127578063313ce5671461013a5780633644e51514610173575b5f80fd5b6100d7610226565b6040516100e4919061083f565b60405180910390f35b6101006100fb36600461088f565b6102b1565b60405190151581526020016100e4565b61011960025481565b6040519081526020016100e4565b6101006101353660046108b7565b61031d565b6101617f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100e4565b61011961040a565b61010061018936600461088f565b610464565b61011961019c3660046108f1565b60036020525f908152604090205481565b6101196101bb3660046108f1565b60056020525f908152604090205481565b6100d7610478565b6101006101e236600461088f565b610485565b6101fa6101f5366004610911565b6104fb565b005b61011961020a36600461097e565b600460209081525f928352604080842090915290825290205481565b5f8054610232906109af565b80601f016020809104026020016040519081016040528092919081815260200182805461025e906109af565b80156102a95780601f10610280576101008083540402835291602001916102a9565b820191905f5260205f20905b81548152906001019060200180831161028c57829003601f168201915b505050505081565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061030b9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1981146103765761035283826109fb565b6001600160a01b0386165f9081526004602090815260408083203384529091529020555b6001600160a01b0385165f908152600360205260408120805485929061039d9084906109fb565b90915550506001600160a01b038085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103f79087815260200190565b60405180910390a3506001949350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461043f5761043a61073e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f61046f83836107d6565b50600192915050565b60018054610232906109af565b335f908152600360205260408120805483919083906104a59084906109fb565b90915550506001600160a01b0383165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061030b9086815260200190565b428410156105505760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f600161055b61040a565b6001600160a01b038a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610663573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116158015906106995750876001600160a01b0316816001600160a01b0316145b6106d65760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610547565b6001600160a01b039081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161076e9190610a0e565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546107e79190610aaa565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461088a575f80fd5b919050565b5f80604083850312156108a0575f80fd5b6108a983610874565b946020939093013593505050565b5f805f606084860312156108c9575f80fd5b6108d284610874565b92506108e060208501610874565b929592945050506040919091013590565b5f60208284031215610901575f80fd5b61090a82610874565b9392505050565b5f805f805f805f60e0888a031215610927575f80fd5b61093088610874565b965061093e60208901610874565b95506040880135945060608801359350608088013560ff81168114610961575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f806040838503121561098f575f80fd5b61099883610874565b91506109a660208401610874565b90509250929050565b600181811c908216806109c357607f821691505b6020821081036109e157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610317576103176109e7565b5f8083545f8160011c90506001821680610a2957607f821691505b602082108103610a4757634e487b7160e01b5f52602260045260245ffd5b808015610a5b5760018114610a7057610a9e565b60ff1984168752821515830287019450610a9e565b5f888152602090205f5b84811015610a9657815489820152600190910190602001610a7a565b505082870194505b50929695505050505050565b80820180821115610317576103176109e756fea2646970667358221220f4620711d0f8649f80fed98a6eb335b7806c86e0ebaba0b9fa57daf20d6ed2f364736f6c634300081a00336080604052348015600e575f80fd5b50604051610521380380610521833981016040819052602b91607b565b5f80546001600160a01b039485166001600160a01b031991821617909155600180549390941692169190911790915560025560af565b80516001600160a01b03811681146076575f80fd5b919050565b5f805f60608486031215608c575f80fd5b6093846061565b9250609f602085016061565b9150604084015190509250925092565b610465806100bc5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c806358dbbe811461005957806391b7f5ed14610089578063a035b1fe1461009e578063d004f0f7146100b5578063f5992699146100c8575b5f80fd5b60015461006c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61009c6100973660046103c4565b6100da565b005b6100a760025481565b604051908152602001610080565b61009c6100c33660046103db565b610115565b5f5461006c906001600160a01b031681565b60028190556040518181527ff347ee99503bf19c028bd6b18f3c676e82a9bb5b2bb5225aebe0fd62fd6a0d199060200160405180910390a150565b5f805481906001600160a01b039081169085160361015257506001546002546001600160a01b039091169061014b90849061037e565b91506101c2565b6001546001600160a01b039081169085160361018557505f546002546001600160a01b039091169061014b908490610399565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064015b60405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303815f875af1158015610212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102369190610410565b6102745760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016101b9565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303815f875af11580156102be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e29190610410565b6103205760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016101b9565b604080516001600160a01b03808716825283166020820152908101849052606081018390523360808201527fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d09060a00160405180910390a150505050565b5f6103928383670de0b6b3a76400006103a9565b9392505050565b5f61039283670de0b6b3a7640000845b5f825f1904841183021582026103bd575f80fd5b5091020490565b5f602082840312156103d4575f80fd5b5035919050565b5f80604083850312156103ec575f80fd5b82356001600160a01b0381168114610402575f80fd5b946020939093013593505050565b5f60208284031215610420575f80fd5b81518015158114610392575f80fdfea264697066735822122071f33bd4e906706fab2f1d579ad88e83e4a15cb735911cd69a3275ede2ed3ced64736f6c634300081a0033","sourceMap":"936:10680:53:-:0;;;1756:784;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1843:3;1827:20;;;;;:::i;:::-;508:25:57;;;496:2;481:18;1827:20:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1813:34:53;;;;;1866:40;;;;;:::i;:::-;-1:-1:-1;;;;;728:32:57;;;710:51;;698:2;683:18;1866:40:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1857:49:53;;;1946:11;;1929:29;;;;;:::i;:::-;-1:-1:-1;;;;;728:32:57;;;710:51;;698:2;683:18;1929:29:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1916:42:53;;;1978:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1968:23:53;;;2014:37;;2048:2;;2014:37;;;:::i;:::-;1110:2:57;1092:21;;;1149:1;1129:18;;;1122:29;-1:-1:-1;;;1182:3:57;1167:19;;1160:40;1238:3;1231:4;1216:20;;1209:33;;;1279:1;1258:19;;;1251:30;-1:-1:-1;;;1312:3:57;1297:19;;1290:33;1407:4;1395:17;;;-1:-1:-1;1375:18:57;;1368:45;1355:3;1340:19;2014:37:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2002:49:53;;;2073:37;;2107:2;;2073:37;;;:::i;:::-;1762:2:57;1744:21;;;1801:1;1781:18;;;1774:29;-1:-1:-1;;;1834:3:57;1819:19;;1812:40;1890:3;1883:4;1868:20;;1861:33;;;1931:1;1910:19;;;1903:30;-1:-1:-1;;;1964:3:57;1949:19;;1942:33;2059:4;2047:17;;;-1:-1:-1;2027:18:57;;2020:45;2007:3;1992:19;2073:37:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2061:49:53;;;;;;;2125:9;;:21;;;;2121:99;;;2188:9;;;2199;;;-1:-1:-1;;;;;2162:47:53;;;;;;;;;;2121:99;2263:9;;2283;;2295:12;2236:72;;;;;:::i;:::-;-1:-1:-1;;;;;2296:32:57;;;2278:51;;2365:32;;;;2360:2;2345:18;;2338:60;2429:2;2414:18;;2407:34;2266:2;2251:18;2236:72:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2230:78:53;;;;;2327:9;;:46;;-1:-1:-1;;;2327:46:53;;2350:4;2327:46;;;2648:51:57;2357:15:53;2715:18:57;;;2708:34;2327:14:53;;;;;2621:18:57;;2327:46:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2319:102;;;;-1:-1:-1;;;2319:102:53;;3237:2:57;2319:102:53;;;3219:21:57;3276:2;3256:18;;;3249:30;3315:34;3295:18;;;3288:62;-1:-1:-1;;;3366:18:57;;;3359:41;3417:19;;2319:102:53;;;;;;;;;2439:9;;:46;;-1:-1:-1;;;2439:46:53;;2462:4;2439:46;;;2648:51:57;2469:15:53;2715:18:57;;;2708:34;-1:-1:-1;;;;;2439:14:53;;;;;;2621:18:57;;2439:46:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2431:102;;;;-1:-1:-1;;;2431:102:53;;3649:2:57;2431:102:53;;;3631:21:57;3688:2;3668:18;;;3661:30;3727:34;3707:18;;;3700:62;-1:-1:-1;;;3778:18:57;;;3771:41;3829:19;;2431:102:53;3447:407:57;2431:102:53;1756:784;;936:10680;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:343:57:-;93:6;101;154:2;142:9;133:7;129:23;125:32;122:52;;;170:1;167;160:12;122:52;-1:-1:-1;;215:16:57;;321:2;306:18;;;300:25;215:16;;300:25;;-1:-1:-1;14:343:57:o;2753:277::-;2820:6;2873:2;2861:9;2852:7;2848:23;2844:32;2841:52;;;2889:1;2886;2879:12;2841:52;2921:9;2915:16;2974:5;2967:13;2960:21;2953:5;2950:32;2940:60;;2996:1;2993;2986:12;2940:60;3019:5;2753:277;-1:-1:-1;;;2753:277:57:o;3447:407::-;936:10680:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806357eb1da71161008857806396f5e27c1161006357806396f5e27c146102b25780639bc2ce36146102c5578063b0f479a1146102fd578063c7b8e15d14610323575f80fd5b806357eb1da71461024e5780636af577411461028c57806391b7f5ed1461029f575f80fd5b8063182148ef116100c3578063182148ef146101d55780632ba31c531461024e57806334d9900a14610264578063542524dd1461026c575f80fd5b806301480703146100e957806306ba06fa14610183578063100d3f7414610198575b5f80fd5b6100f161032b565b604080518251600290810b82526020808501516001600160a01b03908116828501528585015181168486015260608087015181860152608080880151805184168288015293840151831660a0808801919091529684015162ffffff1660c08701529083015190930b60e08501529101518116610100830152919092015116610120820152610140015b60405180910390f35b610196610191366004611afe565b6105ff565b005b6101ab6101a6366004611b61565b610a73565b604080516001600160a01b039095168552602085019390935291830152606082015260800161017a565b5f546001546002805461020e936001600160a01b03908116938082169362ffffff600160a01b83041693600160b81b909204900b911685565b604080516001600160a01b039687168152948616602086015262ffffff9093169284019290925260020b606083015291909116608082015260a00161017a565b610256600681565b60405190815260200161017a565b610196610bd6565b6102746111bc565b6040516001600160a01b03909116815260200161017a565b61019661029a366004611c15565b6111de565b6101966102ad366004611cf2565b611349565b6101966102c0366004611d09565b6113ba565b6102d86102d3366004611d33565b611433565b604080516001600160801b03909416845260208401929092529082015260600161017a565b7f0000000000000000000000000000000000000000000000000000000000000000610274565b610274611536565b6040805160c0810182525f80825260208083018290528284018290526060808401839052845160a080820187528482529281018490528086018490529081018390526080808201849052840152820181905291516332c961d960e01b815290919081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e631bcbf907f00000000000000000000000000000000000000000000000000000000000000009083906332c961d9906103f7908790600401611dc6565b602060405180830381865afa158015610412573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104369190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa15801561047d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a19190611deb565b5050915091506040518060c001604052808260020b8152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610555573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105799190611dd4565b81526040805160a0810182525f546001600160a01b03908116825260015480821660208481019190915262ffffff600160a01b83041684860152600160b81b909104600290810b606085015254821660808401528401919091527f0000000000000000000000000000000000000000000000000000000000000000169101529392505050565b5f8313156107c0576040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610671573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106959190611e47565b6106e65760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637930206661696c6564000000000000000060448201526064015b60405180910390fd5b6040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610750573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107749190611e47565b6107c05760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637931206661696c6564000000000000000060448201526064016106dd565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af115801561084c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108709190611e47565b6108bc5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c656400000060448201526064016106dd565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610948573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096c9190611e47565b6109b85760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c656400000060448201526064016106dd565b60408051608081018252600284810b825283900b60208201528082018590525f606082018190529151632d35e7ed60e11b815290916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691635a6bcfda91610a2c918590600401611e66565b6020604051808303815f875af1158015610a48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6c9190611dd4565b5050505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015610b49575f610aac8a5f0385620f424003620f4240611546565b905082610ac557610ac08d8d8d60016115e3565b610ad2565b610ad28c8e8d600161162f565b9650868110610b06578b9750620f42408414610afd57610af8878586620f4240036116f4565b610aff565b865b9450610b1f565b809650610b158d8c8386611724565b9750868a5f030394505b82610b3557610b308d898d5f61162f565b610b41565b610b41888e8d5f6115e3565b955050610bc7565b81610b5f57610b5a8c8c8c5f61162f565b610b6b565b610b6b8b8d8c5f6115e3565b9450848910610b7c578a9650610b8e565b889450610b8b8c8b878561177b565b96505b81610ba557610ba08c888c60016115e3565b610bb2565b610bb2878d8c600161162f565b9550610bc4868485620f4240036116f4565b93505b50505095509550955095915050565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610c62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c869190611e47565b610cd25760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c656400000060448201526064016106dd565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610d5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d829190611e47565b610dce5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c656400000060448201526064016106dd565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e631bcbf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b8152600401610e6c9190611dc6565b602060405180830381865afa158015610e87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eab9190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610ef2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f169190611deb565b5050915091505f610f3e836001600160a01b0316846001600160a01b0316600160c01b611546565b610f5090670de0b6b3a7640000611ecb565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610faf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd39190611dd4565b9050808211156110c157604080516060810182526001808252620f42406020830152915f9190810161100b6401000276a36001611f01565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b4916110789186908690600401611f20565b6020604051808303815f875af1158015611094573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b89190611dd4565b505050506111b6565b808210156111b657604080516060810182525f8082526127106020830152918291908101611104600173fffd8963efd1fc6a506488495d951d5263988d26611ee2565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b4916111719186908690600401611f20565b6020604051808303815f875af115801561118d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b19190611dd4565b505050505b50505050565b6111db600173fffd8963efd1fc6a506488495d951d5263988d26611ee2565b81565b6040805160a0810182527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168083527f000000000000000000000000000000000000000000000000000000000000000082166020840181905262ffffff8a811685870181905260028b810b60608801528a861660809097018790525f80546001600160a01b03199081169096178155600180546001600160b81b031916909517600160a01b9093029290921762ffffff60b81b1916600160b81b938d16939093029290921790925580549092169093179055915163695c5bf560e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695c5bf5916113019186908690600401611f80565b6020604051808303815f875af115801561131d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113419190611fd5565b505050505050565b6040516391b7f5ed60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391b7f5ed906024015f604051808303815f87803b1580156113a8575f80fd5b505af1158015610a6c573d5f803e3d5ffd5b60405163d004f0f760e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d004f0f7906044015f604051808303815f87803b158015611421575f80fd5b505af1158015611341573d5f803e3d5ffd5b5f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b81526004016114839190611dc6565b602060405180830381865afa15801561149e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c29190611dd4565b604080516026810188905260068101899052600381018a90528a8152603a600c8201205f928201839052602082018390529190529091506115247f000000000000000000000000000000000000000000000000000000000000000083836117c2565b919b909a509098509650505050505050565b6111db6401000276a36001611f01565b5f838302815f1985870982811083820303915050808411611565575f80fd5b805f03611577575082900490506115dc565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516611616818484611546565b9350845f83858409111684019350505050949350505050565b5f836001600160a01b0316856001600160a01b0316111561164e579293925b6001600160a01b0385166116685762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b0386860316836116bb57866001600160a01b03166116a88383896001600160a01b0316611546565b816116b5576116b5611ff0565b046116e7565b6116e76116d28383896001600160a01b03166116f4565b886001600160a01b0316808204910615150190565b925050505b949350505050565b5f611700848484611546565b9050818061171057611710611ff0565b838509156115dc57600101806115dc575f80fd5b5f6001600160801b038416156001600160a01b03861615171561174e57634f2461b85f526004601cfd5b81611765576117608585856001611865565b611772565b6117728585856001611950565b95945050505050565b5f6001600160801b038416156001600160a01b0386161517156117a557634f2461b85f526004601cfd5b816117b6576117608585855f611950565b6117728585855f611865565b5f805f806117d08686611a32565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa15801561181e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118459190810190612004565b60208101516040820151606090920151909a919950975095505050505050565b5f81156118d5575f6001600160a01b038411156118995761189484600160601b876001600160801b0316611546565b6118b0565b6118b06001600160801b038616606086901b6120b0565b90506118cd6118c8826001600160a01b0389166120cf565b611a83565b9150506116ec565b5f6001600160a01b03841115611902576118fd84600160601b876001600160801b03166116f4565b61191f565b61191f606085901b6001600160801b038716808204910615150190565b9050806001600160a01b0387161161193e57634323a5555f526004601cfd5b6001600160a01b0386160390506116ec565b5f825f0361195f5750836116ec565b600160601b600160e01b03606085901b1682156119f1576001600160a01b0386168481029085828161199357611993611ff0565b04036119c3578181018281106119c1576119b783896001600160a01b0316836116f4565b93505050506116ec565b505b506118cd81856119dc6001600160a01b038a16836120b0565b6119e691906120cf565b808204910615150190565b6001600160a01b038616848102908582041481831116611a185763f5c787f15f526004601cfd5b8082036119b76118c8846001600160a01b038b16846116f4565b5f80611a3d84611aa9565b90505f611a4b6006836120cf565b604080516020810187905290810182905290915060600160405160208183030381529060405280519060200120925050505b92915050565b806001600160a01b0381168114611aa457611aa46393dafdf160e01b611ae5565b919050565b6040515f90611ac8908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b805f5260045ffd5b8060020b8114611afb575f80fd5b50565b5f805f60608486031215611b10575f80fd5b833592506020840135611b2281611aed565b91506040840135611b3281611aed565b809150509250925092565b6001600160a01b0381168114611afb575f80fd5b62ffffff81168114611afb575f80fd5b5f805f805f60a08688031215611b75575f80fd5b8535611b8081611b3d565b94506020860135611b9081611b3d565b935060408601356001600160801b0381168114611bab575f80fd5b9250606086013591506080860135611bc281611b51565b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c0d57611c0d611bd0565b604052919050565b5f805f805f60a08688031215611c29575f80fd5b8535611c3481611b51565b94506020860135611c4481611aed565b93506040860135611c5481611b3d565b92506060860135611c6481611b3d565b9150608086013567ffffffffffffffff811115611c7f575f80fd5b8601601f81018813611c8f575f80fd5b803567ffffffffffffffff811115611ca957611ca9611bd0565b611cbc601f8201601f1916602001611be4565b818152896020838501011115611cd0575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b5f60208284031215611d02575f80fd5b5035919050565b5f8060408385031215611d1a575f80fd5b8235611d2581611b3d565b946020939093013593505050565b5f805f8060808587031215611d46575f80fd5b8435611d5181611b3d565b93506020850135611d6181611aed565b92506040850135611d7181611aed565b9396929550929360600135925050565b80546001600160a01b0390811683526001820154808216602085015260a081901c62ffffff16604085015260b81c600290810b60608501529091015416608090910152565b60a08101611a7d8284611d81565b5f60208284031215611de4575f80fd5b5051919050565b5f805f8060808587031215611dfe575f80fd5b8451611e0981611b3d565b6020860151909450611e1a81611aed565b6040860151909350611e2b81611b51565b6060860151909250611e3c81611b51565b939692955090935050565b5f60208284031215611e57575f80fd5b815180151581146115dc575f80fd5b611e708184611d81565b8151600290810b60a08301526020830151900b60c0820152604082015160e082015260609091015161010082015261014061012082018190525f9082015261016001919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611a7d57611a7d611eb7565b6001600160a01b038281168282160390811115611a7d57611a7d611eb7565b6001600160a01b038181168382160190811115611a7d57611a7d611eb7565b611f2a8185611d81565b8251151560a082015260208084015160c08301526040909301516001600160a01b031660e082015281511515610100820152910151151561012082015261016061014082018190525f9082015261018001919050565b611f8a8185611d81565b60018060a01b03831660a082015260e060c08201525f82518060e0840152806020850161010085015e5f6101008285010152610100601f19601f830116840101915050949350505050565b5f60208284031215611fe5575f80fd5b81516115dc81611aed565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215612014575f80fd5b815167ffffffffffffffff81111561202a575f80fd5b8201601f8101841361203a575f80fd5b805167ffffffffffffffff81111561205457612054611bd0565b8060051b61206460208201611be4565b9182526020818401810192908101908784111561207f575f80fd5b6020850194505b838510156120a557845180835260209586019590935090910190612086565b979650505050505050565b5f826120ca57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115611a7d57611a7d611eb756fea2646970667358221220877ced38546816c85b904367c43f1cc801c6c1677203063d25edd1749f574c2164736f6c634300081a0033","sourceMap":"936:10680:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2644:422;;;:::i;:::-;;;;352:13:57;;349:1;338:28;;;320:47;;427:4;415:17;;;409:24;-1:-1:-1;;;;;405:50:57;;;383:20;;;376:80;504:17;;;498:24;494:50;;472:20;;;465:80;601:4;589:17;;;583:24;561:20;;;554:54;655:4;643:17;;;637:24;703:19;;699:45;;677:20;;;670:75;792:23;;;786:30;782:56;;443:3;761:19;;;754:85;;;;886:23;;;880:30;912:8;876:45;870:3;855:19;;848:74;979:23;;;973:30;959:45;;;953:3;938:19;;931:74;1052:23;;1046:30;1042:56;;1036:3;1021:19;;1014:85;1136:16;;;;1130:23;80:31;1212:6;1197:22;;68:44;307:3;292:19;2644:422:53;;;;;;;;5379:854;;;;;;:::i;:::-;;:::i;:::-;;8163:3451;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3217:32:57;;;3199:51;;3281:2;3266:18;;3259:34;;;;3309:18;;;3302:34;3367:2;3352:18;;3345:34;3186:3;3171:19;8163:3451:53;2968:417:57;1230:22:53;;;;;;;;;;-1:-1:-1;;;;;1230:22:53;;;;;;;;;-1:-1:-1;;;1230:22:53;;;;-1:-1:-1;;;1230:22:53;;;;;;;;;;;;;-1:-1:-1;;;;;3736:32:57;;;3718:51;;3805:32;;;3800:2;3785:18;;3778:60;3886:8;3874:21;;;3854:18;;;3847:49;;;;3943:1;3932:21;3927:2;3912:18;;3905:49;3991:32;;;;3985:3;3970:19;;3963:61;3705:3;3690:19;1230:22:53;3390:640:57;1523:44:53;;1566:1;1523:44;;;;;4181:25:57;;;4169:2;4154:18;1523:44:53;4035:177:57;3265:1654:53;;;:::i;1385:69::-;;;:::i;:::-;;;-1:-1:-1;;;;;4381:32:57;;;4363:51;;4351:2;4336:18;1385:69:53;4217:203:57;4925:448:53;;;;;;:::i;:::-;;:::i;3072:76::-;;;;;;:::i;:::-;;:::i;3154:105::-;;;;;;:::i;:::-;;:::i;6239:600::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7776:47:57;;;7758:66;;7855:2;7840:18;;7833:34;;;;7883:18;;;7876:34;7746:2;7731:18;6239:600:53;7556:360:57;2546:92:53;2624:6;2546:92;;1310:69;;;:::i;2644:422::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2786:21:53;;-1:-1:-1;;;2786:21:53;;-1:-1:-1;;;;;;;;;;2756:7:53;:16;;;;2773:11;;2756:16;;2786:12;;:21;;-1:-1:-1;;2786:21:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2756:52;;-1:-1:-1;;;;;;2756:52:53;;;;;;;-1:-1:-1;;;;;9451:32:57;;;2756:52:53;;;9433:51:57;9500:18;;;9493:34;9406:18;;2756:52:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2717:91;;;;;;2826:233;;;;;;;;2860:4;2826:233;;;;;;2892:12;-1:-1:-1;;;;;2826:233:53;;;;;2935:11;-1:-1:-1;;;;;2826:233:53;;;;;2971:3;-1:-1:-1;;;;;2971:9:53;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2826:233;;;;;;;;;;3002:7;2826:233;-1:-1:-1;;;;;2826:233:53;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2826:233:53;;;;;;;-1:-1:-1;;;2826:233:53;;;;;;;;;;;;;;;;;;;;;;;;3040:7;2826:233;;;;2819:240;2644:422;-1:-1:-1;;;2644:422:53:o;5379:854::-;5496:1;5479:14;:18;5475:245;;;5521:54;;-1:-1:-1;;;5521:54:53;;5544:4;5521:54;;;9433:51:57;9500:18;;;9493:34;;;5521:9:53;-1:-1:-1;;;;;5521:14:53;;;;9406:18:57;;5521:54:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5513:91;;;;-1:-1:-1;;;5513:91:53;;11141:2:57;5513:91:53;;;11123:21:57;11180:2;11160:18;;;11153:30;11219:26;11199:18;;;11192:54;11263:18;;5513:91:53;;;;;;;;;5626:54;;-1:-1:-1;;;5626:54:53;;5649:4;5626:54;;;9433:51:57;9500:18;;;9493:34;;;5626:9:53;-1:-1:-1;;;;;5626:14:53;;;;9406:18:57;;5626:54:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5618:91;;;;-1:-1:-1;;;5618:91:53;;11494:2:57;5618:91:53;;;11476:21:57;11533:2;11513:18;;;11506:30;11572:26;11552:18;;;11545:54;11616:18;;5618:91:53;11292:348:57;5618:91:53;5738:53;;-1:-1:-1;;;5738:53:53;;-1:-1:-1;;;;;5764:6:53;9451:32:57;;5738:53:53;;;9433:51:57;-1:-1:-1;;9500:18:57;;;9493:34;5738:9:53;:17;;;;9406:18:57;;5738:53:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5730:95;;;;-1:-1:-1;;;5730:95:53;;11847:2:57;5730:95:53;;;11829:21:57;11886:2;11866:18;;;11859:30;11925:31;11905:18;;;11898:59;11974:18;;5730:95:53;11645:353:57;5730:95:53;5843:53;;-1:-1:-1;;;5843:53:53;;-1:-1:-1;;;;;5869:6:53;9451:32:57;;5843:53:53;;;9433:51:57;-1:-1:-1;;9500:18:57;;;9493:34;5843:9:53;:17;;;;9406:18:57;;5843:53:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5835:95;;;;-1:-1:-1;;;5835:95:53;;12205:2:57;5835:95:53;;;12187:21:57;12244:2;12224:18;;;12217:30;12283:31;12263:18;;;12256:59;12332:18;;5835:95:53;12003:353:57;5835:95:53;5992:180;;;;;;;;;;;;;;;;;;;;;;;;;;;5941:48;5992:180;;;;;;6183:43;;-1:-1:-1;;;6183:43:53;;5992:180;;-1:-1:-1;;;;;6183:6:53;:22;;;;:43;;5992:180;;6183:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5465:768;5379:854;;;:::o;8163:3451::-;8373:24;;;;8489:26;;;-1:-1:-1;;;;;8572:41:53;;;;;;;;8642:19;;;8676:2922;;;;8707:30;8760:81;8785:15;8784:16;;8818:8;1300:3;8803:23;1300:3;8760:15;:81::i;:::-;8707:134;;8870:10;:230;;9013:87;9043:19;9064:18;9084:9;9095:4;9013:29;:87::i;:::-;8870:230;;;8903:87;8933:18;8953:19;8974:9;8985:4;8903:29;:87::i;:::-;8859:241;;9148:8;9122:22;:34;9118:969;;9263:18;9244:37;;1300:3;9315:8;:24;:256;;9501:70;9527:8;9537;9562;1300:3;9547:23;9501:25;:70::i;:::-;9315:256;;;9366:8;9315:256;9303:268;;9118:969;;;9681:22;9670:33;;9744:153;9809:19;9830:9;9841:22;9865:10;9744:39;:153::i;:::-;9725:172;;10060:8;10041:15;10040:16;;10032:36;10020:48;;9118:969;10116:10;:228;;10258:86;10288:19;10309:16;10327:9;10338:5;10258:29;:86::i;:::-;10116:228;;;10149:86;10179:16;10197:19;10218:9;10229:5;10149:29;:86::i;:::-;10104:240;;8689:1670;8676:2922;;;10395:10;:232;;10539:88;10569:19;10590:18;10610:9;10621:5;10539:29;:88::i;:::-;10395:232;;;10428:88;10458:18;10478:19;10499:9;10510:5;10428:29;:88::i;:::-;10383:244;;10677:9;10657:15;10649:37;10645:516;;10794:18;10775:37;;10645:516;;;10966:15;10946:36;;11047:95;11088:19;11109:9;11120;11131:10;11047:40;:95::i;:::-;11004:138;;10645:516;11189:10;:226;;11330:85;11360:19;11381:16;11399:9;11410:4;11330:29;:85::i;:::-;11189:226;;;11222:85;11252:16;11270:19;11291:9;11302:4;11222:29;:85::i;:::-;11178:237;;11513:70;11539:8;11549;11574;1300:3;11559:23;11513:25;:70::i;:::-;11501:82;;8676:2922;8465:3143;;;8163:3451;;;;;;;;;;:::o;3265:1654::-;3315:57;;-1:-1:-1;;;3315:57:53;;-1:-1:-1;;;;;3341:10:53;9451:32:57;;3315:57:53;;;9433:51:57;-1:-1:-1;;9500:18:57;;;9493:34;3315:9:53;:17;;;;9406:18:57;;3315:57:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3307:99;;;;-1:-1:-1;;;3307:99:53;;11847:2:57;3307:99:53;;;11829:21:57;11886:2;11866:18;;;11859:30;11925:31;11905:18;;;11898:59;11974:18;;3307:99:53;11645:353:57;3307:99:53;3424:57;;-1:-1:-1;;;3424:57:53;;-1:-1:-1;;;;;3450:10:53;9451:32:57;;3424:57:53;;;9433:51:57;-1:-1:-1;;9500:18:57;;;9493:34;3424:9:53;:17;;;;9406:18:57;;3424:57:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3416:99;;;;-1:-1:-1;;;3416:99:53;;12205:2:57;3416:99:53;;;12187:21:57;12244:2;12224:18;;;12217:30;12283:31;12263:18;;;12256:59;12332:18;;3416:99:53;12003:353:57;3416:99:53;3527:20;3549:10;3565:7;-1:-1:-1;;;;;3565:16:53;;3582:11;3595:7;-1:-1:-1;;;;;3595:12:53;;3608:7;3595:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3565:52;;-1:-1:-1;;;;;;3565:52:53;;;;;;;-1:-1:-1;;;;;9451:32:57;;;3565:52:53;;;9433:51:57;9500:18;;;9493:34;9406:18;;3565:52:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3526:91;;;;;;3636:20;3659:53;3675:12;-1:-1:-1;;;;;3659:53:53;3689:12;-1:-1:-1;;;;;3659:53:53;-1:-1:-1;;;3659:15:53;:53::i;:::-;:60;;3715:4;3659:60;:::i;:::-;3636:83;;3729:16;3748:3;-1:-1:-1;;;;;3748:9:53;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3729:30;;3789:8;3774:12;:23;3770:1143;;;3890:224;;;;;;;;3831:4;3890:224;;;3989:7;3890:224;;;;3831:4;3813:15;;3890:224;;;1352:27;1586:10:40;1378:1:53;1352:27;:::i;:::-;-1:-1:-1;;;;;3890:224:53;;;;;;4193:70;;;;;;;;4129:45;4193:70;;;;;;;;;4278:50;;-1:-1:-1;;;4278:50:53;;3850:264;;-1:-1:-1;4193:70:53;4278:10;:15;;;;;;:50;;3850:264;;4193:70;;4278:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3799:540;;;3770:1143;;;4364:8;4349:12;:23;4345:568;;;4466:222;;;;;;;;4388:15;4466:222;;;4565:5;4466:222;;;;4388:15;;;4466:222;;;1427:27;1453:1;1766:49:40;1427:27:53;:::i;:::-;-1:-1:-1;;;;;4466:222:53;;;;;;4767:70;;;;;;;;4703:45;4767:70;;;;;;;;;4852:50;;-1:-1:-1;;;4852:50:53;;4426:262;;-1:-1:-1;4767:70:53;4852:10;:15;;;;;;:50;;4426:262;;4767:70;;4852:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4374:539;;;4345:568;3297:1622;;;;3265:1654::o;1385:69::-;1427:27;1453:1;1766:49:40;1427:27:53;:::i;:::-;1385:69;:::o;4925:448::-;5075:225;;;;;;;;5130:9;-1:-1:-1;;;;;5075:225:53;;;;;;5188:9;5075:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5065:235:53;;-1:-1:-1;;;;;;5065:235:53;;;;;;;;-1:-1:-1;5065:235:53;;-1:-1:-1;;;;;;5065:235:53;;;;-1:-1:-1;;;5065:235:53;;;;;;;-1:-1:-1;;;;5065:235:53;-1:-1:-1;;;5065:235:53;;;;;;;;;;;;;;;;;;;;;;;;5311:55;;-1:-1:-1;;;5311:55:53;;:11;:22;;;;;;:55;;5343:12;;5357:8;;5311:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4925:448;;;;;:::o;3072:76::-;3122:19;;-1:-1:-1;;;3122:19:53;;;;;4181:25:57;;;3122:3:53;-1:-1:-1;;;;;3122:12:53;;;;4154:18:57;;3122:19:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3154:105;3225:27;;-1:-1:-1;;;3225:27:53;;-1:-1:-1;;;;;9451:32:57;;;3225:27:53;;;9433:51:57;9500:18;;;9493:34;;;3225:3:53;:8;;;;9406:18:57;;3225:27:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6239:600;6388:17;6407:32;6441;6485:13;6501:7;-1:-1:-1;;;;;6501:12:53;;6514:7;6501:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2499:4:33;2493:11;;2533:4;2524:14;;2517:28;;;2590:4;2581:14;;2574:33;;;2652:4;2643:14;;2636:33;;;2698:18;;;2786:4;2779;2770:14;;2760:31;-1:-1:-1;2875:14:33;;;2868:25;;;-1:-1:-1;2935:14:33;;2928:25;;;3010:14;;;6485:37:53;;-1:-1:-1;6783:49:53;6799:11;6485:37;2760:31:33;6783:15:53;:49::i;:::-;6717:115;;;;-1:-1:-1;6717:115:53;;-1:-1:-1;6239:600:53;-1:-1:-1;;;;;;;6239:600:53:o;1310:69::-;1352:27;1586:10:40;1378:1:53;1352:27;:::i;741:4141:25:-;823:14;1212:5;;;823:14;-1:-1:-1;;1216:1:25;1212;1400:20;1473:5;1469:2;1466:13;1458:5;1454:2;1450:14;1446:34;1437:43;;;1633:5;1619:11;:19;1611:28;;;;;;1720:5;1729:1;1720:10;1716:177;;-1:-1:-1;1807:23:25;;;;-1:-1:-1;1865:13:25;;1716:177;2193:17;2293:11;2290:1;2287;2280:25;2701:12;2717:15;;;2716:31;;2869:22;;;;;3776:1;3757;:15;;3756:21;;4019:17;;;4015:21;;4008:28;4081:17;;;4077:21;;4070:28;4144:17;;;4140:21;;4133:28;4207:17;;;4203:21;;4196:28;4270:17;;;4266:21;;4259:28;4334:17;;;4330:21;;;4323:28;3313:12;;;;3309:23;;;3334:1;3305:31;2454:20;;;2443:32;;;3372:12;;;;2501:21;;;;3029:16;;;;3363:21;;;;4827:11;;;;;-1:-1:-1;;741:4141:25;;;;;;:::o;11602:1078:36:-;11753:15;-1:-1:-1;;;;;10731:50:36;;;10679;;;10675:107;10862:3;10858:14;;;11112:15;;;11102:26;-1:-1:-1;;;;;;;;12020:50:36;;12476:51;12020:50;11102:26;348:27:24;12476:15:36;:51::i;:::-;12466:61;;12655:7;12651:1;12637:11;12626:9;12614:10;12607:42;12604:49;12600:63;12591:7;12587:77;12576:88;;12562:112;;;11602:1078;;;;;;:::o;9411:1050::-;9562:7;9629:13;-1:-1:-1;;;;;9613:29:36;:13;-1:-1:-1;;;;;9613:29:36;;9609:98;;;9678:13;;9693;9609:98;-1:-1:-1;;;;;9853:13:36;9849:62;9839:205;;9945:10;9942:1;9935:21;10021:4;10015;10008:18;9839:205;-1:-1:-1;;;;;;;308:2:24;10093:45:36;;;;-1:-1:-1;;;;;10173:29:36;;;10152:50;10224:7;:220;;10431:13;-1:-1:-1;;;;;10374:70:36;:54;10390:10;10402;10414:13;-1:-1:-1;;;;;10374:54:36;:15;:54::i;:::-;:70;;;;;:::i;:::-;;10224:220;;;10250:105;10275:64;10301:10;10313;10325:13;-1:-1:-1;;;;;10275:64:36;:25;:64::i;:::-;10341:13;-1:-1:-1;;;;;10250:105:36;656:9:42;;;670;;667:16;;652:32;;491:223;10250:105:36;10217:227;;;;9411:1050;;;;;;;:::o;5164:296:25:-;5256:14;5315:25;5322:1;5325;5328:11;5315:6;:25::i;:::-;5306:34;;5371:11;5358:25;;;;;:::i;:::-;5368:1;5365;5358:25;:30;5354:90;;5416:8;;:12;5408:21;;;;;6473:909:36;6627:7;-1:-1:-1;;;;;6900:9:36;6896:50;6889:58;-1:-1:-1;;;;;6817:8:36;6813:57;6806:65;6786:175;6783:309;;;6990:10;6987:1;6980:21;7073:4;7067;7060:18;6783:309;7185:10;:190;;7299:76;7339:8;7349:9;7360:8;7370:4;7299:39;:76::i;:::-;7185:190;;;7210:74;7248:8;7258:9;7269:8;7279:4;7210:37;:74::i;:::-;7178:197;6473:909;-1:-1:-1;;;;;6473:909:36:o;7951:::-;8107:7;-1:-1:-1;;;;;8380:9:36;8376:50;8369:58;-1:-1:-1;;;;;8297:8:36;8293:57;8286:65;8266:175;8263:309;;;8470:10;8467:1;8460:21;8553:4;8547;8540:18;8263:309;8659:10;:194;;8777:76;8815:8;8825:9;8836;8847:5;8777:37;:76::i;8659:194::-;8684:78;8724:8;8734:9;8745;8756:5;8684:39;:78::i;6845:623:53:-;6974:17;6993:32;7027;7075:12;7090:40;7111:6;7119:10;7090:20;:40::i;:::-;7222:25;;-1:-1:-1;;;7222:25:53;;;;;16319::57;;;7245:1:53;16360:18:57;;;16353:34;7075:55:53;;-1:-1:-1;7198:21:53;;-1:-1:-1;;;;;7222:16:53;;;;;16292:18:57;;7222:25:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7222:25:53;;;;;;;;;;;;:::i;:::-;7326:2;7316:13;;7310:20;7387:2;7377:13;;7371:20;7448:2;7438:13;;;7432:20;7310;;7371;;-1:-1:-1;7432:20:53;-1:-1:-1;6845:623:53;-1:-1:-1;;;;;;6845:623:53:o;4451:1450:36:-;4610:7;4791:3;4787:1108;;;4810:16;-1:-1:-1;;;;;4847:27:36;;;:172;;4967:52;4983:6;-1:-1:-1;;;5009:9:36;-1:-1:-1;;;;;4967:52:36;:15;:52::i;:::-;4847:172;;;4897:47;-1:-1:-1;;;;;4897:47:36;;308:2:24;4898:33:36;;;4897:47;:::i;:::-;4810:223;-1:-1:-1;5055:42:36;5056:28;4810:223;-1:-1:-1;;;;;5056:17:36;;:28;:::i;:::-;5055:40;:42::i;:::-;5048:49;;;;;4787:1108;5128:16;-1:-1:-1;;;;;5165:27:36;;;:205;;5308:62;5334:6;-1:-1:-1;;;5360:9:36;-1:-1:-1;;;;;5308:62:36;:25;:62::i;:::-;5165:205;;;5215:70;308:2:24;5240:33:36;;;-1:-1:-1;;;;;5215:70:36;;656:9:42;;;670;;667:16;;652:32;;491:223;5215:70:36;5128:256;;5596:8;-1:-1:-1;;;;;5541:8:36;5537:57;5534:71;5524:220;;5639:10;5636:1;5629:21;5721:4;5715;5708:18;5524:220;-1:-1:-1;;;;;5850:19:36;;;;-1:-1:-1;5835:35:36;;1548:2065;1705:7;1844:6;1854:1;1844:11;1840:32;;-1:-1:-1;1864:8:36;1857:15;;1840:32;-1:-1:-1;;;;;;;308:2:24;1903:45:36;;;;1959:1648;;;;-1:-1:-1;;;;;2028:17:36;;;;;;:6;:17;:6;2067:16;;;;:::i;:::-;;:28;2063:345;;2141:20;;;2187:25;;;2183:207;;2306:60;2332:10;2344:8;-1:-1:-1;;;;;2306:60:36;2354:11;2306:25;:60::i;:::-;2291:76;;;;;;;2183:207;2097:311;2063:345;-1:-1:-1;2501:70:36;2526:10;2564:6;2539:21;-1:-1:-1;;;;;2539:21:36;;2526:10;2539:21;:::i;:::-;2538:32;;;;:::i;:::-;656:9:42;;;670;;667:16;;652:32;;491:223;1959:1648:36;-1:-1:-1;;;;;2649:17:36;;;;;;3082:20;;;3079:83;3192:23;;;3046:195;3011:397;;3300:10;3297:1;3290:21;3381:4;3375;3368:18;3011:397;3465:20;;;3510:72;:60;3465:10;-1:-1:-1;;;;;3510:60:36;;3465:20;3510:25;:60::i;7474:517:53:-;7562:7;7638:17;7658:25;7676:6;7658:17;:25::i;:::-;7638:45;-1:-1:-1;7765:23:53;7799:37;1566:1;7638:45;7799:37;:::i;:::-;7938:45;;;;;;17892:19:57;;;17927:12;;;17920:28;;;7791:46:53;;-1:-1:-1;17964:12:57;;7938:45:53;;;;;;;;;;;;7928:56;;;;;;7921:63;;;;7474:517;;;;;:::o;473:155:35:-;559:1;-1:-1:-1;;;;;575:6:35;;;;571:50;;583:38;-1:-1:-1;;;583:36:35;:38::i;:::-;473:155;;;:::o;7997:160:53:-;8098:51;;8062:7;;8098:51;;8129:6;;1514:1;;8098:51;;17892:19:57;;;17936:2;17927:12;;17920:28;17973:2;17964:12;;17735:247;8098:51:53;;;;;;;;;;;;;8088:62;;;;;;8081:69;;7997:160;;;:::o;606:163:22:-;716:8;713:1;706:19;748:4;745:1;738:15;1231:118:57;1318:5;1315:1;1304:20;1297:5;1294:31;1284:59;;1339:1;1336;1329:12;1284:59;1231:118;:::o;1354:499::-;1426:6;1434;1442;1495:2;1483:9;1474:7;1470:23;1466:32;1463:52;;;1511:1;1508;1501:12;1463:52;1556:23;;;-1:-1:-1;1655:2:57;1640:18;;1627:32;1668:31;1627:32;1668:31;:::i;:::-;1718:7;-1:-1:-1;1777:2:57;1762:18;;1749:32;1790:31;1749:32;1790:31;:::i;:::-;1840:7;1830:17;;;1354:499;;;;;:::o;1858:131::-;-1:-1:-1;;;;;1933:31:57;;1923:42;;1913:70;;1979:1;1976;1969:12;1994:119;2079:8;2072:5;2068:20;2061:5;2058:31;2048:59;;2103:1;2100;2093:12;2118:845;2211:6;2219;2227;2235;2243;2296:3;2284:9;2275:7;2271:23;2267:33;2264:53;;;2313:1;2310;2303:12;2264:53;2352:9;2339:23;2371:31;2396:5;2371:31;:::i;:::-;2421:5;-1:-1:-1;2478:2:57;2463:18;;2450:32;2491:33;2450:32;2491:33;:::i;:::-;2543:7;-1:-1:-1;2602:2:57;2587:18;;2574:32;-1:-1:-1;;;;;2637:48:57;;2625:61;;2615:89;;2700:1;2697;2690:12;2615:89;2723:7;-1:-1:-1;2803:2:57;2788:18;;2775:32;;-1:-1:-1;2885:3:57;2870:19;;2857:33;2899:32;2857:33;2899:32;:::i;:::-;2950:7;2940:17;;;2118:845;;;;;;;;:::o;4607:127::-;4668:10;4663:3;4659:20;4656:1;4649:31;4699:4;4696:1;4689:15;4723:4;4720:1;4713:15;4739:275;4810:2;4804:9;4875:2;4856:13;;-1:-1:-1;;4852:27:57;4840:40;;4910:18;4895:34;;4931:22;;;4892:62;4889:88;;;4957:18;;:::i;:::-;4993:2;4986:22;4739:275;;-1:-1:-1;4739:275:57:o;5019:1334::-;5135:6;5143;5151;5159;5167;5220:3;5208:9;5199:7;5195:23;5191:33;5188:53;;;5237:1;5234;5227:12;5188:53;5276:9;5263:23;5295:30;5319:5;5295:30;:::i;:::-;5344:5;-1:-1:-1;5401:2:57;5386:18;;5373:32;5414:31;5373:32;5414:31;:::i;:::-;5464:7;-1:-1:-1;5523:2:57;5508:18;;5495:32;5536:33;5495:32;5536:33;:::i;:::-;5588:7;-1:-1:-1;5647:2:57;5632:18;;5619:32;5660:33;5619:32;5660:33;:::i;:::-;5712:7;-1:-1:-1;5770:3:57;5755:19;;5742:33;5798:18;5787:30;;5784:50;;;5830:1;5827;5820:12;5784:50;5853:22;;5906:4;5898:13;;5894:27;-1:-1:-1;5884:55:57;;5935:1;5932;5925:12;5884:55;5975:2;5962:16;6001:18;5993:6;5990:30;5987:56;;;6023:18;;:::i;:::-;6065:57;6112:2;6089:17;;-1:-1:-1;;6085:31:57;6118:2;6081:40;6065:57;:::i;:::-;6145:6;6138:5;6131:21;6193:7;6188:2;6179:6;6175:2;6171:15;6167:24;6164:37;6161:57;;;6214:1;6211;6204:12;6161:57;6269:6;6264:2;6260;6256:11;6251:2;6244:5;6240:14;6227:49;6321:1;6316:2;6307:6;6300:5;6296:18;6292:27;6285:38;6342:5;6332:15;;;;;5019:1334;;;;;;;;:::o;6358:226::-;6417:6;6470:2;6458:9;6449:7;6445:23;6441:32;6438:52;;;6486:1;6483;6476:12;6438:52;-1:-1:-1;6531:23:57;;6358:226;-1:-1:-1;6358:226:57:o;6589:367::-;6657:6;6665;6718:2;6706:9;6697:7;6693:23;6689:32;6686:52;;;6734:1;6731;6724:12;6686:52;6773:9;6760:23;6792:31;6817:5;6792:31;:::i;:::-;6842:5;6920:2;6905:18;;;;6892:32;;-1:-1:-1;;;6589:367:57:o;6961:590::-;7043:6;7051;7059;7067;7120:3;7108:9;7099:7;7095:23;7091:33;7088:53;;;7137:1;7134;7127:12;7088:53;7176:9;7163:23;7195:31;7220:5;7195:31;:::i;:::-;7245:5;-1:-1:-1;7302:2:57;7287:18;;7274:32;7315:31;7274:32;7315:31;:::i;:::-;7365:7;-1:-1:-1;7424:2:57;7409:18;;7396:32;7437:31;7396:32;7437:31;:::i;:::-;6961:590;;;;-1:-1:-1;7487:7:57;;7541:2;7526:18;7513:32;;-1:-1:-1;;6961:590:57:o;8129:555::-;8214:12;;-1:-1:-1;;;;;8210:38:57;;;8198:51;;8245:1;8281:16;;8275:23;8330:35;;;8323:4;8314:14;;8307:59;8236:3;8402:19;;;8423:8;8398:34;8391:4;8382:14;;8375:58;8483:3;8479:19;8476:1;8465:34;;;8458:4;8449:14;;8442:58;8525:13;;;8519:20;8584:28;8637:4;8628:14;;;8621:57;8129:555::o;8689:254::-;8872:3;8857:19;;8885:52;8861:9;8919:6;8885:52;:::i;8948:258::-;9046:6;9099:2;9087:9;9078:7;9074:23;9070:32;9067:52;;;9115:1;9112;9105:12;9067:52;-1:-1:-1;9160:16:57;;8948:258;-1:-1:-1;8948:258:57:o;9538:646::-;9631:6;9639;9647;9655;9708:3;9696:9;9687:7;9683:23;9679:33;9676:53;;;9725:1;9722;9715:12;9676:53;9757:9;9751:16;9776:31;9801:5;9776:31;:::i;:::-;9876:2;9861:18;;9855:25;9826:5;;-1:-1:-1;9889:31:57;9855:25;9889:31;:::i;:::-;9991:2;9976:18;;9970:25;9939:7;;-1:-1:-1;10004:32:57;9970:25;10004:32;:::i;:::-;10107:2;10092:18;;10086:25;10055:7;;-1:-1:-1;10120:32:57;10086:25;10120:32;:::i;:::-;9538:646;;;;-1:-1:-1;9538:646:57;;-1:-1:-1;;9538:646:57:o;10657:277::-;10724:6;10777:2;10765:9;10756:7;10752:23;10748:32;10745:52;;;10793:1;10790;10783:12;10745:52;10825:9;10819:16;10878:5;10871:13;10864:21;10857:5;10854:32;10844:60;;10900:1;10897;10890:12;12361:807;12727:52;12769:9;12761:6;12727:52;:::i;:::-;12830:13;;12827:1;12816:28;;;12810:3;12795:19;;12788:57;12914:4;12902:17;;12896:24;12882:39;;12876:3;12861:19;;12854:68;12977:4;12965:17;;12959:24;12953:3;12938:19;;12931:53;13039:4;13027:17;;;13021:24;13015:3;13000:19;;12993:53;13083:3;13077;13062:19;;13055:32;;;-1:-1:-1;13103:19:57;;;13096:30;13158:3;13143:19;;12361:807;-1:-1:-1;12361:807:57:o;13396:127::-;13457:10;13452:3;13448:20;13445:1;13438:31;13488:4;13485:1;13478:15;13512:4;13509:1;13502:15;13528:168;13601:9;;;13632;;13649:15;;;13643:22;;13629:37;13619:71;;13670:18;;:::i;13701:198::-;-1:-1:-1;;;;;13801:27:57;;;13772;;;13768:61;;13841:29;;13838:55;;;13873:18;;:::i;13904:195::-;-1:-1:-1;;;;;13973:27:57;;;14002;;;13969:61;;14042:28;;14039:54;;;14073:18;;:::i;14104:970::-;14538:52;14580:9;14572:6;14538:52;:::i;:::-;14641:13;;14634:21;14627:29;14621:3;14606:19;;14599:58;14712:4;14700:17;;;14694:24;14688:3;14673:19;;14666:53;14778:4;14766:17;;;14760:24;-1:-1:-1;;;;;14756:50:57;14750:3;14735:19;;14728:79;14858:13;;14851:21;14844:29;14838:3;14823:19;;14816:58;14931:17;;14925:24;14918:32;14911:40;14905:3;14890:19;;14883:69;14989:3;14983;14968:19;;14961:32;;;-1:-1:-1;15009:19:57;;;15002:30;15064:3;15049:19;;14104:970;-1:-1:-1;14104:970:57:o;15079:669::-;15313:52;15355:9;15347:6;15313:52;:::i;:::-;15431:1;15427;15422:3;15418:11;15414:19;15406:6;15402:32;15396:3;15385:9;15381:19;15374:61;15472:3;15466;15455:9;15451:19;15444:32;15294:4;15505:6;15499:13;15549:6;15543:3;15532:9;15528:19;15521:35;15611:6;15604:4;15596:6;15592:17;15586:3;15575:9;15571:19;15565:53;15668:1;15662:3;15653:6;15642:9;15638:22;15634:32;15627:43;15738:3;15731:2;15727:7;15722:2;15714:6;15710:15;15706:29;15695:9;15691:45;15687:55;15679:63;;;15079:669;;;;;;:::o;15753:247::-;15821:6;15874:2;15862:9;15853:7;15849:23;15845:32;15842:52;;;15890:1;15887;15880:12;15842:52;15922:9;15916:16;15941:29;15964:5;15941:29;:::i;16005:127::-;16066:10;16061:3;16057:20;16054:1;16047:31;16097:4;16094:1;16087:15;16121:4;16118:1;16111:15;16398:980;16493:6;16546:2;16534:9;16525:7;16521:23;16517:32;16514:52;;;16562:1;16559;16552:12;16514:52;16595:9;16589:16;16628:18;16620:6;16617:30;16614:50;;;16660:1;16657;16650:12;16614:50;16683:22;;16736:4;16728:13;;16724:27;-1:-1:-1;16714:55:57;;16765:1;16762;16755:12;16714:55;16798:2;16792:9;16824:18;16816:6;16813:30;16810:56;;;16846:18;;:::i;:::-;16892:6;16889:1;16885:14;16919:28;16943:2;16939;16935:11;16919:28;:::i;:::-;16981:19;;;17025:2;17055:11;;;17051:20;;;17016:12;;;;17083:19;;;17080:39;;;17115:1;17112;17105:12;17080:39;17147:2;17143;17139:11;17128:22;;17159:189;17175:6;17170:3;17167:15;17159:189;;;17265:10;;17288:18;;;17335:2;17192:12;;;;17265:10;;-1:-1:-1;17326:12:57;;;;17159:189;;;17367:5;16398:980;-1:-1:-1;;;;;;;16398:980:57:o;17383:217::-;17423:1;17449;17439:132;;17493:10;17488:3;17484:20;17481:1;17474:31;17528:4;17525:1;17518:15;17556:4;17553:1;17546:15;17439:132;-1:-1:-1;17585:9:57;;17383:217::o;17605:125::-;17670:9;;;17691:10;;;17688:36;;;17704:18;;:::i","linkReferences":{},"immutableReferences":{"11597":[{"start":961,"length":32},{"start":1228,"length":32},{"start":3585,"length":32},{"start":4808,"length":32},{"start":5374,"length":32}],"11600":[{"start":767,"length":32},{"start":2007,"length":32},{"start":2259,"length":32},{"start":2551,"length":32}],"11603":[{"start":3053,"length":32},{"start":3305,"length":32},{"start":4159,"length":32},{"start":4408,"length":32}],"11606":[{"start":1275,"length":32},{"start":3925,"length":32},{"start":4959,"length":32},{"start":5088,"length":32}],"11609":[{"start":920,"length":32},{"start":1493,"length":32},{"start":3538,"length":32},{"start":3618,"length":32},{"start":5177,"length":32}],"11612":[{"start":1571,"length":32},{"start":2054,"length":32},{"start":3100,"length":32},{"start":4586,"length":32}],"11615":[{"start":1794,"length":32},{"start":2306,"length":32},{"start":3352,"length":32},{"start":4633,"length":32}]}},"methodIdentifiers":{"MAX_PRICE_LIMIT()":"542524dd","MIN_PRICE_LIMIT()":"c7b8e15d","POOLS_SLOT()":"57eb1da7","POSITIONS_OFFSET()":"2ba31c53","addLiquidity(int256,int24,int24)":"06ba06fa","computeSwapStep(uint160,uint160,uint128,int256,uint24)":"100d3f74","constructSignal()":"01480703","equalizePrice()":"34d9900a","getPositionInfo(address,int24,int24,bytes32)":"9bc2ce36","getRouter()":"b0f479a1","poolKey()":"182148ef","setPool(uint24,int24,address,uint160,bytes)":"6af57741","setPrice(uint256)":"91b7f5ed","swapOnLex(address,uint256)":"96f5e27c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"MAX_PRICE_LIMIT\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_PRICE_LIMIT\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOLS_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POSITIONS_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"addLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceCurrentX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceTargetX96\",\"type\":\"uint160\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"int256\",\"name\":\"amountRemaining\",\"type\":\"int256\"},{\"internalType\":\"uint24\",\"name\":\"feePips\",\"type\":\"uint24\"}],\"name\":\"computeSwapStep\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceNextX96\",\"type\":\"uint160\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"constructSignal\",\"outputs\":[{\"components\":[{\"internalType\":\"int24\",\"name\":\"currentTick\",\"type\":\"int24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lexPrice\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"pool\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"fetcher\",\"type\":\"address\"}],\"internalType\":\"struct ArenaController.Signal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"equalizePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getPositionInfo\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolKey\",\"outputs\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"poolFee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"setPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"swapOnLex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ArenaController.sol\":\"ArenaController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/\",\":@openzeppelin/contracts/=lib/v4-core/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/solmate/lib/ds-test/src/\",\":erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/v4-core/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/\",\":solmate/=lib/solmate/src/\",\":v4-core/=lib/v4-core/src/\"]},\"sources\":{\"lib/solmate/src/auth/Owned.sol\":{\"keccak256\":\"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\",\"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\"]},\"lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\",\"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\"]},\"lib/v4-core/src/ERC6909.sol\":{\"keccak256\":\"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6\",\"dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q\"]},\"lib/v4-core/src/ERC6909Claims.sol\":{\"keccak256\":\"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c\",\"dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i\"]},\"lib/v4-core/src/Extsload.sol\":{\"keccak256\":\"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51\",\"dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU\"]},\"lib/v4-core/src/Exttload.sol\":{\"keccak256\":\"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c\",\"dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG\"]},\"lib/v4-core/src/NoDelegateCall.sol\":{\"keccak256\":\"0x5c238701785d16c58a1598daec0f72a2aaf47d5d017b9dd7441cc8093b65b202\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://696cf79b74bc38e7316d94dfd8bdd9579a94f74121e9b65d2613eb59c106ea50\",\"dweb:/ipfs/QmRttHmshQJ5E7EGaeBC7yT4wyzthNXZQJn7sy2nJvb4dB\"]},\"lib/v4-core/src/PoolManager.sol\":{\"keccak256\":\"0xca5369a1683d06842268987fb6f46b05e6364a46cc856f72bb5c603826f47eac\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5ae5893222abc5dc5fa57bc05af40b60a96a1537bd3c1f3845257d6a3c2b5821\",\"dweb:/ipfs/QmZxQH8M3NVunurxDNJ5EZm2fy6Ws8CHJSezCQaoqzMPoq\"]},\"lib/v4-core/src/ProtocolFees.sol\":{\"keccak256\":\"0x2e7533e46dcab5508ed417ab33c2d0ca8c52a6b5f445dd90daf328173ada4449\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8403de6f2c89a665a3ff3566a917179a5bfb3e0ac9514f0438d82270a7f98c91\",\"dweb:/ipfs/QmTq9cjKTaXeCoSfCywpFwo7sNvuXM4wSMnebwX3hBuiRG\"]},\"lib/v4-core/src/interfaces/IExtsload.sol\":{\"keccak256\":\"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1\",\"dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN\"]},\"lib/v4-core/src/interfaces/IExttload.sol\":{\"keccak256\":\"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8\",\"dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY\"]},\"lib/v4-core/src/interfaces/IHooks.sol\":{\"keccak256\":\"0xdbaf1db938b70f77eb4ddbad5b8d2a1fc648c7d65ca2a312aba16cc013c85df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ad2d9c85116a2e51281dd40577c798d6d5968be1f8908f43ba152849809deaa\",\"dweb:/ipfs/QmZP4kk9KJzoxv81EgsTfHnJeU8YUxX3yWZudJHbxQjpa8\"]},\"lib/v4-core/src/interfaces/IPoolManager.sol\":{\"keccak256\":\"0x4e07d93993f6ba033c8b5e5b0a3473659aeffe9af0cf8316a879a55ebd696d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50add8378d59b89b1dc106ea248641caaedd3ac45d62754babe55c526b87c9ad\",\"dweb:/ipfs/QmQUrvy8ZDDdTRTr17msqynVECP3rQFBVBUmFcpFvjAmQx\"]},\"lib/v4-core/src/interfaces/IProtocolFeeController.sol\":{\"keccak256\":\"0xc2d7f3605da9767e36cf25d4d4fa9b95663a6659e26ce28cf29b8b88acb79a4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7a43cda35b8a9254ed3e46cfd8649361f09121d17ef554bd3d190b9a8d57cc6\",\"dweb:/ipfs/QmRBDQoqCWddH5hY1JdxMyYtY8jMZhWAwtuFJBc3r8V31G\"]},\"lib/v4-core/src/interfaces/IProtocolFees.sol\":{\"keccak256\":\"0x68700020df618c5715737e57630876ec22ccde2d31191a5608babb9f140ed297\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56b7bb6786f48fff8c9d04e9054955b8cf3d9f5bf819ccda7be192ad2004a27f\",\"dweb:/ipfs/QmZKmUvcYnyihEFySD6SY9osMkP8M1Y7a4kPxLQycEyThw\"]},\"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol\":{\"keccak256\":\"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b\",\"dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK\"]},\"lib/v4-core/src/interfaces/external/IERC20Minimal.sol\":{\"keccak256\":\"0xc1c23330c1511ecfd45c67a683962b4e2555b82f1dacd40cc8b46ae5a6e250e7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5ce10b7970482a65f9e9a365b810eeb154a5d4a8229a26653028d84b9622a410\",\"dweb:/ipfs/QmTSwXxZ2FTkM5duBZgbpFs8SRVDR5NPAnW4YimeDhb1s8\"]},\"lib/v4-core/src/interfaces/external/IERC6909Claims.sol\":{\"keccak256\":\"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f\",\"dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK\"]},\"lib/v4-core/src/libraries/BitMath.sol\":{\"keccak256\":\"0x59e18adcff8917b0965a240d88b34d5d800e0efebd5f40c5594ddcf28a15949b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d358beebf8d5079520b6e138d744e5063ecbfbeae355c08af86a3b74afa71b09\",\"dweb:/ipfs/QmUXmAK9aoxnaeykq8MLXoRKP8yGTDyY3jPFMwHnqRxf46\"]},\"lib/v4-core/src/libraries/CurrencyDelta.sol\":{\"keccak256\":\"0xb1eb18c3794b67f4f710229df279d3a630a963194fbbeb51906198ec7145b98e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e5ea08b69754250cf04cc544785320f5c8fd8b9a65e5d9e0bc44aadadaa9ea0c\",\"dweb:/ipfs/QmWW1qfqGydoiSeDtVVQ53nV3FphuUgH1PFUC3uGaWzxWR\"]},\"lib/v4-core/src/libraries/CurrencyReserves.sol\":{\"keccak256\":\"0xdeffc5cf2f8f7d3f802998941061392c0c926a32c7105ffd9f902ab84d3a31c6\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://869bd659c5593bc525ce4d44771d85eb8acb74a7f0492802bdcc79d2bfdfcaf7\",\"dweb:/ipfs/QmSrTWzUHrou7ZxcuFXQhvzXmEgbLeCtwAqeS6k9vD22h3\"]},\"lib/v4-core/src/libraries/CustomRevert.sol\":{\"keccak256\":\"0x70a444afeb27564398dbdf7553651ee2cae14c03c923b6f8972040c8f460ebe3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d7b05390bac9b29188725c8a84edac43cd05571da27b33a0b1e36d9500ecaa6\",\"dweb:/ipfs/QmdYDLwTfFgePDEwFMUqGTj8SNNXXq4JQJnrgomJgcZFvP\"]},\"lib/v4-core/src/libraries/FixedPoint128.sol\":{\"keccak256\":\"0xc7e80dc41f28887d0d915a75c0b2783ae659e5384dd1a3ed1251a42e058d8835\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2df62bf1d9d4349236fd0bc7a96b3a3be95f4c049603e4a20c8473cca9402b4d\",\"dweb:/ipfs/QmVR5dmMkoypmhaBeBj8cGegHpJycbofUDg59dHm42i9MT\"]},\"lib/v4-core/src/libraries/FixedPoint96.sol\":{\"keccak256\":\"0xf0a545fc5bbc271e8dbd191413dc03e8725d1f003df4d9d36ea7cdb73058c417\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5d1013d8b5c93024526f129b0a9271b35c578da09bcfe6c3240ff4d590ebc196\",\"dweb:/ipfs/QmX1GyF9jJhYGXst6PyK6HJvcfVQ69nNTnuBEBaEiAZPv7\"]},\"lib/v4-core/src/libraries/FullMath.sol\":{\"keccak256\":\"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52\",\"dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC\"]},\"lib/v4-core/src/libraries/Hooks.sol\":{\"keccak256\":\"0xfa031f4efc096e9c93bb094509321e1c08b5eb271f46554f858e74803c43ae66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cc33d5eb869ecacfb70d024f7b925d191d98553dbb921bd8188f97d51c9e111\",\"dweb:/ipfs/Qme5VCnaS5mXyqaWV5uiW5xcmTb56uCKBPFrLZp2dq41dQ\"]},\"lib/v4-core/src/libraries/LPFeeLibrary.sol\":{\"keccak256\":\"0xfbebd6766871b795d945a74b6110931f73fc775aeeecc2682d6d6ca841a01ece\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://36fcc7098454971ae16d790ee9aee227c22c5cbbd7ff6e27e58ac29b901d5896\",\"dweb:/ipfs/QmboCGTWtycGpda7E169pD67Fox2H9b1YRsNHcsxBRrhfo\"]},\"lib/v4-core/src/libraries/LiquidityMath.sol\":{\"keccak256\":\"0x4a04b9383e2fb943c2c3ae7d0c9071b58dd97b6dac0a409fe1c79c3ca897bbcf\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0b33cf0ff936f62aa7f3b82922fa0ac52ac24471561e87fbf7ab8372607f6dfc\",\"dweb:/ipfs/Qmcr6omwzJjQPu6HQ8E9vFXaTgrtqfb2KbfxbuQavfUzFa\"]},\"lib/v4-core/src/libraries/Lock.sol\":{\"keccak256\":\"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c\",\"dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF\"]},\"lib/v4-core/src/libraries/NonZeroDeltaCount.sol\":{\"keccak256\":\"0x6b7e23f470b8352efdbf459a34dd0dcfdbe03e623cb4de67f4ad9be326691586\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b86af075e2331f7a065b15d91253f2ce6b845dfe09493338f2d7cdab6f9e4cc2\",\"dweb:/ipfs/QmdzHJQapqAS42rMrYPgdvb4Sae7NVy3ESkNc1TuBRcxUC\"]},\"lib/v4-core/src/libraries/ParseBytes.sol\":{\"keccak256\":\"0xf0795198d1e651b0b33fd1708d80a14f501bb2a1486905676d35f364e880f579\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5aea527fcec51d7274f0c189dc2479a6aa708fc91857187a4d7db46bb1d6c7a8\",\"dweb:/ipfs/QmUTrwTPSZ7EHBaTyfAA78rZVP17iQzmAmvDcQ8GhDRAEf\"]},\"lib/v4-core/src/libraries/Pool.sol\":{\"keccak256\":\"0x7a506727ae59f5b5487a0a16ec1d7038b7c2a4ee5f4a7fa7c444ec7df6ad5a7c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://befdd15aee06a7b2a3c64cb899220ec03a1ae8470ad17e19050bcca1ac5266a8\",\"dweb:/ipfs/QmWPfBgfp5VKnku9ZtKXwYycyKdAZuCj6778T2HFrfQ61H\"]},\"lib/v4-core/src/libraries/Position.sol\":{\"keccak256\":\"0x0309a650890f1cd93e2b4b1e9a40032d5feb8c6a0ccc24be24373bfd7590ff80\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://63aae574b22048f1453da8f9142374e334683bb3a069c2312f73e6b857842bce\",\"dweb:/ipfs/QmcJZK3kU4jsWfJKBpRq2kaouutEDHcytgMX8ZaGeBsbgu\"]},\"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol\":{\"keccak256\":\"0x2739e8f54707c6a0e23f9c61a0783dd18b107c3fc287b2827f1ab4b41f891902\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2e3b154410bbfcbe8808c6dfb74c4bbbac50a59e228cee59b34e169dbd34ee1a\",\"dweb:/ipfs/QmcRoM6T2F7FTHtGdD5aRiVthCon8oiWur661GCrk5FejP\"]},\"lib/v4-core/src/libraries/SafeCast.sol\":{\"keccak256\":\"0xbccc4f8d5d467d162d7f0ab5a7f22bcccf05ae07577b9728c9e3030c63977e60\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0003ea7a515ba709a3fdeaa19e7930c1f883b3b4fbdbf389d4f2f85b25eb72b4\",\"dweb:/ipfs/QmYs8uNcYRGuGUbeBfF27fhArNaQ5Y9iMCTMfgic5d39fM\"]},\"lib/v4-core/src/libraries/SqrtPriceMath.sol\":{\"keccak256\":\"0x1a5a8fd4a21cec19c0c253201e9b5534e8d810eb132bceee04af37fd78adb5db\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afa2a5950c9057fd3c00a6f413fba91c4c7dab06d573f7349aaf8f806c0e1f31\",\"dweb:/ipfs/Qmb2m62xAPRBtxtx3sV7MAFw2vHWNm9m49ctPHmFX5hozt\"]},\"lib/v4-core/src/libraries/StateLibrary.sol\":{\"keccak256\":\"0x67ead4d1ffe7e4fc381cef059c8d4941c7b4d581ef043fc8d3278d0829da414e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0d12edd46a3ff2e19ea9b650507ea22e7714daa335a6b40f4d2f6d29c16431e4\",\"dweb:/ipfs/QmZn6dzXZgR3rGohZAvKzqYMgm5n9qTrpi1VhXizYhiquH\"]},\"lib/v4-core/src/libraries/SwapMath.sol\":{\"keccak256\":\"0xa8cedd0f63b2d8b6faac60455f499c79816f53fbd86f3bb0706fae426b2c231e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8d926c2df899b21811862d106d5e1d2b5bdf83c76ae6ff4216e7c9ce443d8e75\",\"dweb:/ipfs/QmTTVSCumUXZ4vf3R1GwfqJSTgLFyjueuxZkRH9U6dsTb3\"]},\"lib/v4-core/src/libraries/TickBitmap.sol\":{\"keccak256\":\"0x23abd96aa808657304affd775666d7cc5fb0ab564f87d1b65fbf8dc5877d9cd6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c7686aefb704a3efe97cc0e8f180ed48f7667f5ae69d3754962f04352c66b79\",\"dweb:/ipfs/QmULiCBW9s2hB6SmnJTi2wiAwgkLXpZJcdVZm9f77zDNuc\"]},\"lib/v4-core/src/libraries/TickMath.sol\":{\"keccak256\":\"0x64c668177d82bb185d902fb2190630ccb67babb6439422979692ac2f8dfb6dcd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e2714a025df18c22f20b358b7143e8a5c55cffb20c7de292be0376845a5f0408\",\"dweb:/ipfs/QmWaeCkxwkVuReFUSK2nDat1BB5DJ8BUowwGwmVyKpsrME\"]},\"lib/v4-core/src/libraries/TransientStateLibrary.sol\":{\"keccak256\":\"0x1bc28f30c176c7c598522da0d8907a90c4cd8ecce81775bb4deb3a9b78782f86\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb5c05fb51e59ef168ba884c4ea3627525dba9feea0de9ffa0587438f70fd095\",\"dweb:/ipfs/Qmbx3ntPDZ9VeGsAnVNSM5DKmhPg92yobh5ZHbvdGWtHUd\"]},\"lib/v4-core/src/libraries/UnsafeMath.sol\":{\"keccak256\":\"0xe9b87da934af38419d4b5f20cc09943dbb569425448fc23fdc5ec6aebbb63c84\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://29838c28905c34f9602a453759b55f5acc6aff02bf6d7a6afac5d1a245dd5db3\",\"dweb:/ipfs/QmfN5bhLFw1CsnnaJQNZd3bLpLufQcwt9ztaR71LA43UGY\"]},\"lib/v4-core/src/test/PoolModifyLiquidityTest.sol\":{\"keccak256\":\"0x4578759af55db566eee1d19c19a285710b1d301b511e37df4a1072c2d5a47ade\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://aa6588f1f695efe625241fdbad07730611c8bec77d963698c6412775b7dd68a7\",\"dweb:/ipfs/QmeDGAKa9sR6Wk5ibyzt4YGa6tdtjmFPzJafMbBgkWRB9d\"]},\"lib/v4-core/src/test/PoolSwapTest.sol\":{\"keccak256\":\"0x389d2274a70c565c12c8fd7f0f5bdbee7532d842936243141c65cf1477c1a7e8\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cdaff983aa947444cece280d8485f524a778cf8843c3f8b96f60e4ad137aa8d3\",\"dweb:/ipfs/QmP7qbC3UZz723pTWuJh18qap1vYAHDY5UoJwGtvosWs9k\"]},\"lib/v4-core/src/test/PoolTestBase.sol\":{\"keccak256\":\"0x71db5a5215d858124dd2ccf73c4474421651f248e4c85d33455d95abced0a23c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fac0df901621d44a1b98ce4569616940ca6700e7829357bdf18509237b822072\",\"dweb:/ipfs/Qmf9sWokQvzmKfAY6Vd4QzyTyhikqCb8zUowrFPe9DRxs5\"]},\"lib/v4-core/src/types/BalanceDelta.sol\":{\"keccak256\":\"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9\",\"dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H\"]},\"lib/v4-core/src/types/BeforeSwapDelta.sol\":{\"keccak256\":\"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782\",\"dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K\"]},\"lib/v4-core/src/types/Currency.sol\":{\"keccak256\":\"0xc77e2d4d380be1887078b1d21e2381fe4e9138dce8c7efbf9050aa7d65d75d4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b85a1edba4be624be660d69badac1e3641d83190893839fa30260eef316d00c8\",\"dweb:/ipfs/QmPaEaeNkhy5F4X9dwzyDzVU3H67P5ZhpeijDS7wscaSd9\"]},\"lib/v4-core/src/types/PoolId.sol\":{\"keccak256\":\"0x6946552d4f78712c769df47a9187aa0add8737bb6d06ef04b63a33a3c0ff59f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://637851aaa9e06ff59b517e6da17dad3476968c0bc62e141158f76526a8f9c79f\",\"dweb:/ipfs/QmVUxPCRCBE23XQdCrroeUuFqNTtq2LvJaDYmp43QGNsMB\"]},\"lib/v4-core/src/types/PoolKey.sol\":{\"keccak256\":\"0x10a2ff74d87d105f52c6c10f0c6ea0548c12a75dfb979abab8a8b7d647305162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0680665f799067c0f0238e864e363c265ff23188dfe6ae1c4738f7d0a281ccf\",\"dweb:/ipfs/QmRCkZhaPknrV9cHkUiU3HVyMYYT3UaD8RfptHi4qB62zY\"]},\"lib/v4-core/src/types/Slot0.sol\":{\"keccak256\":\"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8\",\"dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C\"]},\"lib/v4-core/test/utils/CurrencySettler.sol\":{\"keccak256\":\"0xf5d04aa76b3ac6ff75396661e75ec612035ebd73d23eb6f4e207dbd46392688e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67a67b94a2987309f06003374ddfc30ab8e81d9fec3b1585e93871eec6966d96\",\"dweb:/ipfs/QmYLzboZNfXoNufKX8UYMGhHVChqMK96vwFWjKeoWcfb24\"]},\"src/ArenaController.sol\":{\"keccak256\":\"0x5af42e36a825607d3241fa6160679b9976221d3d8fed9c89c3a7835cf53b39a0\",\"urls\":[\"bzz-raw://3ef6ccff3f117de789881cbe7b02b5c5ae29d52b6fd88afc90d402752feca1cb\",\"dweb:/ipfs/Qma6MxdScJcAxz8bi94goM2cLT39V6pKV9QRy4wN8B5hXV\"]},\"src/ArenaToken.sol\":{\"keccak256\":\"0x59ea858a9c33398efbfb770c958c1f544425ad32d73a3cd3991f6834ec04028a\",\"urls\":[\"bzz-raw://242a38f560c8dc312e27a30dad15ddf2fccb4163f4f0692f814b3cfa71180105\",\"dweb:/ipfs/QmZqhSdNeRiVf5rJJYgX48SiUi1dwgpYAvMo6a7XBVRjXF\"]},\"src/Fetcher.sol\":{\"keccak256\":\"0x1895e5c0688650ca60371f208b62d9f64beea29bd7515b2600a1c8d5c73805df\",\"urls\":[\"bzz-raw://f9c904c9d032167f6d8fec1392c9a023f339a4aee9f75f06df6347a495af9d38\",\"dweb:/ipfs/QmYSaPzRawAnh2qD3JY5uvWypEueo5hSTQVyVFfX96msfb\"]},\"src/LiquidExchange.sol\":{\"keccak256\":\"0xc979e540abc8a2d1bc82f2c741beb4ea9037c7e69ab11a5a20ef11ab7b9cee22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e5f08cb7b8685020a78fd9b84d740649dcbf9ba92057cc5914d829f275d396c5\",\"dweb:/ipfs/QmQKVvRCmSumaf2xtbLey6KdUyt9bfTLeq9gPGssisJi17\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"initialPrice","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_PRICE_LIMIT","outputs":[{"internalType":"uint160","name":"","type":"uint160"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_PRICE_LIMIT","outputs":[{"internalType":"uint160","name":"","type":"uint160"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"POOLS_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"POSITIONS_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"}],"stateMutability":"nonpayable","type":"function","name":"addLiquidity"},{"inputs":[{"internalType":"uint160","name":"sqrtPriceCurrentX96","type":"uint160"},{"internalType":"uint160","name":"sqrtPriceTargetX96","type":"uint160"},{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"int256","name":"amountRemaining","type":"int256"},{"internalType":"uint24","name":"feePips","type":"uint24"}],"stateMutability":"pure","type":"function","name":"computeSwapStep","outputs":[{"internalType":"uint160","name":"sqrtPriceNextX96","type":"uint160"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"constructSignal","outputs":[{"internalType":"struct ArenaController.Signal","name":"","type":"tuple","components":[{"internalType":"int24","name":"currentTick","type":"int24"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"lexPrice","type":"uint256"},{"internalType":"struct PoolKey","name":"pool","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"address","name":"fetcher","type":"address"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"equalizePrice"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getPositionInfo","outputs":[{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"uint256","name":"feeGrowthInside0LastX128","type":"uint256"},{"internalType":"uint256","name":"feeGrowthInside1LastX128","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getRouter","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"poolKey","outputs":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"inputs":[{"internalType":"uint24","name":"poolFee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"setPool"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPrice"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"swapOnLex"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/","@openzeppelin/contracts/=lib/v4-core/lib/openzeppelin-contracts/contracts/","ds-test/=lib/solmate/lib/ds-test/src/","erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=lib/v4-core/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/","solmate/=lib/solmate/src/","v4-core/=lib/v4-core/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/ArenaController.sol":"ArenaController"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/solmate/src/auth/Owned.sol":{"keccak256":"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea","urls":["bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4","dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx"],"license":"AGPL-3.0-only"},"lib/solmate/src/tokens/ERC20.sol":{"keccak256":"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10","urls":["bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35","dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97"],"license":"AGPL-3.0-only"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843","urls":["bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9","dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi"],"license":"AGPL-3.0-only"},"lib/v4-core/src/ERC6909.sol":{"keccak256":"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f","urls":["bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6","dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q"],"license":"MIT"},"lib/v4-core/src/ERC6909Claims.sol":{"keccak256":"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49","urls":["bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c","dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i"],"license":"MIT"},"lib/v4-core/src/Extsload.sol":{"keccak256":"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce","urls":["bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51","dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU"],"license":"MIT"},"lib/v4-core/src/Exttload.sol":{"keccak256":"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54","urls":["bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c","dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG"],"license":"MIT"},"lib/v4-core/src/NoDelegateCall.sol":{"keccak256":"0x5c238701785d16c58a1598daec0f72a2aaf47d5d017b9dd7441cc8093b65b202","urls":["bzz-raw://696cf79b74bc38e7316d94dfd8bdd9579a94f74121e9b65d2613eb59c106ea50","dweb:/ipfs/QmRttHmshQJ5E7EGaeBC7yT4wyzthNXZQJn7sy2nJvb4dB"],"license":"BUSL-1.1"},"lib/v4-core/src/PoolManager.sol":{"keccak256":"0xca5369a1683d06842268987fb6f46b05e6364a46cc856f72bb5c603826f47eac","urls":["bzz-raw://5ae5893222abc5dc5fa57bc05af40b60a96a1537bd3c1f3845257d6a3c2b5821","dweb:/ipfs/QmZxQH8M3NVunurxDNJ5EZm2fy6Ws8CHJSezCQaoqzMPoq"],"license":"BUSL-1.1"},"lib/v4-core/src/ProtocolFees.sol":{"keccak256":"0x2e7533e46dcab5508ed417ab33c2d0ca8c52a6b5f445dd90daf328173ada4449","urls":["bzz-raw://8403de6f2c89a665a3ff3566a917179a5bfb3e0ac9514f0438d82270a7f98c91","dweb:/ipfs/QmTq9cjKTaXeCoSfCywpFwo7sNvuXM4wSMnebwX3hBuiRG"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/interfaces/IExtsload.sol":{"keccak256":"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43","urls":["bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1","dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"],"license":"MIT"},"lib/v4-core/src/interfaces/IExttload.sol":{"keccak256":"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937","urls":["bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8","dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"],"license":"MIT"},"lib/v4-core/src/interfaces/IHooks.sol":{"keccak256":"0xdbaf1db938b70f77eb4ddbad5b8d2a1fc648c7d65ca2a312aba16cc013c85df0","urls":["bzz-raw://4ad2d9c85116a2e51281dd40577c798d6d5968be1f8908f43ba152849809deaa","dweb:/ipfs/QmZP4kk9KJzoxv81EgsTfHnJeU8YUxX3yWZudJHbxQjpa8"],"license":"MIT"},"lib/v4-core/src/interfaces/IPoolManager.sol":{"keccak256":"0x4e07d93993f6ba033c8b5e5b0a3473659aeffe9af0cf8316a879a55ebd696d7a","urls":["bzz-raw://50add8378d59b89b1dc106ea248641caaedd3ac45d62754babe55c526b87c9ad","dweb:/ipfs/QmQUrvy8ZDDdTRTr17msqynVECP3rQFBVBUmFcpFvjAmQx"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFeeController.sol":{"keccak256":"0xc2d7f3605da9767e36cf25d4d4fa9b95663a6659e26ce28cf29b8b88acb79a4c","urls":["bzz-raw://c7a43cda35b8a9254ed3e46cfd8649361f09121d17ef554bd3d190b9a8d57cc6","dweb:/ipfs/QmRBDQoqCWddH5hY1JdxMyYtY8jMZhWAwtuFJBc3r8V31G"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFees.sol":{"keccak256":"0x68700020df618c5715737e57630876ec22ccde2d31191a5608babb9f140ed297","urls":["bzz-raw://56b7bb6786f48fff8c9d04e9054955b8cf3d9f5bf819ccda7be192ad2004a27f","dweb:/ipfs/QmZKmUvcYnyihEFySD6SY9osMkP8M1Y7a4kPxLQycEyThw"],"license":"MIT"},"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol":{"keccak256":"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719","urls":["bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b","dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC20Minimal.sol":{"keccak256":"0xc1c23330c1511ecfd45c67a683962b4e2555b82f1dacd40cc8b46ae5a6e250e7","urls":["bzz-raw://5ce10b7970482a65f9e9a365b810eeb154a5d4a8229a26653028d84b9622a410","dweb:/ipfs/QmTSwXxZ2FTkM5duBZgbpFs8SRVDR5NPAnW4YimeDhb1s8"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/interfaces/external/IERC6909Claims.sol":{"keccak256":"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48","urls":["bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f","dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"],"license":"MIT"},"lib/v4-core/src/libraries/BitMath.sol":{"keccak256":"0x59e18adcff8917b0965a240d88b34d5d800e0efebd5f40c5594ddcf28a15949b","urls":["bzz-raw://d358beebf8d5079520b6e138d744e5063ecbfbeae355c08af86a3b74afa71b09","dweb:/ipfs/QmUXmAK9aoxnaeykq8MLXoRKP8yGTDyY3jPFMwHnqRxf46"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/CurrencyDelta.sol":{"keccak256":"0xb1eb18c3794b67f4f710229df279d3a630a963194fbbeb51906198ec7145b98e","urls":["bzz-raw://e5ea08b69754250cf04cc544785320f5c8fd8b9a65e5d9e0bc44aadadaa9ea0c","dweb:/ipfs/QmWW1qfqGydoiSeDtVVQ53nV3FphuUgH1PFUC3uGaWzxWR"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CurrencyReserves.sol":{"keccak256":"0xdeffc5cf2f8f7d3f802998941061392c0c926a32c7105ffd9f902ab84d3a31c6","urls":["bzz-raw://869bd659c5593bc525ce4d44771d85eb8acb74a7f0492802bdcc79d2bfdfcaf7","dweb:/ipfs/QmSrTWzUHrou7ZxcuFXQhvzXmEgbLeCtwAqeS6k9vD22h3"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CustomRevert.sol":{"keccak256":"0x70a444afeb27564398dbdf7553651ee2cae14c03c923b6f8972040c8f460ebe3","urls":["bzz-raw://9d7b05390bac9b29188725c8a84edac43cd05571da27b33a0b1e36d9500ecaa6","dweb:/ipfs/QmdYDLwTfFgePDEwFMUqGTj8SNNXXq4JQJnrgomJgcZFvP"],"license":"MIT"},"lib/v4-core/src/libraries/FixedPoint128.sol":{"keccak256":"0xc7e80dc41f28887d0d915a75c0b2783ae659e5384dd1a3ed1251a42e058d8835","urls":["bzz-raw://2df62bf1d9d4349236fd0bc7a96b3a3be95f4c049603e4a20c8473cca9402b4d","dweb:/ipfs/QmVR5dmMkoypmhaBeBj8cGegHpJycbofUDg59dHm42i9MT"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/FixedPoint96.sol":{"keccak256":"0xf0a545fc5bbc271e8dbd191413dc03e8725d1f003df4d9d36ea7cdb73058c417","urls":["bzz-raw://5d1013d8b5c93024526f129b0a9271b35c578da09bcfe6c3240ff4d590ebc196","dweb:/ipfs/QmX1GyF9jJhYGXst6PyK6HJvcfVQ69nNTnuBEBaEiAZPv7"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/FullMath.sol":{"keccak256":"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2","urls":["bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52","dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC"],"license":"MIT"},"lib/v4-core/src/libraries/Hooks.sol":{"keccak256":"0xfa031f4efc096e9c93bb094509321e1c08b5eb271f46554f858e74803c43ae66","urls":["bzz-raw://7cc33d5eb869ecacfb70d024f7b925d191d98553dbb921bd8188f97d51c9e111","dweb:/ipfs/Qme5VCnaS5mXyqaWV5uiW5xcmTb56uCKBPFrLZp2dq41dQ"],"license":"MIT"},"lib/v4-core/src/libraries/LPFeeLibrary.sol":{"keccak256":"0xfbebd6766871b795d945a74b6110931f73fc775aeeecc2682d6d6ca841a01ece","urls":["bzz-raw://36fcc7098454971ae16d790ee9aee227c22c5cbbd7ff6e27e58ac29b901d5896","dweb:/ipfs/QmboCGTWtycGpda7E169pD67Fox2H9b1YRsNHcsxBRrhfo"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/LiquidityMath.sol":{"keccak256":"0x4a04b9383e2fb943c2c3ae7d0c9071b58dd97b6dac0a409fe1c79c3ca897bbcf","urls":["bzz-raw://0b33cf0ff936f62aa7f3b82922fa0ac52ac24471561e87fbf7ab8372607f6dfc","dweb:/ipfs/Qmcr6omwzJjQPu6HQ8E9vFXaTgrtqfb2KbfxbuQavfUzFa"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/Lock.sol":{"keccak256":"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5","urls":["bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c","dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/NonZeroDeltaCount.sol":{"keccak256":"0x6b7e23f470b8352efdbf459a34dd0dcfdbe03e623cb4de67f4ad9be326691586","urls":["bzz-raw://b86af075e2331f7a065b15d91253f2ce6b845dfe09493338f2d7cdab6f9e4cc2","dweb:/ipfs/QmdzHJQapqAS42rMrYPgdvb4Sae7NVy3ESkNc1TuBRcxUC"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ParseBytes.sol":{"keccak256":"0xf0795198d1e651b0b33fd1708d80a14f501bb2a1486905676d35f364e880f579","urls":["bzz-raw://5aea527fcec51d7274f0c189dc2479a6aa708fc91857187a4d7db46bb1d6c7a8","dweb:/ipfs/QmUTrwTPSZ7EHBaTyfAA78rZVP17iQzmAmvDcQ8GhDRAEf"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/Pool.sol":{"keccak256":"0x7a506727ae59f5b5487a0a16ec1d7038b7c2a4ee5f4a7fa7c444ec7df6ad5a7c","urls":["bzz-raw://befdd15aee06a7b2a3c64cb899220ec03a1ae8470ad17e19050bcca1ac5266a8","dweb:/ipfs/QmWPfBgfp5VKnku9ZtKXwYycyKdAZuCj6778T2HFrfQ61H"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/Position.sol":{"keccak256":"0x0309a650890f1cd93e2b4b1e9a40032d5feb8c6a0ccc24be24373bfd7590ff80","urls":["bzz-raw://63aae574b22048f1453da8f9142374e334683bb3a069c2312f73e6b857842bce","dweb:/ipfs/QmcJZK3kU4jsWfJKBpRq2kaouutEDHcytgMX8ZaGeBsbgu"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol":{"keccak256":"0x2739e8f54707c6a0e23f9c61a0783dd18b107c3fc287b2827f1ab4b41f891902","urls":["bzz-raw://2e3b154410bbfcbe8808c6dfb74c4bbbac50a59e228cee59b34e169dbd34ee1a","dweb:/ipfs/QmcRoM6T2F7FTHtGdD5aRiVthCon8oiWur661GCrk5FejP"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/SafeCast.sol":{"keccak256":"0xbccc4f8d5d467d162d7f0ab5a7f22bcccf05ae07577b9728c9e3030c63977e60","urls":["bzz-raw://0003ea7a515ba709a3fdeaa19e7930c1f883b3b4fbdbf389d4f2f85b25eb72b4","dweb:/ipfs/QmYs8uNcYRGuGUbeBfF27fhArNaQ5Y9iMCTMfgic5d39fM"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/SqrtPriceMath.sol":{"keccak256":"0x1a5a8fd4a21cec19c0c253201e9b5534e8d810eb132bceee04af37fd78adb5db","urls":["bzz-raw://afa2a5950c9057fd3c00a6f413fba91c4c7dab06d573f7349aaf8f806c0e1f31","dweb:/ipfs/Qmb2m62xAPRBtxtx3sV7MAFw2vHWNm9m49ctPHmFX5hozt"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/StateLibrary.sol":{"keccak256":"0x67ead4d1ffe7e4fc381cef059c8d4941c7b4d581ef043fc8d3278d0829da414e","urls":["bzz-raw://0d12edd46a3ff2e19ea9b650507ea22e7714daa335a6b40f4d2f6d29c16431e4","dweb:/ipfs/QmZn6dzXZgR3rGohZAvKzqYMgm5n9qTrpi1VhXizYhiquH"],"license":"MIT"},"lib/v4-core/src/libraries/SwapMath.sol":{"keccak256":"0xa8cedd0f63b2d8b6faac60455f499c79816f53fbd86f3bb0706fae426b2c231e","urls":["bzz-raw://8d926c2df899b21811862d106d5e1d2b5bdf83c76ae6ff4216e7c9ce443d8e75","dweb:/ipfs/QmTTVSCumUXZ4vf3R1GwfqJSTgLFyjueuxZkRH9U6dsTb3"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/TickBitmap.sol":{"keccak256":"0x23abd96aa808657304affd775666d7cc5fb0ab564f87d1b65fbf8dc5877d9cd6","urls":["bzz-raw://4c7686aefb704a3efe97cc0e8f180ed48f7667f5ae69d3754962f04352c66b79","dweb:/ipfs/QmULiCBW9s2hB6SmnJTi2wiAwgkLXpZJcdVZm9f77zDNuc"],"license":"MIT"},"lib/v4-core/src/libraries/TickMath.sol":{"keccak256":"0x64c668177d82bb185d902fb2190630ccb67babb6439422979692ac2f8dfb6dcd","urls":["bzz-raw://e2714a025df18c22f20b358b7143e8a5c55cffb20c7de292be0376845a5f0408","dweb:/ipfs/QmWaeCkxwkVuReFUSK2nDat1BB5DJ8BUowwGwmVyKpsrME"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/TransientStateLibrary.sol":{"keccak256":"0x1bc28f30c176c7c598522da0d8907a90c4cd8ecce81775bb4deb3a9b78782f86","urls":["bzz-raw://fb5c05fb51e59ef168ba884c4ea3627525dba9feea0de9ffa0587438f70fd095","dweb:/ipfs/Qmbx3ntPDZ9VeGsAnVNSM5DKmhPg92yobh5ZHbvdGWtHUd"],"license":"MIT"},"lib/v4-core/src/libraries/UnsafeMath.sol":{"keccak256":"0xe9b87da934af38419d4b5f20cc09943dbb569425448fc23fdc5ec6aebbb63c84","urls":["bzz-raw://29838c28905c34f9602a453759b55f5acc6aff02bf6d7a6afac5d1a245dd5db3","dweb:/ipfs/QmfN5bhLFw1CsnnaJQNZd3bLpLufQcwt9ztaR71LA43UGY"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/test/PoolModifyLiquidityTest.sol":{"keccak256":"0x4578759af55db566eee1d19c19a285710b1d301b511e37df4a1072c2d5a47ade","urls":["bzz-raw://aa6588f1f695efe625241fdbad07730611c8bec77d963698c6412775b7dd68a7","dweb:/ipfs/QmeDGAKa9sR6Wk5ibyzt4YGa6tdtjmFPzJafMbBgkWRB9d"],"license":"UNLICENSED"},"lib/v4-core/src/test/PoolSwapTest.sol":{"keccak256":"0x389d2274a70c565c12c8fd7f0f5bdbee7532d842936243141c65cf1477c1a7e8","urls":["bzz-raw://cdaff983aa947444cece280d8485f524a778cf8843c3f8b96f60e4ad137aa8d3","dweb:/ipfs/QmP7qbC3UZz723pTWuJh18qap1vYAHDY5UoJwGtvosWs9k"],"license":"UNLICENSED"},"lib/v4-core/src/test/PoolTestBase.sol":{"keccak256":"0x71db5a5215d858124dd2ccf73c4474421651f248e4c85d33455d95abced0a23c","urls":["bzz-raw://fac0df901621d44a1b98ce4569616940ca6700e7829357bdf18509237b822072","dweb:/ipfs/Qmf9sWokQvzmKfAY6Vd4QzyTyhikqCb8zUowrFPe9DRxs5"],"license":"UNLICENSED"},"lib/v4-core/src/types/BalanceDelta.sol":{"keccak256":"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f","urls":["bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9","dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"],"license":"MIT"},"lib/v4-core/src/types/BeforeSwapDelta.sol":{"keccak256":"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78","urls":["bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782","dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"],"license":"MIT"},"lib/v4-core/src/types/Currency.sol":{"keccak256":"0xc77e2d4d380be1887078b1d21e2381fe4e9138dce8c7efbf9050aa7d65d75d4c","urls":["bzz-raw://b85a1edba4be624be660d69badac1e3641d83190893839fa30260eef316d00c8","dweb:/ipfs/QmPaEaeNkhy5F4X9dwzyDzVU3H67P5ZhpeijDS7wscaSd9"],"license":"MIT"},"lib/v4-core/src/types/PoolId.sol":{"keccak256":"0x6946552d4f78712c769df47a9187aa0add8737bb6d06ef04b63a33a3c0ff59f8","urls":["bzz-raw://637851aaa9e06ff59b517e6da17dad3476968c0bc62e141158f76526a8f9c79f","dweb:/ipfs/QmVUxPCRCBE23XQdCrroeUuFqNTtq2LvJaDYmp43QGNsMB"],"license":"MIT"},"lib/v4-core/src/types/PoolKey.sol":{"keccak256":"0x10a2ff74d87d105f52c6c10f0c6ea0548c12a75dfb979abab8a8b7d647305162","urls":["bzz-raw://a0680665f799067c0f0238e864e363c265ff23188dfe6ae1c4738f7d0a281ccf","dweb:/ipfs/QmRCkZhaPknrV9cHkUiU3HVyMYYT3UaD8RfptHi4qB62zY"],"license":"MIT"},"lib/v4-core/src/types/Slot0.sol":{"keccak256":"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b","urls":["bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8","dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C"],"license":"MIT"},"lib/v4-core/test/utils/CurrencySettler.sol":{"keccak256":"0xf5d04aa76b3ac6ff75396661e75ec612035ebd73d23eb6f4e207dbd46392688e","urls":["bzz-raw://67a67b94a2987309f06003374ddfc30ab8e81d9fec3b1585e93871eec6966d96","dweb:/ipfs/QmYLzboZNfXoNufKX8UYMGhHVChqMK96vwFWjKeoWcfb24"],"license":"MIT"},"src/ArenaController.sol":{"keccak256":"0x5af42e36a825607d3241fa6160679b9976221d3d8fed9c89c3a7835cf53b39a0","urls":["bzz-raw://3ef6ccff3f117de789881cbe7b02b5c5ae29d52b6fd88afc90d402752feca1cb","dweb:/ipfs/Qma6MxdScJcAxz8bi94goM2cLT39V6pKV9QRy4wN8B5hXV"],"license":null},"src/ArenaToken.sol":{"keccak256":"0x59ea858a9c33398efbfb770c958c1f544425ad32d73a3cd3991f6834ec04028a","urls":["bzz-raw://242a38f560c8dc312e27a30dad15ddf2fccb4163f4f0692f814b3cfa71180105","dweb:/ipfs/QmZqhSdNeRiVf5rJJYgX48SiUi1dwgpYAvMo6a7XBVRjXF"],"license":null},"src/Fetcher.sol":{"keccak256":"0x1895e5c0688650ca60371f208b62d9f64beea29bd7515b2600a1c8d5c73805df","urls":["bzz-raw://f9c904c9d032167f6d8fec1392c9a023f339a4aee9f75f06df6347a495af9d38","dweb:/ipfs/QmYSaPzRawAnh2qD3JY5uvWypEueo5hSTQVyVFfX96msfb"],"license":null},"src/LiquidExchange.sol":{"keccak256":"0xc979e540abc8a2d1bc82f2c741beb4ea9037c7e69ab11a5a20ef11ab7b9cee22","urls":["bzz-raw://e5f08cb7b8685020a78fd9b84d740649dcbf9ba92057cc5914d829f275d396c5","dweb:/ipfs/QmQKVvRCmSumaf2xtbLey6KdUyt9bfTLeq9gPGssisJi17"],"license":"MIT"}},"version":1},"id":53} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"fee","type":"uint256","internalType":"uint256"},{"name":"initialPrice","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"POOLS_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"POSITIONS_OFFSET","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addLiquidity","inputs":[{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeSwapStep","inputs":[{"name":"sqrtPriceCurrentX96","type":"uint160","internalType":"uint160"},{"name":"sqrtPriceTargetX96","type":"uint160","internalType":"uint160"},{"name":"liquidity","type":"uint128","internalType":"uint128"},{"name":"amountRemaining","type":"int256","internalType":"int256"},{"name":"feePips","type":"uint24","internalType":"uint24"}],"outputs":[{"name":"sqrtPriceNextX96","type":"uint160","internalType":"uint160"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"amountOut","type":"uint256","internalType":"uint256"},{"name":"feeAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"constructSignal","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct ArenaController.Signal","components":[{"name":"currentTick","type":"int24","internalType":"int24"},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"manager","type":"address","internalType":"address"},{"name":"lexPrice","type":"uint256","internalType":"uint256"},{"name":"pool","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"fetcher","type":"address","internalType":"address"}]}],"stateMutability":"view"},{"type":"function","name":"equalizePrice","inputs":[{"name":"depth","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRouter","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"poolKey","inputs":[],"outputs":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}],"stateMutability":"view"},{"type":"function","name":"setPool","inputs":[{"name":"poolFee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPrice","inputs":[{"name":"price","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"swapOnLex","inputs":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x610160604052348015610010575f80fd5b5060405161bbd738038061bbd783398101604081905261002f916104a6565b8160405161003c90610458565b908152602001604051809103905ff08015801561005b573d5f803e3d5ffd5b506001600160a01b0316608081905260405161007690610465565b6001600160a01b039091168152602001604051809103905ff08015801561009f573d5f803e3d5ffd5b506001600160a01b031660a0526080516040516100bb90610472565b6001600160a01b039091168152602001604051809103905ff0801580156100e4573d5f803e3d5ffd5b506001600160a01b031660c0526040516100fd9061047f565b604051809103905ff080158015610116573d5f803e3d5ffd5b506001600160a01b0316610100526040516012906101339061048c565b606080825260099082015268063757272656e6379360bc1b608082015260a06020820181905260029082015261063360f41b60c082015260ff909116604082015260e001604051809103905ff080158015610190573d5f803e3d5ffd5b506001600160a01b0316610120526040516012906101ad9061048c565b60608082526009908201526863757272656e63793160b81b608082015260a06020820181905260029082015261633160f01b60c082015260ff909116604082015260e001604051809103905ff08015801561020a573d5f803e3d5ffd5b506001600160a01b0390811661014081905261012051909116111561024657610140805161012080516001600160a01b03908116909352911690525b61012051610140518260405161025b90610499565b6001600160a01b0393841681529290911660208301526040820152606001604051809103905ff080158015610292573d5f803e3d5ffd5b506001600160a01b0390811660e052610120516040516340c10f1960e01b8152306004820152678ac7230489e8000060248201529116906340c10f19906044016020604051808303815f875af11580156102ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031291906104c8565b6103775760405162461bcd60e51b815260206004820152602b60248201527f4d696e74696e672063757272656e63793020746f206c6971756964206578636860448201526a185b99d94819985a5b195960aa1b60648201526084015b60405180910390fd5b610140516040516340c10f1960e01b8152306004820152678ac7230489e8000060248201526001600160a01b03909116906340c10f19906044016020604051808303815f875af11580156103cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f191906104c8565b6104515760405162461bcd60e51b815260206004820152602b60248201527f4d696e74696e672063757272656e63793120746f206c6971756964206578636860448201526a185b99d94819985a5b195960aa1b606482015260840161036e565b50506104ee565b61502b8061236483390190565b6116ad8061738f83390190565b6117d480618a3c83390190565b6105bc8061a21083390190565b610eea8061a7cc83390190565b6105218061b6b683390190565b5f80604083850312156104b7575f80fd5b505080516020909101519092909150565b5f602082840312156104d8575f80fd5b815180151581146104e7575f80fd5b9392505050565b60805160a05160c05160e051610100516101205161014051611d926105d25f395f81816106bb015281816108bb01528181610cd101526111d001525f81816105dc015281816107bf01528181610bd501526111a101525f81816103510152818161058e01528181610d8b0152610ddb01525f81816104b401528181610f0f01528181611316015261139701525f8181610ba601528181610ca201528181610ff701526110ef01525f81816102b8015281816107900152818161088c01526109b001525f818161037a0152818161048501528181610dba015261127f0152611d925ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c8063542524dd1161008857806391b7f5ed1161006357806391b7f5ed1461029057806396f5e27c146102a3578063b0f479a1146102b6578063c7b8e15d146102dc575f80fd5b8063542524dd1461025d57806357eb1da7146102475780636af577411461027d575f80fd5b806301480703146100cf57806306ba06fa14610169578063100d3f741461017e57806314ee3677146101bb578063182148ef146101ce5780632ba31c5314610247575b5f80fd5b6100d76102e4565b604080518251600290810b82526020808501516001600160a01b03908116828501528585015181168486015260608087015181860152608080880151805184168288015293840151831660a0808801919091529684015162ffffff1660c08701529083015190930b60e08501529101518116610100830152919092015116610120820152610140015b60405180910390f35b61017c61017736600461187e565b6105b8565b005b61019161018c3660046118e1565b610a2c565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610160565b61017c6101c9366004611950565b610b8f565b5f5460015460028054610207936001600160a01b03908116938082169362ffffff600160a01b83041693600160b81b909204900b911685565b604080516001600160a01b039687168152948616602086015262ffffff9093169284019290925260020b606083015291909116608082015260a001610160565b61024f600681565b604051908152602001610160565b610265611173565b6040516001600160a01b039091168152602001610160565b61017c61028b36600461197b565b611195565b61017c61029e366004611950565b611300565b61017c6102b1366004611a77565b611371565b7f0000000000000000000000000000000000000000000000000000000000000000610265565b6102656113ea565b6040805160c0810182525f80825260208083018290528284018290526060808401839052845160a080820187528482529281018490528086018490529081018390526080808201849052840152820181905291516332c961d960e01b815290919081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e631bcbf907f00000000000000000000000000000000000000000000000000000000000000009083906332c961d9906103b0908790600401611ae6565b602060405180830381865afa1580156103cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ef9190611afa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610436573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045a9190611b11565b5050915091506040518060c001604052808260020b8152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561050e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105329190611afa565b81526040805160a0810182525f546001600160a01b03908116825260015480821660208481019190915262ffffff600160a01b83041684860152600160b81b909104600290810b606085015254821660808401528401919091527f0000000000000000000000000000000000000000000000000000000000000000169101529392505050565b5f831315610779576040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af115801561062a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064e9190611b6d565b61069f5760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637930206661696c6564000000000000000060448201526064015b60405180910390fd5b6040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061072d9190611b6d565b6107795760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637931206661696c656400000000000000006044820152606401610696565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610805573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108299190611b6d565b6108755760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c65640000006044820152606401610696565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610901573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109259190611b6d565b6109715760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c65640000006044820152606401610696565b60408051608081018252600284810b825283900b60208201528082018590525f606082018190529151632d35e7ed60e11b815290916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691635a6bcfda916109e5918590600401611b8c565b6020604051808303815f875af1158015610a01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a259190611afa565b5050505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015610b02575f610a658a5f0385620f424003620f42406113fa565b905082610a7e57610a798d8d8d6001611497565b610a8b565b610a8b8c8e8d60016114e3565b9650868110610abf578b9750620f42408414610ab657610ab1878586620f4240036115a8565b610ab8565b865b9450610ad8565b809650610ace8d8c83866115d8565b9750868a5f030394505b82610aee57610ae98d898d5f6114e3565b610afa565b610afa888e8d5f611497565b955050610b80565b81610b1857610b138c8c8c5f6114e3565b610b24565b610b248b8d8c5f611497565b9450848910610b35578a9650610b47565b889450610b448c8b878561162f565b96505b81610b5e57610b598c888c6001611497565b610b6b565b610b6b878d8c60016114e3565b9550610b7d868485620f4240036115a8565b93505b50505095509550955095915050565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3f9190611b6d565b610c8b5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c65640000006044820152606401610696565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610d17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3b9190611b6d565b610d875760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c65640000006044820152606401610696565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e631bcbf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b8152600401610e259190611ae6565b602060405180830381865afa158015610e40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e649190611afa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610eab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ecf9190611b11565b5050915091505f610f0a836001600160a01b0316670de0b6b3a7640000610ef69190611bf1565b846001600160a01b0316600160c01b6113fa565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8d9190611afa565b9050808211156110795760408051606081018252600180825260208201889052915f91908101610fc36401000276a36001611c27565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b4916110309186908690600401611c46565b6020604051808303815f875af115801561104c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110709190611afa565b50505050610a25565b80821015610a2557604080516060810182525f808252602082018890529182919081016110bb600173fffd8963efd1fc6a506488495d951d5263988d26611c08565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b4916111289186908690600401611c46565b6020604051808303815f875af1158015611144573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111689190611afa565b505050505050505050565b611192600173fffd8963efd1fc6a506488495d951d5263988d26611c08565b81565b6040805160a0810182527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168083527f000000000000000000000000000000000000000000000000000000000000000082166020840181905262ffffff8a811685870181905260028b810b60608801528a861660809097018790525f80546001600160a01b03199081169096178155600180546001600160b81b031916909517600160a01b9093029290921762ffffff60b81b1916600160b81b938d16939093029290921790925580549092169093179055915163695c5bf560e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695c5bf5916112b89186908690600401611ca6565b6020604051808303815f875af11580156112d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f89190611cfb565b505050505050565b6040516391b7f5ed60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391b7f5ed906024015f604051808303815f87803b15801561135f575f80fd5b505af1158015610a25573d5f803e3d5ffd5b60405163d004f0f760e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d004f0f7906044015f604051808303815f87803b1580156113d8575f80fd5b505af11580156112f8573d5f803e3d5ffd5b6111926401000276a36001611c27565b5f838302815f1985870982811083820303915050808411611419575f80fd5b805f0361142b57508290049050611490565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b0385166114ca8184846113fa565b9350845f83858409111684019350505050949350505050565b5f836001600160a01b0316856001600160a01b03161115611502579293925b6001600160a01b03851661151c5762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b03868603168361156f57866001600160a01b031661155c8383896001600160a01b03166113fa565b8161156957611569611d16565b0461159b565b61159b6115868383896001600160a01b03166115a8565b886001600160a01b0316808204910615150190565b925050505b949350505050565b5f6115b48484846113fa565b905081806115c4576115c4611d16565b838509156114905760010180611490575f80fd5b5f6001600160801b038416156001600160a01b03861615171561160257634f2461b85f526004601cfd5b81611619576116148585856001611672565b611626565b611626858585600161175d565b95945050505050565b5f6001600160801b038416156001600160a01b03861615171561165957634f2461b85f526004601cfd5b8161166a576116148585855f61175d565b6116268585855f5b5f81156116e2575f6001600160a01b038411156116a6576116a184600160601b876001600160801b03166113fa565b6116bd565b6116bd6001600160801b038616606086901b611d2a565b90506116da6116d5826001600160a01b038916611d49565b61183f565b9150506115a0565b5f6001600160a01b0384111561170f5761170a84600160601b876001600160801b03166115a8565b61172c565b61172c606085901b6001600160801b038716808204910615150190565b9050806001600160a01b0387161161174b57634323a5555f526004601cfd5b6001600160a01b0386160390506115a0565b5f825f0361176c5750836115a0565b600160601b600160e01b03606085901b1682156117fe576001600160a01b038616848102908582816117a0576117a0611d16565b04036117d0578181018281106117ce576117c483896001600160a01b0316836115a8565b93505050506115a0565b505b506116da81856117e96001600160a01b038a1683611d2a565b6117f39190611d49565b808204910615150190565b6001600160a01b0386168481029085820414818311166118255763f5c787f15f526004601cfd5b8082036117c46116d5846001600160a01b038b16846115a8565b806001600160a01b0381168114611860576118606393dafdf160e01b611865565b919050565b805f5260045ffd5b8060020b811461187b575f80fd5b50565b5f805f60608486031215611890575f80fd5b8335925060208401356118a28161186d565b915060408401356118b28161186d565b809150509250925092565b6001600160a01b038116811461187b575f80fd5b62ffffff8116811461187b575f80fd5b5f805f805f60a086880312156118f5575f80fd5b8535611900816118bd565b94506020860135611910816118bd565b935060408601356001600160801b038116811461192b575f80fd5b9250606086013591506080860135611942816118d1565b809150509295509295909350565b5f60208284031215611960575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f805f805f60a0868803121561198f575f80fd5b853561199a816118d1565b945060208601356119aa8161186d565b935060408601356119ba816118bd565b925060608601356119ca816118bd565b9150608086013567ffffffffffffffff8111156119e5575f80fd5b8601601f810188136119f5575f80fd5b803567ffffffffffffffff811115611a0f57611a0f611967565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611a3e57611a3e611967565b6040528181528282016020018a1015611a55575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b5f8060408385031215611a88575f80fd5b8235611a93816118bd565b946020939093013593505050565b80546001600160a01b0390811683526001820154808216602085015260a081901c62ffffff16604085015260b81c600290810b60608501529091015416608090910152565b60a08101611af48284611aa1565b92915050565b5f60208284031215611b0a575f80fd5b5051919050565b5f805f8060808587031215611b24575f80fd5b8451611b2f816118bd565b6020860151909450611b408161186d565b6040860151909350611b51816118d1565b6060860151909250611b62816118d1565b939692955090935050565b5f60208284031215611b7d575f80fd5b81518015158114611490575f80fd5b611b968184611aa1565b8151600290810b60a08301526020830151900b60c0820152604082015160e082015260609091015161010082015261014061012082018190525f9082015261016001919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611af457611af4611bdd565b6001600160a01b038281168282160390811115611af457611af4611bdd565b6001600160a01b038181168382160190811115611af457611af4611bdd565b611c508185611aa1565b8251151560a082015260208084015160c08301526040909301516001600160a01b031660e082015281511515610100820152910151151561012082015261016061014082018190525f9082015261018001919050565b611cb08185611aa1565b60018060a01b03831660a082015260e060c08201525f82518060e0840152806020850161010085015e5f6101008285010152610100601f19601f830116840101915050949350505050565b5f60208284031215611d0b575f80fd5b81516114908161186d565b634e487b7160e01b5f52601260045260245ffd5b5f82611d4457634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115611af457611af4611bdd56fea2646970667358221220ac598dbc9802d34d8779520416b36bf01582f124c1671ffbabe2fc31888f9de064736f6c634300081a003360c0604052348015600e575f80fd5b5060405161502b38038061502b833981016040819052602b916077565b5f80546001600160a01b031916339081178255604051839282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350608052503060a052608d565b5f602082840312156086575f80fd5b5051919050565b60805160a051614f766100b55f395f6117e201525f818161220b01526122490152614f765ff3fe6080604052600436106101fb575f3560e01c80635a6bcfda11610113578063a58411941161009d578063f135baaa1161006d578063f135baaa14610641578063f2fde38b14610660578063f3cd914c1461067f578063f5298aca1461069e578063fe99049a146106bd575f80fd5b8063a5841194146105ab578063b6363cf2146105ca578063dbd035ff14610603578063f02de3b214610622575f80fd5b806380f0b44c116100e357806380f0b44c146104ed5780638161b8741461050c5780638da5cb5b1461052b57806397e8cd4e146105615780639bf6645f1461058c575f80fd5b80635a6bcfda1461046657806360460f061461049a578063695c5bf5146104af5780637e87ce7d146104ce575f80fd5b8063234266d711610194578063426a849311610164578063426a8493146103a157806348c89491146103c057806352759651146103ec578063558a72971461040b578063598af9e71461042a575f80fd5b8063234266d7146103245780632d7713891461034357806335fd631a146103625780633dd45adb1461038e575f80fd5b80630b0d9c09116101cf5780630b0d9c09146102bd57806311da60b4146102de578063156e29f6146102e65780631e2eaeaf14610305575f80fd5b8062fdd58e146101ff57806301ffc9a71461024857806307eff0dd14610277578063095bcdb61461029e575b5f80fd5b34801561020a575f80fd5b50610235610219366004614397565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b348015610253575f80fd5b506102676102623660046143c1565b6106dc565b604051901515815260200161023f565b348015610282575f80fd5b5061028b600181565b60405160029190910b815260200161023f565b3480156102a9575f80fd5b506102676102b83660046143e8565b610712565b3480156102c8575f80fd5b506102dc6102d736600461441a565b6107b9565b005b61023561080a565b3480156102f1575f80fd5b506102dc6103003660046143e8565b61083c565b348015610310575f80fd5b5061023561031f366004614458565b610887565b34801561032f575f80fd5b5061023561033e3660046145d7565b610891565b34801561034e575f80fd5b506102dc61035d36600461463b565b610941565b34801561036d575f80fd5b5061038161037c366004614656565b6109d7565b60405161023f9190614676565b61023561039c36600461463b565b610a14565b3480156103ac575f80fd5b506102676103bb3660046143e8565b610a46565b3480156103cb575f80fd5b506103df6103da3660046146b8565b610aaa565b60405161023f91906146f6565b3480156103f7575f80fd5b506102dc61040636600461472b565b610b6d565b348015610416575f80fd5b5061026761042536600461476c565b610bdc565b348015610435575f80fd5b5061023561044436600461441a565b600560209081525f938452604080852082529284528284209052825290205481565b348015610471575f80fd5b50610485610480366004614796565b610c4b565b6040805192835260208301919091520161023f565b3480156104a5575f80fd5b5061028b617fff81565b3480156104ba575f80fd5b5061028b6104c9366004614838565b610dde565b3480156104d9575f80fd5b506102dc6104e836600461472b565b610fcd565b3480156104f8575f80fd5b506102dc610507366004614397565b61107f565b348015610517575f80fd5b5061023561052636600461441a565b6110f2565b348015610536575f80fd5b505f54610549906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561056c575f80fd5b5061023561057b36600461463b565b60016020525f908152604090205481565b348015610597575f80fd5b506103816105a636600461487f565b611181565b3480156105b6575f80fd5b506102dc6105c536600461463b565b6111ba565b3480156105d5575f80fd5b506102676105e43660046148ee565b600360209081525f928352604080842090915290825290205460ff1681565b34801561060e575f80fd5b5061038161061d36600461487f565b6111f6565b34801561062d575f80fd5b50600254610549906001600160a01b031681565b34801561064c575f80fd5b5061023561065b366004614458565b61122d565b34801561066b575f80fd5b506102dc61067a36600461463b565b611237565b34801561068a575f80fd5b50610235610699366004614925565b6112c9565b3480156106a9575f80fd5b506102dc6106b83660046143e8565b61140f565b3480156106c8575f80fd5b506102676106d73660046149c3565b611454565b5f6301ffc9a760e01b6001600160e01b03198316148061070c5750630f632fb360e01b6001600160e01b03198316145b92915050565b335f90815260046020908152604080832085845290915281208054839190839061073d908490614a1a565b90915550506001600160a01b0384165f90815260046020908152604080832086845290915281208054849290610774908490614a2d565b909155505060408051338082526020820185905285926001600160a01b038816925f80516020614ee183398151915291015b60405180910390a45060015b9392505050565b5f80516020614f018339815191525c6107dc576107dc6354e3ca0d60e01b6115b3565b6107f1836107e9836115bb565b5f03336115db565b6108056001600160a01b038416838361162e565b505050565b5f5f80516020614f018339815191525c61082e5761082e6354e3ca0d60e01b6115b3565b610837336116c2565b905090565b5f80516020614f018339815191525c61085f5761085f6354e3ca0d60e01b6115b3565b8161086d816107e9846115bb565b610881846001600160a01b03831684611765565b50505050565b5f81545f5260205ff35b5f5f80516020614f018339815191525c6108b5576108b56354e3ca0d60e01b6115b3565b6108bd6117d7565b5f6108dc6108cc8860a0902090565b5f90815260066020526040902090565b90506108e781611819565b6080870151610903906001600160a01b0316888888888861183d565b61090e8187876118ba565b915061091b87833361196d565b6080870151610937906001600160a01b03168888888888611995565b5095945050505050565b5f546001600160a01b0316331461098e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b855483526020830192506001860195508083106109f75781810382f35b5f5f80516020614f018339815191525c610a3857610a386354e3ca0d60e01b6115b3565b61070c826116c2565b919050565b335f8181526005602090815260408083206001600160a01b03881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7906107a69087815260200190565b60605f80516020614f018339815191525c15610ad057610ad06328486b6360e11b6115b3565b610ad8611a07565b6040516348eeb9a360e11b815233906391dd734690610afd9086908690600401614a68565b5f604051808303815f875af1158015610b18573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b3f9190810190614a7b565b90505f80516020614f218339815191525c15610b6557610b65635212cba160e01b6115b3565b61070c611a1a565b604082015162ffffff1662800000141580610b9e575081608001516001600160a01b0316336001600160a01b031614155b15610bb357610bb36330d2164160e01b6115b3565b610bc18162ffffff16611a2c565b60a082205f8181526006602052604090206108059083611a52565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff191687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f805f80516020614f018339815191525c610c7057610c706354e3ca0d60e01b6115b3565b610c786117d7565b60a086205f818152600660205260409020610c9281611819565b6080880151610cad906001600160a01b031689898989611a6d565b5f610d146040518060c00160405280336001600160a01b031681526020018a5f015160020b81526020018a6020015160020b8152602001610cf18b60400151611b6f565b600f0b81526060808d015160020b60208301528b01516040909101528390611b8b565b94509050610d228185611f05565b9450336001600160a01b0316837f541c041c2cce48e614b3de043c9280f06b6164c0a1741649e2de3c3d375f79748a5f01518b602001518c60400151604051610d8693929190600293840b81529190920b6020820152604081019190915260600190565b60405180910390a360808901515f90610dac906001600160a01b03168b8b898c8c611f38565b90965090508015610dc657610dc68a828c6080015161196d565b610dd18a873361196d565b5050505094509492505050565b5f610de76117d7565b6060850151617fff60029190910b1315610e12576060850151610e12906316e0049f60e31b90612057565b600160020b856060015160020b1215610e3c576060850151610e3c90631d3d20b160e31b90612057565b845160208601516001600160a01b03908116911610610e6e5784516020860151610e6e916306e6c98360e41b91612066565b610e92856040015186608001516001600160a01b031661208890919063ffffffff16565b610ead576080850151610ead90630732d7b560e51b90612149565b5f610ec0866040015162ffffff1661215e565b6080870151909150610ede906001600160a01b031687878787612183565b60a086205f610eec886121f4565b5f848152600660205260409020909250610f099150888386612326565b6080890151909450610f28906001600160a01b03168989878a8a612385565b87602001516001600160a01b0316885f01516001600160a01b0316837fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d64388b604001518c606001518d608001518d8b604051610fba95949392919062ffffff959095168552600293840b60208601526001600160a01b03928316604086015291166060840152900b608082015260a00190565b60405180910390a4505050949350505050565b6002546001600160a01b03163314610fef57610fef6348f5c3ed60e01b6115b3565b6103e9610fff821610623e900062fff0008316101661101e5761101e63a7abe2f760e01b62ffffff8316612149565b60a082206110408261103a835f90815260066020526040902090565b906123f8565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b5f80516020614f018339815191525c6110a2576110a26354e3ca0d60e01b6115b3565b335f9081526001600160a01b038316602052604081205c906110c3836115bb565b90508181600f0b146110df576110df63bda73abf60e01b6115b3565b610881846110ec83614b0d565b336115db565b6002545f906001600160a01b03163314611116576111166348f5c3ed60e01b6115b3565b8115611122578161113b565b6001600160a01b0383165f908152600160205260409020545b6001600160a01b0384165f90815260016020526040812080549293508392909190611167908490614a1a565b909155506107b290506001600160a01b038416858361162e565b606060405180602082528360208301526040820191508360051b8201855b80355c84526020938401930181841061119f575b5081810382f35b6111c261240d565b6001600160a01b0381166111d35750565b5f6111e6826001600160a01b0316612441565b90506111f282826124bd565b5050565b606060405180602082528360208301526040820191508360051b8201855b803554845260209384019301818410156111b357611214565b5f815c5f5260205ff35b5f546001600160a01b0316331461127f5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610985565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f5f80516020614f018339815191525c6112ed576112ed6354e3ca0d60e01b6115b3565b6112f56117d7565b83602001515f036113105761131063be8b850760e01b6115b3565b60a085205f81815260066020526040902061132a81611819565b60808701515f908190819061134b906001600160a01b03168b8b8b8b6124fd565b8093508195508294505050506113ba84866040518060a001604052808e6060015160020b81526020018d5f0151151581526020018681526020018d604001516001600160a01b031681526020018562ffffff168152508c5f01516113b3578d60200151612619565b8d51612619565b60808b01519096505f92506113de91506001600160a01b03168a8a888b8b88612707565b909550905080156113f8576113f889828b6080015161196d565b61140389863361196d565b50505050949350505050565b5f80516020614f018339815191525c611432576114326354e3ca0d60e01b6115b3565b81611440816110ec846115bb565b610881846001600160a01b0383168461282a565b5f336001600160a01b0386161480159061149157506001600160a01b0385165f90815260036020908152604080832033845290915290205460ff16155b15611501576001600160a01b0385165f90815260056020908152604080832033845282528083208684529091529020545f1981146114ff576114d38382614a1a565b6001600160a01b0387165f90815260056020908152604080832033845282528083208884529091529020555b505b6001600160a01b0385165f90815260046020908152604080832086845290915281208054849290611533908490614a1a565b90915550506001600160a01b0384165f9081526004602090815260408083208684529091528120805484929061156a908490614a2d565b9091555050604080513381526020810184905284916001600160a01b0380881692908916915f80516020614ee1833981519152910160405180910390a45060015b949350505050565b805f5260045ffd5b5f6001607f1b82106115d7576115d76393dafdf160e01b6115b3565b5090565b81600f0b5f036115ea57505050565b5f806116006001600160a01b03861684866128e8565b91509150805f0361161857611613612921565b611627565b815f0361162757611627612949565b5050505050565b5f6001600160a01b038416611661575f805f8085875af190508061165c5761165c6356cdd02560e11b612971565b610881565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f6040820152508061088157610881632745a14f60e21b612971565b5f5f80516020614ec18339815191525c6001600160a01b0381166116e85734915061174c565b34156116fe576116fe6319d245cf60e01b6115b3565b7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c5f6117336001600160a01b038416612441565b905061173f8282614a1a565b935061174961299e565b50505b61175f81611759846115bb565b856115db565b50919050565b6001600160a01b0383165f90815260046020908152604080832085845290915281208054839290611797908490614a2d565b9091555050604080513381526020810183905283916001600160a01b038616915f915f80516020614ee183398151915291015b60405180910390a4505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611817576118176306c4a1c760e11b6115b3565b565b80546001600160a01b03165f0361183a5761183a63486aa30760e01b6115b3565b50565b85336001600160a01b038216146118b15760208716156118b1576118af33878787878760405160240161187596959493929190614b74565b60408051601f198184030181529190526020810180516001600160e01b0316635b54587d60e11b1790526001600160a01b038916906129b0565b505b50505050505050565b60038301545f906001600160801b03168082036118e1576118e163a74f97ab60e01b6115b3565b61190f6118ed856115bb565b5f036118f8856115bb565b5f0360809190911b6001600160801b039091161790565b9150831561193b5761192f84600160801b836001600160801b0316612a40565b60018601805490910190555b82156119655761195983600160801b836001600160801b0316612a40565b60028601805490910190555b509392505050565b82516119839061197d8460801d90565b836115db565b610805836020015161197d84600f0b90565b85336001600160a01b038216146118b15760108716156118b1576118af3387878787876040516024016119cd96959493929190614b74565b60408051601f198184030181529190526020810180516001600160e01b031663e1b4af6960e01b1790526001600160a01b038916906129b0565b60015f80516020614f018339815191525d565b5f5f80516020614f018339815191525d565b620f424062ffffff8216111561183a5761183a631400211360e01b62ffffff8316612149565b611a5b82611819565b8154611a679082612adc565b90915550565b84336001600160a01b03821614611b67575f8460400151138015611a945750610800861615155b15611af557611aef3386868686604051602401611ab5959493929190614bbe565b60408051601f198184030181529190526020810180516001600160e01b031663259982e560e01b1790526001600160a01b038816906129b0565b50611b67565b5f846040015113158015611b0c5750610200861615155b15611b67576118b13386868686604051602401611b2d959493929190614bbe565b60408051601f198184030181529190526020810180516001600160e01b031663021d0ee760e41b1790526001600160a01b038816906129b0565b505050505050565b80600f81900b8114610a4157610a416393dafdf160e01b6115b3565b6060810151602082015160408301515f9283929091611baa8282612af7565b604080516080810182525f80825260208201819052918101829052606081019190915283600f0b5f14611cef57611be38884865f612b57565b6001600160801b0316602083015215158152611c028883866001612b57565b6001600160801b03166060830152151560408201525f600f85900b12611cb4575f611c52886080015160020b620d89e7198190058102620d89e8829005820203056001016001600160801b030490565b9050806001600160801b031682602001516001600160801b03161115611c8357611c8363b8e3c38560e01b85612057565b806001600160801b031682606001516001600160801b03161115611cb257611cb263b8e3c38560e01b84612057565b505b805115611cd0576080870151611cd09060058a01908590612c11565b806040015115611cef576080870151611cef9060058a01908490612c11565b5f80611cfc8a8686612c63565b8a5160a08c015160408051602681019290925260068083018a9052600383018b9052928252603a600c8301205f838301819052602080850182905293819052908152928f01909152812092945090925080611d59838a8787612d17565b91509150611d85611d69836115bb565b611d72836115bb565b6001600160801b031660809190911b1790565b995050505050505f84600f0b1215611dee57805115611dc157600283810b5f90815260048a016020526040812081815560018101829055909101555b806040015115611dee57600282810b5f90815260048a016020526040812081815560018101829055909101555b5082600f0b5f14611efb5786545f80611e0a8360a01c60020b90565b6001600160a01b038416915091508460020b8260020b1215611e5957611e52611e4c611e47611e3888612dd0565b611e4188612dd0565b8a613088565b611b6f565b60801b90565b9750611ef7565b8360020b8260020b1215611ed257611e90611e7a611e4783611e4188612dd0565b611d72611e47611e8989612dd0565b858b6130c0565b60038b0154909850611eab906001600160801b0316876130ec565b60038b0180546001600160801b0319166001600160801b0392909216919091179055611ef7565b611ef45f611d72611e47611ee589612dd0565b611eee89612dd0565b8b6130c0565b97505b5050505b5050509250929050565b5f608082811d9084901d01600f83810b9085900b01611f2f611f2683611b6f565b611d7283611b6f565b95945050505050565b5f806001600160a01b0388163303611f5457508390505f61204c565b8491505f86604001511315611fe057610400881615611fdb57611fcc338888888888604051602401611f8b96959493929190614c1e565b60408051601f198184030181529190526020810180516001600160e01b0316625a2a8160e81b17905260028a1615155b6001600160a01b038b169190613113565b9050611fd88282613154565b91505b61204c565b61010088161561204c5761203d33888888888860405160240161200896959493929190614c1e565b60408051601f198184030181529190526020810180516001600160e01b03166346d95b2960e11b17905260018a161515611fbb565b90506120498282613154565b91505b965096945050505050565b815f528060020b60045260245ffd5b825f526001600160a01b0382166004526001600160a01b03811660245260445ffd5b5f6080831615801561209c57506008831615155b156120a857505f61070c565b604083161580156120bb57506004831615155b156120c757505f61070c565b61040083161580156120db57506002831615155b156120e757505f61070c565b61010083161580156120fb57506001831615155b1561210757505f61070c565b6001600160a01b0383161561213857613fff831615158061213357506280000062ffffff8316146107b2565b6107b2565b5062ffffff16628000001415919050565b815f526001600160a01b03811660045260245ffd5b5f6280000062ffffff83160361217557505f919050565b6115d78262ffffff16611a2c565b84336001600160a01b03821614611b6757612000861615611b67576118b133868686866040516024016121ba959493929190614c85565b60408051601f198184030181529190526020810180516001600160e01b03166301a206c160e51b1790526001600160a01b038816906129b0565b6002545f9081906001600160a01b031615612321577f00000000000000000000000000000000000000000000000000000000000000005a101561224157612241630f724b8160e11b6115b3565b6002546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316905f90612283908790602401614cc6565b60408051601f198184030181529190526020810180516001600160e01b031663553bfc3760e01b17815281519192505f918291829190828789f13d60201416955085156122da576040513d5f823e805191505f8152505b8580156122eb57508062ffffff1681145b801561230857506103e9610fff821610623e900062fff000831610165b612313575f80612317565b6001815b9096509450505050505b915091565b83545f906001600160a01b03161561234857612348637983c05160e01b6115b3565b61235184613175565b905061237a826123748561236e6001600160a01b03891686613460565b9061347b565b90612adc565b909455509192915050565b85336001600160a01b038216146118b1576110008716156118b1576118af3387878787876040516024016123be96959493929190614cd4565b60408051601f198184030181529190526020810180516001600160e01b031663a910f80f60e01b1790526001600160a01b038916906129b0565b61240182611819565b8154611a67908261347b565b61242d5f80516020614ec18339815191525c6001600160a01b0316613496565b6118175761181763996caf6560e01b6115b3565b5f6001600160a01b038216612457575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015612499573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070c9190614d1d565b6001600160a01b0382165f80516020614ec18339815191525d807f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d5050565b60208301515f806001600160a01b038816330361251c575f915061260e565b608088161561260e575f61257289338a8a8a8a604051602401612543959493929190614d34565b60408051601f198184030181529190526020810180516001600160e01b03166315d7892d60e21b1790526129b0565b9050805160601461258d5761258d631e048e1d60e01b6115b3565b604088015162ffffff1662800000036125a857606081015191505b600889161561260c57604081015192505f6125c38460801d90565b905080600f0b5f1461260a575f85126125e0600f83900b87614d8d565b9550806125ef575f86126125f3565b5f86135b1561260857612608637d05b8eb60e11b6115b3565b505b505b505b955095509592505050565b5f8080808061262889886134a7565b93509350935093505f831115612656576001600160a01b0386165f9081526001602052604090208054840190555b33887f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f6126838760801d90565b61268d88600f0b90565b60408087015160a0880151606089015192516126f2959493908b90600f96870b81529490950b60208501526001600160a01b039290921660408401526001600160801b0316606083015260020b608082015262ffffff9190911660a082015260c00190565b60405180910390a35091979650505050505050565b5f806001600160a01b038916330361272357508490505f61281e565b5f61272e8460801d90565b90505f61273b85600f0b90565b905060408b16156127b5576127a8611e47338c8c8c8c8c60405160240161276796959493929190614db4565b60408051601f198184030181529190526020810180516001600160e01b031663b47b2fb160e01b17905260048e1615156001600160a01b038f169190613113565b6127b29082614e14565b90505b5f81600f0b5f1415806127cb575082600f0b5f14155b1561281657895160208b01515f13901515146127f6576001600160801b038316608083901b17612807565b6001600160801b038216608084901b175b90506128138982613154565b98505b889450925050505b97509795505050505050565b336001600160a01b038416811480159061286957506001600160a01b038085165f9081526003602090815260408083209385168352929052205460ff16155b156128dd576001600160a01b038085165f9081526005602090815260408083209385168352928152828220868352905220545f1981146128db576128ad8382614a1a565b6001600160a01b038087165f9081526005602090815260408083209387168352928152828220888352905220555b505b610881848484613b54565b6001600160a01b038281165f90815290841660205260408120805c9190612913600f85900b84614d8d565b915081815d50935093915050565b5f80516020614f218339815191525c600181039050805f80516020614f218339815191525d50565b5f80516020614f218339815191525c600181019050805f80516020614f218339815191525d50565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f5f80516020614ec18339815191525d565b60605f805f8451602086015f885af19050806129d6576129d663fb6a608160e01b612971565b6040519150601f19603f3d011682016040523d82523d5f602084013e602082511080612a24575060208301516001600160e01b031916612a17836020015190565b6001600160e01b03191614155b15612a3957612a39631e048e1d60e01b6115b3565b5092915050565b5f838302815f1985870982811083820303915050808411612a5f575f80fd5b805f03612a71575082900490506107b2565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60d01b62ffffff60d01b1662ffffff60d01b19919091161790565b8060020b8260020b12612b1657612b1663c4433ed560e01b8383613bbd565b620d89e719600283900b1215612b3757612b3763d5e2f7ab60e01b83612057565b620d89e8600282900b13156111f2576111f263035aeeff60e31b82612057565b600283900b5f908152600485016020526040812080548291906001600160801b0381169060801d612b8882886130ec565b6001600160801b03808216159084168015919091141596509094505f03612bd257885460a01c60020b60020b8860020b13612bd2576001808a0154908401556002808a0154908401555b5f86612be757612be28883614e14565b612bf1565b612bf18883614e41565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b80820715612c3e5760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b600282810b5f81815260048601602052604080822085850b83529082208754929485949293919260a09290921c900b90811215612cb9578160010154836001015403945081600201548360020154039350612d0c565b8560020b8160020b12612ce5578260010154826001015403945082600201548260020154039350612d0c565b81600101548360010154896001015403039450816002015483600201548960020154030393505b505050935093915050565b83545f9081906001600160801b0316600f86900b8203612d5657806001600160801b03165f03612d5157612d51632bbfae4960e21b6115b3565b612d7c565b612d6081876130ec565b87546001600160801b0319166001600160801b03919091161787555b612d9a87600101548603826001600160801b0316600160801b612a40565b9250612dba87600201548503826001600160801b0316600160801b612a40565b6001880195909555505060029094015591929050565b60020b5f60ff82901d80830118620d89e8811115612df957612df96345c3193d60e11b84612057565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612e35576ffff97272373d413259a46990580e213a0260801c5b6004821615612e54576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e73576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e92576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612eb1576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ed0576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612eef576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612f0f576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f2f576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f4f576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f6f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f8f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612faf576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fcf576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fef576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613010576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613030576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561304f576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561306c576b048a170391f7dc42444e8fa20260801c5b5f841315613078575f19045b63ffffffff0160201c9392505050565b5f8082600f0b126130af576130a86130a38585856001613bda565b613c9d565b5f036115ab565b6115ab6130a38585855f035f613bda565b5f8082600f0b126130db576130a86130a38585856001613cb6565b6115ab6130a38585855f035f613cb6565b6001600160801b038216600f82900b01608081901c1561070c576393dafdf15f526004601cfd5b5f8061311f85856129b0565b90508261312f575f9150506107b2565b805160401461314857613148631e048e1d60e01b6115b3565b60400151949350505050565b5f608082811d9084901d03600f83810b9085900b03611f2f611f2683611b6f565b5f73fffd8963efd1fc6a506488495d951d51639616826401000276a21983016001600160a01b031611156131b4576131b46318521d4960e21b83612149565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061324757607f810383901c9150613251565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461345157886001600160a01b031661343682612dd0565b6001600160a01b0316111561344b5781613453565b80613453565b815b9998505050505050505050565b60a01b62ffffff60a01b1662ffffff60a01b19919091161790565b60b81b62ffffff60b81b1662ffffff60b81b19919091161790565b5f6001600160a01b0382161561070c565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101829052819081908554602086015160038801546001600160801b03165f8261350457610fff60c485901c1661350e565b610fff60b885901c165b60408a81015187525f60208801526001600160a01b0386169087015260a085901c60020b606087015261ffff1690508261354c578960020154613552565b89600101545b6080868101919091526001600160801b03831660a08701528901515f9062400000166135875760d085901c62ffffff16613599565b6135998a6080015162ffffff16613d02565b905081156135c757620f424062ffffff821661ffff84168181028381061515939004929092019101036135c9565b805b60408b01519097505f13905062ffffff8716620f42401480156135ea575080155b156135ff576135ff634b10312360e11b6115b3565b89604001515f0361361a575f80985098505050505050613b4b565b83156136985760608a01516001600160a01b03868116911610613659576136596001600160a01b0386165b60608c0151637c9c6e8f60e01b9190613d11565b6401000276a36001600160a01b03168a606001516001600160a01b031610156136935760608a015161369390639e4d7cc760e01b90612149565b613709565b60608a01516001600160a01b038681169116116136c1576136c16001600160a01b038616613645565b73fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168a606001516001600160a01b0316106137095760608a015161370990639e4d7cc760e01b90612149565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091525b8651158061376957508a606001516001600160a01b031687604001516001600160a01b0316145b613a545760408701516001600160a01b0316815260608701518b516137939160058f019188613d3a565b1515604083015260020b60208201819052620d89e719126137b957620d89e71960208201525b620d89e860020b816020015160020b126137d757620d89e860208201525b6137e48160200151612dd0565b6001600160a01b03908116606083810182905260408a0151908e0151613825939192911680821891811160ff8a1618919091021860a08a01518a518c613e23565b60c085015260a084015260808301526001600160a01b0316604088015281613889576138548160a00151613c9d565b875103875260c08101516080820151613870916130a391614a2d565b876020018181516138819190614e6e565b9052506138c4565b61389c8160c00151826080015101613c9d565b875101875260a08101516138af90613c9d565b876020018181516138c09190614d8d565b9052505b8215613900575f620f4240848360c0015184608001510102816138e9576138e9614e8d565b60c084018051929091049182900390529990990198505b60a08701516001600160801b03161561393f576139338160c00151600160801b8960a001516001600160801b0316612a40565b60808801805190910190525b80606001516001600160a01b031687604001516001600160a01b031603613a1957806040015115613a01575f8086613980578d60010154896080015161398b565b88608001518e600201545b915091505f6139d68f85602001518585600292830b5f90815260049094016020526040909320600181018054909203909155908101805490920390915554600160801b9004600f0b90565b905087156139e1575f035b6139ef8a60a00151826130ec565b6001600160801b031660a08b01525050505b602081015160ff8616900360020b6060880152613742565b805f01516001600160a01b031687604001516001600160a01b031614613a4f57613a468760400151613175565b60020b60608801525b613742565b613a8c8760400151613a7389606001518961346090919063ffffffff16565b6001600160a01b0319166001600160a01b039091161790565b8c5560a08701516001600160801b03858116911614613acc5760a087015160038d0180546001600160801b0319166001600160801b039092169190911790555b84613ae057608087015160028d0155613aeb565b608087015160018d01555b81151585151514613b1f57613b18613b068860200151611b6f565b611d72895f01518e6040015103611b6f565b9950613b44565b613b41613b34885f01518d6040015103611b6f565b611d728960200151611b6f565b99505b5050505050505b92959194509250565b6001600160a01b0383165f90815260046020908152604080832085845290915281208054839290613b86908490614a1a565b9091555050604080513381526020810183905283915f916001600160a01b038716915f80516020614ee183398151915291016117ca565b6040518381528260020b60048201528160020b6024820152604481fd5b5f836001600160a01b0316856001600160a01b03161115613bf9579293925b6001600160a01b038516613c135762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b038686031683613c6657866001600160a01b0316613c538383896001600160a01b0316612a40565b81613c6057613c60614e8d565b04613c92565b613c92613c7d8383896001600160a01b0316613fa9565b886001600160a01b0316808204910615150190565b979650505050505050565b805f811215610a4157610a416393dafdf160e01b6115b3565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516613ce9818484612a40565b9350845f83858409111684019350505050949350505050565b62bfffff8116610a4181611a2c565b6040518381526001600160a01b03831660048201526001600160a01b0382166024820152604481fd5b5f80600284810b9086900b8181078313919005038315613db557600281900b60081d600181810b5f90815260208a905260409020545f1960ff85168381019390931b01908116801515955085613d9757888360ff16860302613daa565b88613da182613fd9565b840360ff168603025b965050505050613e19565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b011990811680151595509293919285613dff57888360ff0360ff16860102613e12565b8883613e0a83614069565b0360ff168601025b9650505050505b5094509492505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015613f1c575f613e5c8a5f0385620f424003620f4240612a40565b905082613e7557613e708d8d8d6001613cb6565b613e82565b613e828c8e8d6001613bda565b9650868110613eb6578b9750620f42408414613ead57613ea8878586620f424003613fa9565b613eaf565b865b9450613ef2565b613ec28d8c8386614104565b975082613edb57613ed68d898d6001613cb6565b613ee8565b613ee8888e8d6001613bda565b9650868a5f030394505b82613f0857613f038d898d5f613bda565b613f14565b613f14888e8d5f613cb6565b955050613f9a565b81613f3257613f2d8c8c8c5f613bda565b613f3e565b613f3e8b8d8c5f613cb6565b9450848910613f4f578a9650613f61565b889450613f5e8c8b8785614152565b96505b81613f7857613f738c888c6001613cb6565b613f85565b613f85878d8c6001613bda565b9550613f97868485620f424003613fa9565b93505b50505095509550955095915050565b5f613fb5848484612a40565b90508180613fc557613fc5614e8d565b838509156107b257600101806107b2575f80fd5b5f808211613fe5575f80fd5b507f0706060506020504060203020504030106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be831560081b6001600160801b03851160071b1784811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b5f808211614075575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b150316040581196001019091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f6001600160801b038416156001600160a01b03861615171561412e57634f2461b85f526004601cfd5b81614145576141408585856001614195565b611f2f565b611f2f8585856001614280565b5f6001600160801b038416156001600160a01b03861615171561417c57634f2461b85f526004601cfd5b8161418d576141408585855f614280565b611f2f8585855f5b5f8115614205575f6001600160a01b038411156141c9576141c484600160601b876001600160801b0316612a40565b6141e0565b6141e06001600160801b038616606086901b614ea1565b90506141fd6141f8826001600160a01b038916614a2d565b614362565b9150506115ab565b5f6001600160a01b038411156142325761422d84600160601b876001600160801b0316613fa9565b61424f565b61424f606085901b6001600160801b038716808204910615150190565b9050806001600160a01b0387161161426e57634323a5555f526004601cfd5b6001600160a01b0386160390506115ab565b5f825f0361428f5750836115ab565b600160601b600160e01b03606085901b168215614321576001600160a01b038616848102908582816142c3576142c3614e8d565b04036142f3578181018281106142f1576142e783896001600160a01b031683613fa9565b93505050506115ab565b505b506141fd818561430c6001600160a01b038a1683614ea1565b6143169190614a2d565b808204910615150190565b6001600160a01b0386168481029085820414818311166143485763f5c787f15f526004601cfd5b8082036142e76141f8846001600160a01b038b1684613fa9565b806001600160a01b0381168114610a4157610a416393dafdf160e01b6115b3565b6001600160a01b038116811461183a575f80fd5b5f80604083850312156143a8575f80fd5b82356143b381614383565b946020939093013593505050565b5f602082840312156143d1575f80fd5b81356001600160e01b0319811681146107b2575f80fd5b5f805f606084860312156143fa575f80fd5b833561440581614383565b95602085013595506040909401359392505050565b5f805f6060848603121561442c575f80fd5b833561443781614383565b9250602084013561444781614383565b929592945050506040919091013590565b5f60208284031215614468575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156144a5576144a561446f565b60405290565b604051601f8201601f191681016001600160401b03811182821017156144d3576144d361446f565b604052919050565b803562ffffff81168114610a41575f80fd5b8035600281900b8114610a41575f80fd5b5f60a0828403121561450e575f80fd5b60405160a081016001600160401b03811182821017156145305761453061446f565b604052905080823561454181614383565b8152602083013561455181614383565b6020820152614562604084016144db565b6040820152614573606084016144ed565b6060820152608083013561458681614383565b6080919091015292915050565b5f8083601f8401126145a3575f80fd5b5081356001600160401b038111156145b9575f80fd5b6020830191508360208285010111156145d0575f80fd5b9250929050565b5f805f805f61010086880312156145ec575f80fd5b6145f687876144fe565b945060a0860135935060c0860135925060e08601356001600160401b0381111561461e575f80fd5b61462a88828901614593565b969995985093965092949392505050565b5f6020828403121561464b575f80fd5b81356107b281614383565b5f8060408385031215614667575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b818110156146ad57835183526020938401939092019160010161468f565b509095945050505050565b5f80602083850312156146c9575f80fd5b82356001600160401b038111156146de575f80fd5b6146ea85828601614593565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060c0838503121561473c575f80fd5b61474684846144fe565b915061475460a084016144db565b90509250929050565b80358015158114610a41575f80fd5b5f806040838503121561477d575f80fd5b823561478881614383565b91506147546020840161475d565b5f805f808486036101408112156147ab575f80fd5b6147b587876144fe565b94506080609f19820112156147c8575f80fd5b506147d1614483565b6147dd60a087016144ed565b81526147eb60c087016144ed565b602082015260e08601356040820152610100860135606082015292506101208501356001600160401b03811115614820575f80fd5b61482c87828801614593565b95989497509550505050565b5f805f8060e0858703121561484b575f80fd5b61485586866144fe565b935060a085013561486581614383565b925060c08501356001600160401b03811115614820575f80fd5b5f8060208385031215614890575f80fd5b82356001600160401b038111156148a5575f80fd5b8301601f810185136148b5575f80fd5b80356001600160401b038111156148ca575f80fd5b8560208260051b84010111156148de575f80fd5b6020919091019590945092505050565b5f80604083850312156148ff575f80fd5b823561490a81614383565b9150602083013561491a81614383565b809150509250929050565b5f805f8084860361012081121561493a575f80fd5b61494487876144fe565b94506060609f1982011215614957575f80fd5b50604051606081016001600160401b038111828210171561497a5761497a61446f565b60405261498960a0870161475d565b815260c0860135602082015260e08601356149a381614383565b604082015292506101008501356001600160401b03811115614820575f80fd5b5f805f80608085870312156149d6575f80fd5b84356149e181614383565b935060208501356149f181614383565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561070c5761070c614a06565b8082018082111561070c5761070c614a06565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6115ab602083018486614a40565b5f60208284031215614a8b575f80fd5b81516001600160401b03811115614aa0575f80fd5b8201601f81018413614ab0575f80fd5b80516001600160401b03811115614ac957614ac961446f565b614adc601f8201601f19166020016144ab565b818152856020838501011115614af0575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f81600f0b60016001607f1b03198103614b2957614b29614a06565b5f0392915050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b6001600160a01b0387168152614b8d6020820187614b31565b8460c08201528360e08201526101206101008201525f614bb261012083018486614a40565b98975050505050505050565b6001600160a01b0386168152614bd76020820186614b31565b8351600290810b60c08301526020850151900b60e0820152604084015161010082015260608401516101208201526101606101408201525f613c9261016083018486614a40565b6001600160a01b0387168152614c376020820187614b31565b8451600290810b60c08301526020860151900b60e082015260408501516101008201526060850151610120820152836101408201526101806101608201525f614bb261018083018486614a40565b6001600160a01b0386168152614c9e6020820186614b31565b6001600160a01b03841660c082015261010060e082018190525f90613c929083018486614a40565b60a0810161070c8284614b31565b6001600160a01b0387168152614ced6020820187614b31565b60018060a01b03851660c08201528360020b60e08201526101206101008201525f614bb261012083018486614a40565b5f60208284031215614d2d575f80fd5b5051919050565b6001600160a01b0386168152614d4d6020820186614b31565b8351151560c0820152602084015160e082015260408401516001600160a01b03166101008201526101406101208201525f613c9261014083018486614a40565b8082018281125f831280158216821582161715614dac57614dac614a06565b505092915050565b6001600160a01b0387168152614dcd6020820187614b31565b8451151560c0820152602085015160e082015260408501516001600160a01b0316610100820152836101208201526101606101408201525f614bb261016083018486614a40565b600f81810b9083900b0160016001607f1b03811360016001607f1b03198212171561070c5761070c614a06565b600f82810b9082900b0360016001607f1b0319811260016001607f1b038213171561070c5761070c614a06565b8181035f831280158383131683831282161715612a3957612a39614a06565b634e487b7160e01b5f52601260045260245ffd5b5f82614ebb57634e487b7160e01b5f52601260045260245ffd5b50049056fe27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b91b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859c090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab237d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0ba2646970667358221220c720af38850bace8901ec0c414e9cc6b7600fdc66c58c62bb119ab202e9502fe64736f6c634300081a003360a0604052348015600e575f80fd5b506040516116ad3803806116ad833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516115e46100c95f395f818160790152818160f50152818161022d01528181610294015281816102c501528181610390015281816104fa01528181610550015281816105bf015281816106100152818161077a01526107ad01526115e45ff3fe60806040526004361061003e575f3560e01c80630a5b11e414610042578063481c6a75146100685780635a6bcfda146100b357806391dd7346146100c6575b5f80fd5b610055610050366004611035565b6100f2565b6040519081526020015b60405180910390f35b348015610073575f80fd5b5061009b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005f565b6100556100c13660046110bb565b61020a565b3480156100d1575f80fd5b506100e56100e0366004611118565b610220565b60405161005f91906111b2565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060c00160405280336001600160a01b03168152602001898152602001888152602001878152602001861515815260200185151581525060405160200161016c919061120e565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161019791906111b2565b5f604051808303815f875af11580156101b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d991908101906112aa565b8060200190518101906101ec919061131e565b9050478015610200576102005f3383610662565b5095945050505050565b5f6102188484845f806100f2565b949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610256575f80fd5b5f61026383850185611335565b90505f6102be610278836020015160a0902090565b6040840151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a6bcfda8460200151856040015186606001516040518463ffffffff1660e01b815260040161031f939291906113fc565b60408051808303815f875af115801561033a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035e919061144b565b5090505f6103ba610374856020015160a0902090565b6040860151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f6103d485602001515f0151865f015130610753565b925050505f6103ef866020015160200151875f015130610753565b9250505082600f0b86604001516040015186600f0b61040e9190611481565b1461045f5760405162461bcd60e51b815260206004820152601a60248201527f6c6971756964697479206368616e676520696e636f7272656374000000000000604482015260640160405180910390fd5b5f86604001516040015112156104a7575f82138061047c57505f81135b610488576104886114a8565b5f82128061049557505f81125b156104a2576104a26114a8565b6104ea565b5f86604001516040015113156104ea575f8212806104c457505f81125b6104d0576104d06114a8565b5f8213806104dd57505f81135b156104ea576104ea6114a8565b5f821215610540578551610540907f000000000000000000000000000000000000000000000000000000000000000090610523856114bc565b60808a015160208b0151516001600160a01b0316939291906107df565b5f811215610598578551610598907f000000000000000000000000000000000000000000000000000000000000000090610579846114bc565b60808a01516020808c015101516001600160a01b0316939291906107df565b5f8213156105e757855160a08701516020880151516105e7926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610aab565b5f81131561063857855160a08701516020808901510151610638926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610aab565b60408051602081018690520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610695575f805f8085875af1905080610690576106906356cdd02560e11b610b7d565b6106f6565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806106f6576106f6632745a14f60e21b610b7d565b50505050565b60408051602681018390526006810184905260038101859052858152603a600c8201205f9282018390526020820183905290829052819081906107408a8a83610baa565b919c909b50909950975050505050505050565b5f80806107696001600160a01b03871686610c4d565b925061079e6001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610c4d565b91506107d46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610cdc565b905093509350939050565b801561087457836001600160a01b031663f5298aca8461080e886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610859575f80fd5b505af115801561086b573d5f803e3d5ffd5b50505050610aa4565b6001600160a01b0385166108eb57836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af11580156108c0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e5919061131e565b50610aa4565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b15801561092b575f80fd5b505af115801561093d573d5f803e3d5ffd5b505050506001600160a01b03831630146109cf576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af11580156109a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c991906114d6565b50610a41565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610a1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3f91906114d6565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610a7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa2919061131e565b505b5050505050565b80610aed57604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610842565b836001600160a01b031663156e29f684610b16886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610b60575f80fd5b505af1158015610b72573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f805f80610bb88686610d73565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa158015610c06573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c2d91908101906114f1565b60208101516040820151606090920151909a919950975095505050505050565b5f6001600160a01b038316610c6d57506001600160a01b0381163161065c565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd5919061131e565b905061065c565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610d2b91815260200190565b602060405180830381865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a919061131e565b95945050505050565b5f80610d7e84610dc3565b90505f610d8c60068361159b565b6040805160208101879052908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b6040515f90610de2908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715610e3557610e35610dff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610e6357610e63610dff565b604052919050565b6001600160a01b0381168114610e7f575f80fd5b50565b8035600281900b8114610e93575f80fd5b919050565b5f60a08284031215610ea8575f80fd5b60405160a081016001600160401b0381118282101715610eca57610eca610dff565b6040529050808235610edb81610e6b565b81526020830135610eeb81610e6b565b6020820152604083013562ffffff81168114610f05575f80fd5b6040820152610f1660608401610e82565b60608201526080830135610f2981610e6b565b6080919091015292915050565b5f60808284031215610f46575f80fd5b604051608081016001600160401b0381118282101715610f6857610f68610dff565b604052905080610f7783610e82565b8152610f8560208401610e82565b602082015260408301356040820152606083013560608201525092915050565b5f6001600160401b03821115610fbd57610fbd610dff565b50601f01601f191660200190565b5f82601f830112610fda575f80fd5b8135610fed610fe882610fa5565b610e3b565b818152846020838601011115611001575f80fd5b816020850160208301375f918101602001919091529392505050565b8015158114610e7f575f80fd5b8035610e938161101d565b5f805f805f610180868803121561104a575f80fd5b6110548787610e98565b94506110638760a08801610f36565b93506101208601356001600160401b0381111561107e575f80fd5b61108a88828901610fcb565b93505061014086013561109c8161101d565b91506101608601356110ad8161101d565b809150509295509295909350565b5f805f61014084860312156110ce575f80fd5b6110d88585610e98565b92506110e78560a08601610f36565b91506101208401356001600160401b03811115611102575f80fd5b61110e86828701610fcb565b9150509250925092565b5f8060208385031215611129575f80fd5b82356001600160401b0381111561113e575f80fd5b8301601f8101851361114e575f80fd5b80356001600160401b03811115611163575f80fd5b856020828401011115611174575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111c46020830184611184565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528201515f9061123460408401826111cb565b506040838101518051600290810b60e08601526020820151900b610100850152908101516101208401526060908101516101408401528301516101a06101608401526112846101c0840182611184565b90506080840151151561018084015260a084015115156101a08401528091505092915050565b5f602082840312156112ba575f80fd5b81516001600160401b038111156112cf575f80fd5b8201601f810184136112df575f80fd5b80516112ed610fe882610fa5565b818152856020838501011115611301575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f6020828403121561132e575f80fd5b5051919050565b5f60208284031215611345575f80fd5b81356001600160401b0381111561135a575f80fd5b82016101a0818503121561136c575f80fd5b611374610e13565b813561137f81610e6b565b815261138e8560208401610e98565b60208201526113a08560c08401610f36565b60408201526101408201356001600160401b038111156113be575f80fd5b6113ca86828501610fcb565b6060830152506113dd610160830161102a565b60808201526113ef610180830161102a565b60a0820152949350505050565b61140681856111cb565b8251600290810b60a08301526020840151900b60c0820152604083015160e082015260608301516101008201526101406101208201525f610d6a610140830184611184565b5f806040838503121561145c575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f8312801582168215821617156114a0576114a061146d565b505092915050565b634e487b7160e01b5f52600160045260245ffd5b5f600160ff1b82016114d0576114d061146d565b505f0390565b5f602082840312156114e6575f80fd5b81516111c48161101d565b5f60208284031215611501575f80fd5b81516001600160401b03811115611516575f80fd5b8201601f81018413611526575f80fd5b80516001600160401b0381111561153f5761153f610dff565b8060051b61154f60208201610e3b565b9182526020818401810192908101908784111561156a575f80fd5b6020850194505b8385101561159057845180835260209586019590935090910190611571565b979650505050505050565b8082018082111561065c5761065c61146d56fea2646970667358221220022bb587431beddd1b3a2d4e57eee388a80ee14cf23bcb0c201ec0029fc9cb7a64736f6c634300081a003360a0604052348015600e575f80fd5b506040516117d43803806117d4833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516117196100bb5f395f8181606e0152818160d7015281816101ee0152818161030001528181610888015281816108e10152818161095e015281816109b201528181610ac50152610af801526117195ff3fe608060405260043610610033575f3560e01c80632229d0b414610037578063481c6a751461005d57806391dd7346146100a8575b5f80fd5b61004a610045366004611286565b6100d4565b6040519081526020015b60405180910390f35b348015610068575f80fd5b506100907f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610054565b3480156100b3575f80fd5b506100c76100c23660046112f7565b6101e1565b6040516100549190611393565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060a00160405280336001600160a01b031681526020018681526020018881526020018781526020018581525060405160200161014491906113ef565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161016f9190611393565b5f604051808303815f875af115801561018a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101b19190810190611480565b8060200190518101906101c491906114f5565b90504780156101d8576101d85f3383610a04565b50949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610217575f80fd5b5f6102248385018561150c565b90505f61023c82604001515f0151835f015130610a9e565b925050505f610257836040015160200151845f015130610a9e565b92505050815f146102af5760405162461bcd60e51b815260206004820152601e60248201527f64656c74614265666f726530206973206e6f7420657175616c20746f2030000060448201526064015b60405180910390fd5b80156102fd5760405162461bcd60e51b815260206004820152601e60248201527f64656c74614265666f726531206973206e6f7420657175616c20746f2030000060448201526064016102a6565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3cd914c8560400151866060015187608001516040518463ffffffff1660e01b815260040161035a939291906115c4565b6020604051808303815f875af1158015610376573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039a91906114f5565b90505f6103b285604001515f0151865f015130610a9e565b925050505f6103cd866040015160200151875f015130610a9e565b9250505085606001515f01511561062f575f86606001516020015112156105125785606001516020015182121561047c5760405162461bcd60e51b815260206004820152604760248201527f64656c7461416674657230206973206e6f742067726561746572207468616e2060448201527f6f7220657175616c20746f20646174612e706172616d732e616d6f756e7453706064820152661958da599a595960ca1b608482015260a4016102a6565b816104878460801d90565b600f0b146104a75760405162461bcd60e51b81526004016102a69061160c565b5f81121561050d5760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657231206973206e6f742067726561746572207468616e2060448201526c06f7220657175616c20746f203609c1b60648201526084016102a6565b610878565b5f8213156105785760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657230206973206e6f74206c657373207468616e206f722060448201526c657175616c20746f207a65726f60981b60648201526084016102a6565b8061058384600f0b90565b600f0b146105a35760405162461bcd60e51b81526004016102a690611657565b85606001516020015181131561050d5760405162461bcd60e51b8152602060048201526044602482018190527f64656c7461416674657231206973206e6f74206c657373207468616e206f7220908201527f657175616c20746f20646174612e706172616d732e616d6f756e745370656369606482015263199a595960e21b608482015260a4016102a6565b5f866060015160200151121561075e578560600151602001518112156106cd5760405162461bcd60e51b815260206004820152604760248201527f64656c7461416674657231206973206e6f742067726561746572207468616e2060448201527f6f7220657175616c20746f20646174612e706172616d732e616d6f756e7453706064820152661958da599a595960ca1b608482015260a4016102a6565b806106d884600f0b90565b600f0b146106f85760405162461bcd60e51b81526004016102a690611657565b5f82121561050d5760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657230206973206e6f742067726561746572207468616e2060448201526c06f7220657175616c20746f203609c1b60648201526084016102a6565b5f8113156107c15760405162461bcd60e51b815260206004820152602a60248201527f64656c7461416674657231206973206e6f74206c657373207468616e206f72206044820152690657175616c20746f20360b41b60648201526084016102a6565b816107cc8460801d90565b600f0b146107ec5760405162461bcd60e51b81526004016102a69061160c565b8560600151602001518213156108785760405162461bcd60e51b8152602060048201526044602482018190527f64656c7461416674657230206973206e6f74206c657373207468616e206f7220908201527f657175616c20746f20646174612e706172616d732e616d6f756e745370656369606482015263199a595960e21b608482015260a4016102a6565b5f8212156108d15785516108d1907f0000000000000000000000000000000000000000000000000000000000000000906108b1856116a2565b6020808b0151015160408b0151516001600160a01b031693929190610b2a565b5f811215610936578551610936907f00000000000000000000000000000000000000000000000000000000000000009061090a846116a2565b8960200151602001518a60400151602001516001600160a01b0316610b2a90949392919063ffffffff16565b5f821315610986578551602087015151604088015151610986926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610df6565b5f8113156109da578551602080880151516040890151909101516109da926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610df6565b60408051602081018590520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610a37575f805f8085875af1905080610a3257610a326356cdd02560e11b610ec8565b610a98565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f60408201525080610a9857610a98632745a14f60e21b610ec8565b50505050565b5f8080610ab46001600160a01b03871686610ef5565b9250610ae96001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610ef5565b9150610b1f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610f84565b905093509350939050565b8015610bbf57836001600160a01b031663f5298aca84610b59886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610ba4575f80fd5b505af1158015610bb6573d5f803e3d5ffd5b50505050610def565b6001600160a01b038516610c3657836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af1158015610c0b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c3091906114f5565b50610def565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b158015610c76575f80fd5b505af1158015610c88573d5f803e3d5ffd5b505050506001600160a01b0383163014610d1a576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af1158015610cf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1491906116c8565b50610d8c565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610d66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8a91906116c8565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610dc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ded91906114f5565b505b5050505050565b80610e3857604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610b8d565b836001600160a01b031663156e29f684610e61886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610eab575f80fd5b505af1158015610ebd573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f6001600160a01b038316610f1557506001600160a01b038116316109fe565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610f59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7d91906114f5565b90506109fe565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610fd391815260200190565b602060405180830381865afa158015610fee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101291906114f5565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156110525761105261101b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156110815761108161101b565b604052919050565b6001600160a01b038116811461109d575f80fd5b50565b80356110ab81611089565b919050565b5f60a082840312156110c0575f80fd5b6110c861102f565b905081356110d581611089565b815260208201356110e581611089565b6020820152604082013562ffffff811681146110ff575f80fd5b60408201526060820135600281900b8114611118575f80fd5b6060820152611129608083016110a0565b608082015292915050565b801515811461109d575f80fd5b5f60608284031215611151575f80fd5b6040516060810167ffffffffffffffff811182821017156111745761117461101b565b604052905080823561118581611134565b815260208381013590820152604083013561119f81611089565b6040919091015292915050565b5f604082840312156111bc575f80fd5b6040805190810167ffffffffffffffff811182821017156111df576111df61101b565b60405290508082356111f081611134565b8152602083013561120081611134565b6020919091015292915050565b5f67ffffffffffffffff8211156112265761122661101b565b50601f01601f191660200190565b5f82601f830112611243575f80fd5b81356112566112518261120d565b611058565b81815284602083860101111561126a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80610160858703121561129a575f80fd5b6112a486866110b0565b93506112b38660a08701611141565b92506112c38661010087016111ac565b915061014085013567ffffffffffffffff8111156112df575f80fd5b6112eb87828801611234565b91505092959194509250565b5f8060208385031215611308575f80fd5b823567ffffffffffffffff81111561131e575f80fd5b8301601f8101851361132e575f80fd5b803567ffffffffffffffff811115611344575f80fd5b856020828401011115611355575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6113a56020830184611365565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528281015180511515604080850191909152910151151560608301528201515f9061143060808401826113ac565b506060830151805115156101208401526020810151610140840152604001516001600160a01b03166101608301526080830151610180808401526114786101a0840182611365565b949350505050565b5f60208284031215611490575f80fd5b815167ffffffffffffffff8111156114a6575f80fd5b8201601f810184136114b6575f80fd5b80516114c46112518261120d565b8181528560208385010111156114d8575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215611505575f80fd5b5051919050565b5f6020828403121561151c575f80fd5b813567ffffffffffffffff811115611532575f80fd5b82016101808185031215611544575f80fd5b61154c61102f565b813561155781611089565b815261156685602084016111ac565b602082015261157885606084016110b0565b604082015261158b856101008401611141565b606082015261016082013567ffffffffffffffff8111156115aa575f80fd5b6115b686828501611234565b608083015250949350505050565b6115ce81856113ac565b8251151560a0820152602083015160c082015260408301516001600160a01b031660e08201526101206101008201525f611012610120830184611365565b6020808252602b908201527f64656c74612e616d6f756e74302829206973206e6f7420657175616c20746f2060408201526a064656c74614166746572360ac1b606082015260800190565b6020808252602b908201527f64656c74612e616d6f756e74312829206973206e6f7420657175616c20746f2060408201526a64656c746141667465723160a81b606082015260800190565b5f600160ff1b82016116c257634e487b7160e01b5f52601160045260245ffd5b505f0390565b5f602082840312156116d8575f80fd5b81516113a58161113456fea2646970667358221220ab101dfe4b4748d245c1716f79d45f12181b0ade83665d9ec819f86559f0b77264736f6c634300081a00336080604052348015600e575f80fd5b506105a08061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c806332c961d91461005957806357eb1da714610081578063769323e314610089578063b08d3fe214610091578063e631bcbf146100d1575b5f80fd5b61006e610067366004610386565b60a0902090565b6040519081526020015b60405180910390f35b61006e600681565b61006e600481565b6100a461009f366004610423565b61011c565b604080516001600160801b039095168552600f9390930b6020850152918301526060820152608001610078565b6100e46100df36600461045e565b6101d2565b604080516001600160a01b03909516855260029390930b602085015262ffffff91821692840192909252166060820152608001610078565b5f805f805f61012b8787610284565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038a16906335fd631a906044015f60405180830381865afa158015610179573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101a09190810190610488565b602081015160408201516060909201516001600160801b0382169c60809290921d9b5091995090975095505050505050565b5f805f805f6101e0866102d8565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015610228573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024c9190610534565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f8061028f846102d8565b90505f61029d60048361054b565b60408051600287900b602082015290810182905290915060600160405160208183030381529060405280519060200120925050505b92915050565b6040515f906102f7908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561035157610351610314565b604052919050565b6001600160a01b038116811461036d575f80fd5b50565b8035600281900b8114610381575f80fd5b919050565b5f60a0828403128015610397575f80fd5b5060405160a0810167ffffffffffffffff811182821017156103bb576103bb610314565b60405282356103c981610359565b815260208301356103d981610359565b6020820152604083013562ffffff811681146103f3575f80fd5b604082015261040460608401610370565b6060820152608083013561041781610359565b60808201529392505050565b5f805f60608486031215610435575f80fd5b833561044081610359565b92506020840135915061045560408501610370565b90509250925092565b5f806040838503121561046f575f80fd5b823561047a81610359565b946020939093013593505050565b5f60208284031215610498575f80fd5b815167ffffffffffffffff8111156104ae575f80fd5b8201601f810184136104be575f80fd5b805167ffffffffffffffff8111156104d8576104d8610314565b8060051b6104e860208201610328565b91825260208184018101929081019087841115610503575f80fd5b6020850194505b838510156105295784518083526020958601959093509091019061050a565b979650505050505050565b5f60208284031215610544575f80fd5b5051919050565b808201808211156102d257634e487b7160e01b5f52601160045260245ffdfea26469706673582212200f59ae3b20597ee5b9c8afd86ef4272903aea11220ba5f5248dea7997a9f1cfe64736f6c634300081a003360e060405234801561000f575f80fd5b50604051610eea380380610eea83398101604081905261002e916101a1565b8282825f61003c84826102a2565b50600161004983826102a2565b5060ff81166080524660a05261005d61006c565b60c052506103cd945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161009c919061035c565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610127575f80fd5b81516001600160401b0381111561014057610140610104565b604051601f8201601f19908116603f011681016001600160401b038111828210171561016e5761016e610104565b604052818152838201602001851015610185575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f805f606084860312156101b3575f80fd5b83516001600160401b038111156101c8575f80fd5b6101d486828701610118565b602086015190945090506001600160401b038111156101f1575f80fd5b6101fd86828701610118565b925050604084015160ff81168114610213575f80fd5b809150509250925092565b600181811c9082168061023257607f821691505b60208210810361025057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561029d57805f5260205f20601f840160051c8101602085101561027b5750805b601f840160051c820191505b8181101561029a575f8155600101610287565b50505b505050565b81516001600160401b038111156102bb576102bb610104565b6102cf816102c9845461021e565b84610256565b6020601f821160018114610301575f83156102ea5750848201515b5f19600385901b1c1916600184901b17845561029a565b5f84815260208120601f198516915b828110156103305787850151825560209485019460019092019101610310565b508482101561034d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8083546103698161021e565b6001821680156103805760018114610395576103c2565b60ff19831686528115158202860193506103c2565b865f5260205f205f5b838110156103ba5781548882015260019091019060200161039e565b505081860193505b509195945050505050565b60805160a05160c051610af36103f75f395f61044201525f61040d01525f61013f0152610af35ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c806340c10f191161008857806395d89b411161006357806395d89b41146101cc578063a9059cbb146101d4578063d505accf146101e7578063dd62ed3e146101fc575f80fd5b806340c10f191461017b57806370a082311461018e5780637ecebe00146101ad575f80fd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610127578063313ce5671461013a5780633644e51514610173575b5f80fd5b6100d7610226565b6040516100e4919061083f565b60405180910390f35b6101006100fb36600461088f565b6102b1565b60405190151581526020016100e4565b61011960025481565b6040519081526020016100e4565b6101006101353660046108b7565b61031d565b6101617f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100e4565b61011961040a565b61010061018936600461088f565b610464565b61011961019c3660046108f1565b60036020525f908152604090205481565b6101196101bb3660046108f1565b60056020525f908152604090205481565b6100d7610478565b6101006101e236600461088f565b610485565b6101fa6101f5366004610911565b6104fb565b005b61011961020a36600461097e565b600460209081525f928352604080842090915290825290205481565b5f8054610232906109af565b80601f016020809104026020016040519081016040528092919081815260200182805461025e906109af565b80156102a95780601f10610280576101008083540402835291602001916102a9565b820191905f5260205f20905b81548152906001019060200180831161028c57829003601f168201915b505050505081565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061030b9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1981146103765761035283826109fb565b6001600160a01b0386165f9081526004602090815260408083203384529091529020555b6001600160a01b0385165f908152600360205260408120805485929061039d9084906109fb565b90915550506001600160a01b038085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103f79087815260200190565b60405180910390a3506001949350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461043f5761043a61073e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f61046f83836107d6565b50600192915050565b60018054610232906109af565b335f908152600360205260408120805483919083906104a59084906109fb565b90915550506001600160a01b0383165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061030b9086815260200190565b428410156105505760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f600161055b61040a565b6001600160a01b038a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610663573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116158015906106995750876001600160a01b0316816001600160a01b0316145b6106d65760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610547565b6001600160a01b039081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161076e9190610a0e565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546107e79190610aaa565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461088a575f80fd5b919050565b5f80604083850312156108a0575f80fd5b6108a983610874565b946020939093013593505050565b5f805f606084860312156108c9575f80fd5b6108d284610874565b92506108e060208501610874565b929592945050506040919091013590565b5f60208284031215610901575f80fd5b61090a82610874565b9392505050565b5f805f805f805f60e0888a031215610927575f80fd5b61093088610874565b965061093e60208901610874565b95506040880135945060608801359350608088013560ff81168114610961575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f806040838503121561098f575f80fd5b61099883610874565b91506109a660208401610874565b90509250929050565b600181811c908216806109c357607f821691505b6020821081036109e157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610317576103176109e7565b5f8083545f8160011c90506001821680610a2957607f821691505b602082108103610a4757634e487b7160e01b5f52602260045260245ffd5b808015610a5b5760018114610a7057610a9e565b60ff1984168752821515830287019450610a9e565b5f888152602090205f5b84811015610a9657815489820152600190910190602001610a7a565b505082870194505b50929695505050505050565b80820180821115610317576103176109e756fea2646970667358221220f4620711d0f8649f80fed98a6eb335b7806c86e0ebaba0b9fa57daf20d6ed2f364736f6c634300081a00336080604052348015600e575f80fd5b50604051610521380380610521833981016040819052602b91607b565b5f80546001600160a01b039485166001600160a01b031991821617909155600180549390941692169190911790915560025560af565b80516001600160a01b03811681146076575f80fd5b919050565b5f805f60608486031215608c575f80fd5b6093846061565b9250609f602085016061565b9150604084015190509250925092565b610465806100bc5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c806358dbbe811461005957806391b7f5ed14610089578063a035b1fe1461009e578063d004f0f7146100b5578063f5992699146100c8575b5f80fd5b60015461006c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61009c6100973660046103c4565b6100da565b005b6100a760025481565b604051908152602001610080565b61009c6100c33660046103db565b610115565b5f5461006c906001600160a01b031681565b60028190556040518181527ff347ee99503bf19c028bd6b18f3c676e82a9bb5b2bb5225aebe0fd62fd6a0d199060200160405180910390a150565b5f805481906001600160a01b039081169085160361015257506001546002546001600160a01b039091169061014b90849061037e565b91506101c2565b6001546001600160a01b039081169085160361018557505f546002546001600160a01b039091169061014b908490610399565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064015b60405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303815f875af1158015610212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102369190610410565b6102745760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016101b9565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303815f875af11580156102be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e29190610410565b6103205760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016101b9565b604080516001600160a01b03808716825283166020820152908101849052606081018390523360808201527fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d09060a00160405180910390a150505050565b5f6103928383670de0b6b3a76400006103a9565b9392505050565b5f61039283670de0b6b3a7640000845b5f825f1904841183021582026103bd575f80fd5b5091020490565b5f602082840312156103d4575f80fd5b5035919050565b5f80604083850312156103ec575f80fd5b82356001600160a01b0381168114610402575f80fd5b946020939093013593505050565b5f60208284031215610420575f80fd5b81518015158114610392575f80fdfea264697066735822122071f33bd4e906706fab2f1d579ad88e83e4a15cb735911cd69a3275ede2ed3ced64736f6c634300081a0033","sourceMap":"936:10725:53:-:0;;;1756:794;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1843:3;1827:20;;;;;:::i;:::-;508:25:57;;;496:2;481:18;1827:20:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1813:34:53;;;;;1866:40;;;;;:::i;:::-;-1:-1:-1;;;;;728:32:57;;;710:51;;698:2;683:18;1866:40:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1857:49:53;;;1946:11;;1929:29;;;;;:::i;:::-;-1:-1:-1;;;;;728:32:57;;;710:51;;698:2;683:18;1929:29:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1916:42:53;;;1978:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1968:23:53;;;2014:37;;2048:2;;2014:37;;;:::i;:::-;1110:2:57;1092:21;;;1149:1;1129:18;;;1122:29;-1:-1:-1;;;1182:3:57;1167:19;;1160:40;1238:3;1231:4;1216:20;;1209:33;;;1279:1;1258:19;;;1251:30;-1:-1:-1;;;1312:3:57;1297:19;;1290:33;1407:4;1395:17;;;-1:-1:-1;1375:18:57;;1368:45;1355:3;1340:19;2014:37:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2002:49:53;;;2073:37;;2107:2;;2073:37;;;:::i;:::-;1762:2:57;1744:21;;;1801:1;1781:18;;;1774:29;-1:-1:-1;;;1834:3:57;1819:19;;1812:40;1890:3;1883:4;1868:20;;1861:33;;;1931:1;1910:19;;;1903:30;-1:-1:-1;;;1964:3:57;1949:19;;1942:33;2059:4;2047:17;;;-1:-1:-1;2027:18:57;;2020:45;2007:3;1992:19;2073:37:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2061:49:53;;;;;;;2125:9;;:21;;;;2121:99;;;2188:9;;;2199;;;-1:-1:-1;;;;;2162:47:53;;;;;;;;;;2121:99;2263:9;;2283;;2295:12;2236:72;;;;;:::i;:::-;-1:-1:-1;;;;;2296:32:57;;;2278:51;;2365:32;;;;2360:2;2345:18;;2338:60;2429:2;2414:18;;2407:34;2266:2;2251:18;2236:72:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2230:78:53;;;;;2327:9;;:51;;-1:-1:-1;;;2327:51:53;;2350:4;2327:51;;;2653::57;2357:20:53;2720:18:57;;;2713:34;2327:14:53;;;;;2626:18:57;;2327:51:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2319:107;;;;-1:-1:-1;;;2319:107:53;;3242:2:57;2319:107:53;;;3224:21:57;3281:2;3261:18;;;3254:30;3320:34;3300:18;;;3293:62;-1:-1:-1;;;3371:18:57;;;3364:41;3422:19;;2319:107:53;;;;;;;;;2444:9;;:51;;-1:-1:-1;;;2444:51:53;;2467:4;2444:51;;;2653::57;2474:20:53;2720:18:57;;;2713:34;-1:-1:-1;;;;;2444:14:53;;;;;;2626:18:57;;2444:51:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2436:107;;;;-1:-1:-1;;;2436:107:53;;3654:2:57;2436:107:53;;;3636:21:57;3693:2;3673:18;;;3666:30;3732:34;3712:18;;;3705:62;-1:-1:-1;;;3783:18:57;;;3776:41;3834:19;;2436:107:53;3452:407:57;2436:107:53;1756:794;;936:10725;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:343:57:-;93:6;101;154:2;142:9;133:7;129:23;125:32;122:52;;;170:1;167;160:12;122:52;-1:-1:-1;;215:16:57;;321:2;306:18;;;300:25;215:16;;300:25;;-1:-1:-1;14:343:57:o;2758:277::-;2825:6;2878:2;2866:9;2857:7;2853:23;2849:32;2846:52;;;2894:1;2891;2884:12;2846:52;2926:9;2920:16;2979:5;2972:13;2965:21;2958:5;2955:32;2945:60;;3001:1;2998;2991:12;2945:60;3024:5;2758:277;-1:-1:-1;;;2758:277:57:o;3452:407::-;936:10725:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106100cb575f3560e01c8063542524dd1161008857806391b7f5ed1161006357806391b7f5ed1461029057806396f5e27c146102a3578063b0f479a1146102b6578063c7b8e15d146102dc575f80fd5b8063542524dd1461025d57806357eb1da7146102475780636af577411461027d575f80fd5b806301480703146100cf57806306ba06fa14610169578063100d3f741461017e57806314ee3677146101bb578063182148ef146101ce5780632ba31c5314610247575b5f80fd5b6100d76102e4565b604080518251600290810b82526020808501516001600160a01b03908116828501528585015181168486015260608087015181860152608080880151805184168288015293840151831660a0808801919091529684015162ffffff1660c08701529083015190930b60e08501529101518116610100830152919092015116610120820152610140015b60405180910390f35b61017c61017736600461187e565b6105b8565b005b61019161018c3660046118e1565b610a2c565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610160565b61017c6101c9366004611950565b610b8f565b5f5460015460028054610207936001600160a01b03908116938082169362ffffff600160a01b83041693600160b81b909204900b911685565b604080516001600160a01b039687168152948616602086015262ffffff9093169284019290925260020b606083015291909116608082015260a001610160565b61024f600681565b604051908152602001610160565b610265611173565b6040516001600160a01b039091168152602001610160565b61017c61028b36600461197b565b611195565b61017c61029e366004611950565b611300565b61017c6102b1366004611a77565b611371565b7f0000000000000000000000000000000000000000000000000000000000000000610265565b6102656113ea565b6040805160c0810182525f80825260208083018290528284018290526060808401839052845160a080820187528482529281018490528086018490529081018390526080808201849052840152820181905291516332c961d960e01b815290919081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e631bcbf907f00000000000000000000000000000000000000000000000000000000000000009083906332c961d9906103b0908790600401611ae6565b602060405180830381865afa1580156103cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ef9190611afa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610436573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045a9190611b11565b5050915091506040518060c001604052808260020b8152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561050e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105329190611afa565b81526040805160a0810182525f546001600160a01b03908116825260015480821660208481019190915262ffffff600160a01b83041684860152600160b81b909104600290810b606085015254821660808401528401919091527f0000000000000000000000000000000000000000000000000000000000000000169101529392505050565b5f831315610779576040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af115801561062a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064e9190611b6d565b61069f5760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637930206661696c6564000000000000000060448201526064015b60405180910390fd5b6040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061072d9190611b6d565b6107795760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637931206661696c656400000000000000006044820152606401610696565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610805573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108299190611b6d565b6108755760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c65640000006044820152606401610696565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610901573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109259190611b6d565b6109715760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c65640000006044820152606401610696565b60408051608081018252600284810b825283900b60208201528082018590525f606082018190529151632d35e7ed60e11b815290916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691635a6bcfda916109e5918590600401611b8c565b6020604051808303815f875af1158015610a01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a259190611afa565b5050505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015610b02575f610a658a5f0385620f424003620f42406113fa565b905082610a7e57610a798d8d8d6001611497565b610a8b565b610a8b8c8e8d60016114e3565b9650868110610abf578b9750620f42408414610ab657610ab1878586620f4240036115a8565b610ab8565b865b9450610ad8565b809650610ace8d8c83866115d8565b9750868a5f030394505b82610aee57610ae98d898d5f6114e3565b610afa565b610afa888e8d5f611497565b955050610b80565b81610b1857610b138c8c8c5f6114e3565b610b24565b610b248b8d8c5f611497565b9450848910610b35578a9650610b47565b889450610b448c8b878561162f565b96505b81610b5e57610b598c888c6001611497565b610b6b565b610b6b878d8c60016114e3565b9550610b7d868485620f4240036115a8565b93505b50505095509550955095915050565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3f9190611b6d565b610c8b5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c65640000006044820152606401610696565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610d17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3b9190611b6d565b610d875760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c65640000006044820152606401610696565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e631bcbf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b8152600401610e259190611ae6565b602060405180830381865afa158015610e40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e649190611afa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610eab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ecf9190611b11565b5050915091505f610f0a836001600160a01b0316670de0b6b3a7640000610ef69190611bf1565b846001600160a01b0316600160c01b6113fa565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8d9190611afa565b9050808211156110795760408051606081018252600180825260208201889052915f91908101610fc36401000276a36001611c27565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b4916110309186908690600401611c46565b6020604051808303815f875af115801561104c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110709190611afa565b50505050610a25565b80821015610a2557604080516060810182525f808252602082018890529182919081016110bb600173fffd8963efd1fc6a506488495d951d5263988d26611c08565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b4916111289186908690600401611c46565b6020604051808303815f875af1158015611144573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111689190611afa565b505050505050505050565b611192600173fffd8963efd1fc6a506488495d951d5263988d26611c08565b81565b6040805160a0810182527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168083527f000000000000000000000000000000000000000000000000000000000000000082166020840181905262ffffff8a811685870181905260028b810b60608801528a861660809097018790525f80546001600160a01b03199081169096178155600180546001600160b81b031916909517600160a01b9093029290921762ffffff60b81b1916600160b81b938d16939093029290921790925580549092169093179055915163695c5bf560e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695c5bf5916112b89186908690600401611ca6565b6020604051808303815f875af11580156112d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f89190611cfb565b505050505050565b6040516391b7f5ed60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391b7f5ed906024015f604051808303815f87803b15801561135f575f80fd5b505af1158015610a25573d5f803e3d5ffd5b60405163d004f0f760e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d004f0f7906044015f604051808303815f87803b1580156113d8575f80fd5b505af11580156112f8573d5f803e3d5ffd5b6111926401000276a36001611c27565b5f838302815f1985870982811083820303915050808411611419575f80fd5b805f0361142b57508290049050611490565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b0385166114ca8184846113fa565b9350845f83858409111684019350505050949350505050565b5f836001600160a01b0316856001600160a01b03161115611502579293925b6001600160a01b03851661151c5762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b03868603168361156f57866001600160a01b031661155c8383896001600160a01b03166113fa565b8161156957611569611d16565b0461159b565b61159b6115868383896001600160a01b03166115a8565b886001600160a01b0316808204910615150190565b925050505b949350505050565b5f6115b48484846113fa565b905081806115c4576115c4611d16565b838509156114905760010180611490575f80fd5b5f6001600160801b038416156001600160a01b03861615171561160257634f2461b85f526004601cfd5b81611619576116148585856001611672565b611626565b611626858585600161175d565b95945050505050565b5f6001600160801b038416156001600160a01b03861615171561165957634f2461b85f526004601cfd5b8161166a576116148585855f61175d565b6116268585855f5b5f81156116e2575f6001600160a01b038411156116a6576116a184600160601b876001600160801b03166113fa565b6116bd565b6116bd6001600160801b038616606086901b611d2a565b90506116da6116d5826001600160a01b038916611d49565b61183f565b9150506115a0565b5f6001600160a01b0384111561170f5761170a84600160601b876001600160801b03166115a8565b61172c565b61172c606085901b6001600160801b038716808204910615150190565b9050806001600160a01b0387161161174b57634323a5555f526004601cfd5b6001600160a01b0386160390506115a0565b5f825f0361176c5750836115a0565b600160601b600160e01b03606085901b1682156117fe576001600160a01b038616848102908582816117a0576117a0611d16565b04036117d0578181018281106117ce576117c483896001600160a01b0316836115a8565b93505050506115a0565b505b506116da81856117e96001600160a01b038a1683611d2a565b6117f39190611d49565b808204910615150190565b6001600160a01b0386168481029085820414818311166118255763f5c787f15f526004601cfd5b8082036117c46116d5846001600160a01b038b16846115a8565b806001600160a01b0381168114611860576118606393dafdf160e01b611865565b919050565b805f5260045ffd5b8060020b811461187b575f80fd5b50565b5f805f60608486031215611890575f80fd5b8335925060208401356118a28161186d565b915060408401356118b28161186d565b809150509250925092565b6001600160a01b038116811461187b575f80fd5b62ffffff8116811461187b575f80fd5b5f805f805f60a086880312156118f5575f80fd5b8535611900816118bd565b94506020860135611910816118bd565b935060408601356001600160801b038116811461192b575f80fd5b9250606086013591506080860135611942816118d1565b809150509295509295909350565b5f60208284031215611960575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f805f805f60a0868803121561198f575f80fd5b853561199a816118d1565b945060208601356119aa8161186d565b935060408601356119ba816118bd565b925060608601356119ca816118bd565b9150608086013567ffffffffffffffff8111156119e5575f80fd5b8601601f810188136119f5575f80fd5b803567ffffffffffffffff811115611a0f57611a0f611967565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611a3e57611a3e611967565b6040528181528282016020018a1015611a55575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b5f8060408385031215611a88575f80fd5b8235611a93816118bd565b946020939093013593505050565b80546001600160a01b0390811683526001820154808216602085015260a081901c62ffffff16604085015260b81c600290810b60608501529091015416608090910152565b60a08101611af48284611aa1565b92915050565b5f60208284031215611b0a575f80fd5b5051919050565b5f805f8060808587031215611b24575f80fd5b8451611b2f816118bd565b6020860151909450611b408161186d565b6040860151909350611b51816118d1565b6060860151909250611b62816118d1565b939692955090935050565b5f60208284031215611b7d575f80fd5b81518015158114611490575f80fd5b611b968184611aa1565b8151600290810b60a08301526020830151900b60c0820152604082015160e082015260609091015161010082015261014061012082018190525f9082015261016001919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611af457611af4611bdd565b6001600160a01b038281168282160390811115611af457611af4611bdd565b6001600160a01b038181168382160190811115611af457611af4611bdd565b611c508185611aa1565b8251151560a082015260208084015160c08301526040909301516001600160a01b031660e082015281511515610100820152910151151561012082015261016061014082018190525f9082015261018001919050565b611cb08185611aa1565b60018060a01b03831660a082015260e060c08201525f82518060e0840152806020850161010085015e5f6101008285010152610100601f19601f830116840101915050949350505050565b5f60208284031215611d0b575f80fd5b81516114908161186d565b634e487b7160e01b5f52601260045260245ffd5b5f82611d4457634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115611af457611af4611bdd56fea2646970667358221220ac598dbc9802d34d8779520416b36bf01582f124c1671ffbabe2fc31888f9de064736f6c634300081a0033","sourceMap":"936:10725:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2654:422;;;:::i;:::-;;;;352:13:57;;349:1;338:28;;;320:47;;427:4;415:17;;;409:24;-1:-1:-1;;;;;405:50:57;;;383:20;;;376:80;504:17;;;498:24;494:50;;472:20;;;465:80;601:4;589:17;;;583:24;561:20;;;554:54;655:4;643:17;;;637:24;703:19;;699:45;;677:20;;;670:75;792:23;;;786:30;782:56;;443:3;761:19;;;754:85;;;;886:23;;;880:30;912:8;876:45;870:3;855:19;;848:74;979:23;;;973:30;959:45;;;953:3;938:19;;931:74;1052:23;;1046:30;1042:56;;1036:3;1021:19;;1014:85;1136:16;;;;1130:23;80:31;1212:6;1197:22;;68:44;307:3;292:19;2654:422:53;;;;;;;;5420:854;;;;;;:::i;:::-;;:::i;:::-;;8208:3451;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3217:32:57;;;3199:51;;3281:2;3266:18;;3259:34;;;;3309:18;;;3302:34;3367:2;3352:18;;3345:34;3186:3;3171:19;8208:3451:53;2968:417:57;3275:1685:53;;;;;;:::i;:::-;;:::i;1230:22::-;;;;;;;;;;-1:-1:-1;;;;;1230:22:53;;;;;;;;;-1:-1:-1;;;1230:22:53;;;;-1:-1:-1;;;1230:22:53;;;;;;;;;;;;;-1:-1:-1;;;;;3966:32:57;;;3948:51;;4035:32;;;4030:2;4015:18;;4008:60;4116:8;4104:21;;;4084:18;;;4077:49;;;;4173:1;4162:21;4157:2;4142:18;;4135:49;4221:32;;;;4215:3;4200:19;;4193:61;3935:3;3920:19;1230:22:53;3620:640:57;1523:44:53;;1566:1;1523:44;;;;;4411:25:57;;;4399:2;4384:18;1523:44:53;4265:177:57;1385:69:53;;;:::i;:::-;;;-1:-1:-1;;;;;4611:32:57;;;4593:51;;4581:2;4566:18;1385:69:53;4447:203:57;4966:448:53;;;;;;:::i;:::-;;:::i;3082:76::-;;;;;;:::i;:::-;;:::i;3164:105::-;;;;;;:::i;:::-;;:::i;2556:92::-;2634:6;2556:92;;1310:69;;;:::i;2654:422::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:21:53;;-1:-1:-1;;;2796:21:53;;-1:-1:-1;;;;;;;;;;2766:7:53;:16;;;;2783:11;;2766:16;;2796:12;;:21;;-1:-1:-1;;2796:21:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2766:52;;-1:-1:-1;;;;;;2766:52:53;;;;;;;-1:-1:-1;;;;;8574:32:57;;;2766:52:53;;;8556:51:57;8623:18;;;8616:34;8529:18;;2766:52:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2727:91;;;;;;2836:233;;;;;;;;2870:4;2836:233;;;;;;2902:12;-1:-1:-1;;;;;2836:233:53;;;;;2945:11;-1:-1:-1;;;;;2836:233:53;;;;;2981:3;-1:-1:-1;;;;;2981:9:53;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2836:233;;;;;;;;;;3012:7;2836:233;-1:-1:-1;;;;;2836:233:53;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2836:233:53;;;;;;;-1:-1:-1;;;2836:233:53;;;;;;;;;;;;;;;;;;;;;;;;3050:7;2836:233;;;;2829:240;2654:422;-1:-1:-1;;;2654:422:53:o;5420:854::-;5537:1;5520:14;:18;5516:245;;;5562:54;;-1:-1:-1;;;5562:54:53;;5585:4;5562:54;;;8556:51:57;8623:18;;;8616:34;;;5562:9:53;-1:-1:-1;;;;;5562:14:53;;;;8529:18:57;;5562:54:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5554:91;;;;-1:-1:-1;;;5554:91:53;;10264:2:57;5554:91:53;;;10246:21:57;10303:2;10283:18;;;10276:30;10342:26;10322:18;;;10315:54;10386:18;;5554:91:53;;;;;;;;;5667:54;;-1:-1:-1;;;5667:54:53;;5690:4;5667:54;;;8556:51:57;8623:18;;;8616:34;;;5667:9:53;-1:-1:-1;;;;;5667:14:53;;;;8529:18:57;;5667:54:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5659:91;;;;-1:-1:-1;;;5659:91:53;;10617:2:57;5659:91:53;;;10599:21:57;10656:2;10636:18;;;10629:30;10695:26;10675:18;;;10668:54;10739:18;;5659:91:53;10415:348:57;5659:91:53;5779:53;;-1:-1:-1;;;5779:53:53;;-1:-1:-1;;;;;5805:6:53;8574:32:57;;5779:53:53;;;8556:51:57;-1:-1:-1;;8623:18:57;;;8616:34;5779:9:53;:17;;;;8529:18:57;;5779:53:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5771:95;;;;-1:-1:-1;;;5771:95:53;;10970:2:57;5771:95:53;;;10952:21:57;11009:2;10989:18;;;10982:30;11048:31;11028:18;;;11021:59;11097:18;;5771:95:53;10768:353:57;5771:95:53;5884:53;;-1:-1:-1;;;5884:53:53;;-1:-1:-1;;;;;5910:6:53;8574:32:57;;5884:53:53;;;8556:51:57;-1:-1:-1;;8623:18:57;;;8616:34;5884:9:53;:17;;;;8529:18:57;;5884:53:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5876:95;;;;-1:-1:-1;;;5876:95:53;;11328:2:57;5876:95:53;;;11310:21:57;11367:2;11347:18;;;11340:30;11406:31;11386:18;;;11379:59;11455:18;;5876:95:53;11126:353:57;5876:95:53;6033:180;;;;;;;;;;;;;;;;;;;;;;;;;;;5982:48;6033:180;;;;;;6224:43;;-1:-1:-1;;;6224:43:53;;6033:180;;-1:-1:-1;;;;;6224:6:53;:22;;;;:43;;6033:180;;6224:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5506:768;5420:854;;;:::o;8208:3451::-;8418:24;;;;8534:26;;;-1:-1:-1;;;;;8617:41:53;;;;;;;;8687:19;;;8721:2922;;;;8752:30;8805:81;8830:15;8829:16;;8863:8;1300:3;8848:23;1300:3;8805:15;:81::i;:::-;8752:134;;8915:10;:230;;9058:87;9088:19;9109:18;9129:9;9140:4;9058:29;:87::i;:::-;8915:230;;;8948:87;8978:18;8998:19;9019:9;9030:4;8948:29;:87::i;:::-;8904:241;;9193:8;9167:22;:34;9163:969;;9308:18;9289:37;;1300:3;9360:8;:24;:256;;9546:70;9572:8;9582;9607;1300:3;9592:23;9546:25;:70::i;:::-;9360:256;;;9411:8;9360:256;9348:268;;9163:969;;;9726:22;9715:33;;9789:153;9854:19;9875:9;9886:22;9910:10;9789:39;:153::i;:::-;9770:172;;10105:8;10086:15;10085:16;;10077:36;10065:48;;9163:969;10161:10;:228;;10303:86;10333:19;10354:16;10372:9;10383:5;10303:29;:86::i;:::-;10161:228;;;10194:86;10224:16;10242:19;10263:9;10274:5;10194:29;:86::i;:::-;10149:240;;8734:1670;8721:2922;;;10440:10;:232;;10584:88;10614:19;10635:18;10655:9;10666:5;10584:29;:88::i;:::-;10440:232;;;10473:88;10503:18;10523:19;10544:9;10555:5;10473:29;:88::i;:::-;10428:244;;10722:9;10702:15;10694:37;10690:516;;10839:18;10820:37;;10690:516;;;11011:15;10991:36;;11092:95;11133:19;11154:9;11165;11176:10;11092:40;:95::i;:::-;11049:138;;10690:516;11234:10;:226;;11375:85;11405:19;11426:16;11444:9;11455:4;11375:29;:85::i;:::-;11234:226;;;11267:85;11297:16;11315:19;11336:9;11347:4;11267:29;:85::i;:::-;11223:237;;11558:70;11584:8;11594;11619;1300:3;11604:23;11558:25;:70::i;:::-;11546:82;;8721:2922;8510:3143;;;8208:3451;;;;;;;;;;:::o;3275:1685::-;3337:57;;-1:-1:-1;;;3337:57:53;;-1:-1:-1;;;;;3363:10:53;8574:32:57;;3337:57:53;;;8556:51:57;-1:-1:-1;;8623:18:57;;;8616:34;3337:9:53;:17;;;;8529:18:57;;3337:57:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3329:99;;;;-1:-1:-1;;;3329:99:53;;10970:2:57;3329:99:53;;;10952:21:57;11009:2;10989:18;;;10982:30;11048:31;11028:18;;;11021:59;11097:18;;3329:99:53;10768:353:57;3329:99:53;3446:57;;-1:-1:-1;;;3446:57:53;;-1:-1:-1;;;;;3472:10:53;8574:32:57;;3446:57:53;;;8556:51:57;-1:-1:-1;;8623:18:57;;;8616:34;3446:9:53;:17;;;;8529:18:57;;3446:57:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3438:99;;;;-1:-1:-1;;;3438:99:53;;11328:2:57;3438:99:53;;;11310:21:57;11367:2;11347:18;;;11340:30;11406:31;11386:18;;;11379:59;11455:18;;3438:99:53;11126:353:57;3438:99:53;3549:20;3571:10;3587:7;-1:-1:-1;;;;;3587:16:53;;3604:11;3617:7;-1:-1:-1;;;;;3617:12:53;;3630:7;3617:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3587:52;;-1:-1:-1;;;;;;3587:52:53;;;;;;;-1:-1:-1;;;;;8574:32:57;;;3587:52:53;;;8556:51:57;8623:18;;;8616:34;8529:18;;3587:52:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3548:91;;;;;;3658:20;3681:80;3705:12;-1:-1:-1;;;;;3697:21:53;3721:6;3697:30;;;;:::i;:::-;3737:12;-1:-1:-1;;;;;3729:21:53;-1:-1:-1;;;3681:15:53;:80::i;:::-;3658:103;;3771:16;3790:3;-1:-1:-1;;;;;3790:9:53;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3771:30;;3831:8;3816:12;:23;3812:1142;;;3932:222;;;;;;;;3873:4;3932:222;;;;;;;;;3873:4;3855:15;;3932:222;;;1352:27;1586:10:40;1378:1:53;1352:27;:::i;:::-;-1:-1:-1;;;;;3932:222:53;;;;;;4233:70;;;;;;;;4169:45;4233:70;;;;;;;;;4318:50;;-1:-1:-1;;;4318:50:53;;3892:262;;-1:-1:-1;4233:70:53;4318:10;:15;;;;;;:50;;3892:262;;4233:70;;4318:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3841:539;;;3812:1142;;;4405:8;4390:12;:23;4386:568;;;4507:222;;;;;;;;4429:15;4507:222;;;;;;;;;4429:15;;;4507:222;;;1427:27;1453:1;1766:49:40;1427:27:53;:::i;:::-;-1:-1:-1;;;;;4507:222:53;;;;;;4808:70;;;;;;;;4744:45;4808:70;;;;;;;;;4893:50;;-1:-1:-1;;;4893:50:53;;4467:262;;-1:-1:-1;4808:70:53;4893:10;:15;;;;;;:50;;4467:262;;4808:70;;4893:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4415:539;;;3319:1641;;;;3275:1685;:::o;1385:69::-;1427:27;1453:1;1766:49:40;1427:27:53;:::i;:::-;1385:69;:::o;4966:448::-;5116:225;;;;;;;;5171:9;-1:-1:-1;;;;;5116:225:53;;;;;;5229:9;5116:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5106:235:53;;-1:-1:-1;;;;;;5106:235:53;;;;;;;;-1:-1:-1;5106:235:53;;-1:-1:-1;;;;;;5106:235:53;;;;-1:-1:-1;;;5106:235:53;;;;;;;-1:-1:-1;;;;5106:235:53;-1:-1:-1;;;5106:235:53;;;;;;;;;;;;;;;;;;;;;;;;5352:55;;-1:-1:-1;;;5352:55:53;;:11;:22;;;;;;:55;;5384:12;;5398:8;;5352:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4966:448;;;;;:::o;3082:76::-;3132:19;;-1:-1:-1;;;3132:19:53;;;;;4411:25:57;;;3132:3:53;-1:-1:-1;;;;;3132:12:53;;;;4384:18:57;;3132:19:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3164:105;3235:27;;-1:-1:-1;;;3235:27:53;;-1:-1:-1;;;;;8574:32:57;;;3235:27:53;;;8556:51:57;8623:18;;;8616:34;;;3235:3:53;:8;;;;8529:18:57;;3235:27:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1310:69;1352:27;1586:10:40;1378:1:53;1352:27;:::i;741:4141:25:-;823:14;1212:5;;;823:14;-1:-1:-1;;1216:1:25;1212;1400:20;1473:5;1469:2;1466:13;1458:5;1454:2;1450:14;1446:34;1437:43;;;1633:5;1619:11;:19;1611:28;;;;;;1720:5;1729:1;1720:10;1716:177;;-1:-1:-1;1807:23:25;;;;-1:-1:-1;1865:13:25;;1716:177;2193:17;2293:11;2290:1;2287;2280:25;2701:12;2717:15;;;2716:31;;2869:22;;;;;3776:1;3757;:15;;3756:21;;4019:17;;;4015:21;;4008:28;4081:17;;;4077:21;;4070:28;4144:17;;;4140:21;;4133:28;4207:17;;;4203:21;;4196:28;4270:17;;;4266:21;;4259:28;4334:17;;;4330:21;;;4323:28;3313:12;;;;3309:23;;;3334:1;3305:31;2454:20;;;2443:32;;;3372:12;;;;2501:21;;;;3029:16;;;;3363:21;;;;4827:11;;;;;-1:-1:-1;;741:4141:25;;;;;;:::o;11602:1078:36:-;11753:15;-1:-1:-1;;;;;10731:50:36;;;10679;;;10675:107;10862:3;10858:14;;;11112:15;;;11102:26;-1:-1:-1;;;;;;;;12020:50:36;;12476:51;12020:50;11102:26;348:27:24;12476:15:36;:51::i;:::-;12466:61;;12655:7;12651:1;12637:11;12626:9;12614:10;12607:42;12604:49;12600:63;12591:7;12587:77;12576:88;;12562:112;;;11602:1078;;;;;;:::o;9411:1050::-;9562:7;9629:13;-1:-1:-1;;;;;9613:29:36;:13;-1:-1:-1;;;;;9613:29:36;;9609:98;;;9678:13;;9693;9609:98;-1:-1:-1;;;;;9853:13:36;9849:62;9839:205;;9945:10;9942:1;9935:21;10021:4;10015;10008:18;9839:205;-1:-1:-1;;;;;;;308:2:24;10093:45:36;;;;-1:-1:-1;;;;;10173:29:36;;;10152:50;10224:7;:220;;10431:13;-1:-1:-1;;;;;10374:70:36;:54;10390:10;10402;10414:13;-1:-1:-1;;;;;10374:54:36;:15;:54::i;:::-;:70;;;;;:::i;:::-;;10224:220;;;10250:105;10275:64;10301:10;10313;10325:13;-1:-1:-1;;;;;10275:64:36;:25;:64::i;:::-;10341:13;-1:-1:-1;;;;;10250:105:36;656:9:42;;;670;;667:16;;652:32;;491:223;10250:105:36;10217:227;;;;9411:1050;;;;;;;:::o;5164:296:25:-;5256:14;5315:25;5322:1;5325;5328:11;5315:6;:25::i;:::-;5306:34;;5371:11;5358:25;;;;;:::i;:::-;5368:1;5365;5358:25;:30;5354:90;;5416:8;;:12;5408:21;;;;;6473:909:36;6627:7;-1:-1:-1;;;;;6900:9:36;6896:50;6889:58;-1:-1:-1;;;;;6817:8:36;6813:57;6806:65;6786:175;6783:309;;;6990:10;6987:1;6980:21;7073:4;7067;7060:18;6783:309;7185:10;:190;;7299:76;7339:8;7349:9;7360:8;7370:4;7299:39;:76::i;:::-;7185:190;;;7210:74;7248:8;7258:9;7269:8;7279:4;7210:37;:74::i;:::-;7178:197;6473:909;-1:-1:-1;;;;;6473:909:36:o;7951:::-;8107:7;-1:-1:-1;;;;;8380:9:36;8376:50;8369:58;-1:-1:-1;;;;;8297:8:36;8293:57;8286:65;8266:175;8263:309;;;8470:10;8467:1;8460:21;8553:4;8547;8540:18;8263:309;8659:10;:194;;8777:76;8815:8;8825:9;8836;8847:5;8777:37;:76::i;8659:194::-;8684:78;8724:8;8734:9;8745;8756:5;4451:1450;4610:7;4791:3;4787:1108;;;4810:16;-1:-1:-1;;;;;4847:27:36;;;:172;;4967:52;4983:6;-1:-1:-1;;;5009:9:36;-1:-1:-1;;;;;4967:52:36;:15;:52::i;:::-;4847:172;;;4897:47;-1:-1:-1;;;;;4897:47:36;;308:2:24;4898:33:36;;;4897:47;:::i;:::-;4810:223;-1:-1:-1;5055:42:36;5056:28;4810:223;-1:-1:-1;;;;;5056:17:36;;:28;:::i;:::-;5055:40;:42::i;:::-;5048:49;;;;;4787:1108;5128:16;-1:-1:-1;;;;;5165:27:36;;;:205;;5308:62;5334:6;-1:-1:-1;;;5360:9:36;-1:-1:-1;;;;;5308:62:36;:25;:62::i;:::-;5165:205;;;5215:70;308:2:24;5240:33:36;;;-1:-1:-1;;;;;5215:70:36;;656:9:42;;;670;;667:16;;652:32;;491:223;5215:70:36;5128:256;;5596:8;-1:-1:-1;;;;;5541:8:36;5537:57;5534:71;5524:220;;5639:10;5636:1;5629:21;5721:4;5715;5708:18;5524:220;-1:-1:-1;;;;;5850:19:36;;;;-1:-1:-1;5835:35:36;;1548:2065;1705:7;1844:6;1854:1;1844:11;1840:32;;-1:-1:-1;1864:8:36;1857:15;;1840:32;-1:-1:-1;;;;;;;308:2:24;1903:45:36;;;;1959:1648;;;;-1:-1:-1;;;;;2028:17:36;;;;;;:6;:17;:6;2067:16;;;;:::i;:::-;;:28;2063:345;;2141:20;;;2187:25;;;2183:207;;2306:60;2332:10;2344:8;-1:-1:-1;;;;;2306:60:36;2354:11;2306:25;:60::i;:::-;2291:76;;;;;;;2183:207;2097:311;2063:345;-1:-1:-1;2501:70:36;2526:10;2564:6;2539:21;-1:-1:-1;;;;;2539:21:36;;2526:10;2539:21;:::i;:::-;2538:32;;;;:::i;:::-;656:9:42;;;670;;667:16;;652:32;;491:223;1959:1648:36;-1:-1:-1;;;;;2649:17:36;;;;;;3082:20;;;3079:83;3192:23;;;3046:195;3011:397;;3300:10;3297:1;3290:21;3381:4;3375;3368:18;3011:397;3465:20;;;3510:72;:60;3465:10;-1:-1:-1;;;;;3510:60:36;;3465:20;3510:25;:60::i;473:155:35:-;559:1;-1:-1:-1;;;;;575:6:35;;;;571:50;;583:38;-1:-1:-1;;;583:36:35;:38::i;:::-;473:155;;;:::o;606:163:22:-;716:8;713:1;706:19;748:4;745:1;738:15;1231:118:57;1318:5;1315:1;1304:20;1297:5;1294:31;1284:59;;1339:1;1336;1329:12;1284:59;1231:118;:::o;1354:499::-;1426:6;1434;1442;1495:2;1483:9;1474:7;1470:23;1466:32;1463:52;;;1511:1;1508;1501:12;1463:52;1556:23;;;-1:-1:-1;1655:2:57;1640:18;;1627:32;1668:31;1627:32;1668:31;:::i;:::-;1718:7;-1:-1:-1;1777:2:57;1762:18;;1749:32;1790:31;1749:32;1790:31;:::i;:::-;1840:7;1830:17;;;1354:499;;;;;:::o;1858:131::-;-1:-1:-1;;;;;1933:31:57;;1923:42;;1913:70;;1979:1;1976;1969:12;1994:119;2079:8;2072:5;2068:20;2061:5;2058:31;2048:59;;2103:1;2100;2093:12;2118:845;2211:6;2219;2227;2235;2243;2296:3;2284:9;2275:7;2271:23;2267:33;2264:53;;;2313:1;2310;2303:12;2264:53;2352:9;2339:23;2371:31;2396:5;2371:31;:::i;:::-;2421:5;-1:-1:-1;2478:2:57;2463:18;;2450:32;2491:33;2450:32;2491:33;:::i;:::-;2543:7;-1:-1:-1;2602:2:57;2587:18;;2574:32;-1:-1:-1;;;;;2637:48:57;;2625:61;;2615:89;;2700:1;2697;2690:12;2615:89;2723:7;-1:-1:-1;2803:2:57;2788:18;;2775:32;;-1:-1:-1;2885:3:57;2870:19;;2857:33;2899:32;2857:33;2899:32;:::i;:::-;2950:7;2940:17;;;2118:845;;;;;;;;:::o;3390:225::-;3448:6;3501:2;3489:9;3480:7;3476:23;3472:32;3469:52;;;3517:1;3514;3507:12;3469:52;-1:-1:-1;3562:23:57;;3390:225;-1:-1:-1;3390:225:57:o;4837:127::-;4898:10;4893:3;4889:20;4886:1;4879:31;4929:4;4926:1;4919:15;4953:4;4950:1;4943:15;4969:1513;5085:6;5093;5101;5109;5117;5170:3;5158:9;5149:7;5145:23;5141:33;5138:53;;;5187:1;5184;5177:12;5138:53;5226:9;5213:23;5245:30;5269:5;5245:30;:::i;:::-;5294:5;-1:-1:-1;5351:2:57;5336:18;;5323:32;5364:31;5323:32;5364:31;:::i;:::-;5414:7;-1:-1:-1;5473:2:57;5458:18;;5445:32;5486:33;5445:32;5486:33;:::i;:::-;5538:7;-1:-1:-1;5597:2:57;5582:18;;5569:32;5610:33;5569:32;5610:33;:::i;:::-;5662:7;-1:-1:-1;5720:3:57;5705:19;;5692:33;5748:18;5737:30;;5734:50;;;5780:1;5777;5770:12;5734:50;5803:22;;5856:4;5848:13;;5844:27;-1:-1:-1;5834:55:57;;5885:1;5882;5875:12;5834:55;5925:2;5912:16;5951:18;5943:6;5940:30;5937:56;;;5973:18;;:::i;:::-;6022:2;6016:9;6114:2;6076:17;;-1:-1:-1;;6072:31:57;;;6105:2;6068:40;6064:54;6052:67;;6149:18;6134:34;;6170:22;;;6131:62;6128:88;;;6196:18;;:::i;:::-;6232:2;6225:22;6256;;;6297:15;;;6314:2;6293:24;6290:37;-1:-1:-1;6287:57:57;;;6340:1;6337;6330:12;6287:57;6396:6;6391:2;6387;6383:11;6378:2;6370:6;6366:15;6353:50;6449:1;6444:2;6435:6;6427;6423:19;6419:28;6412:39;6470:6;6460:16;;;;;4969:1513;;;;;;;;:::o;6718:367::-;6786:6;6794;6847:2;6835:9;6826:7;6822:23;6818:32;6815:52;;;6863:1;6860;6853:12;6815:52;6902:9;6889:23;6921:31;6946:5;6921:31;:::i;:::-;6971:5;7049:2;7034:18;;;;7021:32;;-1:-1:-1;;;6718:367:57:o;7298:555::-;7383:12;;-1:-1:-1;;;;;7379:38:57;;;7367:51;;7414:1;7450:16;;7444:23;7499:35;;;7492:4;7483:14;;7476:59;7405:3;7571:19;;;7592:8;7567:34;7560:4;7551:14;;7544:58;7652:3;7648:19;7645:1;7634:34;;;7627:4;7618:14;;7611:58;7694:13;;;7688:20;7753:28;7806:4;7797:14;;;7790:57;7298:555::o;7858:254::-;8041:3;8026:19;;8054:52;8030:9;8088:6;8054:52;:::i;:::-;7858:254;;;;:::o;8117:212::-;8215:6;8268:2;8256:9;8247:7;8243:23;8239:32;8236:52;;;8284:1;8281;8274:12;8236:52;-1:-1:-1;8307:16:57;;8117:212;-1:-1:-1;8117:212:57:o;8661:646::-;8754:6;8762;8770;8778;8831:3;8819:9;8810:7;8806:23;8802:33;8799:53;;;8848:1;8845;8838:12;8799:53;8880:9;8874:16;8899:31;8924:5;8899:31;:::i;:::-;8999:2;8984:18;;8978:25;8949:5;;-1:-1:-1;9012:31:57;8978:25;9012:31;:::i;:::-;9114:2;9099:18;;9093:25;9062:7;;-1:-1:-1;9127:32:57;9093:25;9127:32;:::i;:::-;9230:2;9215:18;;9209:25;9178:7;;-1:-1:-1;9243:32:57;9209:25;9243:32;:::i;:::-;8661:646;;;;-1:-1:-1;8661:646:57;;-1:-1:-1;;8661:646:57:o;9780:277::-;9847:6;9900:2;9888:9;9879:7;9875:23;9871:32;9868:52;;;9916:1;9913;9906:12;9868:52;9948:9;9942:16;10001:5;9994:13;9987:21;9980:5;9977:32;9967:60;;10023:1;10020;10013:12;11484:807;11850:52;11892:9;11884:6;11850:52;:::i;:::-;11953:13;;11950:1;11939:28;;;11933:3;11918:19;;11911:57;12037:4;12025:17;;12019:24;12005:39;;11999:3;11984:19;;11977:68;12100:4;12088:17;;12082:24;12076:3;12061:19;;12054:53;12162:4;12150:17;;;12144:24;12138:3;12123:19;;12116:53;12206:3;12200;12185:19;;12178:32;;;-1:-1:-1;12226:19:57;;;12219:30;12281:3;12266:19;;11484:807;-1:-1:-1;11484:807:57:o;12519:127::-;12580:10;12575:3;12571:20;12568:1;12561:31;12611:4;12608:1;12601:15;12635:4;12632:1;12625:15;12651:168;12724:9;;;12755;;12772:15;;;12766:22;;12752:37;12742:71;;12793:18;;:::i;12824:198::-;-1:-1:-1;;;;;12924:27:57;;;12895;;;12891:61;;12964:29;;12961:55;;;12996:18;;:::i;13027:195::-;-1:-1:-1;;;;;13096:27:57;;;13125;;;13092:61;;13165:28;;13162:54;;;13196:18;;:::i;13227:970::-;13661:52;13703:9;13695:6;13661:52;:::i;:::-;13764:13;;13757:21;13750:29;13744:3;13729:19;;13722:58;13835:4;13823:17;;;13817:24;13811:3;13796:19;;13789:53;13901:4;13889:17;;;13883:24;-1:-1:-1;;;;;13879:50:57;13873:3;13858:19;;13851:79;13981:13;;13974:21;13967:29;13961:3;13946:19;;13939:58;14054:17;;14048:24;14041:32;14034:40;14028:3;14013:19;;14006:69;14112:3;14106;14091:19;;14084:32;;;-1:-1:-1;14132:19:57;;;14125:30;14187:3;14172:19;;13227:970;-1:-1:-1;13227:970:57:o;14202:669::-;14436:52;14478:9;14470:6;14436:52;:::i;:::-;14554:1;14550;14545:3;14541:11;14537:19;14529:6;14525:32;14519:3;14508:9;14504:19;14497:61;14595:3;14589;14578:9;14574:19;14567:32;14417:4;14628:6;14622:13;14672:6;14666:3;14655:9;14651:19;14644:35;14734:6;14727:4;14719:6;14715:17;14709:3;14698:9;14694:19;14688:53;14791:1;14785:3;14776:6;14765:9;14761:22;14757:32;14750:43;14861:3;14854:2;14850:7;14845:2;14837:6;14833:15;14829:29;14818:9;14814:45;14810:55;14802:63;;;14202:669;;;;;;:::o;14876:247::-;14944:6;14997:2;14985:9;14976:7;14972:23;14968:32;14965:52;;;15013:1;15010;15003:12;14965:52;15045:9;15039:16;15064:29;15087:5;15064:29;:::i;15128:127::-;15189:10;15184:3;15180:20;15177:1;15170:31;15220:4;15217:1;15210:15;15244:4;15241:1;15234:15;15260:217;15300:1;15326;15316:132;;15370:10;15365:3;15361:20;15358:1;15351:31;15405:4;15402:1;15395:15;15433:4;15430:1;15423:15;15316:132;-1:-1:-1;15462:9:57;;15260:217::o;15482:125::-;15547:9;;;15568:10;;;15565:36;;;15581:18;;:::i","linkReferences":{},"immutableReferences":{"11597":[{"start":890,"length":32},{"start":1157,"length":32},{"start":3514,"length":32},{"start":4735,"length":32}],"11600":[{"start":696,"length":32},{"start":1936,"length":32},{"start":2188,"length":32},{"start":2480,"length":32}],"11603":[{"start":2982,"length":32},{"start":3234,"length":32},{"start":4087,"length":32},{"start":4335,"length":32}],"11606":[{"start":1204,"length":32},{"start":3855,"length":32},{"start":4886,"length":32},{"start":5015,"length":32}],"11609":[{"start":849,"length":32},{"start":1422,"length":32},{"start":3467,"length":32},{"start":3547,"length":32}],"11612":[{"start":1500,"length":32},{"start":1983,"length":32},{"start":3029,"length":32},{"start":4513,"length":32}],"11615":[{"start":1723,"length":32},{"start":2235,"length":32},{"start":3281,"length":32},{"start":4560,"length":32}]}},"methodIdentifiers":{"MAX_PRICE_LIMIT()":"542524dd","MIN_PRICE_LIMIT()":"c7b8e15d","POOLS_SLOT()":"57eb1da7","POSITIONS_OFFSET()":"2ba31c53","addLiquidity(int256,int24,int24)":"06ba06fa","computeSwapStep(uint160,uint160,uint128,int256,uint24)":"100d3f74","constructSignal()":"01480703","equalizePrice(int256)":"14ee3677","getRouter()":"b0f479a1","poolKey()":"182148ef","setPool(uint24,int24,address,uint160,bytes)":"6af57741","setPrice(uint256)":"91b7f5ed","swapOnLex(address,uint256)":"96f5e27c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"MAX_PRICE_LIMIT\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_PRICE_LIMIT\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOLS_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POSITIONS_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"addLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceCurrentX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceTargetX96\",\"type\":\"uint160\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"int256\",\"name\":\"amountRemaining\",\"type\":\"int256\"},{\"internalType\":\"uint24\",\"name\":\"feePips\",\"type\":\"uint24\"}],\"name\":\"computeSwapStep\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceNextX96\",\"type\":\"uint160\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"constructSignal\",\"outputs\":[{\"components\":[{\"internalType\":\"int24\",\"name\":\"currentTick\",\"type\":\"int24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lexPrice\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"pool\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"fetcher\",\"type\":\"address\"}],\"internalType\":\"struct ArenaController.Signal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"depth\",\"type\":\"int256\"}],\"name\":\"equalizePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolKey\",\"outputs\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"poolFee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"setPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"swapOnLex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ArenaController.sol\":\"ArenaController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/\",\":@openzeppelin/contracts/=lib/v4-core/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/solmate/lib/ds-test/src/\",\":erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/v4-core/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/\",\":solmate/=lib/solmate/src/\",\":v4-core/=lib/v4-core/src/\"]},\"sources\":{\"lib/solmate/src/auth/Owned.sol\":{\"keccak256\":\"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\",\"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\"]},\"lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\",\"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\"]},\"lib/v4-core/src/ERC6909.sol\":{\"keccak256\":\"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6\",\"dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q\"]},\"lib/v4-core/src/ERC6909Claims.sol\":{\"keccak256\":\"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c\",\"dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i\"]},\"lib/v4-core/src/Extsload.sol\":{\"keccak256\":\"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51\",\"dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU\"]},\"lib/v4-core/src/Exttload.sol\":{\"keccak256\":\"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c\",\"dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG\"]},\"lib/v4-core/src/NoDelegateCall.sol\":{\"keccak256\":\"0x5c238701785d16c58a1598daec0f72a2aaf47d5d017b9dd7441cc8093b65b202\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://696cf79b74bc38e7316d94dfd8bdd9579a94f74121e9b65d2613eb59c106ea50\",\"dweb:/ipfs/QmRttHmshQJ5E7EGaeBC7yT4wyzthNXZQJn7sy2nJvb4dB\"]},\"lib/v4-core/src/PoolManager.sol\":{\"keccak256\":\"0xca5369a1683d06842268987fb6f46b05e6364a46cc856f72bb5c603826f47eac\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5ae5893222abc5dc5fa57bc05af40b60a96a1537bd3c1f3845257d6a3c2b5821\",\"dweb:/ipfs/QmZxQH8M3NVunurxDNJ5EZm2fy6Ws8CHJSezCQaoqzMPoq\"]},\"lib/v4-core/src/ProtocolFees.sol\":{\"keccak256\":\"0x2e7533e46dcab5508ed417ab33c2d0ca8c52a6b5f445dd90daf328173ada4449\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8403de6f2c89a665a3ff3566a917179a5bfb3e0ac9514f0438d82270a7f98c91\",\"dweb:/ipfs/QmTq9cjKTaXeCoSfCywpFwo7sNvuXM4wSMnebwX3hBuiRG\"]},\"lib/v4-core/src/interfaces/IExtsload.sol\":{\"keccak256\":\"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1\",\"dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN\"]},\"lib/v4-core/src/interfaces/IExttload.sol\":{\"keccak256\":\"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8\",\"dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY\"]},\"lib/v4-core/src/interfaces/IHooks.sol\":{\"keccak256\":\"0xdbaf1db938b70f77eb4ddbad5b8d2a1fc648c7d65ca2a312aba16cc013c85df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ad2d9c85116a2e51281dd40577c798d6d5968be1f8908f43ba152849809deaa\",\"dweb:/ipfs/QmZP4kk9KJzoxv81EgsTfHnJeU8YUxX3yWZudJHbxQjpa8\"]},\"lib/v4-core/src/interfaces/IPoolManager.sol\":{\"keccak256\":\"0x4e07d93993f6ba033c8b5e5b0a3473659aeffe9af0cf8316a879a55ebd696d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50add8378d59b89b1dc106ea248641caaedd3ac45d62754babe55c526b87c9ad\",\"dweb:/ipfs/QmQUrvy8ZDDdTRTr17msqynVECP3rQFBVBUmFcpFvjAmQx\"]},\"lib/v4-core/src/interfaces/IProtocolFeeController.sol\":{\"keccak256\":\"0xc2d7f3605da9767e36cf25d4d4fa9b95663a6659e26ce28cf29b8b88acb79a4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7a43cda35b8a9254ed3e46cfd8649361f09121d17ef554bd3d190b9a8d57cc6\",\"dweb:/ipfs/QmRBDQoqCWddH5hY1JdxMyYtY8jMZhWAwtuFJBc3r8V31G\"]},\"lib/v4-core/src/interfaces/IProtocolFees.sol\":{\"keccak256\":\"0x68700020df618c5715737e57630876ec22ccde2d31191a5608babb9f140ed297\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56b7bb6786f48fff8c9d04e9054955b8cf3d9f5bf819ccda7be192ad2004a27f\",\"dweb:/ipfs/QmZKmUvcYnyihEFySD6SY9osMkP8M1Y7a4kPxLQycEyThw\"]},\"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol\":{\"keccak256\":\"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b\",\"dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK\"]},\"lib/v4-core/src/interfaces/external/IERC20Minimal.sol\":{\"keccak256\":\"0xc1c23330c1511ecfd45c67a683962b4e2555b82f1dacd40cc8b46ae5a6e250e7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5ce10b7970482a65f9e9a365b810eeb154a5d4a8229a26653028d84b9622a410\",\"dweb:/ipfs/QmTSwXxZ2FTkM5duBZgbpFs8SRVDR5NPAnW4YimeDhb1s8\"]},\"lib/v4-core/src/interfaces/external/IERC6909Claims.sol\":{\"keccak256\":\"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f\",\"dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK\"]},\"lib/v4-core/src/libraries/BitMath.sol\":{\"keccak256\":\"0x59e18adcff8917b0965a240d88b34d5d800e0efebd5f40c5594ddcf28a15949b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d358beebf8d5079520b6e138d744e5063ecbfbeae355c08af86a3b74afa71b09\",\"dweb:/ipfs/QmUXmAK9aoxnaeykq8MLXoRKP8yGTDyY3jPFMwHnqRxf46\"]},\"lib/v4-core/src/libraries/CurrencyDelta.sol\":{\"keccak256\":\"0xb1eb18c3794b67f4f710229df279d3a630a963194fbbeb51906198ec7145b98e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e5ea08b69754250cf04cc544785320f5c8fd8b9a65e5d9e0bc44aadadaa9ea0c\",\"dweb:/ipfs/QmWW1qfqGydoiSeDtVVQ53nV3FphuUgH1PFUC3uGaWzxWR\"]},\"lib/v4-core/src/libraries/CurrencyReserves.sol\":{\"keccak256\":\"0xdeffc5cf2f8f7d3f802998941061392c0c926a32c7105ffd9f902ab84d3a31c6\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://869bd659c5593bc525ce4d44771d85eb8acb74a7f0492802bdcc79d2bfdfcaf7\",\"dweb:/ipfs/QmSrTWzUHrou7ZxcuFXQhvzXmEgbLeCtwAqeS6k9vD22h3\"]},\"lib/v4-core/src/libraries/CustomRevert.sol\":{\"keccak256\":\"0x70a444afeb27564398dbdf7553651ee2cae14c03c923b6f8972040c8f460ebe3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d7b05390bac9b29188725c8a84edac43cd05571da27b33a0b1e36d9500ecaa6\",\"dweb:/ipfs/QmdYDLwTfFgePDEwFMUqGTj8SNNXXq4JQJnrgomJgcZFvP\"]},\"lib/v4-core/src/libraries/FixedPoint128.sol\":{\"keccak256\":\"0xc7e80dc41f28887d0d915a75c0b2783ae659e5384dd1a3ed1251a42e058d8835\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2df62bf1d9d4349236fd0bc7a96b3a3be95f4c049603e4a20c8473cca9402b4d\",\"dweb:/ipfs/QmVR5dmMkoypmhaBeBj8cGegHpJycbofUDg59dHm42i9MT\"]},\"lib/v4-core/src/libraries/FixedPoint96.sol\":{\"keccak256\":\"0xf0a545fc5bbc271e8dbd191413dc03e8725d1f003df4d9d36ea7cdb73058c417\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5d1013d8b5c93024526f129b0a9271b35c578da09bcfe6c3240ff4d590ebc196\",\"dweb:/ipfs/QmX1GyF9jJhYGXst6PyK6HJvcfVQ69nNTnuBEBaEiAZPv7\"]},\"lib/v4-core/src/libraries/FullMath.sol\":{\"keccak256\":\"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52\",\"dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC\"]},\"lib/v4-core/src/libraries/Hooks.sol\":{\"keccak256\":\"0xfa031f4efc096e9c93bb094509321e1c08b5eb271f46554f858e74803c43ae66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cc33d5eb869ecacfb70d024f7b925d191d98553dbb921bd8188f97d51c9e111\",\"dweb:/ipfs/Qme5VCnaS5mXyqaWV5uiW5xcmTb56uCKBPFrLZp2dq41dQ\"]},\"lib/v4-core/src/libraries/LPFeeLibrary.sol\":{\"keccak256\":\"0xfbebd6766871b795d945a74b6110931f73fc775aeeecc2682d6d6ca841a01ece\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://36fcc7098454971ae16d790ee9aee227c22c5cbbd7ff6e27e58ac29b901d5896\",\"dweb:/ipfs/QmboCGTWtycGpda7E169pD67Fox2H9b1YRsNHcsxBRrhfo\"]},\"lib/v4-core/src/libraries/LiquidityMath.sol\":{\"keccak256\":\"0x4a04b9383e2fb943c2c3ae7d0c9071b58dd97b6dac0a409fe1c79c3ca897bbcf\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0b33cf0ff936f62aa7f3b82922fa0ac52ac24471561e87fbf7ab8372607f6dfc\",\"dweb:/ipfs/Qmcr6omwzJjQPu6HQ8E9vFXaTgrtqfb2KbfxbuQavfUzFa\"]},\"lib/v4-core/src/libraries/Lock.sol\":{\"keccak256\":\"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c\",\"dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF\"]},\"lib/v4-core/src/libraries/NonZeroDeltaCount.sol\":{\"keccak256\":\"0x6b7e23f470b8352efdbf459a34dd0dcfdbe03e623cb4de67f4ad9be326691586\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b86af075e2331f7a065b15d91253f2ce6b845dfe09493338f2d7cdab6f9e4cc2\",\"dweb:/ipfs/QmdzHJQapqAS42rMrYPgdvb4Sae7NVy3ESkNc1TuBRcxUC\"]},\"lib/v4-core/src/libraries/ParseBytes.sol\":{\"keccak256\":\"0xf0795198d1e651b0b33fd1708d80a14f501bb2a1486905676d35f364e880f579\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5aea527fcec51d7274f0c189dc2479a6aa708fc91857187a4d7db46bb1d6c7a8\",\"dweb:/ipfs/QmUTrwTPSZ7EHBaTyfAA78rZVP17iQzmAmvDcQ8GhDRAEf\"]},\"lib/v4-core/src/libraries/Pool.sol\":{\"keccak256\":\"0x7a506727ae59f5b5487a0a16ec1d7038b7c2a4ee5f4a7fa7c444ec7df6ad5a7c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://befdd15aee06a7b2a3c64cb899220ec03a1ae8470ad17e19050bcca1ac5266a8\",\"dweb:/ipfs/QmWPfBgfp5VKnku9ZtKXwYycyKdAZuCj6778T2HFrfQ61H\"]},\"lib/v4-core/src/libraries/Position.sol\":{\"keccak256\":\"0x0309a650890f1cd93e2b4b1e9a40032d5feb8c6a0ccc24be24373bfd7590ff80\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://63aae574b22048f1453da8f9142374e334683bb3a069c2312f73e6b857842bce\",\"dweb:/ipfs/QmcJZK3kU4jsWfJKBpRq2kaouutEDHcytgMX8ZaGeBsbgu\"]},\"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol\":{\"keccak256\":\"0x2739e8f54707c6a0e23f9c61a0783dd18b107c3fc287b2827f1ab4b41f891902\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2e3b154410bbfcbe8808c6dfb74c4bbbac50a59e228cee59b34e169dbd34ee1a\",\"dweb:/ipfs/QmcRoM6T2F7FTHtGdD5aRiVthCon8oiWur661GCrk5FejP\"]},\"lib/v4-core/src/libraries/SafeCast.sol\":{\"keccak256\":\"0xbccc4f8d5d467d162d7f0ab5a7f22bcccf05ae07577b9728c9e3030c63977e60\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0003ea7a515ba709a3fdeaa19e7930c1f883b3b4fbdbf389d4f2f85b25eb72b4\",\"dweb:/ipfs/QmYs8uNcYRGuGUbeBfF27fhArNaQ5Y9iMCTMfgic5d39fM\"]},\"lib/v4-core/src/libraries/SqrtPriceMath.sol\":{\"keccak256\":\"0x1a5a8fd4a21cec19c0c253201e9b5534e8d810eb132bceee04af37fd78adb5db\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afa2a5950c9057fd3c00a6f413fba91c4c7dab06d573f7349aaf8f806c0e1f31\",\"dweb:/ipfs/Qmb2m62xAPRBtxtx3sV7MAFw2vHWNm9m49ctPHmFX5hozt\"]},\"lib/v4-core/src/libraries/StateLibrary.sol\":{\"keccak256\":\"0x67ead4d1ffe7e4fc381cef059c8d4941c7b4d581ef043fc8d3278d0829da414e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0d12edd46a3ff2e19ea9b650507ea22e7714daa335a6b40f4d2f6d29c16431e4\",\"dweb:/ipfs/QmZn6dzXZgR3rGohZAvKzqYMgm5n9qTrpi1VhXizYhiquH\"]},\"lib/v4-core/src/libraries/SwapMath.sol\":{\"keccak256\":\"0xa8cedd0f63b2d8b6faac60455f499c79816f53fbd86f3bb0706fae426b2c231e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8d926c2df899b21811862d106d5e1d2b5bdf83c76ae6ff4216e7c9ce443d8e75\",\"dweb:/ipfs/QmTTVSCumUXZ4vf3R1GwfqJSTgLFyjueuxZkRH9U6dsTb3\"]},\"lib/v4-core/src/libraries/TickBitmap.sol\":{\"keccak256\":\"0x23abd96aa808657304affd775666d7cc5fb0ab564f87d1b65fbf8dc5877d9cd6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c7686aefb704a3efe97cc0e8f180ed48f7667f5ae69d3754962f04352c66b79\",\"dweb:/ipfs/QmULiCBW9s2hB6SmnJTi2wiAwgkLXpZJcdVZm9f77zDNuc\"]},\"lib/v4-core/src/libraries/TickMath.sol\":{\"keccak256\":\"0x64c668177d82bb185d902fb2190630ccb67babb6439422979692ac2f8dfb6dcd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e2714a025df18c22f20b358b7143e8a5c55cffb20c7de292be0376845a5f0408\",\"dweb:/ipfs/QmWaeCkxwkVuReFUSK2nDat1BB5DJ8BUowwGwmVyKpsrME\"]},\"lib/v4-core/src/libraries/TransientStateLibrary.sol\":{\"keccak256\":\"0x1bc28f30c176c7c598522da0d8907a90c4cd8ecce81775bb4deb3a9b78782f86\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb5c05fb51e59ef168ba884c4ea3627525dba9feea0de9ffa0587438f70fd095\",\"dweb:/ipfs/Qmbx3ntPDZ9VeGsAnVNSM5DKmhPg92yobh5ZHbvdGWtHUd\"]},\"lib/v4-core/src/libraries/UnsafeMath.sol\":{\"keccak256\":\"0xe9b87da934af38419d4b5f20cc09943dbb569425448fc23fdc5ec6aebbb63c84\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://29838c28905c34f9602a453759b55f5acc6aff02bf6d7a6afac5d1a245dd5db3\",\"dweb:/ipfs/QmfN5bhLFw1CsnnaJQNZd3bLpLufQcwt9ztaR71LA43UGY\"]},\"lib/v4-core/src/test/PoolModifyLiquidityTest.sol\":{\"keccak256\":\"0x4578759af55db566eee1d19c19a285710b1d301b511e37df4a1072c2d5a47ade\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://aa6588f1f695efe625241fdbad07730611c8bec77d963698c6412775b7dd68a7\",\"dweb:/ipfs/QmeDGAKa9sR6Wk5ibyzt4YGa6tdtjmFPzJafMbBgkWRB9d\"]},\"lib/v4-core/src/test/PoolSwapTest.sol\":{\"keccak256\":\"0x389d2274a70c565c12c8fd7f0f5bdbee7532d842936243141c65cf1477c1a7e8\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cdaff983aa947444cece280d8485f524a778cf8843c3f8b96f60e4ad137aa8d3\",\"dweb:/ipfs/QmP7qbC3UZz723pTWuJh18qap1vYAHDY5UoJwGtvosWs9k\"]},\"lib/v4-core/src/test/PoolTestBase.sol\":{\"keccak256\":\"0x71db5a5215d858124dd2ccf73c4474421651f248e4c85d33455d95abced0a23c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fac0df901621d44a1b98ce4569616940ca6700e7829357bdf18509237b822072\",\"dweb:/ipfs/Qmf9sWokQvzmKfAY6Vd4QzyTyhikqCb8zUowrFPe9DRxs5\"]},\"lib/v4-core/src/types/BalanceDelta.sol\":{\"keccak256\":\"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9\",\"dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H\"]},\"lib/v4-core/src/types/BeforeSwapDelta.sol\":{\"keccak256\":\"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782\",\"dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K\"]},\"lib/v4-core/src/types/Currency.sol\":{\"keccak256\":\"0xc77e2d4d380be1887078b1d21e2381fe4e9138dce8c7efbf9050aa7d65d75d4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b85a1edba4be624be660d69badac1e3641d83190893839fa30260eef316d00c8\",\"dweb:/ipfs/QmPaEaeNkhy5F4X9dwzyDzVU3H67P5ZhpeijDS7wscaSd9\"]},\"lib/v4-core/src/types/PoolId.sol\":{\"keccak256\":\"0x6946552d4f78712c769df47a9187aa0add8737bb6d06ef04b63a33a3c0ff59f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://637851aaa9e06ff59b517e6da17dad3476968c0bc62e141158f76526a8f9c79f\",\"dweb:/ipfs/QmVUxPCRCBE23XQdCrroeUuFqNTtq2LvJaDYmp43QGNsMB\"]},\"lib/v4-core/src/types/PoolKey.sol\":{\"keccak256\":\"0x10a2ff74d87d105f52c6c10f0c6ea0548c12a75dfb979abab8a8b7d647305162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0680665f799067c0f0238e864e363c265ff23188dfe6ae1c4738f7d0a281ccf\",\"dweb:/ipfs/QmRCkZhaPknrV9cHkUiU3HVyMYYT3UaD8RfptHi4qB62zY\"]},\"lib/v4-core/src/types/Slot0.sol\":{\"keccak256\":\"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8\",\"dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C\"]},\"lib/v4-core/test/utils/CurrencySettler.sol\":{\"keccak256\":\"0xf5d04aa76b3ac6ff75396661e75ec612035ebd73d23eb6f4e207dbd46392688e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67a67b94a2987309f06003374ddfc30ab8e81d9fec3b1585e93871eec6966d96\",\"dweb:/ipfs/QmYLzboZNfXoNufKX8UYMGhHVChqMK96vwFWjKeoWcfb24\"]},\"src/ArenaController.sol\":{\"keccak256\":\"0xd7ba9682c55b4d5dcf6d21e64724e05881b390c2be3292e1b5057092d3245347\",\"urls\":[\"bzz-raw://6311b47411a7347205d6700696559a7f55c77b42bdffd6ddf1cd12f09deb3f74\",\"dweb:/ipfs/QmagewXh9VXoBrQG32kzJfFo9Hhr3WcFrPvUwppb5Mofqc\"]},\"src/ArenaToken.sol\":{\"keccak256\":\"0x59ea858a9c33398efbfb770c958c1f544425ad32d73a3cd3991f6834ec04028a\",\"urls\":[\"bzz-raw://242a38f560c8dc312e27a30dad15ddf2fccb4163f4f0692f814b3cfa71180105\",\"dweb:/ipfs/QmZqhSdNeRiVf5rJJYgX48SiUi1dwgpYAvMo6a7XBVRjXF\"]},\"src/Fetcher.sol\":{\"keccak256\":\"0x1895e5c0688650ca60371f208b62d9f64beea29bd7515b2600a1c8d5c73805df\",\"urls\":[\"bzz-raw://f9c904c9d032167f6d8fec1392c9a023f339a4aee9f75f06df6347a495af9d38\",\"dweb:/ipfs/QmYSaPzRawAnh2qD3JY5uvWypEueo5hSTQVyVFfX96msfb\"]},\"src/LiquidExchange.sol\":{\"keccak256\":\"0xc979e540abc8a2d1bc82f2c741beb4ea9037c7e69ab11a5a20ef11ab7b9cee22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e5f08cb7b8685020a78fd9b84d740649dcbf9ba92057cc5914d829f275d396c5\",\"dweb:/ipfs/QmQKVvRCmSumaf2xtbLey6KdUyt9bfTLeq9gPGssisJi17\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"initialPrice","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_PRICE_LIMIT","outputs":[{"internalType":"uint160","name":"","type":"uint160"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_PRICE_LIMIT","outputs":[{"internalType":"uint160","name":"","type":"uint160"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"POOLS_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"POSITIONS_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"}],"stateMutability":"nonpayable","type":"function","name":"addLiquidity"},{"inputs":[{"internalType":"uint160","name":"sqrtPriceCurrentX96","type":"uint160"},{"internalType":"uint160","name":"sqrtPriceTargetX96","type":"uint160"},{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"int256","name":"amountRemaining","type":"int256"},{"internalType":"uint24","name":"feePips","type":"uint24"}],"stateMutability":"pure","type":"function","name":"computeSwapStep","outputs":[{"internalType":"uint160","name":"sqrtPriceNextX96","type":"uint160"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"constructSignal","outputs":[{"internalType":"struct ArenaController.Signal","name":"","type":"tuple","components":[{"internalType":"int24","name":"currentTick","type":"int24"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"lexPrice","type":"uint256"},{"internalType":"struct PoolKey","name":"pool","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"address","name":"fetcher","type":"address"}]}]},{"inputs":[{"internalType":"int256","name":"depth","type":"int256"}],"stateMutability":"nonpayable","type":"function","name":"equalizePrice"},{"inputs":[],"stateMutability":"view","type":"function","name":"getRouter","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"poolKey","outputs":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"inputs":[{"internalType":"uint24","name":"poolFee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"setPool"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPrice"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"swapOnLex"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/","@openzeppelin/contracts/=lib/v4-core/lib/openzeppelin-contracts/contracts/","ds-test/=lib/solmate/lib/ds-test/src/","erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=lib/v4-core/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/","solmate/=lib/solmate/src/","v4-core/=lib/v4-core/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/ArenaController.sol":"ArenaController"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/solmate/src/auth/Owned.sol":{"keccak256":"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea","urls":["bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4","dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx"],"license":"AGPL-3.0-only"},"lib/solmate/src/tokens/ERC20.sol":{"keccak256":"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10","urls":["bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35","dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97"],"license":"AGPL-3.0-only"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843","urls":["bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9","dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi"],"license":"AGPL-3.0-only"},"lib/v4-core/src/ERC6909.sol":{"keccak256":"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f","urls":["bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6","dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q"],"license":"MIT"},"lib/v4-core/src/ERC6909Claims.sol":{"keccak256":"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49","urls":["bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c","dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i"],"license":"MIT"},"lib/v4-core/src/Extsload.sol":{"keccak256":"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce","urls":["bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51","dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU"],"license":"MIT"},"lib/v4-core/src/Exttload.sol":{"keccak256":"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54","urls":["bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c","dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG"],"license":"MIT"},"lib/v4-core/src/NoDelegateCall.sol":{"keccak256":"0x5c238701785d16c58a1598daec0f72a2aaf47d5d017b9dd7441cc8093b65b202","urls":["bzz-raw://696cf79b74bc38e7316d94dfd8bdd9579a94f74121e9b65d2613eb59c106ea50","dweb:/ipfs/QmRttHmshQJ5E7EGaeBC7yT4wyzthNXZQJn7sy2nJvb4dB"],"license":"BUSL-1.1"},"lib/v4-core/src/PoolManager.sol":{"keccak256":"0xca5369a1683d06842268987fb6f46b05e6364a46cc856f72bb5c603826f47eac","urls":["bzz-raw://5ae5893222abc5dc5fa57bc05af40b60a96a1537bd3c1f3845257d6a3c2b5821","dweb:/ipfs/QmZxQH8M3NVunurxDNJ5EZm2fy6Ws8CHJSezCQaoqzMPoq"],"license":"BUSL-1.1"},"lib/v4-core/src/ProtocolFees.sol":{"keccak256":"0x2e7533e46dcab5508ed417ab33c2d0ca8c52a6b5f445dd90daf328173ada4449","urls":["bzz-raw://8403de6f2c89a665a3ff3566a917179a5bfb3e0ac9514f0438d82270a7f98c91","dweb:/ipfs/QmTq9cjKTaXeCoSfCywpFwo7sNvuXM4wSMnebwX3hBuiRG"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/interfaces/IExtsload.sol":{"keccak256":"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43","urls":["bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1","dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"],"license":"MIT"},"lib/v4-core/src/interfaces/IExttload.sol":{"keccak256":"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937","urls":["bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8","dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"],"license":"MIT"},"lib/v4-core/src/interfaces/IHooks.sol":{"keccak256":"0xdbaf1db938b70f77eb4ddbad5b8d2a1fc648c7d65ca2a312aba16cc013c85df0","urls":["bzz-raw://4ad2d9c85116a2e51281dd40577c798d6d5968be1f8908f43ba152849809deaa","dweb:/ipfs/QmZP4kk9KJzoxv81EgsTfHnJeU8YUxX3yWZudJHbxQjpa8"],"license":"MIT"},"lib/v4-core/src/interfaces/IPoolManager.sol":{"keccak256":"0x4e07d93993f6ba033c8b5e5b0a3473659aeffe9af0cf8316a879a55ebd696d7a","urls":["bzz-raw://50add8378d59b89b1dc106ea248641caaedd3ac45d62754babe55c526b87c9ad","dweb:/ipfs/QmQUrvy8ZDDdTRTr17msqynVECP3rQFBVBUmFcpFvjAmQx"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFeeController.sol":{"keccak256":"0xc2d7f3605da9767e36cf25d4d4fa9b95663a6659e26ce28cf29b8b88acb79a4c","urls":["bzz-raw://c7a43cda35b8a9254ed3e46cfd8649361f09121d17ef554bd3d190b9a8d57cc6","dweb:/ipfs/QmRBDQoqCWddH5hY1JdxMyYtY8jMZhWAwtuFJBc3r8V31G"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFees.sol":{"keccak256":"0x68700020df618c5715737e57630876ec22ccde2d31191a5608babb9f140ed297","urls":["bzz-raw://56b7bb6786f48fff8c9d04e9054955b8cf3d9f5bf819ccda7be192ad2004a27f","dweb:/ipfs/QmZKmUvcYnyihEFySD6SY9osMkP8M1Y7a4kPxLQycEyThw"],"license":"MIT"},"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol":{"keccak256":"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719","urls":["bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b","dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC20Minimal.sol":{"keccak256":"0xc1c23330c1511ecfd45c67a683962b4e2555b82f1dacd40cc8b46ae5a6e250e7","urls":["bzz-raw://5ce10b7970482a65f9e9a365b810eeb154a5d4a8229a26653028d84b9622a410","dweb:/ipfs/QmTSwXxZ2FTkM5duBZgbpFs8SRVDR5NPAnW4YimeDhb1s8"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/interfaces/external/IERC6909Claims.sol":{"keccak256":"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48","urls":["bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f","dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"],"license":"MIT"},"lib/v4-core/src/libraries/BitMath.sol":{"keccak256":"0x59e18adcff8917b0965a240d88b34d5d800e0efebd5f40c5594ddcf28a15949b","urls":["bzz-raw://d358beebf8d5079520b6e138d744e5063ecbfbeae355c08af86a3b74afa71b09","dweb:/ipfs/QmUXmAK9aoxnaeykq8MLXoRKP8yGTDyY3jPFMwHnqRxf46"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/CurrencyDelta.sol":{"keccak256":"0xb1eb18c3794b67f4f710229df279d3a630a963194fbbeb51906198ec7145b98e","urls":["bzz-raw://e5ea08b69754250cf04cc544785320f5c8fd8b9a65e5d9e0bc44aadadaa9ea0c","dweb:/ipfs/QmWW1qfqGydoiSeDtVVQ53nV3FphuUgH1PFUC3uGaWzxWR"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CurrencyReserves.sol":{"keccak256":"0xdeffc5cf2f8f7d3f802998941061392c0c926a32c7105ffd9f902ab84d3a31c6","urls":["bzz-raw://869bd659c5593bc525ce4d44771d85eb8acb74a7f0492802bdcc79d2bfdfcaf7","dweb:/ipfs/QmSrTWzUHrou7ZxcuFXQhvzXmEgbLeCtwAqeS6k9vD22h3"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CustomRevert.sol":{"keccak256":"0x70a444afeb27564398dbdf7553651ee2cae14c03c923b6f8972040c8f460ebe3","urls":["bzz-raw://9d7b05390bac9b29188725c8a84edac43cd05571da27b33a0b1e36d9500ecaa6","dweb:/ipfs/QmdYDLwTfFgePDEwFMUqGTj8SNNXXq4JQJnrgomJgcZFvP"],"license":"MIT"},"lib/v4-core/src/libraries/FixedPoint128.sol":{"keccak256":"0xc7e80dc41f28887d0d915a75c0b2783ae659e5384dd1a3ed1251a42e058d8835","urls":["bzz-raw://2df62bf1d9d4349236fd0bc7a96b3a3be95f4c049603e4a20c8473cca9402b4d","dweb:/ipfs/QmVR5dmMkoypmhaBeBj8cGegHpJycbofUDg59dHm42i9MT"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/FixedPoint96.sol":{"keccak256":"0xf0a545fc5bbc271e8dbd191413dc03e8725d1f003df4d9d36ea7cdb73058c417","urls":["bzz-raw://5d1013d8b5c93024526f129b0a9271b35c578da09bcfe6c3240ff4d590ebc196","dweb:/ipfs/QmX1GyF9jJhYGXst6PyK6HJvcfVQ69nNTnuBEBaEiAZPv7"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/FullMath.sol":{"keccak256":"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2","urls":["bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52","dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC"],"license":"MIT"},"lib/v4-core/src/libraries/Hooks.sol":{"keccak256":"0xfa031f4efc096e9c93bb094509321e1c08b5eb271f46554f858e74803c43ae66","urls":["bzz-raw://7cc33d5eb869ecacfb70d024f7b925d191d98553dbb921bd8188f97d51c9e111","dweb:/ipfs/Qme5VCnaS5mXyqaWV5uiW5xcmTb56uCKBPFrLZp2dq41dQ"],"license":"MIT"},"lib/v4-core/src/libraries/LPFeeLibrary.sol":{"keccak256":"0xfbebd6766871b795d945a74b6110931f73fc775aeeecc2682d6d6ca841a01ece","urls":["bzz-raw://36fcc7098454971ae16d790ee9aee227c22c5cbbd7ff6e27e58ac29b901d5896","dweb:/ipfs/QmboCGTWtycGpda7E169pD67Fox2H9b1YRsNHcsxBRrhfo"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/LiquidityMath.sol":{"keccak256":"0x4a04b9383e2fb943c2c3ae7d0c9071b58dd97b6dac0a409fe1c79c3ca897bbcf","urls":["bzz-raw://0b33cf0ff936f62aa7f3b82922fa0ac52ac24471561e87fbf7ab8372607f6dfc","dweb:/ipfs/Qmcr6omwzJjQPu6HQ8E9vFXaTgrtqfb2KbfxbuQavfUzFa"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/Lock.sol":{"keccak256":"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5","urls":["bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c","dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/NonZeroDeltaCount.sol":{"keccak256":"0x6b7e23f470b8352efdbf459a34dd0dcfdbe03e623cb4de67f4ad9be326691586","urls":["bzz-raw://b86af075e2331f7a065b15d91253f2ce6b845dfe09493338f2d7cdab6f9e4cc2","dweb:/ipfs/QmdzHJQapqAS42rMrYPgdvb4Sae7NVy3ESkNc1TuBRcxUC"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ParseBytes.sol":{"keccak256":"0xf0795198d1e651b0b33fd1708d80a14f501bb2a1486905676d35f364e880f579","urls":["bzz-raw://5aea527fcec51d7274f0c189dc2479a6aa708fc91857187a4d7db46bb1d6c7a8","dweb:/ipfs/QmUTrwTPSZ7EHBaTyfAA78rZVP17iQzmAmvDcQ8GhDRAEf"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/Pool.sol":{"keccak256":"0x7a506727ae59f5b5487a0a16ec1d7038b7c2a4ee5f4a7fa7c444ec7df6ad5a7c","urls":["bzz-raw://befdd15aee06a7b2a3c64cb899220ec03a1ae8470ad17e19050bcca1ac5266a8","dweb:/ipfs/QmWPfBgfp5VKnku9ZtKXwYycyKdAZuCj6778T2HFrfQ61H"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/Position.sol":{"keccak256":"0x0309a650890f1cd93e2b4b1e9a40032d5feb8c6a0ccc24be24373bfd7590ff80","urls":["bzz-raw://63aae574b22048f1453da8f9142374e334683bb3a069c2312f73e6b857842bce","dweb:/ipfs/QmcJZK3kU4jsWfJKBpRq2kaouutEDHcytgMX8ZaGeBsbgu"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol":{"keccak256":"0x2739e8f54707c6a0e23f9c61a0783dd18b107c3fc287b2827f1ab4b41f891902","urls":["bzz-raw://2e3b154410bbfcbe8808c6dfb74c4bbbac50a59e228cee59b34e169dbd34ee1a","dweb:/ipfs/QmcRoM6T2F7FTHtGdD5aRiVthCon8oiWur661GCrk5FejP"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/SafeCast.sol":{"keccak256":"0xbccc4f8d5d467d162d7f0ab5a7f22bcccf05ae07577b9728c9e3030c63977e60","urls":["bzz-raw://0003ea7a515ba709a3fdeaa19e7930c1f883b3b4fbdbf389d4f2f85b25eb72b4","dweb:/ipfs/QmYs8uNcYRGuGUbeBfF27fhArNaQ5Y9iMCTMfgic5d39fM"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/SqrtPriceMath.sol":{"keccak256":"0x1a5a8fd4a21cec19c0c253201e9b5534e8d810eb132bceee04af37fd78adb5db","urls":["bzz-raw://afa2a5950c9057fd3c00a6f413fba91c4c7dab06d573f7349aaf8f806c0e1f31","dweb:/ipfs/Qmb2m62xAPRBtxtx3sV7MAFw2vHWNm9m49ctPHmFX5hozt"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/StateLibrary.sol":{"keccak256":"0x67ead4d1ffe7e4fc381cef059c8d4941c7b4d581ef043fc8d3278d0829da414e","urls":["bzz-raw://0d12edd46a3ff2e19ea9b650507ea22e7714daa335a6b40f4d2f6d29c16431e4","dweb:/ipfs/QmZn6dzXZgR3rGohZAvKzqYMgm5n9qTrpi1VhXizYhiquH"],"license":"MIT"},"lib/v4-core/src/libraries/SwapMath.sol":{"keccak256":"0xa8cedd0f63b2d8b6faac60455f499c79816f53fbd86f3bb0706fae426b2c231e","urls":["bzz-raw://8d926c2df899b21811862d106d5e1d2b5bdf83c76ae6ff4216e7c9ce443d8e75","dweb:/ipfs/QmTTVSCumUXZ4vf3R1GwfqJSTgLFyjueuxZkRH9U6dsTb3"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/TickBitmap.sol":{"keccak256":"0x23abd96aa808657304affd775666d7cc5fb0ab564f87d1b65fbf8dc5877d9cd6","urls":["bzz-raw://4c7686aefb704a3efe97cc0e8f180ed48f7667f5ae69d3754962f04352c66b79","dweb:/ipfs/QmULiCBW9s2hB6SmnJTi2wiAwgkLXpZJcdVZm9f77zDNuc"],"license":"MIT"},"lib/v4-core/src/libraries/TickMath.sol":{"keccak256":"0x64c668177d82bb185d902fb2190630ccb67babb6439422979692ac2f8dfb6dcd","urls":["bzz-raw://e2714a025df18c22f20b358b7143e8a5c55cffb20c7de292be0376845a5f0408","dweb:/ipfs/QmWaeCkxwkVuReFUSK2nDat1BB5DJ8BUowwGwmVyKpsrME"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/TransientStateLibrary.sol":{"keccak256":"0x1bc28f30c176c7c598522da0d8907a90c4cd8ecce81775bb4deb3a9b78782f86","urls":["bzz-raw://fb5c05fb51e59ef168ba884c4ea3627525dba9feea0de9ffa0587438f70fd095","dweb:/ipfs/Qmbx3ntPDZ9VeGsAnVNSM5DKmhPg92yobh5ZHbvdGWtHUd"],"license":"MIT"},"lib/v4-core/src/libraries/UnsafeMath.sol":{"keccak256":"0xe9b87da934af38419d4b5f20cc09943dbb569425448fc23fdc5ec6aebbb63c84","urls":["bzz-raw://29838c28905c34f9602a453759b55f5acc6aff02bf6d7a6afac5d1a245dd5db3","dweb:/ipfs/QmfN5bhLFw1CsnnaJQNZd3bLpLufQcwt9ztaR71LA43UGY"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/test/PoolModifyLiquidityTest.sol":{"keccak256":"0x4578759af55db566eee1d19c19a285710b1d301b511e37df4a1072c2d5a47ade","urls":["bzz-raw://aa6588f1f695efe625241fdbad07730611c8bec77d963698c6412775b7dd68a7","dweb:/ipfs/QmeDGAKa9sR6Wk5ibyzt4YGa6tdtjmFPzJafMbBgkWRB9d"],"license":"UNLICENSED"},"lib/v4-core/src/test/PoolSwapTest.sol":{"keccak256":"0x389d2274a70c565c12c8fd7f0f5bdbee7532d842936243141c65cf1477c1a7e8","urls":["bzz-raw://cdaff983aa947444cece280d8485f524a778cf8843c3f8b96f60e4ad137aa8d3","dweb:/ipfs/QmP7qbC3UZz723pTWuJh18qap1vYAHDY5UoJwGtvosWs9k"],"license":"UNLICENSED"},"lib/v4-core/src/test/PoolTestBase.sol":{"keccak256":"0x71db5a5215d858124dd2ccf73c4474421651f248e4c85d33455d95abced0a23c","urls":["bzz-raw://fac0df901621d44a1b98ce4569616940ca6700e7829357bdf18509237b822072","dweb:/ipfs/Qmf9sWokQvzmKfAY6Vd4QzyTyhikqCb8zUowrFPe9DRxs5"],"license":"UNLICENSED"},"lib/v4-core/src/types/BalanceDelta.sol":{"keccak256":"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f","urls":["bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9","dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"],"license":"MIT"},"lib/v4-core/src/types/BeforeSwapDelta.sol":{"keccak256":"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78","urls":["bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782","dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"],"license":"MIT"},"lib/v4-core/src/types/Currency.sol":{"keccak256":"0xc77e2d4d380be1887078b1d21e2381fe4e9138dce8c7efbf9050aa7d65d75d4c","urls":["bzz-raw://b85a1edba4be624be660d69badac1e3641d83190893839fa30260eef316d00c8","dweb:/ipfs/QmPaEaeNkhy5F4X9dwzyDzVU3H67P5ZhpeijDS7wscaSd9"],"license":"MIT"},"lib/v4-core/src/types/PoolId.sol":{"keccak256":"0x6946552d4f78712c769df47a9187aa0add8737bb6d06ef04b63a33a3c0ff59f8","urls":["bzz-raw://637851aaa9e06ff59b517e6da17dad3476968c0bc62e141158f76526a8f9c79f","dweb:/ipfs/QmVUxPCRCBE23XQdCrroeUuFqNTtq2LvJaDYmp43QGNsMB"],"license":"MIT"},"lib/v4-core/src/types/PoolKey.sol":{"keccak256":"0x10a2ff74d87d105f52c6c10f0c6ea0548c12a75dfb979abab8a8b7d647305162","urls":["bzz-raw://a0680665f799067c0f0238e864e363c265ff23188dfe6ae1c4738f7d0a281ccf","dweb:/ipfs/QmRCkZhaPknrV9cHkUiU3HVyMYYT3UaD8RfptHi4qB62zY"],"license":"MIT"},"lib/v4-core/src/types/Slot0.sol":{"keccak256":"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b","urls":["bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8","dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C"],"license":"MIT"},"lib/v4-core/test/utils/CurrencySettler.sol":{"keccak256":"0xf5d04aa76b3ac6ff75396661e75ec612035ebd73d23eb6f4e207dbd46392688e","urls":["bzz-raw://67a67b94a2987309f06003374ddfc30ab8e81d9fec3b1585e93871eec6966d96","dweb:/ipfs/QmYLzboZNfXoNufKX8UYMGhHVChqMK96vwFWjKeoWcfb24"],"license":"MIT"},"src/ArenaController.sol":{"keccak256":"0xd7ba9682c55b4d5dcf6d21e64724e05881b390c2be3292e1b5057092d3245347","urls":["bzz-raw://6311b47411a7347205d6700696559a7f55c77b42bdffd6ddf1cd12f09deb3f74","dweb:/ipfs/QmagewXh9VXoBrQG32kzJfFo9Hhr3WcFrPvUwppb5Mofqc"],"license":null},"src/ArenaToken.sol":{"keccak256":"0x59ea858a9c33398efbfb770c958c1f544425ad32d73a3cd3991f6834ec04028a","urls":["bzz-raw://242a38f560c8dc312e27a30dad15ddf2fccb4163f4f0692f814b3cfa71180105","dweb:/ipfs/QmZqhSdNeRiVf5rJJYgX48SiUi1dwgpYAvMo6a7XBVRjXF"],"license":null},"src/Fetcher.sol":{"keccak256":"0x1895e5c0688650ca60371f208b62d9f64beea29bd7515b2600a1c8d5c73805df","urls":["bzz-raw://f9c904c9d032167f6d8fec1392c9a023f339a4aee9f75f06df6347a495af9d38","dweb:/ipfs/QmYSaPzRawAnh2qD3JY5uvWypEueo5hSTQVyVFfX96msfb"],"license":null},"src/LiquidExchange.sol":{"keccak256":"0xc979e540abc8a2d1bc82f2c741beb4ea9037c7e69ab11a5a20ef11ab7b9cee22","urls":["bzz-raw://e5f08cb7b8685020a78fd9b84d740649dcbf9ba92057cc5914d829f275d396c5","dweb:/ipfs/QmQKVvRCmSumaf2xtbLey6KdUyt9bfTLeq9gPGssisJi17"],"license":"MIT"}},"version":1},"id":53} \ No newline at end of file diff --git a/src/engine/arbitrageur.rs b/src/engine/arbitrageur.rs index de51e0f..bb6b3c8 100644 --- a/src/engine/arbitrageur.rs +++ b/src/engine/arbitrageur.rs @@ -36,7 +36,7 @@ impl Arbitrageur for FixedArbitrageur { let controller = ArenaController::new(signal.controller, provider.clone()); controller - .equalizePrice() + .equalizePrice(Signed::try_from(100000).unwrap()) .nonce( provider .clone() @@ -50,6 +50,8 @@ impl Arbitrageur for FixedArbitrageur { .watch() .await .unwrap(); + + println!("current: {}", signal.current_value); } } diff --git a/src/lib.rs b/src/lib.rs index 24c654c..285bd87 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -311,8 +311,12 @@ impl Signal { #[cfg(test)] mod tests { - use alloy::primitives::{Signed, Uint, I256}; + use alloy::{ + primitives::{FixedBytes, Signed, Uint, I256}, + providers::WalletProvider, + }; use async_trait::async_trait; + use rug::{ops::Pow, Float}; use super::*; use crate::{ @@ -324,10 +328,8 @@ mod tests { }, feed::OrnsteinUhlenbeck, strategy::Strategy, + types::controller::ArenaController, }; - use alloy::providers::WalletProvider; - use crate::types::controller::ArenaController; - use alloy::primitives::FixedBytes; struct StrategyMock; @@ -343,8 +345,8 @@ mod tests { engine .modify_liquidity( I256::try_from(10000000).unwrap(), - Signed::try_from(-1000).unwrap(), - Signed::try_from(1000).unwrap(), + Signed::try_from(-887272).unwrap(), + Signed::try_from(887272).unwrap(), provider, ) .await @@ -357,20 +359,12 @@ mod tests { _inspector: &mut Box>, _engine: Engine, ) { - let controller = ArenaController::new(signal.controller, provider.clone()); - - let position_info = controller - .getPositionInfo( - controller.getRouter().call().await.unwrap()._0, - Signed::try_from(-1000).unwrap(), - Signed::try_from(1000).unwrap(), - FixedBytes::ZERO, - ) - .call() - .await - .unwrap(); + let sqrt_price_x96 = + Float::with_val(53, Float::parse(signal.sqrt_price_x96.to_string()).unwrap()); + let q96 = Float::with_val(53, 2).pow(96); + let price = Float::with_val(53, sqrt_price_x96 / q96).pow(2); - println!("position_info: {:?}", position_info); + println!("price: {}", price); } } @@ -379,12 +373,15 @@ mod tests { let builder: ArenaBuilder<_> = ArenaBuilder::new(); let mut arena: Arena<_> = builder - .with_strategy(Box::new(StrategyMock {})) - .with_feed(Box::new(OrnsteinUhlenbeck::new(10.0, 0.1, 0.1, 0.1, 0.1))) + .with_strategy(Box::new(StrategyMock)) + .with_feed(Box::new(OrnsteinUhlenbeck::new(1.0, 0.1, 1.0, 0.1, 0.1))) .with_inspector(Box::new(EmptyInspector {})) .with_arbitrageur(Box::new(FixedArbitrageur::default())) .build(); - arena.run(Config::new(Uint::from(5000), 10)).await.unwrap(); + arena + .run(Config::new(Uint::from(5000), 10000)) + .await + .unwrap(); } }