@uniswap/v4-periphery
Version:
🦄 Peripheral smart contracts for interacting with Uniswap v4
1 lines • 691 kB
JSON
{"abi":[{"type":"receive","stateMutability":"payable"},{"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":"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":"hook","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract WstETHHook"}],"stateMutability":"view"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract TestRouter"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stETH","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract MockStETH"}],"stateMutability":"view"},{"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_initialization","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_revertAddLiquidity","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_revertInvalidPoolInitialization","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_revert_unwrap_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_revert_wrap_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_unwrap_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_wrap_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"wstETH","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract MockWstETH"}],"stateMutability":"view"},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"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":"0x600c8054600160ff199182168117909255601f80548216831790556077196080819052607860a0819052670de0b6b3a764000060c08190525f60e08190526020805465ffffffffffff199081166378ffff8890811790925560219390935560228290556101009490945261012092909252670de0b6b3a763ffff196101408190526101608390526023805490921690931790556024919091556025556101808290526063196101a08190526bb504f333f9de6484597d89b36101c081905260268054909316909317909155602755602880546001600160a01b0319908116909217905560428054600e90831617905560438054909116614000600160a01b0317905561022060405260056101e090815264616c69636560d81b6102005261012590610199565b604c80546001600160a01b0319166001600160a01b03929092169190911790556040805180820190915260038152623137b160e91b602082015261016890610199565b604d80546001600160a01b0319166001600160a01b0392909216919091179055348015610193575f80fd5b5061033f565b5f6101a3826101aa565b5092915050565b5f80826040516020016101bd91906102b8565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015610226573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024a91906102ce565b6040516318caf8e360e31b8152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189061028690859087906004016102fb565b5f604051808303815f87803b15801561029d575f80fd5b505af11580156102af573d5f803e3d5ffd5b50505050915091565b5f82518060208501845e5f920191825250919050565b5f602082840312156102de575f80fd5b81516001600160a01b03811681146102f4575f80fd5b9392505050565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b62022374806200034e5f395ff3fe6080604052600436106101bd575f3560e01c806393ad73ed116100f2578063c1fe3e4811610092578063d95371aa11610062578063d95371aa14610535578063e20c9f7114610549578063f887ea401461055d578063fa7626d414610589575f80fd5b8063c1fe3e48146104cd578063c582442d146104f9578063c7b8e15d1461050d578063d854d61314610521575f80fd5b8063b0464fdc116100cd578063b0464fdc14610417578063b1a73b8a1461042b578063b5508aa914610495578063ba414fa6146104a9575f80fd5b806393ad73ed146103c25780639e7402a8146103ef578063afeeaf0914610403575f80fd5b80634aa07e641161015d57806366d9a9a01161013857806366d9a9a0146103335780637f5a7c7b1461035457806385226c8114610380578063916a17c6146103a1575f80fd5b80634aa07e64146102ba578063542524dd1461030b578063647d1cf91461031f575f80fd5b80632ade3880116101985780632ade38801461021c57806339cd20131461023d5780633e5e3c23146102925780633f7286f4146102a6575f80fd5b8063018da3da146101c85780630a9254e4146101de5780631ed7831c146101f2575f80fd5b366101c457005b5f80fd5b3480156101d3575f80fd5b506101dc6105a2565b005b3480156101e9575f80fd5b506101dc61085e565b3480156101fd575f80fd5b506102066110ba565b6040516102139190614c5e565b60405180910390f35b348015610227575f80fd5b50610230611127565b6040516102139190614d02565b348015610248575f80fd5b5060235460245460255461026a92600281810b936301000000909204900b9184565b60408051600295860b81529390940b6020840152928201526060810191909152608001610213565b34801561029d575f80fd5b50610206611270565b3480156102b1575f80fd5b506102066112db565b3480156102c5575f80fd5b506045546102e69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610213565b348015610316575f80fd5b506102e6611346565b34801561032a575f80fd5b506101dc611368565b34801561033e575f80fd5b50610347611766565b6040516102139190614e70565b34801561035f575f80fd5b506044546102e69073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038b575f80fd5b506103946118df565b6040516102139190614f0c565b3480156103ac575f80fd5b506103b56119aa565b6040516102139190614f81565b3480156103cd575f80fd5b5060205460215460225461026a92600281810b936301000000909204900b9184565b3480156103fa575f80fd5b506101dc611aad565b34801561040e575f80fd5b506101dc611c7e565b348015610422575f80fd5b506103b56122da565b348015610436575f80fd5b506026546027546028546104629260ff16919073ffffffffffffffffffffffffffffffffffffffff1683565b604080519315158452602084019290925273ffffffffffffffffffffffffffffffffffffffff1690820152606001610213565b3480156104a0575f80fd5b506103946123dd565b3480156104b4575f80fd5b506104bd6124a8565b6040519015158152602001610213565b3480156104d8575f80fd5b506046546102e69073ffffffffffffffffffffffffffffffffffffffff1681565b348015610504575f80fd5b506101dc612578565b348015610518575f80fd5b506102e6612ded565b34801561052c575f80fd5b506101dc612dfd565b348015610540575f80fd5b506101dc61352c565b348015610554575f80fd5b5061020661392e565b348015610568575f80fd5b506047546102e69073ffffffffffffffffffffffffffffffffffffffff1681565b348015610594575f80fd5b50601f546104bd9060ff1681565b60445460408051600480825260248083018452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081167f78895c1300000000000000000000000000000000000000000000000000000000179091528551938452838301865290830180519091167fa9e35b2f000000000000000000000000000000000000000000000000000000001790529251737109709ecfa91a80626ff3989d68f67f5b1dd12d9463f28dceb3947f90bfb86500000000000000000000000000000000000000000000000000000000946106bf9473ffffffffffffffffffffffffffffffffffffffff93909316937f259982e50000000000000000000000000000000000000000000000000000000093919201615023565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b909216825261074f91600401615096565b5f604051808303815f87803b158015610766575f80fd5b505af1158015610778573d5f803e3d5ffd5b5050602c54604080516080810182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88815260786020820152683635c9adc5dea00000818301525f606082015290517f5a6bcfda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169350635a6bcfda925061081b91604891906004016150af565b6020604051808303815f875af1158015610837573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085b9190615145565b50565b610866613999565b602b5460405173ffffffffffffffffffffffffffffffffffffffff9091169061088e90614b9a565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156108c4573d5f803e3d5ffd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405160129061091990614ba8565b60608082526013908201527f4c6971756964207374616b656420457468657200000000000000000000000000608082015260a0602082018190526005908201527f737445544800000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103905ff0801580156109a5573d5f803e3d5ffd5b50604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556040516109f690614bb6565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610a2c573d5f803e3d5ffd5b506045805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000091821681179092556043546044805490921690841617612888179055604080518082018252600a81527f577374455448486f6f6b00000000000000000000000000000000000000000000602080830191909152602b54835195169085015290830191909152610b2291606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905260445473ffffffffffffffffffffffffffffffffffffffff16613f82565b6040805160a08101825260465473ffffffffffffffffffffffffffffffffffffffff9081168083526045548216602084018190525f948401859052603c60608501526044549092166080909301839052604880547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169092179055604980547fffffffffffff000000000000000000000000000000000000000000000000000016909217773c000000000000000000000000000000000000000000000017909155604a80549091169091179055610bfa90613f93565b604b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155602b546040517f6276cbbe000000000000000000000000000000000000000000000000000000008152921691636276cbbe91610c80916048919060040161515c565b6020604051808303815f875af1158015610c9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc091906151d2565b50604654604c546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015268056bc75e2d6310000060248201529116906340c10f19906044015f604051808303815f87803b158015610d3c575f80fd5b505af1158015610d4e573d5f803e3d5ffd5b5050604654604d546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015268056bc75e2d631000006024820152911692506340c10f1991506044015f604051808303815f87803b158015610dcd575f80fd5b505af1158015610ddf573d5f803e3d5ffd5b50506046546040517f40c10f19000000000000000000000000000000000000000000000000000000008152306004820152680ad78ebc5ac6200000602482015273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044015f604051808303815f87803b158015610e5a575f80fd5b505af1158015610e6c573d5f803e3d5ffd5b50506046546045546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152680ad78ebc5ac62000006024820152911692506340c10f1991506044015f604051808303815f87803b158015610eeb575f80fd5b505af1158015610efd573d5f803e3d5ffd5b5050604554604c546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015268056bc75e2d631000006024820152911692506340c10f1991506044015f604051808303815f87803b158015610f7c575f80fd5b505af1158015610f8e573d5f803e3d5ffd5b5050604554604d546040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015268056bc75e2d631000006024820152911692506340c10f1991506044015f604051808303815f87803b15801561100d575f80fd5b505af115801561101f573d5f803e3d5ffd5b50506045546040517f40c10f19000000000000000000000000000000000000000000000000000000008152306004820152680ad78ebc5ac6200000602482015273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f1991506044015f604051808303815f87803b15801561109a575f80fd5b505af11580156110ac573d5f803e3d5ffd5b505050506110b8614290565b565b6060601680548060200260200160405190810160405280929190818152602001828054801561111d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f2575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015611267575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611250578382905f5260205f200180546111c5906151f2565b80601f01602080910402602001604051908101604052809291908181526020018280546111f1906151f2565b801561123c5780601f106112135761010080835404028352916020019161123c565b820191905f5260205f20905b81548152906001019060200180831161121f57829003601f168201915b5050505050815260200190600101906111a8565b50505050815250508152602001906001019061114a565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561111d57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f2575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561111d57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f2575050505050905090565b611365600173fffd8963efd1fc6a506488495d951d5263988d26615270565b81565b604c546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156113e4575f80fd5b505af11580156113f6573d5f803e3d5ffd5b50506046546047546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529116925063095ea7b391506044016020604051808303815f875af1158015611491573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b591906152a2565b5060445460408051600480825260248083018452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081167f21b865b300000000000000000000000000000000000000000000000000000000179091528551938452838301865290830180519091167fa9e35b2f000000000000000000000000000000000000000000000000000000001790529251737109709ecfa91a80626ff3989d68f67f5b1dd12d9463f28dceb3947f90bfb86500000000000000000000000000000000000000000000000000000000946115d39473ffffffffffffffffffffffffffffffffffffffff93909316937f575e24b40000000000000000000000000000000000000000000000000000000093919201615023565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b909216825261166391600401615096565b5f604051808303815f87803b15801561167a575f80fd5b505af115801561168c573d5f803e3d5ffd5b5050604754604080516060810182525f808252670de0b6b3a76400006020830190815282840182815293517ff3cd914c00000000000000000000000000000000000000000000000000000000815260485473ffffffffffffffffffffffffffffffffffffffff9081166004830152604954808216602484015260a081901c62ffffff16604484015260b81c60020b6064830152604a54811660848301529351151560a4820152905160c48201529251821660e4840152610120610104840152610124830152909116925063f3cd914c91506101440161081b565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015611267578382905f5260205f2090600202016040518060400160405290815f820180546117b9906151f2565b80601f01602080910402602001604051908101604052809291908181526020018280546117e5906151f2565b80156118305780601f1061180757610100808354040283529160200191611830565b820191905f5260205f20905b81548152906001019060200180831161181357829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156118c757602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116118745790505b50505050508152505081526020019060010190611789565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015611267578382905f5260205f2001805461191f906151f2565b80601f016020809104026020016040519081016040528092919081815260200182805461194b906151f2565b80156119965780601f1061196d57610100808354040283529160200191611996565b820191905f5260205f20905b81548152906001019060200180831161197957829003601f168201915b505050505081526020019060010190611902565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015611267575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015611a9557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611a425790505b505050505081525050815260200190600101906119cd565b604454604080517f4aa07e640000000000000000000000000000000000000000000000000000000081529051611b5e9273ffffffffffffffffffffffffffffffffffffffff1691634aa07e649160048083019260209291908290030181865afa158015611b1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4091906152e2565b60455473ffffffffffffffffffffffffffffffffffffffff166145ac565b604454604080517fd52f63cf0000000000000000000000000000000000000000000000000000000081529051611bcd9273ffffffffffffffffffffffffffffffffffffffff169163d52f63cf9160048083019260209291908290030181865afa158015611b1c573d5f803e3d5ffd5b604454604080517f0bc6bffc00000000000000000000000000000000000000000000000000000000815290516110b89273ffffffffffffffffffffffffffffffffffffffff1691630bc6bffc9160048083019260209291908290030181865afa158015611c3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6091906152e2565b60465473ffffffffffffffffffffffffffffffffffffffff166145ac565b6040805160a08101825260465473ffffffffffffffffffffffffffffffffffffffff90811682526045548116602080840191909152610bb883850152603c606084015260445490911660808301819052835160048082526024808301875282850180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081167f1213a0ab00000000000000000000000000000000000000000000000000000000179091528751928352828201885294820180519095167fa9e35b2f000000000000000000000000000000000000000000000000000000001790945294519394737109709ecfa91a80626ff3989d68f67f5b1dd12d9463f28dceb3947f90bfb8650000000000000000000000000000000000000000000000000000000094611dd19490937fdc98354e00000000000000000000000000000000000000000000000000000000939192909101615023565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b9092168252611e6191600401615096565b5f604051808303815f87803b158015611e78575f80fd5b505af1158015611e8a573d5f803e3d5ffd5b5050602b54604b546040517f6276cbbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450636276cbbe9350611ee992869216906004016152fd565b6020604051808303815f875af1158015611f05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f2991906151d2565b505f6012604051611f3990614bc4565b60608082526006908201527f52616e646f6d0000000000000000000000000000000000000000000000000000608082015260a0602082018190526003908201527f524e44000000000000000000000000000000000000000000000000000000000060c082015260ff909116604082015260e001604051809103905ff080158015611fc5573d5f803e3d5ffd5b506045549091505f90819073ffffffffffffffffffffffffffffffffffffffff9081169084161061200f5760455473ffffffffffffffffffffffffffffffffffffffff168361202b565b604554839073ffffffffffffffffffffffffffffffffffffffff165b6040805160a08101825273ffffffffffffffffffffffffffffffffffffffff80851682528084166020808401919091525f83850152603c606084015260445490911660808301819052835160048082526024808301875282850180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081167fdcdedda900000000000000000000000000000000000000000000000000000000179091528751928352828201885294820180519095167fa9e35b2f00000000000000000000000000000000000000000000000000000000179094529451939a50959750939550737109709ecfa91a80626ff3989d68f67f5b1dd12d9463f28dceb3947f90bfb865000000000000000000000000000000000000000000000000000000009461217b9491937fdc98354e00000000000000000000000000000000000000000000000000000000939201615023565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b909216825261220b91600401615096565b5f604051808303815f87803b158015612222575f80fd5b505af1158015612234573d5f803e3d5ffd5b5050602b54604b546040517f6276cbbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450636276cbbe935061229392899216906004016152fd565b6020604051808303815f875af11580156122af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d391906151d2565b5050505050565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015611267575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001810180548351818702810187019094528084529394919385830193928301828280156123c557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116123725790505b505050505081525050815260200190600101906122fd565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015611267578382905f5260205f2001805461241d906151f2565b80601f0160208091040260200160405190810160405280929190818152602001828054612449906151f2565b80156124945780601f1061246b57610100808354040283529160200191612494565b820191905f5260205f20905b81548152906001019060200180831161247757829003601f168201915b505050505081526020019060010190612400565b6008545f9060ff16156124bf575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa15801561254d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125719190615145565b1415905090565b6045546040517fb0e38900000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052915f9173ffffffffffffffffffffffffffffffffffffffff9091169063b0e3890090602401602060405180830381865afa1580156125f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126159190615145565b604c546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015612694575f80fd5b505af11580156126a6573d5f803e3d5ffd5b50506046546047546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529116925063095ea7b391506044016020604051808303815f875af1158015612741573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276591906152a2565b50604654604c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201525f9291909116906370a0823190602401602060405180830381865afa1580156127da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127fe9190615145565b604554604c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293505f929116906370a0823190602401602060405180830381865afa158015612873573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128979190615145565b604654602b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293505f929116906370a0823190602401602060405180830381865afa15801561290c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129309190615145565b604554602b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293505f929116906370a0823190602401602060405180830381865afa1580156129a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c99190615145565b60475460408051606081019091526001815291925073ffffffffffffffffffffffffffffffffffffffff169063f3cd914c9060489060208101612a0b8b615380565b8152602001612a206401000276a360016153b6565b73ffffffffffffffffffffffffffffffffffffffff908116909152604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681528454831660048201526001850154808416602483015260a081901c62ffffff16604483015260b81c600290810b606483015290940154821660848501528251151560a4850152602083015160c485015291909101511660e48201526101206101048201525f610124820152610144016020604051808303815f875af1158015612af3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b179190615145565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612b7f575f80fd5b505af1158015612b91573d5f803e3d5ffd5b5050604654604c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152612c3d9450911691506370a0823190602401602060405180830381865afa158015612c09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2d9190615145565b612c3790866153e2565b8761463e565b604554604c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152612ce792869216906370a08231906024015b602060405180830381865afa158015612cb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cd79190615145565b612ce191906153e2565b8661463e565b604654602b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152612d8692859216906370a08231906024015b602060405180830381865afa158015612d5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d819190615145565b61463e565b604554602b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152612de592849216906370a0823190602401612d42565b505050505050565b6113656401000276a360016153b6565b6045546040517fbb2952fc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052915f9173ffffffffffffffffffffffffffffffffffffffff9091169063bb2952fc90602401602060405180830381865afa158015612e76573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e9a9190615145565b604c546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015612f19575f80fd5b505af1158015612f2b573d5f803e3d5ffd5b50506045546047546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529116925063095ea7b391506044016020604051808303815f875af1158015612fc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fea91906152a2565b50604654604c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201525f9291909116906370a0823190602401602060405180830381865afa15801561305f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130839190615145565b604554604c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293505f929116906370a0823190602401602060405180830381865afa1580156130f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061311c9190615145565b604654602b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293505f929116906370a0823190602401602060405180830381865afa158015613191573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131b59190615145565b604554602b546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293505f929116906370a0823190602401602060405180830381865afa15801561322a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061324e9190615145565b60475460408051606081019091525f815291925073ffffffffffffffffffffffffffffffffffffffff169063f3cd914c906048906020810161328f8b615380565b81526020016132b3600173fffd8963efd1fc6a506488495d951d5263988d26615270565b73ffffffffffffffffffffffffffffffffffffffff908116909152604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681528454831660048201526001850154808416602483015260a081901c62ffffff16604483015260b81c600290810b606483015290940154821660848501528251151560a4850152602083015160c485015291909101511660e48201526101206101048201525f610124820152610144016020604051808303815f875af1158015613386573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133aa9190615145565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613412575f80fd5b505af1158015613424573d5f803e3d5ffd5b5050604654604c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261348894508893509116906370a0823190602401612c98565b604554604c546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152612ce79291909116906370a0823190602401602060405180830381865afa1580156134fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135229190615145565b612c3790856153e2565b604c546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156135a8575f80fd5b505af11580156135ba573d5f803e3d5ffd5b50506045546047546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529116925063095ea7b391506044016020604051808303815f875af1158015613655573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061367991906152a2565b5060445460408051600480825260248083018452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081167f21b865b300000000000000000000000000000000000000000000000000000000179091528551938452838301865290830180519091167fa9e35b2f000000000000000000000000000000000000000000000000000000001790529251737109709ecfa91a80626ff3989d68f67f5b1dd12d9463f28dceb3947f90bfb86500000000000000000000000000000000000000000000000000000000946137979473ffffffffffffffffffffffffffffffffffffffff93909316937f575e24b40000000000000000000000000000000000000000000000000000000093919201615023565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b909216825261382791600401615096565b5f604051808303815f87803b15801561383e575f80fd5b505af1158015613850573d5f803e3d5ffd5b50506047546040805160608101825260018152670de0b6b3a7640000602082019081525f82840181815293517ff3cd914c00000000000000000000000000000000000000000000000000000000815260485473ffffffffffffffffffffffffffffffffffffffff9081166004830152604954808216602484015260a081901c62ffffff16604484015260b81c60020b6064830152604a54811660848301529351151560a4820152915160c48301529251821660e4820152610120610104820152610124810192909252909116925063f3cd914c91506101440161081b565b6060601580548060200260200160405190810160405280929190818152602001828054801561111d57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f2575050505050905090565b6139a1614696565b602b5460405173ffffffffffffffffffffffffffffffffffffffff909116906139c990614bd2565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156139ff573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613a5390614be0565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613a89573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613add90614bee565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613b13573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613b6790614bfc565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613b9d573d5f803e3d5ffd5b50602d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613bf190614c0a565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613c27573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613c7b90614c18565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613cb1573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613d0590614c26565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613d3b573d5f803e3d5ffd5b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613d8f90614c34565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613dc5573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560408051808201909152600d81527f666565436f6e74726f6c6c6572000000000000000000000000000000000000006020820152613e4890614721565b603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613e9b90614c42565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613ed1573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b546035546040517f2d7713890000000000000000000000000000000000000000000000000000000081529083166004820152911690632d771389906024015f604051808303815f87803b158015613f6a575f80fd5b505af1158015613f7c573d5f803e3d5ffd5b50505050565b613f8e83835f84614732565b505050565b60020b5f60ff82901d80830118620d89e8811115613fd557613fd57f8b86327a0000000000000000000000000000000000000000000000000000000084614a30565b7001fffcb933bd6fad37aa2d162d1a594001600182160270010000000000000000000000000000000018600282161561401e576ffff97272373d413259a46990580e213a0260801c5b600482161561403d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561405c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561407b576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561409a576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156140b9576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156140d8576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156140f8576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614118576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614138576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614158576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614178576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614198576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156141b8576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156141d8576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156141f9576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614219576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614238576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614255576b048a170391f7dc42444e8fa20260801c5b5f841315614280577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff045b63ffffffff0160201c9392505050565b6040805160a08101825260465473ffffffffffffffffffffffffffffffffffffffff908116825260455481166020830152606492820192909252603c60608201525f60808201819052602b5491929190911690636276cbbe9083906142f490613f93565b6040518363ffffffff1660e01b81526004016143119291906152fd565b6020604051808303815f875af115801561432d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061435191906151d2565b50604654602c546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303815f875af11580156143e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061440d91906152a2565b50604554602c546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303815f875af11580156144a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144c991906152a2565b50602c54604080516080810182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88815260786020820152683635c9adc5dea00000818301525f606082015290517f5a6bcfda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691635a6bcfda91614568918591906004016153f5565b6020604051808303815f875af1158015614584573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145a89190615145565b5050565b6040517f515361f600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044015b5f6040518083038186803b15801561462c575f80fd5b505afa158015612de5573d5f803e3d5ffd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c5490604401614616565b306040516146a390614c50565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156146d9573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f61472b82614a3f565b5092915050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590614784908890600401615096565b5f60405180830381865afa15801561479e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526147e391908101906154a1565b90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663b4d6c7828383876040516020016148379291906155a8565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016148639291906155c4565b5f604051808303815f87803b15801561487a575f80fd5b505af115801561488c573d5f803e3d5ffd5b505050505f808373ffffffffffffffffffffffffffffffffffffffff16856040515f6040518083038185875af1925050503d805f81146148e7576040519150601f19603f3d011682016040523d82523d5f602084013e6148ec565b606091505b5091509150816149a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f537464436865617473206465706c6f79436f6465546f28737472696e672c627960448201527f7465732c75696e743235362c61646472657373293a204661696c656420746f2060648201527f6372656174652072756e74696d652062797465636f64652e0000000000000000608482015260a40160405180910390fd5b6040517fb4d6c782000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063b4d6c782906149fa90879085906004016155c4565b5f604051808303815f87803b158015614a11575f80fd5b505af1158015614a23573d5f803e3d5ffd5b5050505050505050505050565b815f528060020b60045260245ffd5b5f8082604051602001614a5291906155f2565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020909101207fffa18649000000000000000000000000000000000000000000000000000000008252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015614aef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b1391906152e2565b6040517fc657c718000000000000000000000000000000000000000000000000000000008152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906