@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 592 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":"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_afterAddLiquidity_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_afterDonate_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_afterInitialize_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_afterRemoveLiquidity_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_afterSwap_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_beforeAddLiquidity_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_beforeDonate_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_beforeInitialize_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_beforeRemoveLiquidity_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_beforeSwap_skipIfCalledByHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_gas_beforeSwap_skipIfCalledByHook","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":"0x60806040523461019857600160ff19600c541617600c55600160ff19601f541617601f555f606061002e61019c565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606061007a61019c565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b038211176101845760409081526001808352606319602084018190526bb504f333f9de6484597d89b39383018490526026805460ff1916909217909155602755602880546001600160a01b03199081169093179055604280548316600e17905560438054909216614000600160a01b031790915580519081016001600160401b038111828210176101845760409081525f8083526020909201919091526044805461ffff19169055516201d6e79081620001bc8239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60405190608082016001600160401b038111838210176101845760405256fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c8063116ccd0b14611b635780631ed7831c14611abb5780632ade38801461188d57806339cd20131461182d5780633e5e3c23146117855780633f7286f4146116dd578063488289071461168957806352da3d2514611636578063542524dd146115ea578063549256c71461146457806358bb60a81461126b57806366d9a9a01461110e57806381fd9da514610e3657806385226c8114610d8d578063916a17c614610cb757806393ad73ed14610c53578063b0464fdc14610b7d578063b1a73b8a14610b16578063b1b4d0bb14610ac3578063b5508aa914610a1a578063ba414fa6146109d8578063c3d2e57114610738578063c7b8e15d146106fb578063d2ae841e1461037f578063e20c9f71146102c7578063e4d983ba1461026f578063fa7626d41461022f5763fe68152d0361000e5734610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576004602061100073ffffffffffffffffffffffffffffffffffffffff60435416176101aa816124d4565b604051928380927f61bc221a0000000000000000000000000000000000000000000000000000000082525afa8015610224575f906101ec575b61001890613610565b506020813d60201161021c575b8161020660209383611e24565b810103126102185761001890516101e3565b5f80fd5b3d91506101f9565b6040513d5f823e3d90fd5b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857602060ff601f54166040519015158152f35b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576004602061200073ffffffffffffffffffffffffffffffffffffffff60435416176101aa816124d4565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185760405180602060155491828152019060155f527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475905f5b8181106103535761034f8561034381870382611e24565b60405191829182611bb7565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161032c565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857602073ffffffffffffffffffffffffffffffffffffffff60435416176103d2816124d4565b6103db816133ca565b6040517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481855afa8015610224575f906106c7575b6104219150613590565b5f602061051d73ffffffffffffffffffffffffffffffffffffffff603054166040513084820152838152610456604082611e24565b6040519485809481937f234266d70000000000000000000000000000000000000000000000000000000083526104fc6004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b606460a484015260c860c484015261010060e4840152610104830190611c06565b03925af1801561022457610698575b506040517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481855afa8015610224575f90610664575b6105739150613610565b5f60206105a873ffffffffffffffffffffffffffffffffffffffff603054166040513084820152838152610456604082611e24565b03925af1801561022457610633575b506020600491604051928380927f61bc221a0000000000000000000000000000000000000000000000000000000082525afa8015610224575f906105ff575b61001890613687565b506020813d60201161062b575b8161061960209383611e24565b810103126102185761001890516105f6565b3d915061060c565b6020813d60201161065c575b8161064c60209383611e24565b81010312610218575060206105b7565b3d915061063f565b506020813d602011610690575b8161067e60209383611e24565b81010312610218576105739051610569565b3d9150610671565b6020813d6020116106bf575b816106b160209383611e24565b81010312610218575161052c565b3d91506106a4565b506020813d6020116106f3575b816106e160209383611e24565b81010312610218576104219051610417565b3d91506106d4565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185760206040516401000276a48152f35b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857608073ffffffffffffffffffffffffffffffffffffffff604354161761078b816124d4565b610794816133ca565b6040517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481855afa8015610224575f906109a4575b6107da9150613590565b5f602061084473ffffffffffffffffffffffffffffffffffffffff602f5416604051308482015283815261080f604082611e24565b6040519485809481937f2229d0b4000000000000000000000000000000000000000000000000000000008352600483016120a6565b03925af1801561022457610975575b506040517fdd9fca1200000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f7377617020736b69707320686f6f6b2063616c6c20696620686f6f6b2069732060448201527f63616c6c6572000000000000000000000000000000000000000000000000000060648201526020816084815f737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561022457610944575b506020600491604051928380927f61bc221a0000000000000000000000000000000000000000000000000000000082525afa8015610224575f906101ec5761001890613610565b6020813d60201161096d575b8161095d60209383611e24565b81010312610218575060206108fd565b3d9150610950565b6020813d60201161099c575b8161098e60209383611e24565b810103126102185751610853565b3d9150610981565b506020813d6020116109d0575b816109be60209383611e24565b81010312610218576107da90516107d0565b3d91506109b1565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576020610a106123fb565b6040519015158152f35b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857601954610a5481611f8b565b90610a626040519283611e24565b80825260195f9081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610aa6576040518061034f8782611c9e565b600160208192610ab585611fa3565b815201920192019190610a91565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857601073ffffffffffffffffffffffffffffffffffffffff60435416176103d2816124d4565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857606060ff6026541660275473ffffffffffffffffffffffffffffffffffffffff6028541690604051921515835260208301526040820152f35b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857601c54610bb781611f8b565b90610bc56040519283611e24565b80825260208201601c5f527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2115f915b838310610c09576040518061034f8782611d1b565b60026020600192604051610c1c81611dbf565b73ffffffffffffffffffffffffffffffffffffffff8654168152610c41858701612157565b83820152815201920192019190610bf4565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610218576020805460215460225460408051600285810b825260189590951c90940b94840194909452928201526060810191909152608090f35b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857601d54610cf181611f8b565b90610cff6040519283611e24565b80825260208201601d5f527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f5f915b838310610d43576040518061034f8782611d1b565b60026020600192604051610d5681611dbf565b73ffffffffffffffffffffffffffffffffffffffff8654168152610d7b858701612157565b83820152815201920192019190610d2e565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857601a54610dc781611f8b565b90610dd56040519283611e24565b808252601a5f9081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610e19576040518061034f8782611c9e565b600160208192610e2885611fa3565b815201920192019190610e04565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185761010073ffffffffffffffffffffffffffffffffffffffff6043541617610e8a816124d4565b610e93816133ca565b6040517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481855afa8015610224575f906110da575b610ed99150613590565b5f6020610f4373ffffffffffffffffffffffffffffffffffffffff602c54166040513084820152838152610f0e604082611e24565b6040519485809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835260048301611e74565b03925af18015610224576110ab575b506040517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481855afa8015610224575f90611077575b610f999150613610565b5f602061100373ffffffffffffffffffffffffffffffffffffffff602c54166040513084820152838152610fce604082611e24565b6040519485809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835260048301611f01565b03925af1801561022457611048575b505f60206105a873ffffffffffffffffffffffffffffffffffffffff602c54166040513084820152838152610f0e604082611e24565b6020813d60201161106f575b8161106160209383611e24565b810103126102185751611012565b3d9150611054565b506020813d6020116110a3575b8161109160209383611e24565b8101031261021857610f999051610f8f565b3d9150611084565b6020813d6020116110d2575b816110c460209383611e24565b810103126102185751610f52565b3d91506110b7565b506020813d602011611106575b816110f460209383611e24565b8101031261021857610ed99051610ecf565b3d91506110e7565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857601b5461114881611f8b565b906111566040519283611e24565b808252602082019081601b5f527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc15f915b83831061123057848660405191829160208301906020845251809152604083019060408160051b85010192915f905b8282106111c557505050500390f35b91936020611220827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836112108351604084526040840190611c06565b9201519084818403910152611c49565b96019201920185949391926111b6565b6002602060019260405161124381611dbf565b61124c86611fa3565b8152611259858701612157565b83820152815201920192019190611187565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857604073ffffffffffffffffffffffffffffffffffffffff60435416176112be816124d4565b6112c7816133ca565b6040517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481855afa8015610224575f90611430575b61130d9150613590565b5f602061134273ffffffffffffffffffffffffffffffffffffffff602f5416604051308482015283815261080f604082611e24565b03925af1801561022457611401575b506040517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481855afa8015610224575f906113cd575b6113989150613610565b5f60206105a873ffffffffffffffffffffffffffffffffffffffff602f5416604051308482015283815261080f604082611e24565b506020813d6020116113f9575b816113e760209383611e24565b8101031261021857611398905161138e565b3d91506113da565b6020813d602011611428575b8161141a60209383611e24565b810103126102185751611351565b3d915061140d565b506020813d60201161145c575b8161144a60209383611e24565b810103126102185761130d9051611303565b3d915061143d565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185761080073ffffffffffffffffffffffffffffffffffffffff60435416176114b8816124d4565b6040517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481855afa8015610224575f906115b6575b6114fe9150613590565b611507816133ca565b6040517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481855afa8015610224575f90611582575b61154d9150613610565b5f60206105a873ffffffffffffffffffffffffffffffffffffffff602c54166040513084820152838152610fce604082611e24565b506020813d6020116115ae575b8161159c60209383611e24565b810103126102185761154d9051611543565b3d915061158f565b506020813d6020116115e2575b816115d060209383611e24565b81010312610218576114fe90516114f4565b3d91506115c3565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857602060405173fffd8963efd1fc6a506488495d951d5263988d258152f35b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857608073ffffffffffffffffffffffffffffffffffffffff60435416176112be816124d4565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185761040073ffffffffffffffffffffffffffffffffffffffff60435416176114b8816124d4565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185760405180602060175491828152019060175f527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15905f5b8181106117595761034f8561034381870382611e24565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611742565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185760405180602060185491828152019060185f527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e905f5b8181106118015761034f8561034381870382611e24565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016117ea565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185760235460245460255460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021857601e546118c781611f8b565b906118d56040519283611e24565b808252602082019081601e5f527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3505f915b838310611a2357848660405191829160208301906020845251809152604083019060408160051b85010192915f905b82821061194457505050500390f35b91939092947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09082030182528451906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b8501019401925f5b8281106119da5750505050506020806001929601920192018594939192611935565b9091929394602080611a16837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951611c06565b97019501939291016119b8565b604051611a2f81611dbf565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054611a5881611f8b565b91611a666040519384611e24565b81835260208301905f5260205f20905f905b838210611a9e575050505060019282602092836002950152815201920192019190611906565b600160208192611aad86611fa3565b815201930191019091611a78565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185760405180602060165491828152019060165f527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289905f5b818110611b375761034f8561034381870382611e24565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611b20565b34610218575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102185761020073ffffffffffffffffffffffffffffffffffffffff6043541617610e8a816124d4565b60206040818301928281528451809452019201905f5b818110611bda5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611bcd565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602080835192838152019201905f5b818110611c665750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611c59565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310611cd057505050505090565b9091929394602080611d0c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951611c06565b97019301930191939290611cc1565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310611d4d57505050505090565b9091929394602080611db0837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611c49565b97019301930191939290611d3e565b6040810190811067ffffffffffffffff821117611ddb57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff821117611ddb57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611ddb57604052565b90816020910312610218575190565b60365473ffffffffffffffffffffffffffffffffffffffff9081168252603754808216602084015260a081901c62ffffff16604084015260b81c60020b6060830152603854166080820152611efe9190610140906023548060020b60a083015260181c60020b60c082015260245460e0820152602554610100820152816101208201520190611c06565b90565b60365473ffffffffffffffffffffffffffffffffffffffff9081168252603754808216602084015260a081901c62ffffff16604084015260b81c60020b6060830152603854166080820152611efe9190610140906020548060020b60a083015260181c60020b60c082015260215460e0820152602254610100820152816101208201520190611c06565b67ffffffffffffffff8111611ddb5760051b60200190565b90604051915f8154908160011c926001831692831561209c575b60208510841461206f57848752869390811561202f5750600114611feb575b50611fe992500383611e24565b565b90505f9291925260205f20905f915b818310612013575050906020611fe9928201015f611fdc565b6020919350806001915483858901015201910190918492611ffa565b60209350611fe99592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f611fdc565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f1693611fbd565b60365473ffffffffffffffffffffffffffffffffffffffff9081168252603754808216602084015260a081901c62ffffff16604084015260b81c60020b6060830152603854166080820152611efe91906101609060ff60265416151560a082015260275460c082015273ffffffffffffffffffffffffffffffffffffffff6028541660e082015260ff604454818116151561010084015260081c161515610120820152816101408201520190611c06565b90604051918281549182825260208201905f5260205f20925f905b80600783011061236e57611fe9945491818110612338575b818110612302575b8181106122cc575b818110612296575b818110612260575b81811061222a575b8181106121f5575b106121c8575b500383611e24565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020015f6121c0565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016121ba565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016121b2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016121aa565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016121a2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b16815201930161219a565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301612192565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161218a565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391612172565b60085460ff16801561240a5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610224575f916124a2575b50151590565b90506020813d6020116124cc575b816124bd60209383611e24565b8101031261021857515f61249c565b3d91506124b0565b90604051916130a5928381019381851067ffffffffffffffff861117611ddb57620198c78239805f9403905ff09081156102245773ffffffffffffffffffffffffffffffffffffffff1690737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610218576040517fea0602910000000000000000000000000000000000000000000000000000000081528260048201525f8160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561022457613389575b5073ffffffffffffffffffffffffffffffffffffffff16803b67ffffffffffffffff811161335c5790818560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8396011601926125f16040519485611e24565b82845260208401903c737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15613182578161265b91604051809381927fb4d6c782000000000000000000000000000000000000000000000000000000008352876004840152604060248401526044830190611c06565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156133515761333c575b5050604051615e828082019082821067ffffffffffffffff83111761330f57602091839162004ef7833930815203019084f080156132d75773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff0000000000000000000000000000000000000000602b541617602b5560405190611bb9908183019183831067ffffffffffffffff8411176132e25791839160209362016dec8439815203019084f080156132d75773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602f541617602f5573ffffffffffffffffffffffffffffffffffffffff602b541660405190610d6f908183019183831067ffffffffffffffff8411176132e2579183916020936201c96c8439815203019084f080156132d75773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602e541617602e5573ffffffffffffffffffffffffffffffffffffffff602b541660405190611835908183019183831067ffffffffffffffff8411176132e2579183916020936200f4ce8439815203019084f080156132d75773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602c541617602c5573ffffffffffffffffffffffffffffffffffffffff602b541660405190611315908183019183831067ffffffffffffffff8411176132e25791839160209362010d038439815203019084f080156132d75773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602d541617602d5573ffffffffffffffffffffffffffffffffffffffff602b5416604051906112d2908183019183831067ffffffffffffffff8411176132e2579183916020936200e1fc8439815203019084f080156132d75773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603054161760305573ffffffffffffffffffffffffffffffffffffffff602b541660405190610f22908183019183831067ffffffffffffffff8411176132e257918391602093620189a58439815203019084f080156132d75773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603154161760315573ffffffffffffffffffffffffffffffffffffffff602b541660405190610c38908183019183831067ffffffffffffffff8411176132e2579183916020936200d5c48439815203019084f080156132d75773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603354161760335573ffffffffffffffffffffffffffffffffffffffff602b541660405190614dd4908183019183831067ffffffffffffffff8411176132e257918391602093620120188439815203019084f080156132d75773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603454161760345560408051612b6d8282611e24565b600d815284602082017f666565436f6e74726f6c6c65720000000000000000000000000000000000000081528351600d6020820192835e82602d820152600d8152612bb9602d82611e24565b5190208351907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561327e578291613288575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15613182578173ffffffffffffffffffffffffffffffffffffffff612c8a92865193849283927fc657c71800000000000000000000000000000000000000000000000000000000845216968760048401528860248401526044830190611c06565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561327e57613265575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000603554161760355573ffffffffffffffffffffffffffffffffffffffff602b541681519061284b908183019183831067ffffffffffffffff841117613238579183916020936200ad798439815203019085f0801561322e5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060325416176032558373ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60355416813b1561322a57829160248392865194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af1801561320b57613215575b5073ffffffffffffffffffffffffffffffffffffffff602b5416833b15613182578251907fd0ebdbe70000000000000000000000000000000000000000000000000000000082526004820152818160248183885af1801561320b576131f2575b5050612e4f61373f565b9373ffffffffffffffffffffffffffffffffffffffff80612e6e61373f565b96169516808610156131d55773ffffffffffffffffffffffffffffffffffffffff80915b1695867fffffffffffffffffffffffff0000000000000000000000000000000000000000602a541617602a5516807fffffffffffffffffffffffff0000000000000000000000000000000000000000602954161760295582517f61bc221a000000000000000000000000000000000000000000000000000000008152602081600481885afa80156131cb578390613197575b612f2e9150613590565b8160808451612f3c81611e08565b82815282602082015282868201528260608201520152825190612f5e82611e08565b81526020810195865282810191610bb883526060820193603c85526080830195865273ffffffffffffffffffffffffffffffffffffffff602b541690602073ffffffffffffffffffffffffffffffffffffffff60c48b86855196879485937f6276cbbe000000000000000000000000000000000000000000000000000000008552818c511660048601525116602484015262ffffff8b511660448401528b5160020b606484015273ffffffffffffffffffffffffffffffffffffffff8d511660848401526c0100000000000000000000000060a48401525af190811561318e575061314e575b505073ffffffffffffffffffffffffffffffffffffffff949585809251167fffffffffffffffffffffffff0000000000000000000000000000000000000000603654161760365551167fffffffffffffffffffffffff0000000000000000000000000000000000000000603754161760375551907fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000603754925160b81b79ffffff0000000000000000000000000000000000000000000000169360a01b169116171760375551167fffffffffffffffffffffffff00000000000000000000000000000000000000006038541617603855565b6020813d602011613186575b8161316760209383611e24565b8101031261318257518060020b0361317f5780613044565b80fd5b5080fd5b3d915061315a565b513d84823e3d90fd5b506020813d6020116131c3575b816131b160209383611e24565b8101031261021857612f2e9051612f24565b3d91506131a4565b84513d85823e3d90fd5b9473ffffffffffffffffffffffffffffffffffffffff8091612e92565b816131fc91611e24565b61320757835f612e45565b8380fd5b83513d84823e3d90fd5b8161321f91611e24565b61320757835f612de5565b8280fd5b81513d86823e3d90fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8161326f91611e24565b61327a57845f612caf565b8480fd5b84513d84823e3d90fd5b90506020813d6020116132cf575b816132a360209383611e24565b81010312613182575173ffffffffffffffffffffffffffffffffffffffff81168103613182575f612c12565b3d9150613296565b6040513d85823e3d90fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8161334691611e24565b61322a57825f612680565b6040513d84823e3d90fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6133969194505f90611e24565b5f9273ffffffffffffffffffffffffffffffffffffffff61258e565b90816020910312610218575180151581036102185790565b5f90602073ffffffffffffffffffffffffffffffffffffffff80603654169216916044604051809581937f095ea7b30000000000000000000000000000000000000000000000000000000083528660048401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248401525af1908115610224575f92602092613575575b50604473ffffffffffffffffffffffffffffffffffffffff603754169160405194859384927f095ea7b300000000000000000000000000000000000000000000000000000000845260048401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248401525af1801561022457613548575b505f602061350c73ffffffffffffffffffffffffffffffffffffffff602c54166040513084820152838152610fce604082611e24565b03925af180156102245761351d5750565b61353e9060203d602011613541575b6135368183611e24565b810190611e65565b50565b503d61352c565b6135699060203d60201161356e575b6135618183611e24565b8101906133b2565b6134d6565b503d613557565b61358b90833d851161356e576135618183611e24565b613456565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561021857604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201525f60248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610224576136065750565b5f611fe991611e24565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561021857604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152600160248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610224576136065750565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561021857604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152600260248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610224576136065750565b80518210156137125760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040805161374d8282611e24565b6001815260208101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830136833761132562003bd25f5b60ff811660018110156138f957865184810181811067ffffffffffffffff821117611ddb5781908686833960608082526004908201527f5445535400000000000000000000000000000000000000000000000000000000608082015260128a61382460a084018481036020860152604090600481527f544553540000000000000000000000000000000000000000000000000000000060208201520190565b92015203905ff080156138ef57816138609173ffffffffffffffffffffffffffffffffffffffff61385681958a6136fe565b91169052866136fe565b5116803b15610218575f809160448951809481937f40c10f190000000000000000000000000000000000000000000000000000000083523060048401527f800000000000000000000000000000000000000000000000000000000000000060248401525af180156138ef579160019160ff936138df575b500116613785565b5f6138e991611e24565b5f6138d7565b87513d5f823e3d90fd5b505050509291925115613712578073ffffffffffffffffffffffffffffffffffffffff915051168251610120810181811067ffffffffffffffff821117611ddb57845273ffffffffffffffffffffffffffffffffffffffff602f5416815273ffffffffffffffffffffffffffffffffffffffff602e5416602082015273ffffffffffffffffffffffffffffffffffffffff602c54168482015273ffffffffffffffffffffffffffffffffffffffff602d5416606082015273ffffffffffffffffffffffffffffffffffffffff60305416608082015273ffffffffffffffffffffffffffffffffffffffff6031541660a082015273ffffffffffffffffffffffffffffffffffffffff6033541660c08201526004602073ffffffffffffffffffffffffffffffffffffffff603454168651928380927fc34c08e50000000000000000000000000000000000000000000000000000000082525afa8015613bc7575f90613b64575b73ffffffffffffffffffffffffffffffffffffffff91501660e082015273ffffffffffffffffffffffffffffffffffffffff603254166101008201525f5b6009811015613b5d5773ffffffffffffffffffffffffffffffffffffffff8160051b83015116908551917f095ea7b300000000000000000000000000000000000000000000000000000000835260048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301526020826044815f885af1918215613b5357600192613b35575b5001613a9d565b613b4c9060203d811161356e576135618183611e24565b505f613b2e565b86513d5f823e3d90fd5b5090925050565b506020813d602011613bbf575b81613b7e60209383611e24565b81010312610218575173ffffffffffffffffffffffffffffffffffffffff811681036102185773ffffffffffffffffffffffffffffffffffffffff90613a5f565b3d9150613b71565b85513d5f823e3d90fdfe60e0806040523461040657611325803803809161001c828561040a565b83398101906060818303126104065780516001600160401b038111610406578261004791830161042d565b60208201519092906001600160401b0381116104065760409161006b91840161042d565b91015160ff811681036104065782516001600160401b038111610337576100925f54610482565b601f81116103b7575b506020601f821160011461035657819293945f9261034b575b50508160011b915f199060031b1c1916175f555b81516001600160401b038111610337576100e3600154610482565b601f81116102d4575b50602092601f821160011461027357928192935f92610268575b50508160011b915f199060031b1c1916176001555b6080524660a0526040515f905f54918161013484610482565b9182825260208201946001811690815f1461024c5750600114610202575b61015e9250038261040a565b51902060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a081526101d260c08261040a565b51902060c052604051610e4a90816104bb823960805181610865015260a05181610ca8015260c05181610cce0152f35b505f80805290915f805160206113058339815191525b81831061023057505090602061015e92820101610152565b6020919350806001915483858801015201910190918392610218565b60ff191686525061015e92151560051b82016020019050610152565b015190505f80610106565b601f1982169360015f52805f20915f5b8681106102bc57508360019596106102a4575b505050811b0160015561011b565b01515f1960f88460031b161c191690555f8080610296565b91926020600181928685015181550194019201610283565b60015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f830160051c8101916020841061032d575b601f0160051c01905b81811061032257506100ec565b5f8155600101610315565b909150819061030c565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b4565b601f198216905f8052805f20915f5b81811061039f57509583600195969710610387575b505050811b015f556100c8565b01515f1960f88460031b161c191690555f808061037a565b9192602060018192868b015181550194019201610365565b5f80525f80516020611305833981519152601f830160051c810191602084106103fc575b601f0160051c01905b8181106103f1575061009b565b5f81556001016103e4565b90915081906103db565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761033757604052565b81601f82011215610406578051906001600160401b0382116103375760405192610461601f8401601f19166020018561040a565b8284526020838301011161040657815f9260208093018386015e8301015290565b90600182811c921680156104b0575b602083101461049c57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161049156fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde0314610a8b578063095ea7b3146109e857806318160ddd146109ad57806323b872dd14610889578063313ce5671461082e5780633644e515146107ee57806340c10f191461071f57806370a08231146106bc5780637ecebe001461065957806395d89b41146105435780639dc29fac146104a4578063a9059cbb146103f0578063d505accf146101435763dd62ed3e146100b3575f80fd5b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576100ea610c52565b73ffffffffffffffffffffffffffffffffffffffff610107610c75565b91165f52600460205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060405f2054604051908152f35b5f80fd5b3461013f5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5761017a610c52565b610182610c75565b6044356064359260843560ff811680910361013f574285106103925760805f9160209373ffffffffffffffffffffffffffffffffffffffff6101c2610ca5565b91169687855260058652604085209889549960018b0190556040519073ffffffffffffffffffffffffffffffffffffffff888301937f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c985528b6040850152169a8b6060840152898784015260a083015260c082015260c0815261024660e082610b9c565b51902060405190868201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815261028d606282610b9c565b519020906040519182528482015260a435604082015260c435606082015282805260015afa156103875773ffffffffffffffffffffffffffffffffffffffff5f51168015158061037e575b15610320577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916020915f526004825260405f20855f5282528060405f2055604051908152a3005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152fd5b508281146102d8565b6040513d5f823e3d90fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152fd5b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57610427610c52565b73ffffffffffffffffffffffffffffffffffffffff60243591335f52600360205260405f20610457848254610c98565b90551690815f52600360205260405f208181540190556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3602060405160018152f35b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f575f6104dc610c52565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff6024359316928385526003825260408520610530828254610c98565b90558060025403600255604051908152a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576040515f60015461058181610b4b565b808452906001811690811561061757506001146105b9575b6105b5836105a981850382610b9c565b60405191829182610c0a565b0390f35b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b8082106105fd575090915081016020016105a9610599565b9192600181602092548385880101520191019092916105e5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506105a99050610599565b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5773ffffffffffffffffffffffffffffffffffffffff6106a5610c52565b165f526005602052602060405f2054604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5773ffffffffffffffffffffffffffffffffffffffff610708610c52565b165f526003602052602060405f2054604051908152f35b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57610756610c52565b602435906002548281018091116107c157602073ffffffffffffffffffffffffffffffffffffffff5f937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9360025516938484526003825260408420818154019055604051908152a3005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576020610826610ca5565b604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461013f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576108c0610c52565b6108c8610c75565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff80604435951693845f526004835260405f208233165f52835260405f2054867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610986575b5050845f526003835260405f2061095f878254610c98565b90551693845f526003825260405f20818154019055604051908152a3602060405160018152f35b61098f91610c98565b855f526004845260405f208333165f52845260405f20558686610947565b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576020600254604051908152f35b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57610a1f610c52565b73ffffffffffffffffffffffffffffffffffffffff60243591335f52600460205260405f208282165f526020528260405f205560405192835216907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576040515f8054610ac881610b4b565b80845290600181169081156106175750600114610aef576105b5836105a981850382610b9c565b5f8080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b808210610b31575090915081016020016105a9610599565b919260018160209254838588010152019101909291610b19565b90600182811c92168015610b92575b6020831014610b6557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610b5a565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610bdd57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361013f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361013f57565b919082039182116107c157565b467f000000000000000000000000000000000000000000000000000000000000000003610cf0577f000000000000000000000000000000000000000000000000000000000000000090565b6040515f905f549181610d0284610b4b565b9182825260208201946001811690815f146