@uniswap/v4-periphery
Version:
🦄 Peripheral smart contracts for interacting with Uniswap v4
1 lines • 920 kB
JSON
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_SCRIPT","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"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":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"_WETH9","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IWETH9"}],"stateMutability":"view"},{"type":"function","name":"deployAndApprovePosm","inputs":[{"name":"poolManager","type":"address","internalType":"contract IPoolManager"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deployPermit2","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployPosmHookModifyLiquidities","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deployPosmHookSavesDelta","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"positionDescriptor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPositionDescriptor"}],"stateMutability":"view"},{"type":"function","name":"run","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_fuzz_burn_native_emptyPosition_withClose","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_burn_native_emptyPosition_withTakePair","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_burn_native_nonEmptyPosition_withClose","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_burn_native_nonEmptyPosition_withTakePair","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_collect_native_withClose","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_collect_native_withTakePair","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_collect_native_withTakePair_addressRecipient","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_collect_native_withTakePair_msgSenderRecipient","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_decreaseLiquidity_native_withClose","inputs":[{"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":"decreaseLiquidityDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_decreaseLiquidity_native_withTakePair","inputs":[{"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":"decreaseLiquidityDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_increaseLiquidity_native","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_increaseLiquidity_native_excess_withClose","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_increaseLiquidity_native_excess_withSettlePair","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_mint_native","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_mint_native_excess_withClose","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_mint_native_excess_withSettlePair","inputs":[{"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"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_mint_subscribe_native","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x600c805460ff199081166001908117909255601f80548216831790556077196080819052607860a0819052670de0b6b3a764000060c08190525f60e0819052602080546378ffff8865ffffffffffff19918216811790925560219390935560228290556101009490945261012092909252670de0b6b3a763ffff196101408190526101608390526023805490921690931790556024919091556025556101e06040526101808290526063196101a08190526bb504f333f9de6484597d89b36101c0819052602680549093168417909255602755602880546001600160a01b0319908116909217905560428054909116600e17905560438054614000600160a11b036001600160a81b031990911617905561011a9042906101ae565b604555604b80546001600160a01b03191661050017905560405161013d906101a0565b604051809103905ff080158015610156573d5f803e3d5ffd5b50604c80546001600160a01b03929092166001600160a01b0319928316179055604e8054821661abcd17905560508054909116610f8017905534801561019a575f80fd5b506101d3565b61121e806202971683390190565b808201808211156101cd57634e487b7160e01b5f52601160045260245ffd5b92915050565b6202953480620001e25f395ff3fe6080604052600436106102cf575f3560e01c806393da6b9b1161017b578063c0406226116100d1578063e20c9f7111610087578063eef95aee11610062578063eef95aee14610807578063f8ccbf4714610826578063fa7626d414610857575f80fd5b8063e20c9f71146107b5578063eab43df4146107c9578063eeaddd1c146107e8575f80fd5b8063c7b8e15d116100b7578063c7b8e15d14610779578063c9ec18721461078d578063cb695390146107a1575f80fd5b8063c040622614610746578063c701e76c1461075a575f80fd5b8063b0464fdc11610131578063b5508aa91161010c578063b5508aa9146106ef578063ba414fa614610703578063ba904db214610727575f80fd5b8063b0464fdc14610652578063b1a73b8a14610666578063b4b5668b146106d0575f80fd5b8063a0165b3911610161578063a0165b39146105f5578063a32a077e14610614578063afbe5bc414610633575f80fd5b806393da6b9b146105b7578063995848b9146105d6575f80fd5b8063542524dd116102305780637d42e7da116101e65780638f8b9d11116101c15780638f8b9d111461054a578063916a17c61461056957806393ad73ed1461058a575f80fd5b80637d42e7da146104eb5780637e0676dd1461050a57806385226c8114610529575f80fd5b806366d9a9a01161021657806366d9a9a01461049757806367382c05146104b85780637918b1e9146104cc575f80fd5b8063542524dd1461045757806363e8f7281461046b575f80fd5b80632de58524116102855780633e5e3c231161026b5780633e5e3c231461041b5780633f7286f41461042f5780634a9ebd3c14610443575f80fd5b80632de58524146103a757806339cd2013146103c6575f80fd5b8063106d0231116102b5578063106d02311461030f5780631ed7831c146103655780632ade388014610386575f80fd5b806303ef31f6146102da5780630a9254e4146102fb575f80fd5b366102d657005b5f80fd5b3480156102e5575f80fd5b506102f96102f436600461ae04565b610870565b005b348015610306575f80fd5b506102f9610884565b34801561031a575f80fd5b5060475461033b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610370575f80fd5b50610379610b76565b60405161035c919061ae1f565b348015610391575f80fd5b5061039a610be3565b60405161035c919061aec3565b3480156103b2575f80fd5b506102f96103c136600461b0d5565b610d2c565b3480156103d1575f80fd5b506023546024546025546103f392600281810b936301000000909204900b9184565b60408051600295860b81529390940b602084015292820152606081019190915260800161035c565b348015610426575f80fd5b5061037961152e565b34801561043a575f80fd5b50610379611599565b34801561044e575f80fd5b506102f9611604565b348015610462575f80fd5b5061033b611c1a565b348015610476575f80fd5b50604d5461033b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104a2575f80fd5b506104ab611c3c565b60405161035c919061b14b565b3480156104c3575f80fd5b506102f9611db5565b3480156104d7575f80fd5b506102f96104e636600461b0d5565b611ec9565b3480156104f6575f80fd5b506102f961050536600461b0d5565b6124f4565b348015610515575f80fd5b506102f961052436600461b0d5565b612a47565b348015610534575f80fd5b5061053d612fb7565b60405161035c919061b1e7565b348015610555575f80fd5b506102f961056436600461b0d5565b613082565b348015610574575f80fd5b5061057d613624565b60405161035c919061b25c565b348015610595575f80fd5b506020546021546022546103f392600281810b936301000000909204900b9184565b3480156105c2575f80fd5b506102f96105d136600461b2fe565b613727565b3480156105e1575f80fd5b506102f96105f036600461b2fe565b613bd6565b348015610600575f80fd5b506102f961060f36600461b0d5565b6140cf565b34801561061f575f80fd5b506102f961062e36600461b0d5565b6145b9565b34801561063e575f80fd5b506102f961064d36600461b0d5565b614952565b34801561065d575f80fd5b5061057d6151b9565b348015610671575f80fd5b5060265460275460285461069d9260ff16919073ffffffffffffffffffffffffffffffffffffffff1683565b604080519315158452602084019290925273ffffffffffffffffffffffffffffffffffffffff169082015260600161035c565b3480156106db575f80fd5b506102f96106ea36600461b0d5565b6152bc565b3480156106fa575f80fd5b5061053d6156e8565b34801561070e575f80fd5b506107176157b3565b604051901515815260200161035c565b348015610732575f80fd5b506102f961074136600461b0d5565b615883565b348015610751575f80fd5b5061033b615c31565b348015610765575f80fd5b506102f961077436600461b0d5565b615cf7565b348015610784575f80fd5b5061033b6164ae565b348015610798575f80fd5b5061033b6164be565b3480156107ac575f80fd5b506102f96164cc565b3480156107c0575f80fd5b50610379616654565b3480156107d4575f80fd5b506102f96107e336600461b0d5565b6166bf565b3480156107f3575f80fd5b506102f961080236600461b0d5565b616c3b565b348015610812575f80fd5b506102f961082136600461b0d5565b6172ba565b348015610831575f80fd5b506043546107179074010000000000000000000000000000000000000000900460ff1681565b348015610862575f80fd5b50601f546107179060ff1681565b6108798161766e565b610881617811565b50565b61088c617857565b610894617e16565b505061089e611db5565b602980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055602a54604a54610902915f9173ffffffffffffffffffffffffffffffffffffffff9182169116610bb86c01000000000000000000000000617e97565b6054558051603980547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416179091556020830151603a8054604086015160608701519386167fffffffffffffffffff0000000000000000000000000000000000000000000000909216919091177401000000000000000000000000000000000000000062ffffff92831602177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000009190931602919091179055608090920151603b805490931690821617909155602b54610a0f911661766e565b602a54610a319073ffffffffffffffffffffffffffffffffffffffff16617ff3565b60445460405173ffffffffffffffffffffffffffffffffffffffff90911690610a599061ad1f565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610a8f573d5f803e3d5ffd5b50605580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081523060048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015b5f604051808303815f87803b158015610b5e575f80fd5b505af1158015610b70573d5f803e3d5ffd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610bd957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bae575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015610d23575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610d0c578382905f5260205f20018054610c819061b327565b80601f0160208091040260200160405190810160405280929190818152602001828054610cad9061b327565b8015610cf85780601f10610ccf57610100808354040283529160200191610cf8565b820191905f5260205f20905b815481529060010190602001808311610cdb57829003601f168201915b505050505081526020019060010190610c64565b505050508152505081526020019060010190610c06565b50505050905090565b602a5447905f90610d529073ffffffffffffffffffffffffffffffffffffffff16618123565b6040805160a08101825260395473ffffffffffffffffffffffffffffffffffffffff9081168252603a54808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b6060820152603b549091166080820152909150610df290846c010000000000000000000000006181dd565b92507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff16634c63e5625f855f015160020b128015610e4d5750846020015160020b5f125b6040518263ffffffff1660e01b8152600401610e6d911515815260200190565b5f6040518083038186803b158015610e83575f80fd5b505afa158015610e95573d5f803e3d5ffd5b505050505f80846040015112610eaf578360400151610ebd565b8360400151610ebd9061b3a5565b604080516101008101825260395473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603a54808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c0850152603b54831660e08501529083528851810b6020808501919091528981015190910b8385015260445484517f75794a3c000000000000000000000000000000000000000000000000000000008152945195965092945f9493909216926375794a3c92600480830193928290030181865afa158015610fbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fdf919061b3db565b90506110286c01000000000000000000000000838560015f5b6040519080825280601f01601f191660200182016040528015611022576020820181803683370190505b5061824f565b6044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018390525f9173ffffffffffffffffffffffffffffffffffffffff1690631efeed3390602401602060405180830381865afa158015611095573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b9919061b3f2565b6fffffffffffffffffffffffffffffffff1690506110db8188604001516182fd565b6029545f906110ff9073ffffffffffffffffffffffffffffffffffffffff16618123565b602a549091505f906111269073ffffffffffffffffffffffffffffffffffffffff16618123565b90505f611131618378565b90506111b16003865f80805b6040519080825280601f01601f191660200182016040528015611167576020820181803683370190505b5060405160200161117b949392919061b421565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528391906183d4565b5085515f906111c2908390306185ea565b6044546045546040517fdd46508f00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff9091169163dd46508f9161121f9185919060040161b469565b5f604051808303815f87803b158015611236575f80fd5b505af1158015611248573d5f803e3d5ffd5b505050505f611255618680565b6044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018a905291925073ffffffffffffffffffffffffffffffffffffffff1690631efeed3390602401602060405180830381865afa1580156112c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e7919061b3f2565b6fffffffffffffffffffffffffffffffff169550611305865f6182fd565b60295461135d9061132b9073ffffffffffffffffffffffffffffffffffffffff16618123565b6113358360801d90565b611351906fffffffffffffffffffffffffffffffff168861b48a565b655af3107a4000618784565b602a546113a9906113839073ffffffffffffffffffffffffffffffffffffffff16618123565b61138d83600f0b90565b611351906fffffffffffffffffffffffffffffffff168761b48a565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611410575f80fd5b505af1158015611422573d5f803e3d5ffd5b50506044546040517f6352211e0000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250636352211e9150602401602060405180830381865afa158015611493573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b7919061b49d565b506029546114e6906114de9073ffffffffffffffffffffffffffffffffffffffff16618123565b8c6001618810565b6114f2478c6001618810565b602a54611520906115189073ffffffffffffffffffffffffffffffffffffffff16618123565b8b6001618810565b505050505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610bd957602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bae575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610bd957602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bae575050505050905090565b604454604080517f75794a3c00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff16916375794a3c9160048083019260209291908290030181865afa158015611671573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611695919061b3db565b604080516101008101825260395473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603a54808316608085015262ffffff7401000000000000000000000000000000000000000082041660a085015277010000000000000000000000000000000000000000000000900460020b60c0840152603b5490911660e083015281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc46020820152603c918101919091529091505f61175a618378565b825160208085015160408087015181515f815293840182529495506117ab9460029461117b9490939268056bc75e2d63100000916fffffffffffffffffffffffffffffffff9182913091810161b4b8565b508151516040805173ffffffffffffffffffffffffffffffffffffffff90921660208301526117dd916012910161117b565b506118176012835f01516020015160405160200161117b919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b50604080515f602082015230918101919091526118399060149060600161117b565b505f6118448261886f565b604080516002808252606082019092529192505f9190816020015b606081526020019060019003908161185f5750506045546040519192507fdd46508f00000000000000000000000000000000000000000000000000000000916118ac91859160240161b469565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050815f8151811061191b5761191b61b5cf565b602090810291909101810191909152605554604080515f815292830190527f2b9261de000000000000000000000000000000000000000000000000000000009161198391889173ffffffffffffffffffffffffffffffffffffffff909116906044810161b5fc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050816001815181106119f3576119f361b5cf565b60209081029190910101526044546040517fac9650d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063ac9650d890678ac7230489e8000090611a5e90859060040161b6a8565b5f6040518083038185885af1158015611a79573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611abf919081019061b74f565b506044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018790525f9173ffffffffffffffffffffffffffffffffffffffff1690631efeed3390602401602060405180830381865afa158015611b2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b51919061b3f2565b6fffffffffffffffffffffffffffffffff169050611b788168056bc75e2d631000006182fd565b605554604080517f1674360d0000000000000000000000000000000000000000000000000000000081529051611c129273ffffffffffffffffffffffffffffffffffffffff1691631674360d9160048083019260209291908290030181865afa158015611be7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0b919061b3db565b60016182fd565b505050505050565b611c39600173fffd8963efd1fc6a506488495d951d5263988d2661b810565b81565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015610d23578382905f5260205f2090600202016040518060400160405290815f82018054611c8f9061b327565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbb9061b327565b8015611d065780601f10611cdd57610100808354040283529160200191611d06565b820191905f5260205f20905b815481529060010190602001808311611ce957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611d9d57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611d4a5790505b50505050508152505081526020019060010190611c5f565b5f604051611dc29061ad2d565b604051809103905ff080158015611ddb573d5f803e3d5ffd5b50604b546040805173ffffffffffffffffffffffffffffffffffffffff808516803b8381016020908101909552808452959650737109709ecfa91a80626ff3989d68f67f5b1dd12d9563b4d6c78295909216935f91908401903c6040518363ffffffff1660e01b8152600401611e5292919061b83c565b5f604051808303815f87803b158015611e69575f80fd5b505af1158015611e7b573d5f803e3d5ffd5b5050604b54604a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055505050565b6040805160a08101825260395473ffffffffffffffffffffffffffffffffffffffff9081168252603a54808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b6060820152603b549091166080820152611f6690826c010000000000000000000000006181dd565b90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff16634c63e5625f835f015160020b128015611fc15750826020015160020b5f125b6040518263ffffffff1660e01b8152600401611fe1911515815260200190565b5f6040518083038186803b158015611ff7575f80fd5b505afa158015612009573d5f803e3d5ffd5b505050505f80826040015112612023578160400151612031565b81604001516120319061b3a5565b604080516101008101825260395473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603a54808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c0850152603b54831660e08501529083528651810b602080850191909152870151900b92820192909252602954929350915f916120e99116618123565b602a549091505f906121109073ffffffffffffffffffffffffffffffffffffffff16618123565b90505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121a1919061b3db565b90505f6121ac618378565b85516020870151604088015192935061221c9260029291908a6fffffffffffffffffffffffffffffffff80305f5b6040519080825280601f01601f191660200182016040528015612204576020820181803683370190505b5060405160200161117b98979695949392919061b86a565b50603954603a546040805173ffffffffffffffffffffffffffffffffffffffff9384166020820152929091169082015261225b90600d9060600161117b565b506029546040805173ffffffffffffffffffffffffffffffffffffffff909216602083015230908201526122949060149060600161117b565b505f61229f8261886f565b90505f6122da6c010000000000000000000000006122bf8b5f01516188a1565b6122cc8c602001516188a1565b6122d58c618b9e565b618be1565b5060445490915073ffffffffffffffffffffffffffffffffffffffff1663dd46508f61230783600261b968565b61231290600161b48a565b846045546040518463ffffffff1660e01b815260040161233392919061b469565b5f604051808303818588803b15801561234a575f80fd5b505af115801561235c573d5f803e3d5ffd5b50505050505f61236a618680565b6044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018890529192505f9173ffffffffffffffffffffffffffffffffffffffff90911690631efeed3390602401602060405180830381865afa1580156123dc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612400919061b3f2565b6fffffffffffffffffffffffffffffffff169050612422818c604001516182fd565b60295461246d906124489073ffffffffffffffffffffffffffffffffffffffff16618123565b612452908a61b97f565b61245c8460801d90565b6124659061b992565b600f0b6182fd565b6029546124ad906124939073ffffffffffffffffffffffffffffffffffffffff16618123565b61249d908a61b97f565b6124a885600161b48a565b6182fd565b602a546124e7906124d39073ffffffffffffffffffffffffffffffffffffffff16618123565b6124dd908961b97f565b61245c84600f0b90565b5050505050505050505050565b6040805160a08101825260395473ffffffffffffffffffffffffffffffffffffffff9081168252603a54808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b6060820152603b54909116608082015261259190826c010000000000000000000000006181dd565b90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff16634c63e5625f835f015160020b1280156125ec5750826020015160020b5f125b6040518263ffffffff1660e01b815260040161260c911515815260200190565b5f6040518083038186803b158015612622575f80fd5b505afa158015612634573d5f803e3d5ffd5b5050604080516101008101825260395473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603a54808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c0850152603b54831660e08501529083528651810b6020808501919091528781015190910b8385015260445484517f75794a3c00000000000000000000000000000000000000000000000000000000815294519396505f9550909116926375794a3c92600480830193928290030181865afa158015612732573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612756919061b3db565b905061278a6c0100000000000000000000000083856040015160015f67ffffffffffffffff811115610ff857610ff861afd5565b603054670de0b6b3a76400009067016345785d8a00009073ffffffffffffffffffffffffffffffffffffffff1663234266d783603981855f6040519080825280601f01601f1916602001820160405280156127ec576020820181803683370190505b506040518663ffffffff1660e01b815260040161280c949392919061b9ce565b60206040518083038185885af1158015612828573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061284d919061b3db565b50602a5447905f906128749073ffffffffffffffffffffffffffffffffffffffff16618123565b90505f61287f618378565b90506128cb6001875f8080805b6040519080825280601f01601f1916602001820160405280156128b6576020820181803683370190505b5060405160200161117b95949392919061ba85565b5086515f906128dc908390306185ea565b6044546045546040517fdd46508f00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff9091169163dd46508f916129399185919060040161b469565b5f604051808303815f87803b158015612950575f80fd5b505af1158015612962573d5f803e3d5ffd5b505050505f61296f618680565b6029549091506129ac90869061299a9073ffffffffffffffffffffffffffffffffffffffff16618123565b6129a4919061b97f565b886001618810565b6029546129ff9086906129d49073ffffffffffffffffffffffffffffffffffffffff16618123565b6129de919061b97f565b6129e88360801d90565b6fffffffffffffffffffffffffffffffff166182fd565b602a54612a3b908590612a279073ffffffffffffffffffffffffffffffffffffffff16618123565b612a31919061b97f565b6129e883600f0b90565b50505050505050505050565b6040805160a08101825260395473ffffffffffffffffffffffffffffffffffffffff9081168252603a54808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b6060820152603b549091166080820152612ae490826c010000000000000000000000006181dd565b90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff16634c63e5625f835f015160020b128015612b3f5750826020015160020b5f125b6040518263ffffffff1660e01b8152600401612b5f911515815260200190565b5f6040518083038186803b158015612b75575f80fd5b505afa158015612b87573d5f803e3d5ffd5b505050505f80826040015112612ba1578160400151612baf565b8160400151612baf9061b3a5565b604080516101008101825260395473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603a54808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c0850152603b54831660e08501529083528651810b602080850191909152870151900b92820192909252602954929350915f91612c679116618123565b602a549091505f90612c8e9073ffffffffffffffffffffffffffffffffffffffff16618123565b90505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cfb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d1f919061b3db565b604080515f8082526020820190925291925090612d429086908890600190618cca565b90505f612d786c01000000000000000000000000612d628a5f01516188a1565b612d6f8b602001516188a1565b6122d58b618b9e565b5060445490915073ffffffffffffffffffffffffffffffffffffffff1663dd46508f612da583600161b48a565b846045546040518463ffffffff1660e01b8152600401612dc692919061b469565b5f604051808303818588803b158015612ddd575f80fd5b505af1158015612def573d5f803e3d5ffd5b50505050505f612dfd618680565b6044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018790529192505f9173ffffffffffffffffffffffffffffffffffffffff90911690631efeed3390602401602060405180830381865afa158015612e6f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e93919061b3f2565b6fffffffffffffffffffffffffffffffff169050612eb5818b604001516182fd565b602954612f3690612edb9073ffffffffffffffffffffffffffffffffffffffff16618123565b612ee5908961b97f565b612eef8460801d90565b612ef89061b992565b600f0b6040518060400160405280601181526020017f696e636f727265637420616d6f756e7430000000000000000000000000000000815250618cf3565b602a54612a3b90612f5c9073ffffffffffffffffffffffffffffffffffffffff16618123565b612f66908861b97f565b612f7084600f0b90565b612f799061b992565b600f0b6040518060400160405280601181526020017f696e636f727265637420616d6f756e7431000000000000000000000000000000815250618cf3565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015610d23578382905f5260205f20018054612ff79061b327565b80601f01602080910402602001604051908101604052809291908181526020018280546130239061b327565b801561306e5780601f106130455761010080835404028352916020019161306e565b820191905f5260205f20905b81548152906001019060200180831161305157829003601f168201915b505050505081526020019060010190612fda565b6040805160a08101825260395473ffffffffffffffffffffffffffffffffffffffff9081168252603a54808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b6060820152603b54909116608082015261311f90826c010000000000000000000000006181dd565b90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff16634c63e5625f835f015160020b12801561317a5750826020015160020b5f125b6040518263ffffffff1660e01b815260040161319a911515815260200190565b5f6040518083038186803b1580156131b0575f80fd5b505afa1580156131c2573d5f803e3d5ffd5b5050604080516101008101825260395473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603a54808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c0850152603b54831660e08501529083528651810b6020808501919091528781015190910b8385015260445484517f75794a3c0000000000000000000000000000000000000000000000000000000081529451670de0b6b3a764000097509395505f949216926375794a3c9260048082019392918290030181865afa1580156132ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ee919061b3db565b905061330a6c010000000000000000000000008385305f610ff8565b602a5447905f906133309073ffffffffffffffffffffffffffffffffffffffff16618123565b90505f6133636c01000000000000000000000000613350895f01516188a1565b61335d8a602001516188a1565b89618be1565b5090505f61336f618378565b90506133ca5f86896fffffffffffffffffffffffffffffffff80845b6040519080825280601f01601f1916602001820160405280156133b5576020820181803683370190505b5060405160200161117b95949392919061bad6565b50603954603a546040805173ffffffffffffffffffffffffffffffffffffffff9384166020820152929091169082015261340990600d9060600161117b565b506029546040805173ffffffffffffffffffffffffffffffffffffffff909216602083015230908201526134429060149060600161117b565b505f61344d8261886f565b60445490915073ffffffffffffffffffffffffffffffffffffffff1663dd46508f61347985600261b968565b836045546040518463ffffffff1660e01b815260040161349a92919061b469565b5f604051808303818588803b1580156134b1575f80fd5b505af11580156134c3573d5f803e3d5ffd5b50505050505f6134d1618680565b6044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018a90529192505f9173ffffffffffffffffffffffffffffffffffffffff90911690631efeed3390602401602060405180830381865afa158015613543573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613567919061b3f2565b6fffffffffffffffffffffffffffffffff169050613589816124a88c8061b48a565b6029546135c4906135af9073ffffffffffffffffffffffffffffffffffffffff16618123565b6135b9908961b97f565b6124a887600161b48a565b6029546135f4906135ea9073ffffffffffffffffffffffffffffffffffffffff16618123565b612452908961b97f565b602a546124e79061361a9073ffffffffffffffffffffffffffffffffffffffff16618123565b6124dd908861b97f565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015610d23575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561370f57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116136bc5790505b50505050508152505081526020019060010190613647565b6040805160a08101825260395473ffffffffffffffffffffffffffffffffffffffff9081168252603a54808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b6060820152603b5490911660808201526137c490836c010000000000000000000000006181dd565b91507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff16634c63e5625f845f015160020b12801561381f5750836020015160020b5f125b6040518263ffffffff1660e01b815260040161383f911515815260200190565b5f6040518083038186803b158015613855575f80fd5b505afa158015613867573d5f803e3d5ffd5b5050505061387b8160018460400151618d47565b604080516101008101825260395473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603a54808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c0850152603b54831660e08501529083528651810b6020808501919091528781015190910b8385015260445484517f75794a3c000000000000000000000000000000000000000000000000000000008152945195965092945f9493909216926375794a3c92600480830193928290030181865afa158015613979573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061399d919061b3db565b90506139d16c0100000000000000000000000083866040015160015f67ffffffffffffffff811115610ff857610ff861afd5565b602a5447905f906139f79073ffffffffffffffffffffffffffffffffffffffff16618123565b90505f613a176c01000000000000000000000000613350895f01516188a1565b509050613a528486885f5b6040519080825280601f01601f191660200182016040528015613a4c576020820181803683370190505b50618d94565b5f613a5b618680565b6044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018890529192505f9173ffffffffffffffffffffffffffffffffffffffff90911690631efeed3390602401602060405180830381865afa158015613acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af1919061b3f2565b6fffffffffffffffffffffffffffffffff169050613b1981898b604001516124a8919061b97f565b602954613b53908690613b419073ffffffffffffffffffffffffffffffffffffffff16618123565b613b4b919061b97f565b846001618810565b602954613b8f908690613b7b9073ffffffffffffffffffffffffffffffffffffffff16618123565b613b85919061b97f565b6129e88460801d90565b602a54613bcb908590613bb79073ffffffffffffffffffffffffffffffffffffffff16618123565b613bc1919061b97f565b6129e884600f0b90565b505050505050505050565b6040805160a08101825260395473ffffffffffffffffffffffffffffffffffffffff9081168252603a54808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b6060820152603b549091166080820152613c7390836c010000000000000000000000006181dd565b91507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff16634c63e5625f845f015160020b128015613cce5750836020015160020b5f125b6040518263ffffffff1660e01b8152600401613cee911515815260200190565b5f6040518083038186803b158015613d04575f80fd5b505afa158015613d16573d5f803e3d5ffd5b50505050613d2a8160018460400151618d47565b604080516101008101825260395473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603a54808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c0850152603b54831660e08501529083528651810b6020808501919091528781015190910b8385015260445484517f75794a3c000000000000000000000000000000000000000000000000000000008152945195965092945f9493909216926375794a3c92600480830193928290030181865afa158015613e28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e4c919061b3db565b9050613e806c0100000000000000000000000083866040015160015f67ffffffffffffffff811115610ff857610ff861afd5565b602a5447905f90613ea69073ffffffffffffffffffffffffffffffffffffffff1661812356