UNPKG

@excubiae/contracts

Version:
1,000 lines 117 kB
{ "_format": "hh-sol-artifact-1", "contractName": "SemaphorePolicyTest", "sourceName": "contracts/test/extensions/Semaphore.t.sol", "abi": [ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "subject", "type": "address" }, { "indexed": true, "internalType": "address", "name": "guarded", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "evidence", "type": "bytes" } ], "name": "Enforced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "guarded", "type": "address" } ], "name": "TargetSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "", "type": "string" } ], "name": "log", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "", "type": "address" } ], "name": "log_address", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "val", "type": "uint256[]" } ], "name": "log_array", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int256[]", "name": "val", "type": "int256[]" } ], "name": "log_array", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address[]", "name": "val", "type": "address[]" } ], "name": "log_array", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "log_bytes", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "log_bytes32", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int256", "name": "", "type": "int256" } ], "name": "log_int", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "address", "name": "val", "type": "address" } ], "name": "log_named_address", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "uint256[]", "name": "val", "type": "uint256[]" } ], "name": "log_named_array", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "int256[]", "name": "val", "type": "int256[]" } ], "name": "log_named_array", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "address[]", "name": "val", "type": "address[]" } ], "name": "log_named_array", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "bytes", "name": "val", "type": "bytes" } ], "name": "log_named_bytes", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "bytes32", "name": "val", "type": "bytes32" } ], "name": "log_named_bytes32", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "int256", "name": "val", "type": "int256" }, { "indexed": false, "internalType": "uint256", "name": "decimals", "type": "uint256" } ], "name": "log_named_decimal_int", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "val", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "decimals", "type": "uint256" } ], "name": "log_named_decimal_uint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "int256", "name": "val", "type": "int256" } ], "name": "log_named_int", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "string", "name": "val", "type": "string" } ], "name": "log_named_string", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "val", "type": "uint256" } ], "name": "log_named_uint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "", "type": "string" } ], "name": "log_string", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "log_uint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "logs", "type": "event" }, { "inputs": [], "name": "IS_TEST", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deployer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "excludeArtifacts", "outputs": [ { "internalType": "string[]", "name": "excludedArtifacts_", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "excludeContracts", "outputs": [ { "internalType": "address[]", "name": "excludedContracts_", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "excludeSelectors", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "bytes4[]", "name": "selectors", "type": "bytes4[]" } ], "internalType": "struct StdInvariant.FuzzSelector[]", "name": "excludedSelectors_", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "excludeSenders", "outputs": [ { "internalType": "address[]", "name": "excludedSenders_", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "failed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "guarded", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "invalidEvidence", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "invalidGroupId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "invalidGroupIdEvidence", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "invalidGroupIdProof", "outputs": [ { "internalType": "uint256", "name": "merkleTreeDepth", "type": "uint256" }, { "internalType": "uint256", "name": "merkleTreeRoot", "type": "uint256" }, { "internalType": "uint256", "name": "nullifier", "type": "uint256" }, { "internalType": "uint256", "name": "message", "type": "uint256" }, { "internalType": "uint256", "name": "scope", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "invalidProof", "outputs": [ { "internalType": "uint256", "name": "merkleTreeDepth", "type": "uint256" }, { "internalType": "uint256", "name": "merkleTreeRoot", "type": "uint256" }, { "internalType": "uint256", "name": "nullifier", "type": "uint256" }, { "internalType": "uint256", "name": "message", "type": "uint256" }, { "internalType": "uint256", "name": "scope", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "invalidProverEvidence", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "invalidProverProof", "outputs": [ { "internalType": "uint256", "name": "merkleTreeDepth", "type": "uint256" }, { "internalType": "uint256", "name": "merkleTreeRoot", "type": "uint256" }, { "internalType": "uint256", "name": "nullifier", "type": "uint256" }, { "internalType": "uint256", "name": "message", "type": "uint256" }, { "internalType": "uint256", "name": "scope", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "notOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "notSubject", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "setUp", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "subject", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "targetArtifactSelectors", "outputs": [ { "components": [ { "internalType": "string", "name": "artifact", "type": "string" }, { "internalType": "bytes4[]", "name": "selectors", "type": "bytes4[]" } ], "internalType": "struct StdInvariant.FuzzArtifactSelector[]", "name": "targetedArtifactSelectors_", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "targetArtifacts", "outputs": [ { "internalType": "string[]", "name": "targetedArtifacts_", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "targetContracts", "outputs": [ { "internalType": "address[]", "name": "targetedContracts_", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "targetInterfaces", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "string[]", "name": "artifacts", "type": "string[]" } ], "internalType": "struct StdInvariant.FuzzInterface[]", "name": "targetedInterfaces_", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "targetSelectors", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "bytes4[]", "name": "selectors", "type": "bytes4[]" } ], "internalType": "struct StdInvariant.FuzzSelector[]", "name": "targetedSelectors_", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "targetSenders", "outputs": [ { "internalType": "address[]", "name": "targetedSenders_", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "test_factory_deployAndInitialize", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "test_policyCheckerMockks_enforce_whenCheckFails_reverts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_enforce_whenAlreadyEnforced_reverts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_enforce_whenInvalidProof_reverts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_enforce_whenScopeGroupIdIncorrect_reverts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_enforce_whenScopeProverIncorrect_reverts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_enforce_whenValid_succeeds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_getAppendedBytes", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "test_policy_setTarget_whenAlreadySet_reverts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_setTarget_whenCallerNotOwner_reverts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_setTarget_whenValidAddress_succeeds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_setTarget_whenZeroAddress_reverts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_target_returnsExpectedAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "test_policy_trait_returnsCorrectValue", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "test_policy_whenAlreadyInitialized_reverts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "validEvidence", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "validGroupId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "validProof", "outputs": [ { "internalType": "uint256", "name": "merkleTreeDepth", "type": "uint256" }, { "internalType": "uint256", "name": "merkleTreeRoot", "type": "uint256" }, { "internalType": "uint256", "name": "nullifier", "type": "uint256" }, { "internalType": "uint256", "name": "message", "type": "uint256" }, { "internalType": "uint256", "name": "scope", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60806040819052600c8054600160ff199182168117909255601f8054909116821790556001625e79b760e01b031990915260845260008051602061614d83398151915263ffa1864960a4602060405180830381865afa158015610066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061008a91906106c0565b602680546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b031981526002600482015260008051602061614d8339815191529063ffa1864990602401602060405180830381865afa1580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b91906106c0565b602780546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b031981526003600482015260008051602061614d8339815191529063ffa1864990602401602060405180830381865afa158015610188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ac91906106c0565b602880546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b0319815260048082015260008051602061614d8339815191529063ffa1864990602401602060405180830381865afa158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c91906106c0565b602980546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b031981526005600482015260008051602061614d8339815191529063ffa1864990602401602060405180830381865afa1580156102a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102cd91906106c0565b602a80546001600160a01b0319166001600160a01b039283161790556000602b8190556001602c8190556040805160c080820183529281526020808201858152828401868152602854909716606080850191825260808086018981528751610100810189528a81529586018a9052968501899052908401889052830187905260a080840188905295830187905260e08301969096529382018190528151602d9081559351602e559451602f55925160305551603155909161039290603290600861066d565b50506040805160c080820183526001825260006020808401828152848601838152602a546001600160a01b03166060808801918252602b546080808a019182528a5161010081018c5288815296870188905299860187905290850186905297840185905260a084810186905295840185905260e08401949094529385018290528451603a9081559051603b559251603c559051603d559251603e559092509061043f90603f90600861066d565b50506040805160c0808201835260018252600060208084018281528486018381526028546001600160a01b03166060808801918252602c546080808a019182528a5161010081018c5288815296870188905299860187905290850186905297840185905260a084810186905295840185905260e084019490945293850182905284516047908155905160485592516049559051604a559251604b55909250906104ec90604c90600861066d565b50506040805160c080820183526001808352600060208085018281528587018481526028546001600160a01b03166060808901918252602b546080808b019182528b5161010081018d52988952958801879052998701869052860185905292850184905260a085810185905295850184905260e085019390935293850183905284516054908155935160555590516056555160575592516058559092509061059890605990600861066d565b505050602d6040516020016105ad91906106f0565b604051602081830303815290604052606190816105ca91906107f3565b50603a6040516020016105dd91906106f0565b604051602081830303815290604052606290816105fa91906107f3565b50604760405160200161060d91906106f0565b6040516020818303038152906040526063908161062a91906107f3565b50605460405160200161063d91906106f0565b6040516020818303038152906040526064908161065a91906107f3565b5034801561066757600080fd5b506108b1565b826008810192821561069b579160200282015b8281111561069b578251825591602001919060010190610680565b506106a79291506106ab565b5090565b5b808211156106a757600081556001016106ac565b6000602082840312156106d257600080fd5b81516001600160a01b03811681146106e957600080fd5b9392505050565b81548152600182015460208201526002820154604082015260038201546060820152600482015460808201526101a0810160a082016005840160005b600881101561074b57815483526020909201916001918201910161072c565b50505092915050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061077e57607f821691505b60208210810361079e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156107ee57806000526020600020601f840160051c810160208510156107cb5750805b601f840160051c820191505b818110156107eb57600081556001016107d7565b50505b505050565b81516001600160401b0381111561080c5761080c610754565b6108208161081a845461076a565b846107a4565b6020601f821160018114610854576000831561083c5750848201515b600019600385901b1c1916600184901b1784556107eb565b600084815260208120601f198516915b828110156108845787850151825560209485019460019092019101610864565b50848210156108a25786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61588d806108c06000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80638498417c11610151578063cee617b4116100c3578063e20c9f7111610087578063e20c9f71146104ca578063e5f05d70146104d2578063e6a8775d146104da578063eb5579d6146104e2578063f661a689146104ea578063fa7626d4146104f257600080fd5b8063cee617b41461047a578063d25a8bd714610494578063d5f394881461049c578063d81a6959146104af578063db5b7a51146104c257600080fd5b80639fa5dc80116101155780639fa5dc8014610428578063a2c8490e14610430578063b0464fdc1461044a578063b5508aa914610452578063ba414fa61461045a578063c7e76f911461047257600080fd5b80638498417c146103e657806385226c81146103ee57806389d8bda914610403578063916a17c61461040b57806399ccfc421461042057600080fd5b80633e5e3c23116101ea57806366d9a9a0116101ae57806366d9a9a01461039d57806372f7a030146103b25780637468b87f146103c557806376548b75146103cd5780637bb29ca9146103d557806383a323c5146103de57600080fd5b80633e5e3c23146103665780633f7286f41461036e5780634e693a6314610376578063536c82ed1461037e578063629fe4241461038657600080fd5b80630b584c4a116102315780630b584c4a146103075780631ed7831c1461030f578063251c9d63146103245780632ade38801461033757806332756e331461034c57600080fd5b80630187ba5c1461026e57806307a86e85146102b557806307bfb8c5146102ca5780630a59a98c146102d45780630a9254e4146102ff575b600080fd5b605454605554605654605754605854610288949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0015b60405180910390f35b6102bd6104ff565b6040516102ac9190613109565b6102d261058d565b005b6028546102e7906001600160a01b031681565b6040516001600160a01b0390911681526020016102ac565b6102d261087e565b6102d26110dc565b610317611336565b6040516102ac9190613123565b6029546102e7906001600160a01b031681565b61033f611398565b6040516102ac919061316f565b604754604854604954604a54604b54610288949392919085565b6103176114da565b61031761153a565b6102d261159a565b6102d26116bd565b61038f602c5481565b6040519081526020016102ac565b6103a5611a42565b6040516102ac9190613281565b6027546102e7906001600160a01b031681565b6102d2611baf565b6102d2611e43565b61038f602b5481565b6102bd611fe6565b6102bd611ff3565b6103f6612000565b6040516102ac9190613301565b6102d26120d0565b61041361216c565b6040516102ac919061335a565b6102d2612252565b6102d261239d565b603a54603b54603c54603d54603e54610288949392919085565b6104136125f7565b6103f66126dd565b6104626127ad565b60405190151581526020016102ac565b6102d261284b565b602d54602e54602f54603054603154610288949392919085565b6102d2612990565b6026546102e7906001600160a01b031681565b602a546102e7906001600160a01b031681565b6102d2612a3c565b610317612b5d565b6102d2612bbd565b6102d2612c95565b6102d2612eef565b6102bd612f65565b601f546104629060ff1681565b6062805461050c906133d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610538906133d3565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b505050505081565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b1580156105e057600080fd5b505af11580156105f4573d6000803e3d6000fd5b50506024805460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116935063776d1a01925001600060405180830381600087803b15801561064057600080fd5b505af1158015610654573d6000803e3d6000fd5b5050505060008051602061583883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106a457600080fd5b505af11580156106b8573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061581883398151915292506306447d569150602401600060405180830381600087803b15801561070f57600080fd5b505af1158015610723573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316634715494560e01b179052915163f28dceb360e01b8152600080516020615818833981519152945063f28dceb3935061077c9201613109565b600060405180830381600087803b15801561079657600080fd5b505af11580156107aa573d6000803e3d6000fd5b5050602454602854604051631e898ef160e01b81526001600160a01b039283169450631e898ef193506107e692909116906061906004016134b0565b600060405180830381600087803b15801561080057600080fd5b505af1158015610814573d6000803e3d6000fd5b5050505060008051602061583883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561086457600080fd5b505af1158015610878573d6000803e3d6000fd5b50505050565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b1580156108d157600080fd5b505af11580156108e5573d6000803e3d6000fd5b5060009250600191506108f59050565b60405190808252806020026020018201604052801561091e578160200160208202803683370190505b506040805160028082526060820183529293506000929091602083019080368337505060408051600280825260608201835293945060009390925090602083019080368337019050509050602b548360008151811061097f5761097f6134f2565b602002602001018181525050602d60020154826000815181106109a4576109a46134f2565b602002602001018181525050605460020154826001815181106109c9576109c96134f2565b6020026020010181815250506001816000815181106109ea576109ea6134f2565b602002602001019015159081151581525050600081600181518110610a1157610a116134f2565b602002602001019015159081151581525050828282604051610a3290613085565b610a3e9392919061353a565b604051809103906000f080158015610a5a573d6000803e3d6000fd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550604051610a8d90613092565b604051809103906000f080158015610aa9573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b0392909216919091179055604051610ad69061309f565b604051809103906000f080158015610af2573d6000803e3d6000fd5b50602280546001600160a01b0319166001600160a01b0392909216919091179055604051610b1f906130ac565b604051809103906000f080158015610b3b573d6000803e3d6000fd5b50602560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060008051602061583883398151915260001c6001600160a01b03166341af2f526040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b5050602254601f54602b546040516304956eaf60e41b81526001600160a01b0361010090930483166004820152602481019190915291169250634956eaf091506044016020604051808303816000875af1158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906135c3565b50600060008051602061583883398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610c9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc491908101906136cf565b9050600081600081518110610cdb57610cdb6134f2565b602002602001015160000151600181518110610cf957610cf96134f2565b6020908102919091010151602180546001600160a01b0319166001600160a01b038316179055604080516320d797a960e11b81529051919250600080516020615818833981519152916341af2f529160048082019260009290919082900301818387803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b5050602554602154604051634c96a38960e01b81526001600160a01b03918216600482015291169250634c96a38991506024016020604051808303816000875af1158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df391906135c3565b5060008051602061583883398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610e45573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e6d91908101906136cf565b9150600082600081518110610e8457610e846134f2565b602002602001015160000151600181518110610ea257610ea26134f2565b6020908102919091010151602380546001600160a01b0319166001600160a01b038316179055604080516320d797a960e11b81529051919250600080516020615818833981519152916341af2f529160048082019260009290919082900301818387803b158015610f1257600080fd5b505af1158015610f26573d6000803e3d6000fd5b5050602554602054604051634c96a38960e01b81526001600160a01b03918216600482015291169250634c96a38991506024016020604051808303816000875af1158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9c91906135c3565b5060008051602061583883398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610fee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101691908101906136cf565b925060008360008151811061102d5761102d6134f2565b60200260200101516000015160018151811061104b5761104b6134f2565b6020908102919091010151602480546001600160a01b0319166001600160a01b038316179055604080516390c5013b60e01b81529051919250600080516020615818833981519152916390c5013b9160048082019260009290919082900301818387803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b5050505050505050505050565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b15801561112f57600080fd5b505af1158015611143573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561119057600080fd5b505af11580156111a4573d6000803e3d6000fd5b5050505060008051602061583883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111f457600080fd5b505af1158015611208573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061581883398151915292506306447d569150602401600060405180830381600087803b15801561125f57600080fd5b505af1158015611273573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b031663036c503960e61b179052915163f28dceb360e01b8152600080516020615818833981519152945063f28dceb393506112cc9201613109565b600060405180830381600087803b1580156112e657600080fd5b505af11580156112fa573d6000803e3d6000fd5b5050602354602854604051631e898ef160e01b81526001600160a01b039283169450631e898ef193506107e692909116906063906004016134b0565b6060601680548060200260200160405190810160405280929190818152602001828054801561138e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611370575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156114d157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114ba57838290600052602060002001805461142d906133d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611459906133d3565b80156114a65780601f1061147b576101008083540402835291602001916114a6565b820191906000526020600020905b81548152906001019060200180831161148957829003601f168201915b50505050508152602001906001019061140e565b5050505081525050815260200190600101906113bc565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561138e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611370575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561138e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611370575050505050905090565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b031663d92e233d60e01b179052915163f28dceb360e01b8152600080516020615818833981519152945063f28dceb3935061165a9201613109565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b505060235460405163776d1a0160e01b8152600060048201526001600160a01b03909116925063776d1a0191506024016107e6565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b15801561171057600080fd5b505af1158015611724573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561177157600080fd5b505af1158015611785573d6000803e3d6000fd5b5050505060008051602061583883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061581883398151915292506306447d569150602401600060405180830381600087803b15801561184057600080fd5b505af1158015611854573d6000803e3d6000fd5b505060405163248e63e160e11b815260016004820181905260248201819052604482018190526064820152600080516020615818833981519152925063491cc7c29150608401600060405180830381600087803b1580156118b457600080fd5b505af11580156118c8573d6000803e3d6000fd5b50506027546028546040516001600160a01b039283169450911691507fc013b39287cb7a53f776482ac9573829321f002f31ef8782129b41d60047bda09061191290606190613860565b60405180910390a3602354602854604051631e898ef160e01b81526001600160a01b0392831692631e898ef192611951929116906061906004016134b0565b600060405180830381600087803b15801561196b57600080fd5b505af115801561197f573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316633440c93360e21b179052915163f28dceb360e01b8152600080516020615818833981519152945063f28dceb393506119d89201613109565b600060405180830381600087803b1580156119f257600080fd5b505af1158015611a06573d6000803e3d6000fd5b5050602354602854604051631e898ef160e01b81526001600160a01b039283169450631e898ef193506107e692909116906061906004016134b0565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114d15783829060005260206000209060020201604051806040016040529081600082018054611a99906133d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac5906133d3565b8015611b125780601f10611ae757610100808354040283529160200191611b12565b820191906000526020600020905b815481529060010190602001808311611af557829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611b9757602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411611b595790505b50505050508152505081526020019060010190611a66565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b158015611c0257600080fd5b505af1158015611c16573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015611c6357600080fd5b505af1158015611c77573d6000803e3d6000fd5b5050505060008051602061583883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cc757600080fd5b505af1158015611cdb573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061581883398151915292506306447d569150602401600060405180830381600087803b158015611d3257600080fd5b505af1158015611d46573d6000803e3d6000fd5b505060405163248e63e160e11b815260016004820181905260248201819052604482018190526064820152600080516020615818833981519152925063491cc7c29150608401600060405180830381600087803b158015611da657600080fd5b505af1158015611dba573d6000803e3d6000fd5b50506027546028546040516001600160a01b039283169450911691507fc013b39287cb7a53f776482ac9573829321f002f31ef8782129b41d60047bda090611e0490606190613860565b60405180910390a3602354602854604051631e898ef160e01b81526001600160a01b0392831692631e898ef1926107e6929116906061906004016134b0565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015611ef757600080fd5b505af1158015611f0b573d6000803e3d6000fd5b50505050611f9a602360009054906101000a90046001600160a01b03166001600160a01b03166372f7a0306040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8991906135c3565b6027546001600160a01b0316612f72565b60008051602061583883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561086457600080fd5b6064805461050c906133d3565b6063805461050c906133d3565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114d1578382906000526020600020018054612043906133d3565b80601f016020809104026020016040519081016040528092919081815260200182805461206f906133d3565b80156120bc5780601f10612091576101008083540402835291602001916120bc565b820191906000526020600020905b81548152906001019060200180831161209f57829003601f168201915b505050505081526020019060010190612024565b6023546040805163ce343deb60e01b8152905161216a926001600160a01b03169163ce343deb9160048083019260009291908290030181865afa15801561211b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121439190810190613873565b6040518060400160405280600981526020016853656d6170686f726560b81b815250612fe4565b565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114d15760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561223a57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116121fc5790505b50505050508152505081526020019060010190612190565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b1580156122a557600080fd5b505af11580156122b9573d6000803e3d6000fd5b505060405163248e63e160e11b815260016004820181905260248201819052604482018190526064820152600080516020615818833981519152925063491cc7c29150608401600060405180830381600087803b15801561231957600080fd5b505af115801561232d573d6000803e3d6000fd5b50506027546040516001600160a01b0390911692507f3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a1969150600090a260235460275460405163776d1a0160e01b81526001600160a01b03918216600482015291169063776d1a01906024016107e6565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b1580156123f057600080fd5b505af1158015612404573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b5050505060008051602061583883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124b557600080fd5b505af11580156124c9573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061581883398151915292506306447d569150602401600060405180830381600087803b15801561252057600080fd5b505af1158015612534573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316635945f53b60e01b179052915163f28dceb360e01b8152600080516020615818833981519152945063f28dceb3935061258d9201613109565b600060405180830381600087803b1580156125a757600080fd5b505af11580156125bb573d6000803e3d6000fd5b5050602354602854604051631e898ef160e01b81526001600160a01b039283169450631e898ef193506107e692909116906062906004016134b0565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114d15760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156126c557602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116126875790505b5050505050815250508152602001906001019061261b565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114d1578382906000526020600020018054612720906133d3565b80601f016020809104026020016040519081016040528092919081815260200182805461274c906133d3565b80156127995780601f1061276e57610100808354040283529160200191612799565b820191906000526020600020905b81548152906001019060200180831161277c57829003601f168201915b505050505081526020019060010190612701565b60085460009060ff16156127c5575060085460ff1690565b604051630667f9d760e41b8152600080516020615818833981519152600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa158015612820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284491906138bc565b1415905090565b6029546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b15801561289e57600080fd5b505af11580156128b2573d6000803e3d6000fd5b5050602954604080516001600160a01b0390921660248084019190915281518084039091018152604490920181526020820180516001600160e01b031663118cdaa760e01b1790525163f28dceb360e01b8152600080516020615818833981519152935063f28dceb3925061292a9190600401613109565b600060405180830381600087803b15801561294457600080fd5b505af1158015612958573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a0191506024016107e6565b6023546040805163b41a4b1960e01b8152905161216a926001600160a01b03169163b41a4b199160048083019260009291908290030181865afa1580156129db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a0391908101906138d5565b602654602154604080516001600160a01b0393841660208201529290911690820152606001604051602081830303815290604052613017565b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b158015612a8f57600080fd5b505af1158015612aa3573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015612af057600080fd5b505af1158015612b04573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b031663e0f2d7b160e01b179052915163f28dceb360e01b8152600080516020615818833981519152945063f28dceb3935061292a9201613109565b6060601580548060200260200160405190810160405280929190818152602001828054801561138e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611370575050505050905090565b6040805160048082526024820183526020820180516001600160e01b031662dc149f60e41b179052915163f28dceb360e01b81526000805160206158188339815191529263f28dceb392612c1392909101613109565b600060405180830381600087803b158015612c2d57600080fd5b505af1158015612c41573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561086457600080fd5b6026546040516303223eab60e11b81526001600160a01b039091166004820152600080516020615818833981519152906306447d5690602401600060405180830381600087803b158015612ce857600080fd5b505af1158015612cfc573d6000803e3d6000fd5b505060235460275460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015612d4957600080fd5b505af1158015612d5d573d6000803e3d6000fd5b5050505060008051602061583883398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612dad57600080fd5b505af1158015612dc1573d6000803e3d6000fd5b50506027546040516303223eab60e11b81526001600160a01b03909116600482015260008051602061581883398151915292506306447d569150602401600060405180830381600087803b158015612e1857600080fd5b505af1158015612e2c573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b03166309bde33960e01b179052915163f28dceb360e01b8152600080516020615818833981519152945063f28dceb39350612e859201613109565b600060405180830381600087803b158015612e9f57600080fd5b505af1158015612eb3573d6000803e3d6000fd5b50506023