@uniswap/v4-periphery
Version:
🦄 Peripheral smart contracts for interacting with Uniswap v4
1 lines • 126 kB
JSON
{"abi":[{"type":"constructor","inputs":[{"name":"_manager","type":"address","internalType":"contract IPoolManager"},{"name":"_weth","type":"address","internalType":"address payable"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"afterAddLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterDonate","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterInitialize","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"tick","type":"int24","internalType":"int24"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterRemoveLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterSwap","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int128","internalType":"int128"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeAddLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeDonate","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeInitialize","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeRemoveLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeSwap","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BeforeSwapDelta"},{"name":"","type":"uint24","internalType":"uint24"}],"stateMutability":"nonpayable"},{"type":"function","name":"getHookPermissions","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Hooks.Permissions","components":[{"name":"beforeInitialize","type":"bool","internalType":"bool"},{"name":"afterInitialize","type":"bool","internalType":"bool"},{"name":"beforeAddLiquidity","type":"bool","internalType":"bool"},{"name":"afterAddLiquidity","type":"bool","internalType":"bool"},{"name":"beforeRemoveLiquidity","type":"bool","internalType":"bool"},{"name":"afterRemoveLiquidity","type":"bool","internalType":"bool"},{"name":"beforeSwap","type":"bool","internalType":"bool"},{"name":"afterSwap","type":"bool","internalType":"bool"},{"name":"beforeDonate","type":"bool","internalType":"bool"},{"name":"afterDonate","type":"bool","internalType":"bool"},{"name":"beforeSwapReturnDelta","type":"bool","internalType":"bool"},{"name":"afterSwapReturnDelta","type":"bool","internalType":"bool"},{"name":"afterAddLiquidityReturnDelta","type":"bool","internalType":"bool"},{"name":"afterRemoveLiquidityReturnDelta","type":"bool","internalType":"bool"}]}],"stateMutability":"pure"},{"type":"function","name":"poolManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPoolManager"}],"stateMutability":"view"},{"type":"function","name":"underlyingCurrency","inputs":[],"outputs":[{"name":"","type":"address","internalType":"Currency"}],"stateMutability":"view"},{"type":"function","name":"weth","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract WETH"}],"stateMutability":"view"},{"type":"function","name":"wrapZeroForOne","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"wrapperCurrency","inputs":[],"outputs":[{"name":"","type":"address","internalType":"Currency"}],"stateMutability":"view"},{"type":"error","name":"DeltaNotNegative","inputs":[{"name":"currency","type":"address","internalType":"Currency"}]},{"type":"error","name":"DeltaNotPositive","inputs":[{"name":"currency","type":"address","internalType":"Currency"}]},{"type":"error","name":"ExactInputNotSupported","inputs":[]},{"type":"error","name":"ExactOutputNotSupported","inputs":[]},{"type":"error","name":"HookNotImplemented","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[]},{"type":"error","name":"InvalidPoolFee","inputs":[]},{"type":"error","name":"InvalidPoolToken","inputs":[]},{"type":"error","name":"LiquidityNotAllowed","inputs":[]},{"type":"error","name":"NotPoolManager","inputs":[]}],"bytecode":{"object":"0x610120604052348015610010575f80fd5b50604051611f42380380611f4283398101604081905261002f916102e2565b6001600160a01b03821660805281815f8261004930610076565b506001600160a01b0391821660a081905290821660c08190521060e05291909116610100525061031a9050565b61016681610161604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018390526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b610169565b50565b805115156120008316151514158061018d5750602081015115156110008316151514155b806101a45750604081015115156108008316151514155b806101bb5750606081015115156104008316151514155b806101d25750608081015115156102008316151514155b806101e9575060a081015115156101008316151514155b806101ff575060c0810151151560808316151514155b80610215575060e0810151151560408316151514155b8061022c5750610100810151151560208316151514155b806102435750610120810151151560108316151514155b8061025a5750610140810151151560088316151514155b806102715750610160810151151560048316151514155b806102885750610180810151151560028316151514155b8061029f57506101a0810151151560018316151514155b156102b5576102b5630732d7b560e51b836102b9565b5050565b815f526001600160a01b03811660045260245ffd5b6001600160a01b0381168114610166575f80fd5b5f80604083850312156102f3575f80fd5b82516102fe816102ce565b602084015190925061030f816102ce565b809150509250929050565b60805160a05160c05160e05161010051611b3c6104065f395f81816101da01528181610e8d015261101201525f818161026f01528181610a5c0152610bfe01525f818161010e01528181610c8c01528181610e6c015261108301525f81816104a101528181610c3301528181610de40152610fbd01525f81816104d40152818161052e015281816105b501528181610634015281816106c301528181610752015281816107d801528181610865015281816108ee01528181610e1001528181610eb401528181611111015281816111c60152818161123a015281816112db01526113880152611b3c5ff3fe6080604052600436106100f2575f3560e01c80639f063efc11610087578063d52f63cf11610057578063d52f63cf14610490578063dc4c90d3146104c3578063dc98354e146104f6578063e1b4af6914610371575f80fd5b80639f063efc146102a1578063b47b2fb114610317578063b6a8b0fa14610371578063c4e833ce14610390575f80fd5b8063575e24b4116100c2578063575e24b4146101fc5780635d5711a51461025e5780636c2bbe7e146102a15780636fe7e6eb146102f8575f80fd5b80630bc6bffc146100fd57806321d0ee701461015a578063259982e5146101aa5780633fc8cef3146101c9575f80fd5b366100f957005b5f80fd5b348015610108575f80fd5b506101307f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610165575f80fd5b50610179610174366004611608565b610515565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610151565b3480156101b5575f80fd5b506101796101c4366004611608565b61059c565b3480156101d4575f80fd5b506101307f000000000000000000000000000000000000000000000000000000000000000081565b348015610207575f80fd5b5061021b61021636600461168f565b610619565b604080517fffffffff000000000000000000000000000000000000000000000000000000009094168452602084019290925262ffffff1690820152606001610151565b348015610269575f80fd5b506102917f000000000000000000000000000000000000000000000000000000000000000081565b6040519015158152602001610151565b3480156102ac575f80fd5b506102c06102bb3660046116e9565b6106a9565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352602083019190915201610151565b348015610303575f80fd5b50610179610312366004611774565b610739565b348015610322575f80fd5b506103366103313660046117d3565b6107be565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352600f9190910b602083015201610151565b34801561037c575f80fd5b5061017961038b366004611854565b61084c565b34801561039b575f80fd5b50610483604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018390526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b60405161015191906118ae565b34801561049b575f80fd5b506101307f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ce575f80fd5b506101307f000000000000000000000000000000000000000000000000000000000000000081565b348015610501575f80fd5b506101796105103660046119cf565b6108d5565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610585576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105928686868686610958565b9695505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461060c576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610592868686868661098b565b5f80803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461068b576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069888888888886109be565b925092509250955095509592505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461071a576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61072989898989898989610bc6565b9150915097509795505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146107a9576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b585858585610958565b95945050505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461082f576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083d888888888888610bc6565b91509150965096945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146108bc576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108ca878787878787610958565b979650505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610945576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610950848484610bfa565b949350505050565b5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040517f78895c1300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8080602086013581138080156109d257505f5b15610a09576040517f0ace433b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80158015610a1457505f5b15610a4b576040517f21b865b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a586020880188611a16565b15157f0000000000000000000000000000000000000000000000000000000000000000151503610b21575f81610a92576020880135610a9f565b610a9f6020890135611a69565b90505f80610aac83610da7565b915091505f84610acc57610ac7610ac284610f4a565b610f81565b610ae1565b610ad8610ac283610f4a565b610ae190611a9f565b9050610b16610af38c60200135610f81565b610afc90611a9f565b60801b6fffffffffffffffffffffffffffffffff83161790565b965050505050610b94565b5f81610b31576020880135610b3e565b610b3e6020890135611a69565b90505f80610b4b83610fb6565b915091505f84610b6657610b61610ac284610f4a565b610b7b565b610b72610ac283610f4a565b610b7b90611a9f565b9050610b8d610af38c60200135610f81565b9650505050505b507f575e24b40000000000000000000000000000000000000000000000000000000092505f9050955095509592505050565b5f806040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f807f0000000000000000000000000000000000000000000000000000000000000000610cce57610c70610c316020860186611adb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b8015610cc95750610cc9610c8a6040860160208701611adb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b610cf8565b610cde610c8a6020860186611adb565b8015610cf85750610cf8610c316040860160208701611adb565b905080610d31576040517fdcdedda900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d416060850160408601611af6565b62ffffff1615610d7d576040517f1213a0ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507fdc98354e00000000000000000000000000000000000000000000000000000000949350505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b158015610e51575f80fd5b505af1158015610e63573d5f803e3d5ffd5b50505050610eb27f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856110b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610f1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f409190611b18565b5091928392509050565b805f811215610f7c57610f7c7f93dafdf10000000000000000000000000000000000000000000000000000000061116d565b919050565b80600f81900b8114610f7c57610f7c7f93dafdf10000000000000000000000000000000000000000000000000000000061116d565b5f80610fe37f000000000000000000000000000000000000000000000000000000000000000030856110b1565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d906024015f604051808303815f87803b158015611068575f80fd5b505af115801561107a573d5f803e3d5ffd5b505050506110a97f00000000000000000000000000000000000000000000000000000000000000003085611175565b509091829150565b805f036110bd57505050565b6040517f0b0d9c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906064015f604051808303815f87803b158015611152575f80fd5b505af1158015611164573d5f803e3d5ffd5b50505050505050565b805f5260045ffd5b805f0361118157505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b158015611207575f80fd5b505af1158015611219573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff83166112ce577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af11580156112a3573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112c89190611b18565b50505050565b6112d983838361136c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611343573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c89190611b18565b505050565b61136773ffffffffffffffffffffffffffffffffffffffff84167f0000000000000000000000000000000000000000000000000000000000000000835f836113ed575f805f8085875af19050806113e8576113e8835f7ff4b3b1bc000000000000000000000000000000000000000000000000000000006114ab565b6112c8565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806112c8576112c8847fa9059cbb000000000000000000000000000000000000000000000000000000007ff27f64e4000000000000000000000000000000000000000000000000000000005b6040517f90bfb8650000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff851660048301527fffffffff0000000000000000000000000000000000000000000000000000000084166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201527fffffffff0000000000000000000000000000000000000000000000000000000084168260c4018201528160e40181fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461159a575f80fd5b50565b5f60a082840312156115ad575f80fd5b50919050565b5f608082840312156115ad575f80fd5b5f8083601f8401126115d3575f80fd5b50813567ffffffffffffffff8111156115ea575f80fd5b602083019150836020828501011115611601575f80fd5b9250929050565b5f805f805f610160868803121561161d575f80fd5b853561162881611579565b9450611637876020880161159d565b93506116468760c088016115b3565b925061014086013567ffffffffffffffff811115611662575f80fd5b61166e888289016115c3565b969995985093965092949392505050565b5f606082840312156115ad575f80fd5b5f805f805f61014086880312156116a4575f80fd5b85356116af81611579565b94506116be876020880161159d565b93506116cd8760c0880161167f565b925061012086013567ffffffffffffffff811115611662575f80fd5b5f805f805f805f6101a0888a031215611700575f80fd5b873561170b81611579565b965061171a8960208a0161159d565b95506117298960c08a016115b3565b94506101408801359350610160880135925061018088013567ffffffffffffffff811115611755575f80fd5b6117618a828b016115c3565b989b979a50959850939692959293505050565b5f805f806101008587031215611788575f80fd5b843561179381611579565b93506117a2866020870161159d565b925060c08501356117b281611579565b915060e0850135600281900b81146117c8575f80fd5b939692955090935050565b5f805f805f8061016087890312156117e9575f80fd5b86356117f481611579565b9550611803886020890161159d565b94506118128860c0890161167f565b9350610120870135925061014087013567ffffffffffffffff811115611836575f80fd5b61184289828a016115c3565b979a9699509497509295939492505050565b5f805f805f80610120878903121561186a575f80fd5b863561187581611579565b9550611884886020890161159d565b945060c0870135935060e0870135925061010087013567ffffffffffffffff811115611836575f80fd5b8151151581526101c0810160208301516118cc602084018215159052565b5060408301516118e0604084018215159052565b5060608301516118f4606084018215159052565b506080830151611908608084018215159052565b5060a083015161191c60a084018215159052565b5060c083015161193060c084018215159052565b5060e083015161194460e084018215159052565b5061010083015161195a61010084018215159052565b5061012083015161197061012084018215159052565b5061014083015161198661014084018215159052565b5061016083015161199c61016084018215159052565b506101808301516119b261018084018215159052565b506101a08301516119c86101a084018215159052565b5092915050565b5f805f60e084860312156119e1575f80fd5b83356119ec81611579565b92506119fb856020860161159d565b915060c0840135611a0b81611579565b809150509250925092565b5f60208284031215611a26575f80fd5b81358015158114611a35575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7f80000000000000000000000000000000000000000000000000000000000000008203611a9957611a99611a3c565b505f0390565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103611ad357611ad3611a3c565b5f0392915050565b5f60208284031215611aeb575f80fd5b8135611a3581611579565b5f60208284031215611b06575f80fd5b813562ffffff81168114611a35575f80fd5b5f60208284031215611b28575f80fd5b505191905056fea164736f6c634300081a000a","sourceMap":"501:1865:151:-:0;;;765:308;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;782:26:144;;;;865:8:151;901:5;1462:1:120;865:8:151;879:25:189::1;899:4;879:19;:25::i;:::-;-1:-1:-1::0;;;;;;3195:26:150;;::::1;;::::0;;;3231:32;;::::1;;::::0;;;734:50:120;3273:39:150::1;::::0;1039:27:151;;;::::1;;::::0;-1:-1:-1;501:1865:151;;-1:-1:-1;501:1865:151;1555:142:189;1632:58;1662:5;1669:20;501:1865:151;;;;;;;;-1:-1:-1;501:1865:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3457:568:150;;;;;;;;3507:4;3457:568;;;-1:-1:-1;3457:568:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3354:678;1669:20:189;1632:29;:58::i;:::-;1555:142;:::o;3610:1599:89:-;3729:28;;:74;;1397:7;16467:29;;:34;;3729:74;;;:166;;-1:-1:-1;3823:27:89;;;;:72;;1460:7;16467:29;;:34;;3823:72;;3729:166;:265;;;-1:-1:-1;3915:30:89;;;;:79;;1528:7;16467:29;;:34;;3915:79;;3729:265;:362;;;-1:-1:-1;4014:29:89;;;;:77;;1594:7;16467:29;;:34;;4014:77;;3729:362;:467;;;-1:-1:-1;4111:33:89;;;;:85;;1665:6;16467:29;;:34;;4111:85;;3729:467;:570;;;-1:-1:-1;4216:32:89;;;;:83;;1733:6;16467:29;;:34;;4216:83;;3729:570;:652;;;-1:-1:-1;4319:22:89;;;;:62;;1791:6;16467:29;;:34;;4319:62;;3729:652;:732;;;-1:-1:-1;4401:21:89;;;;:60;;1847:6;16467:29;;:34;;4401:60;;3729:732;:818;;;-1:-1:-1;4481:24:89;;;;:66;;1907:6;16467:29;;:34;;4481:66;;3729:818;:902;;;-1:-1:-1;4567:23:89;;;;:64;;1965:6;16467:29;;:34;;4567:64;;3729:902;:1009;;;-1:-1:-1;4651:33:89;;;;:87;;2037:6;16467:29;;:34;;4651:87;;3729:1009;:1114;;;-1:-1:-1;4758:32:89;;;;:85;;2107:6;16467:29;;:34;;4758:85;;3729:1114;:1236;;;-1:-1:-1;4863:40:89;;;;:102;;2186:6;16467:29;;:34;;4863:102;;3729:1236;:1384;;;-1:-1:-1;4985:43:89;;;;:128;;2268:6;16467:29;;:34;;4985:128;;3729:1384;3712:1491;;;5138:54;-1:-1:-1;;;5186:4:89;5138:39;:54::i;:::-;3610:1599;;:::o;1009:257:85:-;1133:8;1130:1;1123:19;-1:-1:-1;;;;;1172:4:85;1168:53;1162:4;1155:67;1245:4;1242:1;1235:15;14:145:262;-1:-1:-1;;;;;103:31:262;;93:42;;83:70;;149:1;146;139:12;164:443;273:6;281;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;382:9;376:16;401:45;440:5;401:45;:::i;:::-;515:2;500:18;;494:25;465:5;;-1:-1:-1;528:47:262;494:25;528:47;:::i;:::-;594:7;584:17;;;164:443;;;;;:::o;:::-;501:1865:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106100f2575f3560e01c80639f063efc11610087578063d52f63cf11610057578063d52f63cf14610490578063dc4c90d3146104c3578063dc98354e146104f6578063e1b4af6914610371575f80fd5b80639f063efc146102a1578063b47b2fb114610317578063b6a8b0fa14610371578063c4e833ce14610390575f80fd5b8063575e24b4116100c2578063575e24b4146101fc5780635d5711a51461025e5780636c2bbe7e146102a15780636fe7e6eb146102f8575f80fd5b80630bc6bffc146100fd57806321d0ee701461015a578063259982e5146101aa5780633fc8cef3146101c9575f80fd5b366100f957005b5f80fd5b348015610108575f80fd5b506101307f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610165575f80fd5b50610179610174366004611608565b610515565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610151565b3480156101b5575f80fd5b506101796101c4366004611608565b61059c565b3480156101d4575f80fd5b506101307f000000000000000000000000000000000000000000000000000000000000000081565b348015610207575f80fd5b5061021b61021636600461168f565b610619565b604080517fffffffff000000000000000000000000000000000000000000000000000000009094168452602084019290925262ffffff1690820152606001610151565b348015610269575f80fd5b506102917f000000000000000000000000000000000000000000000000000000000000000081565b6040519015158152602001610151565b3480156102ac575f80fd5b506102c06102bb3660046116e9565b6106a9565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352602083019190915201610151565b348015610303575f80fd5b50610179610312366004611774565b610739565b348015610322575f80fd5b506103366103313660046117d3565b6107be565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352600f9190910b602083015201610151565b34801561037c575f80fd5b5061017961038b366004611854565b61084c565b34801561039b575f80fd5b50610483604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018390526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b60405161015191906118ae565b34801561049b575f80fd5b506101307f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ce575f80fd5b506101307f000000000000000000000000000000000000000000000000000000000000000081565b348015610501575f80fd5b506101796105103660046119cf565b6108d5565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610585576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105928686868686610958565b9695505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461060c576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610592868686868661098b565b5f80803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461068b576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069888888888886109be565b925092509250955095509592505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461071a576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61072989898989898989610bc6565b9150915097509795505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146107a9576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b585858585610958565b95945050505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461082f576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083d888888888888610bc6565b91509150965096945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146108bc576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108ca878787878787610958565b979650505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610945576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610950848484610bfa565b949350505050565b5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040517f78895c1300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8080602086013581138080156109d257505f5b15610a09576040517f0ace433b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80158015610a1457505f5b15610a4b576040517f21b865b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a586020880188611a16565b15157f0000000000000000000000000000000000000000000000000000000000000000151503610b21575f81610a92576020880135610a9f565b610a9f6020890135611a69565b90505f80610aac83610da7565b915091505f84610acc57610ac7610ac284610f4a565b610f81565b610ae1565b610ad8610ac283610f4a565b610ae190611a9f565b9050610b16610af38c60200135610f81565b610afc90611a9f565b60801b6fffffffffffffffffffffffffffffffff83161790565b965050505050610b94565b5f81610b31576020880135610b3e565b610b3e6020890135611a69565b90505f80610b4b83610fb6565b915091505f84610b6657610b61610ac284610f4a565b610b7b565b610b72610ac283610f4a565b610b7b90611a9f565b9050610b8d610af38c60200135610f81565b9650505050505b507f575e24b40000000000000000000000000000000000000000000000000000000092505f9050955095509592505050565b5f806040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f807f0000000000000000000000000000000000000000000000000000000000000000610cce57610c70610c316020860186611adb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b8015610cc95750610cc9610c8a6040860160208701611adb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b610cf8565b610cde610c8a6020860186611adb565b8015610cf85750610cf8610c316040860160208701611adb565b905080610d31576040517fdcdedda900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d416060850160408601611af6565b62ffffff1615610d7d576040517f1213a0ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507fdc98354e00000000000000000000000000000000000000000000000000000000949350505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b158015610e51575f80fd5b505af1158015610e63573d5f803e3d5ffd5b50505050610eb27f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856110b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610f1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f409190611b18565b5091928392509050565b805f811215610f7c57610f7c7f93dafdf10000000000000000000000000000000000000000000000000000000061116d565b919050565b80600f81900b8114610f7c57610f7c7f93dafdf10000000000000000000000000000000000000000000000000000000061116d565b5f80610fe37f000000000000000000000000000000000000000000000000000000000000000030856110b1565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d906024015f604051808303815f87803b158015611068575f80fd5b505af115801561107a573d5f803e3d5ffd5b505050506110a97f00000000000000000000000000000000000000000000000000000000000000003085611175565b509091829150565b805f036110bd57505050565b6040517f0b0d9c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906064015f604051808303815f87803b158015611152575f80fd5b505af1158015611164573d5f803e3d5ffd5b50505050505050565b805f5260045ffd5b805f0361118157505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b158015611207575f80fd5b505af1158015611219573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff83166112ce577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af11580156112a3573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112c89190611b18565b50505050565b6112d983838361136c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611343573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c89190611b18565b505050565b61136773ffffffffffffffffffffffffffffffffffffffff84167f0000000000000000000000000000000000000000000000000000000000000000835f836113ed575f805f8085875af19050806113e8576113e8835f7ff4b3b1bc000000000000000000000000000000000000000000000000000000006114ab565b6112c8565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806112c8576112c8847fa9059cbb000000000000000000000000000000000000000000000000000000007ff27f64e4000000000000000000000000000000000000000000000000000000005b6040517f90bfb8650000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff851660048301527fffffffff0000000000000000000000000000000000000000000000000000000084166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201527fffffffff0000000000000000000000000000000000000000000000000000000084168260c4018201528160e40181fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461159a575f80fd5b50565b5f60a082840312156115ad575f80fd5b50919050565b5f608082840312156115ad575f80fd5b5f8083601f8401126115d3575f80fd5b50813567ffffffffffffffff8111156115ea575f80fd5b602083019150836020828501011115611601575f80fd5b9250929050565b5f805f805f610160868803121561161d575f80fd5b853561162881611579565b9450611637876020880161159d565b93506116468760c088016115b3565b925061014086013567ffffffffffffffff811115611662575f80fd5b61166e888289016115c3565b969995985093965092949392505050565b5f606082840312156115ad575f80fd5b5f805f805f61014086880312156116a4575f80fd5b85356116af81611579565b94506116be876020880161159d565b93506116cd8760c0880161167f565b925061012086013567ffffffffffffffff811115611662575f80fd5b5f805f805f805f6101a0888a031215611700575f80fd5b873561170b81611579565b965061171a8960208a0161159d565b95506117298960c08a016115b3565b94506101408801359350610160880135925061018088013567ffffffffffffffff811115611755575f80fd5b6117618a828b016115c3565b989b979a50959850939692959293505050565b5f805f806101008587031215611788575f80fd5b843561179381611579565b93506117a2866020870161159d565b925060c08501356117b281611579565b915060e0850135600281900b81146117c8575f80fd5b939692955090935050565b5f805f805f8061016087890312156117e9575f80fd5b86356117f481611579565b9550611803886020890161159d565b94506118128860c0890161167f565b9350610120870135925061014087013567ffffffffffffffff811115611836575f80fd5b61184289828a016115c3565b979a9699509497509295939492505050565b5f805f805f80610120878903121561186a575f80fd5b863561187581611579565b9550611884886020890161159d565b945060c0870135935060e0870135925061010087013567ffffffffffffffff811115611836575f80fd5b8151151581526101c0810160208301516118cc602084018215159052565b5060408301516118e0604084018215159052565b5060608301516118f4606084018215159052565b506080830151611908608084018215159052565b5060a083015161191c60a084018215159052565b5060c083015161193060c084018215159052565b5060e083015161194460e084018215159052565b5061010083015161195a61010084018215159052565b5061012083015161197061012084018215159052565b5061014083015161198661014084018215159052565b5061016083015161199c61016084018215159052565b506101808301516119b261018084018215159052565b506101a08301516119c86101a084018215159052565b5092915050565b5f805f60e084860312156119e1575f80fd5b83356119ec81611579565b92506119fb856020860161159d565b915060c0840135611a0b81611579565b809150509250925092565b5f60208284031215611a26575f80fd5b81358015158114611a35575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7f80000000000000000000000000000000000000000000000000000000000000008203611a9957611a99611a3c565b505f0390565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103611ad357611ad3611a3c565b5f0392915050565b5f60208284031215611aeb575f80fd5b8135611a3581611579565b5f60208284031215611b06575f80fd5b813562ffffff81168114611a35575f80fd5b5f60208284031215611b28575f80fd5b505191905056fea164736f6c634300081a000a","sourceMap":"501:1865:151:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2302:44:150;;;;;;;;;;;;;;;;;;220:42:262;208:55;;;190:74;;178:2;163:18;2302:44:150;;;;;;;;3093:290:189;;;;;;;;;;-1:-1:-1;3093:290:189;;;;;:::i;:::-;;:::i;:::-;;;2130:66:262;2118:79;;;2100:98;;2088:2;2073:18;3093:290:189;1956:248:262;2560:284:189;;;;;;;;;;-1:-1:-1;2560:284:189;;;;;:::i;:::-;;:::i;584:26:151:-;;;;;;;;;;;;;;;5032:272:189;;;;;;;;;;-1:-1:-1;5032:272:189;;;;;:::i;:::-;;:::i;:::-;;;;3701:66:262;3689:79;;;3671:98;;3800:2;3785:18;;3778:34;;;;3860:8;3848:21;3828:18;;;3821:49;3659:2;3644:18;5032:272:189;3437:439:262;2813:36:150;;;;;;;;;;;;;;;;;;4142:14:262;;4135:22;4117:41;;4105:2;4090:18;2813:36:150;3977:187:262;4329:384:189;;;;;;;;;;-1:-1:-1;4329:384:189;;;;;:::i;:::-;;:::i;:::-;;;;5548:66:262;5536:79;;;5518:98;;5647:2;5632:18;;5625:34;;;;5491:18;4329:384:189;5313:352:262;2134:240:189;;;;;;;;;;-1:-1:-1;2134:240:189;;;;;:::i;:::-;;:::i;5559:298::-;;;;;;;;;;-1:-1:-1;5559:298:189;;;;;:::i;:::-;;:::i;:::-;;;;7529:66:262;7517:79;;;7499:98;;7644:2;7633:22;;;;7628:2;7613:18;;7606:50;7472:18;5559:298:189;7329:333:262;6108:285:189;;;;;;;;;;-1:-1:-1;6108:285:189;;;;;:::i;:::-;;:::i;3354:678:150:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3457:568:150;;;;;;;;3507:4;3457:568;;;-1:-1:-1;3457:568:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3354:678;;;;;;;;:::i;2196:41::-;;;;;;;;;;;;;;;411::144;;;;;;;;;;;;;;;1730:224:189;;;;;;;;;;-1:-1:-1;1730:224:189;;;;;:::i;:::-;;:::i;3093:290::-;3298:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;3323:53:189::1;3346:6;3354:3;3359:6;3367:8;;3323:22;:53::i;:::-;3316:60:::0;3093:290;-1:-1:-1;;;;;;3093:290:189:o;2560:284::-;2762:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;2787:50:189::1;2807:6;2815:3;2820:6;2828:8;;2787:19;:50::i;5032:272::-:0;5201:6;;;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;5255:42:189::1;5267:6;5275:3;5280:6;5288:8;;5255:11;:42::i;:::-;5248:49;;;;;;5032:272:::0;;;;;;;;;:::o;4329:384::-;4595:6;;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;4634:72:189::1;4656:6;4664:3;4669:6;4677:5;4684:11;4697:8;;4634:21;:72::i;:::-;4627:79;;;;4329:384:::0;;;;;;;;;;:::o;2134:240::-;2289:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;2318:49:189::1;2335:6;2343:3;2348:12;2362:4;2318:16;:49::i;:::-;2311:56:::0;2134:240;-1:-1:-1;;;;;2134:240:189:o;5559:298::-;5769:6;;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;5802:48:189::1;5813:6;5821:3;5826:6;5834:5;5841:8;;5802:10;:48::i;:::-;5795:55;;;;5559:298:::0;;;;;;;;;:::o;6108:285::-;6307:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;6332:54:189::1;6346:6;6354:3;6359:7;6368;6377:8;;6332:13;:54::i;:::-;6325:61:::0;6108:285;-1:-1:-1;;;;;;;6108:285:189:o;1730:224::-;1874:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;1903:44:189::1;1921:6;1929:3;1934:12;1903:17;:44::i;:::-;1896:51:::0;1730:224;-1:-1:-1;;;;1730:224:189:o;3389:213::-;3546:6;3575:20;;;;;;;;;;;;;;5042:225:150;5210:6;5239:21;;;;;;;;;;;;;;5720:1650;5863:6;;;5940:22;;;;:26;-1:-1:-1;5940:26:150;5980:38;;;;-1:-1:-1;5996:22:150;5980:38;5976:75;;;6027:24;;;;;;;;;;;;;;5976:75;6066:12;6065:13;:40;;;;-1:-1:-1;6082:23:150;6065:40;6061:78;;;6114:25;;;;;;;;;;;;;;6061:78;6172:17;;;;:6;:17;:::i;:::-;6154:35;;:14;:35;;;6150:1154;;6236:19;6274:12;:104;;6354:22;;;;6274:104;;;6297:23;6298:22;;;;6297:23;:::i;:::-;6236:142;;6393:30;6425:21;6450;6459:11;6450:8;:21::i;:::-;6392:79;;;;6485:24;6528:12;:98;;6582:44;:33;:22;:31;:33::i;:::-;:42;:44::i;:::-;6528:98;;;6544:35;:24;:13;:22;:24::i;:35::-;6543:36;;;:::i;:::-;6485:141;;6652:72;6671:33;:6;:22;;;:31;:33::i;:::-;6670:34;;;:::i;:::-;548:3:119;510:24;540:19;536:42;;507:72;;317:270;6652:72:150;6640:84;;6191:544;;;;6150:1154;;;6788:19;6810:12;:138;;6924:22;;;;6810:138;;;6849:23;6850:22;;;;6849:23;:::i;:::-;6788:160;;6963:27;6992:23;7019:22;7029:11;7019:9;:22::i;:::-;6962:79;;;;7055:24;7098:12;:97;;7154:41;:30;:19;:28;:30::i;:41::-;7098:97;;;7114:37;:26;:15;:24;:26::i;:37::-;7113:38;;;:::i;:::-;7055:140;;7221:72;7240:33;:6;:22;;;:31;:33::i;7221:72::-;7209:84;;6741:563;;;;6150:1154;-1:-1:-1;7322:26:150;;-1:-1:-1;7361:1:150;;-1:-1:-1;5720:1650:150;;;;;;;;;:::o;4719:280:189:-;4933:6;4941:12;4972:20;;;;;;;;;;;;;;4304:591:150;4407:6;4504:16;4523:14;:206;;4649:36;:17;;;;:7;:17;:::i;:::-;4670:15;448:51:120;;;;;;;;364:138;4649:36:150;:79;;;;-1:-1:-1;4689:39:150;:17;;;;;;;;:::i;:::-;4710:18;448:51:120;;;;;;;;364:138;4689:39:150;4523:206;;;4553:39;:17;;;;:7;:17;:::i;:39::-;:79;;;;-1:-1:-1;4596:36:150;:17;;;;;;;;:::i;:36::-;4504:225;;4745:11;4740:43;;4765:18;;;;;;;;;;;;;;4740:43;4797:11;;;;;;;;:::i;:::-;:16;;;4793:45;;4822:16;;;;;;;;;;;;;;4793:45;-1:-1:-1;4856:32:150;;4304:591;-1:-1:-1;;;;4304:591:150:o;1238:567:151:-;1373:33;;;;;:16;1390:15;208:55:262;;1373:33:151;;;190:74:262;-1:-1:-1;;;;1373:11:151;:16;;;;163:18:262;;1373:33:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:58;1575:18;1603:4;1610:16;1569:5;:58::i;:::-;1712:11;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1750:16:151;;;;-1:-1:-1;1238:567:151;-1:-1:-1;1238:567:151:o;1776:151:98:-;1859