@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 677 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_addLiquidity_withFeeTakingHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_addLiquidity_withLPFeeTakingHook","inputs":[{"name":"feeRevenue0","type":"uint128","internalType":"uint128"},{"name":"feeRevenue1","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_removeLiquidity_withLPFeeTakingHook","inputs":[{"name":"feeRevenue0","type":"uint128","internalType":"uint128"},{"name":"feeRevenue1","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_swap_beforeSwap_returnsDeltaSpecified","inputs":[{"name":"hookDeltaSpecified","type":"int128","internalType":"int128"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"zeroForOne","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeLiquidity_withFeeTakingHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_afterSwapFeeOnUnspecified_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_afterSwapFeeOnUnspecified_exactOutput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_beforeSwapNoOpsSwap_exactInput","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_swap_beforeSwapNoOpsSwap_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":"0x60806040523461017b57600160ff19600c541617600c55600160ff19601f541617601f555f606061002e61017f565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606061007a61017f565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b038211176101675760409081526001808352606319602084018190526bb504f333f9de6484597d89b39383018490526026805460ff1916909217909155602755602880546001600160a01b03199081169093179055604280548316600e17905560438054909216614000600160a01b0317909155661561a511862ef96615405bda5acedf60801b0360455551620211ef90816200019f8239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60405190608082016001600160401b038111838210176101675760405256fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081630a9254e414613ac9575080631223a7331461383f5780631ed7831c1461379657806325ee6f03146134465780632ade38801461321a57806333be6c8614612e9c57806339cd201314612e3b5780633e5e3c2314612d925780633f7286f414612ce9578063542524dd14612c9a57806366d9a9a014612b3f5780637116d171146128df57806385226c8114612837578063916a17c61461276257806393ad73ed146126fd57806394a86e9e14612284578063afe706e214611e48578063b0464fdc14611d73578063b1a73b8a14611d0b578063b5508aa914611c63578063ba414fa614611c20578063c7b8e15d14611be0578063e20c9f7114611b27578063eb8e97901461193e578063f1ccefea146116a7578063f409b8e3146101905763fa7626d40361000f573461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57602060ff601f54166040519015158152f35b80fd5b503461018d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760043580600f0b8091036112d15760243590604435801515928382036116a35773ffffffffffffffffffffffffffffffffffffffff602b541660405190610e47908183019183831067ffffffffffffffff84111761167657918391602093620117038439815203019086f0801561166b5773ffffffffffffffffffffffffffffffffffffffff61025091166165b1565b61028b73ffffffffffffffffffffffffffffffffffffffff6036541673ffffffffffffffffffffffffffffffffffffffff604454169061632a565b6102c673ffffffffffffffffffffffffffffffffffffffff6037541673ffffffffffffffffffffffffffffffffffffffff604454169061632a565b8481121561163b57197f8000000000000000000000000000000000000000000000000000000000000000037f8000000000000000000000000000000000000000000000000000000000000000811161160e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161160e57925b84937f7fffffffffffffffffffffffffffffffffffffffffffffffffffffba269b480090851561039b576024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8695506103cb905f927f80000000000000000000000000000000000000000000000000000045d964b800916166fd565b7f80000000000000000000000000000000000000000000000000000000000000008110156115de577f8000000000000000000000000000000000000000000000000000000000000000037f800000000000000000000000000000000000000000000000000000000000000081116115b15719600181018091116115b157905b6040517fa322c40e0000000000000000000000000000000000000000000000000000000081528260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156115a557809261151f575b50505f6104f461055082936105246104b6615e87565b916040519485937f4b5c4277000000000000000000000000000000000000000000000000000000006020860152604060248601526064850190615028565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc848303016044850152615028565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282615235565b6020815191016a636f6e736f6c652e6c6f675afa50600f0b84811280159491908381036115005773ffffffffffffffffffffffffffffffffffffffff60365416925b6fffffffffffffffffffffffffffffffff6105c573ffffffffffffffffffffffffffffffffffffffff602b541686615d42565b16600f0b90817fffffffffffffffffffffffffffffffff800000000000000000000000000000011361147c578881121561144c57197f8000000000000000000000000000000000000000000000000000000000000000037f8000000000000000000000000000000000000000000000000000000000000000811161123e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161123e57905b7f7fffffffffffffffffffffffffffffff80000000000000000000000000000001908981121561141857197f8000000000000000000000000000000000000000000000000000000000000000037f800000000000000000000000000000000000000000000000000000000000000081116113eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116113eb5790610717926166fd565b7f8000000000000000000000000000000000000000000000000000000000000000811015611393577f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111611366571960018101809111611366575b6040517fa322c40e0000000000000000000000000000000000000000000000000000000081528160048201528881602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561135b5789916112d5575b505f6104f461080082936105246104b6615e87565b6020815191016a636f6e736f6c652e6c6f675afa50600f0b918773ffffffffffffffffffffffffffffffffffffffff60445416803b156112d1578180916024604051809481937f11b11adb0000000000000000000000000000000000000000000000000000000083528a60048401525af18015610a6d576112b8575b50506040519561088b876151e1565b8887528860208801525f1461129d576401000276a4965b73ffffffffffffffffffffffffffffffffffffffff604051986108c48a6151fd565b878a528360208b015216604089015281155f14610a7857505050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610a6957826040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fbe8b8507000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610a6d57610a54575b5050610a069073ffffffffffffffffffffffffffffffffffffffff602f541692602093849286604051936109a58686615235565b8185527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086013687870137604051968795869485937f2229d0b4000000000000000000000000000000000000000000000000000000008552600485016152bf565b03925af18015610a4957610a1b575b50505b80f35b81610a3a92903d10610a42575b610a328183615235565b8101906152b0565b508180610a15565b503d610a28565b6040513d85823e3d90fd5b81610a5e91615235565b610a69578284610971565b8280fd5b6040513d84823e3d90fd5b828061126b575b15610b4d57505050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610a6957826040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffa0b71d6000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610a6d57610a54575050610a069073ffffffffffffffffffffffffffffffffffffffff602f541692602093849286604051936109a58686615235565b8080611209575b15610c2257505050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610a6957826040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ffa0b71d6000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610a6d57610a54575050610a069073ffffffffffffffffffffffffffffffffffffffff602f541692602093849286604051936109a58686615235565b610c329897939495983087615d42565b92610d0a610c5873ffffffffffffffffffffffffffffffffffffffff6044541689615d42565b9a8a610c7c73ffffffffffffffffffffffffffffffffffffffff602b54168b615d42565b9773ffffffffffffffffffffffffffffffffffffffff602f541660209c8d9360405193610ca98686615235565b8185527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086013687870137604051978895869485937f2229d0b4000000000000000000000000000000000000000000000000000000008552600485016152bf565b03925af19182156111fe579083918c936111c7575b50036111be5760801d995b8981126111965786610d3b91615a35565b99610d5e73ffffffffffffffffffffffffffffffffffffffff6044541689615d42565b9a8a8c1261116e5760408051909c610da892610d7a8f84615235565b601d83527f686f6f6b2062616c616e6365206368616e676520696e636f72726563740000008d8401526163f2565b89851261119657610dbd90600f0b8095615a35565b610dc73089615d42565b908a821261116e57610e0e918c91610de183519384615235565b8b83527f737761707065722062616c616e6365206368616e676520696e636f72726563748c8401526163f2565b80611157575b15610f5d575050610e6d90610e2f604554600f0b9485615a68565b600f0b885191610e3f8a84615235565b601a83527f64656c746153706563696669656420657861637420696e707574000000000000888401526163f2565b848112610f3557610ea191610e8191615a50565b9173ffffffffffffffffffffffffffffffffffffffff602b541690615d42565b90838212610f0d577f7574000000000000000000000000000000000000000000000000000000000000610a1894957f6d616e616765722062616c616e6365206368616e676520657861637420696e70815195610efe606088615235565b602287528601528401526163f2565b6004847f93dafdf1000000000000000000000000000000000000000000000000000000008152fd5b6004857f93dafdf1000000000000000000000000000000000000000000000000000000008152fd5b9293928061113d575b156110445750610fbe90610f8060455460801d9384615a68565b600f0b885191610f908a84615235565b601b83527f64656c7461537065636966696564206578616374206f75747075740000000000888401526163f2565b848212610f3557610fd691610e8191600f0b90615a50565b90838212610f0d577f70757400000000000000000000000000000000000000000000000000000000008495610a1895507f6d616e616765722062616c616e6365206368616e6765206578616374206f7574815195611035606088615235565b602387528601528401526163f2565b9192906110b2905f989698508387519161105f606084615235565b602283527f64656c7461537065636966696564206e6f7420616d6f756e74537065636966698b8401527f6564000000000000000000000000000000000000000000000000000000000000898401526163f2565b85811261111557916110ca610e81926110cf94615a50565b615a50565b90838212610f0d577f6d616e616765722062616c616e6365206368616e6765206e6f74000000000000610a18949561110985519586615235565b601a85528401526163f2565b6004867f93dafdf1000000000000000000000000000000000000000000000000000000008152fd5b506111488184615a35565b60455460801d600f0b12610f66565b506111628286615a35565b604554600f0b13610e14565b60048b7f93dafdf1000000000000000000000000000000000000000000000000000000008152fd5b60048a7f93dafdf1000000000000000000000000000000000000000000000000000000008152fd5b600f0b99610d2a565b8b809294508193503d83116111f7575b6111e18183615235565b810103126111f357829051918d610d1f565b5f80fd5b503d6111d7565b6040513d8d823e3d90fd5b507fffffffffffffffffffffffffffffffff80000000000000000000000000000000841461123e57838903600f0b8212610b54565b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b507f8000000000000000000000000000000000000000000000000000000000000000821461123e578189038413610a7f565b73fffd8963efd1fc6a506488495d951d5263988d25966108a2565b816112c291615235565b6112cd57878961087c565b8780fd5b5080fd5b9050883d8082843e6112e78184615235565b8201916020818403126112d15780519067ffffffffffffffff8211610a69570182601f820112156112d157805161131d81615276565b9361132b6040519586615235565b81855260208284010111610a69575f93849360208361080094826104f497018386015e83010152935050506107eb565b6040513d8b823e3d90fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f8000000000000000000000000000000000000000000000000000000000000000810190811115610795576024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f800000000000000000000000000000000000000000000000000000000000000081018091116113eb5790610717926166fd565b7f8000000000000000000000000000000000000000000000000000000000000000810180911161123e579061066f565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f5374645574696c7320626f756e6428696e743235362c696e743235362c696e7460448201527f323536293a204d6178206973206c657373207468616e206d696e2e00000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff6037541692610592565b9091503d8082843e6115318184615235565b8201916020818403126112d15780519067ffffffffffffffff8211610a69570182601f820112156112d15780519061156882615276565b936115766040519586615235565b82855260208383010111610a69575f9384936020846104f4958261055096018386015e830101529350506104a0565b604051903d90823e3d90fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f800000000000000000000000000000000000000000000000000000000000000081019081116115b1579061044a565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f8000000000000000000000000000000000000000000000000000000000000000810180911161160e5792610344565b6040513d87823e3d90fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8480fd5b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576116de6161fb565b61171973ffffffffffffffffffffffffffffffffffffffff6036541673ffffffffffffffffffffffffffffffffffffffff6044541690616268565b61175473ffffffffffffffffffffffffffffffffffffffff6037541673ffffffffffffffffffffffffffffffffffffffff6044541690616268565b61177773ffffffffffffffffffffffffffffffffffffffff602954163090615d42565b6117993073ffffffffffffffffffffffffffffffffffffffff602a5416615d42565b9061180c6040516117a9816151e1565b848152846020820152604051906117bf826151fd565b600182526201e24060208301526bb504f333f9de6484597d89b3604083015273ffffffffffffffffffffffffffffffffffffffff602f54169160209283928860405193610ca98686615235565b03925af1801561166b57611914575b505061183f3073ffffffffffffffffffffffffffffffffffffffff60295416615d42565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1dc081019081116118e7579061187d916118776153ad565b91615df0565b61189f3073ffffffffffffffffffffffffffffffffffffffff602a5416615d42565b906201e24081018091116118ba5790610a18916118776153f5565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b81813d8311611937575b6119288183615235565b810103126111f357515f61181b565b503d61191e565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57611975615adb565b61199873ffffffffffffffffffffffffffffffffffffffff602954163090615d42565b6119ba3073ffffffffffffffffffffffffffffffffffffffff602a5416615d42565b90611a2c6040516119ca816151e1565b848152846020820152604051906119e0826151fd565b600182526103e860208301526bb504f333f9de6484597d89b3604083015273ffffffffffffffffffffffffffffffffffffffff602f54169160209283928860405193610ca98686615235565b03925af1801561166b57611afd575b5050611a5f3073ffffffffffffffffffffffffffffffffffffffff60295416615d42565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1681019080821161160e577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0a019081116118e75790611ac1916118776153ad565b611ae33073ffffffffffffffffffffffffffffffffffffffff602a5416615d42565b906103e881018091116118ba5790610a18916118776153f5565b81813d8311611b20575b611b118183615235565b810103126111f357515f611a3b565b503d611b07565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110611bb457611bb085611ba481870382615235565b60405191829182614f9b565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611b8d565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d575060206401000276a4604051908152f35b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576020611c5961595c565b6040519015158152f35b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57601954611c9e816154b1565b91611cac6040519384615235565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310611cee5760405180611bb087826150c0565b600160208192611cfd856154c9565b815201920192019190611cd9565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57606060ff6026541660275473ffffffffffffffffffffffffffffffffffffffff6028541690604051921515835260208301526040820152f35b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57601c54611dae816154b1565b91611dbc6040519384615235565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310611dfe5760405180611bb0878261513d565b60026020600192604051611e11816151e1565b73ffffffffffffffffffffffffffffffffffffffff8654168152611e368587016156b8565b83820152815201920192019190611de9565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57611e7f615adb565b73ffffffffffffffffffffffffffffffffffffffff60295416611ea23082615d42565b73ffffffffffffffffffffffffffffffffffffffff602a5416611ec53082615d42565b9273ffffffffffffffffffffffffffffffffffffffff6044541690612062611f24611efa611ef38585615d42565b9486615d42565b92611f1e73ffffffffffffffffffffffffffffffffffffffff602b54168092615d42565b95615d42565b8773ffffffffffffffffffffffffffffffffffffffff602c54166020938491604051611f508482615235565b8481527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840136858301376040519485809481937f5a6bcfda0000000000000000000000000000000000000000000000000000000083526120216004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b61204e60a484016020548060020b825260181c60020b602082015260215460408201526060602254910152565b610140610124840152610144830190615028565b03925af1801561135b5761225a575b50604051917fdd9fca12000000000000000000000000000000000000000000000000000000008352806004840152601360248401527f6164644c69717569646974792043412066656500000000000000000000000000604484015280836064818c737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561135b5761222d575b506121b2915061214973ffffffffffffffffffffffffffffffffffffffff60295416611f1e61218e61218361217261214e73ffffffffffffffffffffffffffffffffffffffff604454169a6121498c88615d42565b615373565b9861214973ffffffffffffffffffffffffffffffffffffffff602a54169b8c615d42565b9a61217d3086615d42565b90615373565b9a61217d308a615d42565b9761214973ffffffffffffffffffffffffffffffffffffffff602b54168094615d42565b9461021f830283810461021f1484151715611366576121de906127106121d66155cc565b910484615df0565b61021f860286810461021f1487151715611366579261221b612224959361214993612149610a189a9997612710612213615607565b910489615df0565b90611877615642565b9061187761567d565b82813d8311612253575b6122418183615235565b810103126111f3576121b291516120f4565b503d612237565b8281813d831161227d575b61226f8183615235565b810103126111f35751612071565b503d612265565b503461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576122bc614fea565b6fffffffffffffffffffffffffffffffff6122ed81806122e5816122de615009565b9616615f74565b169316615f74565b166122f6615f8f565b73ffffffffffffffffffffffffffffffffffffffff6030541660208481612388604051946123248387615235565b8386527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301958636858301376040519485809481937f234266d70000000000000000000000000000000000000000000000000000000083528b8d60048501615430565b03925af180156126f2576126c8575b5073ffffffffffffffffffffffffffffffffffffffff60295416916123bc3084615d42565b9273ffffffffffffffffffffffffffffffffffffffff602a5416946123e13087615d42565b928873ffffffffffffffffffffffffffffffffffffffff6044541695806125466124426124186124118b8a615d42565b9a8d615d42565b9761243c73ffffffffffffffffffffffffffffffffffffffff602b54168092615d42565b9c615d42565b9473ffffffffffffffffffffffffffffffffffffffff602c5416906040519061246b8583615235565b86825236858301376040519586809481937f5a6bcfda0000000000000000000000000000000000000000000000000000000083526125196004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b61204e60a484016023548060020b825260181c60020b602082015260245460408201526060602554910152565b03925af180156111fe5761269e575b505060295473ffffffffffffffffffffffffffffffffffffffff169460445473ffffffffffffffffffffffffffffffffffffffff16906125958288615d42565b9061259f91615373565b93602a5473ffffffffffffffffffffffffffffffffffffffff16916125c49083615d42565b906125ce91615373565b966125d93088615d42565b906125e391615373565b946125ee3083615d42565b906125f891615373565b97602b5473ffffffffffffffffffffffffffffffffffffffff16968761261d91615d42565b61262691615373565b9561263091615d42565b61263991615373565b96612644818461610c565b61264e828761610c565b82111561265a90616189565b84111561266690616189565b61266f916153e8565b90612678615642565b9061268292615df0565b61268b916153e8565b9061269461567d565b90610a1892615df0565b81813d83116126c1575b6126b28183615235565b810103126111f357515f612555565b503d6126a8565b8181813d83116126eb575b6126dd8183615235565b810103126111f35751612397565b503d6126d3565b6040513d88823e3d90fd5b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576020805460215460225460408051600285810b825260189590951c90940b94840194909452928201526060810191909152608090f35b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57601d5461279d816154b1565b916127ab6040519384615235565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106127ed5760405180611bb0878261513d565b60026020600192604051612800816151e1565b73ffffffffffffffffffffffffffffffffffffffff86541681526128258587016156b8565b838201528152019201920191906127d8565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57601a54612872816154b1565b916128806040519384615235565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106128c25760405180611bb087826150c0565b6001602081926128d1856154c9565b8152019201920191906128ad565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d576129166161fb565b61295173ffffffffffffffffffffffffffffffffffffffff6036541673ffffffffffffffffffffffffffffffffffffffff6044541690616268565b61298c73ffffffffffffffffffffffffffffffffffffffff6037541673ffffffffffffffffffffffffffffffffffffffff6044541690616268565b6129af73ffffffffffffffffffffffffffffffffffffffff602954163090615d42565b6129d13073ffffffffffffffffffffffffffffffffffffffff602a5416615d42565b906040516129de816151e1565b838152836020820152612a61604051916129f7836151fd565b600183527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1dc060208401526bb504f333f9de6484597d89b3604084015273ffffffffffffffffffffffffffffffffffffffff602f541692602093849288604051936109a58686615235565b03925af1801561166b57612b15575b50604051907fdd9fca120000000000000000000000000000000000000000000000000000000082528060048301528060248301527f7377617020434120637573746f6d206375727665202b2073776170206e6f6f706044830152808260648188737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561166b5761191457505061183f3073ffffffffffffffffffffffffffffffffffffffff60295416615d42565b8181813d8311612b38575b612b2a8183615235565b810103126111f35751612a70565b503d612b20565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57601b54612b7a816154b1565b612b876040519182615235565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310612c5f57868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210612bf457505050500390f35b91936020612c4f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083612c3f8351604084526040840190615028565b920151908481840391015261506b565b9601920192018594939192612be5565b60026020600192604051612c72816151e1565b612c7b866154c9565b8152612c888587016156b8565b83820152815201920192019190612bb7565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5750602073fffd8963efd1fc6a506488495d951d5263988d25604051908152f35b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612d6657611bb085611ba481870382615235565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612d4f565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110612e0f57611bb085611ba481870382615235565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612df8565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760235460245460255460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57612ed3615adb565b73ffffffffffffffffffffffffffffffffffffffff60295416612ef63082615d42565b73ffffffffffffffffffffffffffffffffffffffff602a5416612f193082615d42565b9273ffffffffffffffffffffffffffffffffffffffff6044541690613044612f47611efa611ef38585615d42565b8773ffffffffffffffffffffffffffffffffffffffff602c54166020938491604051612f738482615235565b8481527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840136858301376040519485809481937f5a6bcfda0000000000000000000000000000000000000000000000000000000083526125196004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b03925af1801561135b576131f0575b50604051917fdd9fca12000000000000000000000000000000000000000000000000000000008352806004840152601660248401527f72656d6f76654c69717569646974792043412066656500000000000000000000604484015280836064818c737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561135b576131c3575b50613165915061217d73ffffffffffffffffffffffffffffffffffffffff60295416611f1e61314161313661312b61214e73ffffffffffffffffffffffffffffffffffffffff604454169a6121498c88615d42565b9a6121493086615d42565b9a612149308a615d42565b9761217d73ffffffffffffffffffffffffffffffffffffffff602b54168094615d42565b9461021f830283810461021f148415171561136657613189906127106121d66155cc565b61021f860286810461021f1487151715611366579261221b61222495936131be936131be610a189a9997612710612213615607565b6153e8565b82813d83116131e9575b6131d78183615235565b810103126111f35761316591516130d6565b503d6131cd565b8281813d8311613213575b6132058183615235565b810103126111f35751613053565b503d6131fb565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57601e54613255816154b1565b6132626040519182615235565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106133b05786858760405192839260208401906020855251809152604084019160408260051b8601019392815b8383106132ce5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110613367575050505050602080600192970193019301909286959492936132c1565b90919293946020806133a3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951615028565b9701950193929101613343565b6040516133bc816151e1565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546133e5816154b1565b916133f36040519384615235565b8183528a526020808b20908b9084015b838210613429575050505060019282602092836002950152815201920192019190613292565b600160208192613438866154c9565b815201930191019091613403565b503461018d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5761347e614fea565b6fffffffffffffffffffffffffffffffff6134af81806134a7816134a0615009565b9616615ec2565b169316615ec2565b166134b8615f8f565b73ffffffffffffffffffffffffffffffffffffffff60305416602090848261354b604051936134e78386615235565b8385527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301948536858301376040519485809481937f234266d70000000000000000000000000000000000000000000000000000000083528b8d60048501615430565b03925af180156126f25761376c575b508473ffffffffffffffffffffffffffffffffffffffff6029541692806136966135bf6135a073ffffffffffffffffffffffffffffffffffffffff604454168098615d42565b9673ffffffffffffffffffffffffffffffffffffffff602a5416615d42565b9473ffffffffffffffffffffffffffffffffffffffff602c541690604051906135e88583615235565b86825236858301376040519586809481937f5a6bcfda0000000000000000000000000000000000000000000000000000000083526120216004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b03925af1801561376157613730575b5050610a1893613714613729926121496136f573ffffffffffffffffffffffffffffffffffffffff602954169661214973ffffffffffffffffffffffffffffffffffffffff604454168099615d42565b9573ffffffffffffffffffffffffffffffffffffffff602a5416615d42565b9261371f828261610c565b613729858561610c565b1115616189565b81819692963d831161375a575b6137478183615235565b810103126111f3579350836137146136a5565b503d61373d565b6040513d89823e3d90fd5b8281813d831161378f575b6137818183615235565b810103126111f3575161355a565b503d613777565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d5760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061381357611bb085611ba481870382615235565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016137fc565b503461018d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018d57613876615adb565b61389973ffffffffffffffffffffffffffffffffffffffff602954163090615d42565b6138bb3073ffffffffffffffffffffffffffffffffffffffff602a5416615d42565b906040516138c8816151e1565b83815283602082015261394b604051916138e1836151fd565b600183527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1860208401526bb504f333f9de6484597d89b3604084015273ffffffffffffffffffffffffffffffffffffffff602f541692602093849288604051936109a58686615235565b03925af1801561166b57613a9f575b50604051907fdd9fca12000000000000000000000000000000000000000000000000000000008252806004830152601a60248301527f7377617020434120666565206f6e20756e7370656369666965640000000000006044830152808260648188737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561166b57613a75575b5050613a013073ffffffffffffffffffffffffffffffffffffffff60295416615d42565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1881019081116118e75790613a39916118776153ad565b613a5b3073ffffffffffffffffffffffffffffffffffffffff602a5416615d42565b906103da81018091116118ba5790610a18916118776153f5565b81813d8311613a98575b613a898183615235565b810103126111f357515f6139dd565b503d613a7f565b8181813d8311613ac2575b613ab48183615235565b810103126111f3575161395a565b503d613aaa565b9050346111f3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126111f357615e828082019082821067ffffffffffffffff831117614f6e576020918391620083eb83393081520301905ff08015614f635773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff0000000000000000000000000000000000000000602b541617602b5560405190611bb980830183811067ffffffffffffffff821117614f6e5760209284926201d999843981520301905ff08015614f635773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602f541617602f5573ffffffffffffffffffffffffffffffffffffffff602b541660405190610d6f80830183811067ffffffffffffffff821117614f6e57602092849262020474843981520301905ff08015614f635773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602e541617602e5573ffffffffffffffffffffffffffffffffffffffff602b54166040519061183580830183811067ffffffffffffffff821117614f6e5760209284926201607b843981520301905ff08015614f635773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602c541617602c5573ffffffffffffffffffffffffffffffffffffffff602b54166040519061131580830183811067ffffffffffffffff821117614f6e576020928492620178b0843981520301905ff08015614f635773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602d541617602d5573ffffffffffffffffffffffffffffffffffffffff602b5416604051906112d280830183811067ffffffffffffffff821117614f6e57602092849262014da9843981520301905ff08015614f635773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603054161760305573ffffffffffffffffffffffffffffffffffffffff602b541660405190610f2280830183811067ffffffffffffffff821117614f6e5760209284926201f552843981520301905ff08015614f635773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603154161760315573ffffffffffffffffffffffffffffffffffffffff602b541660405190610c3880830183811067ffffffffffffffff821117614f6e57602092849262014171843981520301905ff08015614f635773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603354161760335573ffffffffffffffffffffffffffffffffffffffff602b541660405190614dd480830183811067ffffffffffffffff821117614f6e57602092849262018bc5843981520301905ff08015614f635773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603454161760345560408051613fc98282615235565b600d8152602081017f666565436f6e74726f6c6c65720000000000000000000000000000000000000081528251600d6020820192835e5f602d820152600d8152614014602d82615235565b5190208251907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614f0a575f91614f14575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156111f3575f73ffffffffffffffffffffffffffffffffffffffff6140e592855193849283927fc657c71800000000000000000000000000000000000000000000000000000000845216958660048401528760248401526044830190615028565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015614f0a57614ef5575b507fffffffffffffffffffffffff0000000000000000000000000000000000000000603554161760355573ffffffffffffffffffffffffffffffffffffffff602b541681519061284b908183019183831067ffffffffffffffff841117614ec8579183916020936200e26d8439815203019083f08015614ebd5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060325416176032558173ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60355416813b15610a6957829160248392865194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af18015614eb057614e9b575b506c01000000000000000000000000610bb86143049261425d616abc565b73ffffffffffffffffffffffffffffffffffffffff8061427b616abc565b9216911680821015614e7e5773ffffffffffffffffffffffffffffffffffffffff80915b1691827fffffffffffffffffffffffff0000000000000000000000000000000000000000602a541617602a5516807fffffffffffffffffffffffff000000000000000000000000000000000000000060295416176029556142fe616459565b50616f1f565b5073ffffffffffffffffffffffffffffffffffffffff602c54166020915f836143e28651946143338387615235565b8886527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083019586368583013788519485809481937f5a6bcfda000000000000000000000000000000000000000000000000000000008352612021600484018b73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b03925af18015614e74576145919273ffffffffffffffffffffffffffffffffffffffff92608092614e57575b506144578382511673ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006036541617603655565b6144a183878301511673ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006037541617603755565b6144f662ffffff88830151167fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff00000000000000000000000000000000000000006037549260a01b16911617603755565b61454d606082015160020b7fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff6037549160b81b79ffffff000000000000000000000000000000000000000000000016911617603755565b01511673ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006038541617603855565b8360048373ffffffffffffffffffffffffffffffffffffffff603454168651928380927fc34c08e50000000000000000000000000000000000000000000000000000000082525afa8015614e205773ffffffffffffffffffffffffffffffffffffffff918391614e2a575b5016803b156112d15781809160a48751809481937f1b9ec89e0000000000000000000000000000000000000000000000000000000083526146ad6004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b5af18015614e2057614e07575b505073ffffffffffffffffffffffffffffffffffffffff602a54166146dd616459565b506146e6616459565b508351916146f383615219565b85835283830191825284830190610bb882526060840192603c8452608085019488865260a0812050888773ffffffffffffffffffffffffffffffffffffffff602b541660c48b51809481937f6276cbbe0000000000000000000000000000000000000000000000000000000083526147b8600484018973ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6c0100000000000000000000000060a48401525af1908115614dfd578891614dc0575b5061489a670de0b6b3a76400009473ffffffffffffffffffffffffffffffffffffffff602c5416908b51906148108583615235565b8d825236858301378b519687809481937f5a6bcfda000000000000000000000000000000000000000000000000000000008352612021600484018a73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b03925af1908115614db65773ffffffffffffffffffffffffffffffffffffffff9788948593614d98575b505051167fffffffffffffffffffffffff0000000000000000000000000000000000000000603954161760395551167fffffffffffffffffffffffff0000000000000000000000000000000000000000603a541617603a55517fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff000000000000000000000000000000000000000080603a549360a01b1616911617603a55517fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff603a549160b81b60190b79ffffff000000000000000000000000000000000000000000000016911617603a5551167fffffffffffffffffffffffff0000000000000000000000000000000000000000603b541617603b5573ffffffffffffffffffffffffffffffffffffffff603654167fffffffffffffffffffffffff0000000000000000000000000000000000000000603c541617603c5573ffffffffffffffffffffffffffffffffffffffff603754167fffffffffffffffffffffffff0000000000000000000000000000000000000000603d541617603d556037547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000807fffffffffffffffffffffffff0000000000000000000000000000000000000000603d5494161616911617603d556037547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff0000000000000000000000000000000000000000000000603d54921660190b79ffffff000000000000000000000000000000000000000000000016911617603d5573ffffffffffffffffffffffffffffffffffffffff603854167fffffffffffffffffffffffff0000000000000000000000000000000000000000603e541617603e5573ffffffffffffffffffffffffffffffffffffffff603954167fffffffffffffffffffffffff0000000000000000000000000000000000000000603f541617603f5573ffffffffffffffffffffffffffffffffffffffff603a54167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416178155603a547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000807fffffffffffffffffffffffff00000000000000000000000000000000000000008554941616169116178155603a547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff00000000000000000000000000000000000000000000008354921660190b79ffffff000000000000000000000000000000000000000000000016911617815573ffffffffffffffffffffffffffffffffffffffff603b54167fffffffffffffffffffffffff000000000000000000000000000000000000000060415416176041557464