@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 602 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":"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_swapNativeInput_helper_nonnative_oneForZero_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swapNativeInput_helper_nonnative_oneForZero_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swapNativeInput_helper_nonnative_zeroForOne_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swapNativeInput_helper_nonnative_zeroForOne_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swapNativeInput_helper_oneForZero_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swapNativeInput_helper_oneForZero_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swapNativeInput_helper_zeroForOne_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swapNativeInput_helper_zeroForOne_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_helper_native_oneForZero_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_helper_native_oneForZero_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_helper_native_zeroForOne_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_helper_native_zeroForOne_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_helper_oneForZero_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_helper_oneForZero_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_helper_zeroForOne_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_helper_zeroForOne_exactOutput","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":"0x60806040523461016457600160ff19600c541617600c55600160ff19601f541617601f555f606061002e610168565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606061007a610168565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b038211176101505760409081526001808352606319602084018190526bb504f333f9de6484597d89b39383018490526026805460ff1916909217909155602755602880546001600160a01b03199081169093179055604280548316600e17905560438054909216614000600160a01b0317909155516201db329081620001888239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60405190608082016001600160401b038111838210176101505760405256fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081630a9254e414611810575080631ed7831c1461176757806321c470b8146117125780632ade3880146114e657806335040fb81461149157806339cd20131461143057806339d61fa11461135e5780633e5e3c23146112b55780633f7286f41461120c578063542524dd146111bd5780635f498577146110eb57806366d9a9a014610f905780636fbc95f114610f3b57806385226c8114610e93578063916a17c614610dbe5780639365b11814610cec57806393ad73ed14610c875780639e49c38d14610b1e5780639fe0ebe114610a47578063b0464fdc14610972578063b1a73b8a1461090a578063b5508aa914610862578063b600b27914610644578063ba414fa614610601578063c056795a1461059f578063c25766f51461053a578063c7b8e15d146104fa578063e20c9f7114610441578063ec80cfb7146103e7578063ed076ba91461038d578063f3fab4fa14610328578063fa4be883146102c3578063fa7626d4146102825763faa613a00361000f573461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561027457806040517ff4844814000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156102775761025f575b5061025b604051610244602082613131565b8281525f3660208301376102566131f3565b613e4f565b5080f35b8161026991613131565b61027457805f610232565b80fd5b6040513d84823e3d90fd5b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457602060ff601f54166040519015158152f35b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745761032561031d604051610306602082613131565b8381525f366020830137610318613172565b613d8d565b600f0b613b98565b80f35b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745761032561038260405161036b602082613131565b8381525f36602083013761037d613172565b613caf565b60801d600f0b613c38565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745761032561031d6040516103d0602082613131565b8381525f3660208301376103e26131f3565b6137fd565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745761032561038260405161042a602082613131565b8381525f36602083013761043c6131f3565b613a03565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106104ce576104ca856104be81870382613131565b60405191829182612ed5565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016104a7565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610274575060206401000276a4604051908152f35b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745761032561059460405161057d602082613131565b8381525f36602083013761058f613172565b6138fb565b60801d600f0b613b98565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610274576103256105f96040516105e2602082613131565b8381525f3660208301376105f46131f3565b613a5d565b600f0b613c38565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457602061063a613633565b6040519015158152f35b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745760405160206106828183613131565b8282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810136828401376106b5613172565b73ffffffffffffffffffffffffffffffffffffffff8151166107de57819073ffffffffffffffffffffffffffffffffffffffff602f54166401000276a4604051906106ff82613115565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85830152604082015260646040519361073c856130dd565b888552888686015261077d604051988996879586947f2229d0b400000000000000000000000000000000000000000000000000000000865260048601613747565b03925af19081156107d357839161079f575b836103258360801d600f0b613b98565b905081813d83116107cc575b6107b58183613131565b810103126107c85761032590515f61078f565b5f80fd5b503d6107ab565b6040513d85823e3d90fd5b608482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602b60248201527f63757272656e637930206973206e6f74206e61746976652e205573652073776160448201527f70282920696e73746561640000000000000000000000000000000000000000006064820152fd5b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745760195461089d81613274565b916108ab6040519384613131565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106108ed57604051806104ca8782612fbc565b6001602081926108fc8561328c565b8152019201920191906108d8565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457606060ff6026541660275473ffffffffffffffffffffffffffffffffffffffff6028541690604051921515835260208301526040820152f35b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457601c546109ad81613274565b916109bb6040519384613131565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106109fd57604051806104ca8782613039565b60026020600192604051610a10816130dd565b73ffffffffffffffffffffffffffffffffffffffff8654168152610a3585870161338f565b838201528152019201920191906109e8565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561027457806040517ff4844814000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561027757610b09575b5061025b604051610af2602082613131565b8281525f366020830137610b046131f3565b613de7565b81610b1391613131565b61027457805f610ae0565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610274576040516020610b5c8183613131565b8282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081013682840137610b8f613172565b73ffffffffffffffffffffffffffffffffffffffff8151166107de57819073ffffffffffffffffffffffffffffffffffffffff602f54166401000276a460405190610bd982613115565b60018252606485830152604082015260c860405193610bf7856130dd565b8885528886860152610c38604051988996879586947f2229d0b400000000000000000000000000000000000000000000000000000000865260048601613747565b03925af19081156107d3578391610c57575b8361032583600f0b613c38565b905081813d8311610c80575b610c6d8183613131565b810103126107c85761032590515f610c4a565b503d610c63565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610274576020805460215460225460408051600285810b825260189590951c90940b94840194909452928201526060810191909152608090f35b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561027457806040517ff4844814000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561027757610da9575b5061025b604051610d97602082613131565b8281525f3660208301376105f4613172565b81610db391613131565b61027457805f610d85565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457601d54610df981613274565b91610e076040519384613131565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610e4957604051806104ca8782613039565b60026020600192604051610e5c816130dd565b73ffffffffffffffffffffffffffffffffffffffff8654168152610e8185870161338f565b83820152815201920192019190610e34565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457601a54610ece81613274565b91610edc6040519384613131565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610f1e57604051806104ca8782612fbc565b600160208192610f2d8561328c565b815201920192019190610f09565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457610325610382604051610f7e602082613131565b8381525f36602083013761043c613172565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457601b54610fcb81613274565b610fd86040519182613131565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106110b057868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061104557505050500390f35b919360206110a0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836110908351604084526040840190612f24565b9201519084818403910152612f67565b9601920192018594939192611036565b600260206001926040516110c3816130dd565b6110cc8661328c565b81526110d985870161338f565b83820152815201920192019190611008565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561027457806040517ff4844814000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610277576111a8575b5061025b604051611196602082613131565b8281525f3660208301376103186131f3565b816111b291613131565b61027457805f611184565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745750602073fffd8963efd1fc6a506488495d951d5263988d25604051908152f35b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110611289576104ca856104be81870382613131565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611272565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110611332576104ca856104be81870382613131565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161131b565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561027457806040517ff4844814000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156102775761141b575b5061025b604051611409602082613131565b8281525f36602083013761037d6131f3565b8161142591613131565b61027457805f6113f7565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745760235460245460255460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610274576103256105946040516114d4602082613131565b8381525f36602083013761058f6131f3565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027457601e5461152181613274565b61152e6040519182613131565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b83831061167c5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b83831061159a5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b8281106116335750505050506020806001929701930193019092869594929361158d565b909192939460208061166f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951612f24565b970195019392910161160f565b604051611688816130dd565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546116b181613274565b916116bf6040519384613131565b8183528a526020808b20908b9084015b8382106116f557505050506001928260209283600295015281520192019201919061155e565b6001602081926117048661328c565b8152019301910190916116cf565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745761032561031d604051611755602082613131565b8381525f3660208301376103e2613172565b503461027457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102745760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106117e4576104ca856104be81870382613131565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016117cd565b9050346107c8575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107c857612c8b80820182811067ffffffffffffffff821117612ea85782916200de29833903905ff08015612e9d5773ffffffffffffffffffffffffffffffffffffffff16803b67ffffffffffffffff8111612ea8575f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601926118ca6040519485613131565b82845260208401903c737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107c8575f61193691604051809381927fb4d6c782000000000000000000000000000000000000000000000000000000008352613fff6004840152604060248401526044830190612f24565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612e9d57612e8a575b50613fff7fffffffffffffffffffffffff00000000000000000000000000000000000000006044541617604455604051615e828082019082821067ffffffffffffffff831117612e5d5760209183916200575c833930815203019082f08015612e235773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff0000000000000000000000000000000000000000602b541617602b5560405190611bb9908183019183831067ffffffffffffffff841117612e30579183916020936201a2dc8439815203019082f08015612e235773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602f541617602f5573ffffffffffffffffffffffffffffffffffffffff602b541660405190610d6f908183019183831067ffffffffffffffff841117612e30579183916020936201cdb78439815203019082f08015612e235773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602e541617602e5573ffffffffffffffffffffffffffffffffffffffff602b541660405190611835908183019183831067ffffffffffffffff841117612e3057918391602093620129be8439815203019082f08015612e235773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602c541617602c5573ffffffffffffffffffffffffffffffffffffffff602b541660405190611315908183019183831067ffffffffffffffff841117612e3057918391602093620141f38439815203019082f08015612e235773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602d541617602d5573ffffffffffffffffffffffffffffffffffffffff602b5416604051906112d2908183019183831067ffffffffffffffff841117612e3057918391602093620116ec8439815203019082f08015612e235773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603054161760305573ffffffffffffffffffffffffffffffffffffffff602b541660405190610f22908183019183831067ffffffffffffffff841117612e30579183916020936201be958439815203019082f08015612e235773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603154161760315573ffffffffffffffffffffffffffffffffffffffff602b541660405190610c38908183019183831067ffffffffffffffff841117612e305791839160209362010ab48439815203019082f08015612e235773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603354161760335573ffffffffffffffffffffffffffffffffffffffff602b541660405190614dd4908183019183831067ffffffffffffffff841117612e3057918391602093620155088439815203019082f08015612e235773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603454161760345560408051611e738282613131565b600d815282602082017f666565436f6e74726f6c6c65720000000000000000000000000000000000000081528351600d6020820192835e82602d820152600d8152611ebf602d82613131565b5190208351907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115612dca578291612dd4575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612ca1578173ffffffffffffffffffffffffffffffffffffffff611f9092865193849283927fc657c71800000000000000000000000000000000000000000000000000000000845216968760048401528860248401526044830190612f24565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612dca57612db5575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000603554161760355573ffffffffffffffffffffffffffffffffffffffff602b541681519061284b908183019183831067ffffffffffffffff841117612d88579183916020936200b5de8439815203019083f08015612d7d5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060325416176032558173ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60355416813b15612d7957829160248392865194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af18015612d6c57612d57575b50506120f5613fd3565b73ffffffffffffffffffffffffffffffffffffffff80612113613fd3565b9216911680821015612d3a5773ffffffffffffffffffffffffffffffffffffffff80915b1691827fffffffffffffffffffffffff0000000000000000000000000000000000000000602a541617602a551690817fffffffffffffffffffffffff00000000000000000000000000000000000000006029541617602955612197613ed6565b506121a0613ed6565b508251603c926121af826130f9565b81526020808201928352610bb885830190815260608301858152613fff60808501908152602b5488517f6276cbbe000000000000000000000000000000000000000000000000000000008152865173ffffffffffffffffffffffffffffffffffffffff9081166004830152885181166024830152604088015162ffffff166044830152845160020b60648301528351811660848301529496959294909291839160c49183918e91166c0100000000000000000000000060a48401525af18015612d3057612cef575b5073ffffffffffffffffffffffffffffffffffffffff602c54169388602096876123098b51986122a7838b613131565b848a527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301998a36858301378d519586809481937f5a6bcfda0000000000000000000000000000000000000000000000000000000083528d60048401613f00565b03925af18015612c745773ffffffffffffffffffffffffffffffffffffffff9687938492612cd2575b5051167fffffffffffffffffffffffff0000000000000000000000000000000000000000603654161760365551167fffffffffffffffffffffffff00000000000000000000000000000000000000006037541617603755517fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000806037549360a01b1616911617603755517fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff6037549160b81b60190b79ffffff00000000000000000000000000000000000000000000001691161760375551167fffffffffffffffffffffffff000000000000000000000000000000000000000060385416176038558460048373ffffffffffffffffffffffffffffffffffffffff603454168751928380927fc34c08e50000000000000000000000000000000000000000000000000000000082525afa8015612c975773ffffffffffffffffffffffffffffffffffffffff918391612ca5575b5016803b15612ca15781809160a48851809481937f1b9ec89e00000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff60365416600484015260375473ffffffffffffffffffffffffffffffffffffffff8116602485015262ffffff8160a01c16604485015260b81c60020b606484015273ffffffffffffffffffffffffffffffffffffffff6038541660848401525af18015612c9757612c7e575b505073ffffffffffffffffffffffffffffffffffffffff602a5416612592613ed6565b5061259b613ed6565b508451916125a8836130f9565b86835283830191825285830190610bb8825260608401928684526080850194613fff865260a0812050898773ffffffffffffffffffffffffffffffffffffffff602b541660c48c51809481937f6276cbbe00000000000000000000000000000000000000000000000000000000835261266e600484018973ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6c0100000000000000000000000060a48401525af1908115612c74578891612c37575b50612703670de0b6b3a7640000948c73ffffffffffffffffffffffffffffffffffffffff602c5416918d51916126c78684613131565b825236858301378c519687809481937f5a6bcfda0000000000000000000000000000000000000000000000000000000083528860048401613f00565b03925af1908115612c2d5773ffffffffffffffffffffffffffffffffffffffff9788948593612bff575b505051167fffffffffffffffffffffffff0000000000000000000000000000000000000000603954161760395551167fffffffffffffffffffffffff0000000000000000000000000000000000000000603a541617603a55517fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff000000000000000000000000000000000000000080603a549360a01b1616911617603a55517fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff603a549160b81b60190b79ffffff000000000000000000000000000000000000000000000016911617603a5551167fffffffffffffffffffffffff0000000000000000000000000000000000000000603b541617603b5573ffffffffffffffffffffffffffffffffffffffff603654167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905573ffffffffffffffffffffffffffffffffffffffff603754167fffffffffffffffffffffffff0000000000000000000000000000000000000000603d541617603d556037547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000807fffffffffffffffffffffffff0000000000000000000000000000000000000000603d5494161616911617603d556037547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff0000000000000000000000000000000000000000000000603d54921660190b79ffffff000000000000000000000000000000000000000000000016911617603d5573ffffffffffffffffffffffffffffffffffffffff603854167fffffffffffffffffffffffff0000000000000000000000000000000000000000603e541617603e5573ffffffffffffffffffffffffffffffffffffffff603954167fffffffffffffffffffffffff0000000000000000000000000000000000000000603f541617603f5573ffffffffffffffffffffffffffffffffffffffff603a54167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416178155603a547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000807fffffffffffffffffffffffff00000000000000000000000000000000000000008554941616169116178155603a547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff00000000000000000000000000000000000000000000008354921660190b79ffffff000000000000000000000000000000000000000000000016911617815573ffffffffffffffffffffffffffffffffffffffff603b54167fffffffffffffffffffffffff00000000000000000000000000000000000000006041541617604155746400000000000000000000000000000000000000007fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff603d541617603d55746400000000000000000000000000000000000000007fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff82541617905580f35b81612c1e92903d10612c26575b612c168183613131565b810190613738565b505f8061272d565b503d612c0c565b89513d8c823e3d90fd5b9081813d8311612c6d575b612c4c8183613131565b81010312612c6957518060020b03612c6557865f612691565b8980fd5b8a80fd5b503d612c42565b8a513d8d823e3d90fd5b81612c8891613131565b612c9357845f61256f565b8480fd5b86513d84823e3d90fd5b5080fd5b612cc59150853d8711612ccb575b612cbd8183613131565b81019061370c565b5f6124b7565b503d612cb3565b612ce8908b3d8d11612c2657612c168183613131565b505f612332565b6020813d602011612d28575b81612d0860209383613131565b81010312612d2457518060020b03612d20575f612277565b8780fd5b8880fd5b3d9150612cfb565b88513d8b823e3d90fd5b9073ffffffffffffffffffffffffffffffffffffffff8091612137565b81612d6191613131565b612ca157815f6120eb565b50505051903d90823e3d90fd5b8280fd5b5051903d90823e3d90fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b81612dbf91613131565b612d7957825f611fb5565b84513d84823e3d90fd5b90506020813d602011612e1b575b81612def60209383613131565b81010312612ca1575173ffffffffffffffffffffffffffffffffffffffff81168103612ca1575f611f18565b3d9150612de2565b50604051903d90823e3d90fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b612e9691505f90613131565b5f8061195b565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60206040818301928281528451809452019201905f5b818110612ef85750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612eeb565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602080835192838152019201905f5b818110612f845750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101612f77565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310612fee57505050505090565b909192939460208061302a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951612f24565b97019301930191939290612fdf565b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061306b57505050505090565b90919293946020806130ce837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612f67565b9701930193019193929061305c565b6040810190811067ffffffffffffffff821117612ea857604052565b60a0810190811067ffffffffffffffff821117612ea857604052565b6060810190811067ffffffffffffffff821117612ea857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612ea857604052565b6040519061317f826130f9565b8173ffffffffffffffffffffffffffffffffffffffff603954168152603a5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603b5416910152565b60405190613200826130f9565b8173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b67ffffffffffffffff8111612ea85760051b60200190565b90604051915f8154908160011c9260018316928315613385575b60208510841461335857848752869390811561331857506001146132d4575b506132d292500383613131565b565b90505f9291925260205f20905f915b8183106132fc5750509060206132d2928201015f6132c5565b60209193508060019154838589010152019101909184926132e3565b602093506132d29592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f6132c5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936132a6565b90604051918281549182825260208201905f5260205f20925f905b8060078301106135a6576132d2945491818110613570575b81811061353a575b818110613504575b8181106134ce575b818110613498575b818110613462575b81811061342d575b10613400575b500383613131565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020015f6133f8565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016133f2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016133ea565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016133e2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016133da565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016133d2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016133ca565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016133c2565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916133aa565b60085460ff1680156136425790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115612e9d575f916136da575b50151590565b90506020813d602011613704575b816136f560209383613131565b810103126107c857515f6136d4565b3d91506136e8565b908160209103126107c8575173ffffffffffffffffffffffffffffffffffffffff811681036107c85790565b908160209103126107c8575190565b906137fa949373ffffffffffffffffffffffffffffffffffffffff6040610160956137be8660209673ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051151560a08701528481015160c087015201511660e08401528051151561010084015201511515610120820152816101408201520190612f24565b90565b60209073ffffffffffffffffffffffffffffffffffffffff602f541673fffd8963efd1fc6a506488495d951d5263988d256040519061383b82613115565b5f82527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8583015260408201525f60405193613876856130dd565b81855281868601526138b7604051978896879586947f2229d0b400000000000000000000000000000000000000000000000000000000865260048601613747565b03925af1908115612e9d575f916138cc575090565b90506020813d6020116138f3575b816138e760209383613131565b810103126107c8575190565b3d91506138da565b9073ffffffffffffffffffffffffffffffffffffffff82511615806139fe575b5f90156139f4575060205f9260645b73ffffffffffffffffffffffffffffffffffffffff602f5416906401000276a4906040519161395883613115565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c86840152604083015260405193613993856130dd565b87855287868601526139d4604051978896879586947f2229d0b400000000000000000000000000000000000000000000000000000000865260048601613747565b03925af19182156139e857916138cc575090565b604051903d90823e3d90fd5b916020905f61392a565b61391b565b60209073ffffffffffffffffffffffffffffffffffffffff602f541673fffd8963efd1fc6a506488495d951d5263988d2560405190613a4182613115565b5f825260648583015260408201525f60405193613876856130dd565b9073ffffffffffffffffffffffffffffffffffffffff8251161580613b14575f9015613b0a575060205f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c5b602f5473ffffffffffffffffffffffffffffffffffffffff16906401000276a49073ffffffffffffffffffffffffffffffffffffffff60405192613aed84613115565b6001845260648785015216604083015260405193613993856130dd565b916020905f613aaa565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f55736520737761704e6174697665496e707574282920666f72206e617469766560448201527f2d746f6b656e2065786163742d6f7574707574207377617073000000000000006064820152fd5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107c857604051907ffe74f05b00000000000000000000000000000000000000000000000000000000825260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c60248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612e9d57613c2e5750565b5f6132d291613131565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107c857604051907ffe74f05b0000000000000000000000000000000000000000000000000000000082526004820152606460248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612e9d57613c2e5750565b73ffffffffffffffffffffffffffffffffffffffff815116613d095760209073ffffffffffffffffffffffffffffffffffffffff602f541673fffd8963efd1fc6a506488495d951d5263988d2560405190613a4182613115565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f63757272656e637930206973206e6f74206e61746976652e205573652073776160448201527f70282920696e73746561640000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff815116613d095760209073ffffffffffffffffffffffffffffffffffffffff602f541673fffd8963efd1fc6a506488495d951d5263988d256040519061383b82613115565b73ffffffffffffffffffffffffffffffffffffffff815116613d095760209073ffffffffffffffffffffffffffffffffffffffff602f54166401000276a460405190613e3282613115565b6001825260648583015260408201525f60405193613876856130dd565b73ffffffffffffffffffffffffffffffffffffffff815116613d095760209073ffffffffffffffffffffffffffffffffffffffff602f54166401000276a460405190613e9a82613115565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8583015260408201525f60405193613876856130dd565b60405190613ee3826130f9565b5f6080838281528260208201528260408201528260608201520152565b80613f5c610140926137fa959473ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6020548060020b60a083015260181c60020b60c082015260215460e0820152602254610100820152816101208201520190612f24565b8051821015613fa65760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60408051613fe18282613131565b6001815260208101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301368337611325620044375f5b60ff8116600181101561418d57865184810181811067ffffffffffffffff821117612ea85781908686833960608082526004908201527f5445535400000000000000000000000000000000000000000000000000000000608082015260128a6140b860a084018481036020860152604090600481527f544553540000000000000000000000000000000000000000000000000000000060208201520190565b92015203905ff0801561418357816140f49173ffffffffffffffffffffffffffffffffffffffff6140ea81958a613f92565b9116905286613f92565b5116803b156107c8575f809160448951809481937f40c10f190000000000000000000000000000000000000000000000000000000083523060048401527f800000000000000000000000000000000000000000000000000000000000000060248401525af18015614183579160019160ff93614173575b500116614019565b5f61417d91613131565b5f61416b565b87513d5f823e3d90fd5b505050505115613fa6578073ffffffffffffffffffffffffffffffffffffffff915051168151610120810181811067ffffffffffffffff821117612ea857835273ffffffffffffffffffffffffffffffffffffffff602f5416815273ffffffffffffffffffffffffffffffffffffffff602e5416602082015273ffffffffffffffffffffffffffffffffffffffff602c54168382015273ffffffffffffffffffffffffffffffffffffffff602d5416606082015273ffffffffffffffffffffffffffffffffffffffff60305416608082015273ffffffffffffffffffffffffffffffffffffffff6031541660a082015273ffffffffffffffffffffffffffffffffffffffff6033541660c08201526004602073ffffffffffffffffffffffffffffffffffffffff603454168551928380927fc34c08e50000000000000000000000000000000000000000000000000000000082525afa90811561442c579073ffffffffffffffffffffffffffffffffffffffff915f9161440d575b501660e082015273ffffffffffffffffffffffffffffffffffffffff603254166101008201525f5b60098110156144065773ffffffffffffffffffffffffffffffffffffffff8160051b830151168451907f095ea7b300000000000000000000000000000000000000000000000000000000825260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201526020816044815f885af180156143fc576143c5575b50600101614330565b6020813d82116143f4575b816143dd60209383613131565b810103126107c85751801515036107c8575f6143bc565b3d91506143d0565b85513d5f823e3d90fd5b5050905090565b614426915060203d602011612ccb57612cbd8183613131565b5f614308565b84513d5f823e3d90fdfe60e0806040523461040657611325803803809161001c828561040a565b83398101906060818303126104065780516001600160401b038111610406578261004791830161042d565b60208201519092906001600160401b0381116104065760409161006b91840161042d565b91015160ff811681036104065782516001600160401b038111610337576100925f54610482565b601f81116103b7575b506020601f821160011461035657819293945f9261034b575b50508160011b915f199060031b1c1916175f555b81516001600160401b038111610337576100e3600154610482565b601f81116102d4575b50602092601f821160011461027357928192935f92610268575b50508160011b915f199060031b1c1916176001555b6080524660a0526040515f905f54918161013484610482565b9182825260208201946001811690815f1461024c5750600114610202575b61015e9250038261040a565b51902060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a081526101d260c08261040a565b51902060c052604051610e4a90816104bb823960805181610865015260a05181610ca8015260c05181610cce0152f35b505f80805290915f805160206113058339815191525b81831061023057505090602061015e92820101610152565b6020919350806001915483858801015201910190918392610218565b60ff191686525061015e92151560051b82016020019050610152565b015190505f80610106565b601f1982169360015f52805f20915f5b8681106102bc57508360019596106102a4575b505050811b0160015561011b565b01515f1960f88460031b161c191690555f8080610296565b91926020600181928685015181550194019201610283565b60015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f830160051c8101916020841061032d575b601f0160051c01905b81811061032257506100ec565b5f8155600101610315565b909150819061030c565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b4565b601f198216905f8052805f20915f5b81811061039f57509583600195969710610387575b505050811b015f556100c8565b01515f1960f88460031b161c191690555f808061037a565b9192602060018192868b015181550194019201610365565b5f80525f80516020611305833981519152601f830160051c810191602084106103fc575b601f0160051c01905b8181106103f1575061009b565b5f81556001016103e4565b90915081906103db565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761033757604052565b81601f82011215610406578051906001600160401b0382116103375760405192610461601f8401601f19166020018561040a565b8284526020838301011161040657815f9260208093018386015e8301015290565b90600182811c921680156104b0575b602083101461049c57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161049156fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde0314610a8b578063095ea7b3146109e857806318160ddd146109ad57806323b872dd14610889578063313ce5671461082e5780633644e515146107ee57806340c10f191461071f57806370a08231146106bc5780637ecebe001461065957806395d89b41146105435780639dc29fac146104a4578063a9059cbb146103f0578063d505accf146101435763dd62ed3e146100b3575f80fd5b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576100ea610c52565b73ffffffffffffffffffffffffffffffffffffffff610107610c75565b91165f52600460205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060405f2054604051908152f35b5f80fd5b3461013f5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5761017a610c52565b610182610c75565b6044356064359260843560ff811680910361013f574285106103925760805f9160209373ffffffffffffffffffffffffffffffffffffffff6101c2610ca5565b91169687855260058652604085209889549960018b0190556040519073ffffffffffffffffffffffffffffffffffffffff888301937f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c985528b6040850152169a8b6060840152898784015260a083015260c082015260c0815261024660e082610b9c565b51902060405190868201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815261028d606282610b9c565b519020906040519182528482015260a435604082015260c435606082015282805260015afa156103875773ffffffffffffffffffffffffffffffffffffffff5f51168015158061037e575b15610320577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916020915f526004825260405f20855f5282528060405f2055604051908152a3005b60646040517f08c379a0000000000000000