UNPKG

@settlemint/solidity-zeto

Version:

Smart contract set to build Zero Knowledge tokens in SettleMint

827 lines 76.2 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Zeto_AnonEncNullifierKyc", "sourceName": "contracts/zeto_anon_enc_nullifier_kyc.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "uint256[2]", "name": "", "type": "uint256[2]" } ], "name": "AlreadyRegistered", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [], "name": "FailedCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "IdentityNotRegistered", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "utxo", "type": "uint256" } ], "name": "UTXOAlreadyOwned", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "utxo", "type": "uint256" } ], "name": "UTXOAlreadySpent", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxAllowed", "type": "uint256" } ], "name": "UTXOArrayTooLarge", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "utxo", "type": "uint256" } ], "name": "UTXODuplicate", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "utxo", "type": "uint256" } ], "name": "UTXONotMinted", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "root", "type": "uint256" } ], "name": "UTXORootNotFound", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxAllowed", "type": "uint256" } ], "name": "WithdrawArrayTooLarge", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[2]", "name": "publicKey", "type": "uint256[2]" } ], "name": "IdentityRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "outputs", "type": "uint256[]" }, { "indexed": true, "internalType": "address", "name": "submitter", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "UTXOMint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "inputs", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "outputs", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256", "name": "encryptionNonce", "type": "uint256" }, { "indexed": false, "internalType": "uint256[2]", "name": "ecdhPublicKey", "type": "uint256[2]" }, { "indexed": false, "internalType": "uint256[]", "name": "encryptedValues", "type": "uint256[]" }, { "indexed": true, "internalType": "address", "name": "submitter", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "UTXOTransferWithEncryptedValues", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract Groth16Verifier_CheckHashesValue", "name": "_depositVerifier", "type": "address" } ], "name": "__ZetoFungible_init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "utxo", "type": "uint256" }, { "components": [ { "internalType": "uint256[2]", "name": "pA", "type": "uint256[2]" }, { "internalType": "uint256[2][2]", "name": "pB", "type": "uint256[2][2]" }, { "internalType": "uint256[2]", "name": "pC", "type": "uint256[2]" } ], "internalType": "struct Commonlib.Proof", "name": "proof", "type": "tuple" } ], "name": "_deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "nullifiers", "type": "uint256[]" }, { "internalType": "uint256", "name": "output", "type": "uint256" }, { "internalType": "uint256", "name": "root", "type": "uint256" }, { "components": [ { "internalType": "uint256[2]", "name": "pA", "type": "uint256[2]" }, { "internalType": "uint256[2][2]", "name": "pB", "type": "uint256[2][2]" }, { "internalType": "uint256[2]", "name": "pC", "type": "uint256[2]" } ], "internalType": "struct Commonlib.Proof", "name": "proof", "type": "tuple" } ], "name": "_withdrawWithNullifiers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "utxo", "type": "uint256" }, { "components": [ { "internalType": "uint256[2]", "name": "pA", "type": "uint256[2]" }, { "internalType": "uint256[2][2]", "name": "pB", "type": "uint256[2][2]" }, { "internalType": "uint256[2]", "name": "pC", "type": "uint256[2]" } ], "internalType": "struct Commonlib.Proof", "name": "proof", "type": "tuple" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getIdentitiesRoot", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRoot", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" }, { "internalType": "contract Groth16Verifier_AnonEncNullifierKyc", "name": "_verifier", "type": "address" }, { "internalType": "contract Groth16Verifier_CheckHashesValue", "name": "_depositVerifier", "type": "address" }, { "internalType": "contract Groth16Verifier_CheckNullifierValue", "name": "_withdrawVerifier", "type": "address" }, { "internalType": "contract Groth16Verifier_AnonEncNullifierKycBatch", "name": "_batchVerifier", "type": "address" }, { "internalType": "contract Groth16Verifier_CheckNullifierValueBatch", "name": "_batchWithdrawVerifier", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[2]", "name": "publicKey", "type": "uint256[2]" } ], "name": "isRegistered", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256[2]", "name": "pA", "type": "uint256[2]" }, { "internalType": "uint256[2][2]", "name": "pB", "type": "uint256[2][2]" }, { "internalType": "uint256[2]", "name": "pC", "type": "uint256[2]" } ], "internalType": "struct Commonlib.Proof", "name": "proof", "type": "tuple" }, { "internalType": "address", "name": "delegate", "type": "address" } ], "name": "lockProof", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "utxos", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[2]", "name": "publicKey", "type": "uint256[2]" } ], "name": "register", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "_erc20", "type": "address" } ], "name": "setERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "nullifiers", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "outputs", "type": "uint256[]" }, { "internalType": "uint256", "name": "root", "type": "uint256" }, { "internalType": "uint256", "name": "encryptionNonce", "type": "uint256" }, { "internalType": "uint256[2]", "name": "ecdhPublicKey", "type": "uint256[2]" }, { "internalType": "uint256[]", "name": "encryptedValues", "type": "uint256[]" }, { "components": [ { "internalType": "uint256[2]", "name": "pA", "type": "uint256[2]" }, { "internalType": "uint256[2][2]", "name": "pB", "type": "uint256[2][2]" }, { "internalType": "uint256[2]", "name": "pC", "type": "uint256[2]" } ], "internalType": "struct Commonlib.Proof", "name": "proof", "type": "tuple" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "nullifiers", "type": "uint256[]" }, { "internalType": "uint256", "name": "output", "type": "uint256" }, { "internalType": "uint256", "name": "root", "type": "uint256" }, { "components": [ { "internalType": "uint256[2]", "name": "pA", "type": "uint256[2]" }, { "internalType": "uint256[2][2]", "name": "pB", "type": "uint256[2][2]" }, { "internalType": "uint256[2]", "name": "pC", "type": "uint256[2]" } ], "internalType": "struct Commonlib.Proof", "name": "proof", "type": "tuple" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60a0806040523460295730608052613675908161002f823960805181818161093701526114ba0152f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063092a18bc1461015757806312c0fed2146101525780632e6ea9941461014d5780633442af5c146101485780634f1ef2861461014357806352d1902d1461013e5780635ca1e16514610139578063715018a614610134578063732952411461012f5780638bb2513b1461012a5780638da5cb5b146101255780639b2e8b52146101205780639e2a71941461011b5780639fcc50af14610116578063a576b53714610111578063ad3cb1cc1461010c578063c29a6fda14610107578063cc2a9a5b14610102578063f2fde38b146100fd5763f756356a146100f857600080fd5b6112b6565b611289565b610fe6565b610f7d565b610ee9565b610e2a565b610dc1565b610da7565b610d20565b610ccd565b610c6a565b610be9565b610a4e565b6109b1565b61090f565b610893565b6106c2565b61069f565b6104ee565b61024c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff8211176101ae57604052565b61015c565b906101c1604051928361018b565b565b806023121561020557604051906101db60408361018b565b8190604411610205576004905b604482106101f557505090565b81358152602091820191016101e8565b600080fd5b8060a31215610205576040519061022260408361018b565b819060c411610205576084905b60c4821061023c57505090565b813581526020918201910161022f565b346102055760406003193601126102055761029e602061026b366101c3565b604051809381927f29a5f2f600000000000000000000000000000000000000000000000000000000835260048301612416565b038173__$ebe82a1924a894141c89e6680d3cbc7e88$__5af490811561040d5761031a91602091600091610441575b506102d860606101b3565b908082528282015260016040820152604051809381927f25cc70e800000000000000000000000000000000000000000000000000000000835260048301612444565b038173__$03320550cd1b629da90608251571b2532e$__5af490811561040d576103899160a091600091610412575b50604051809381927fe170cf6e00000000000000000000000000000000000000000000000000000000835260048301919060206040840193603881520152565b038173__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__5af4801561040d576103da916000916103de575b50516103bf81611356565b6103c881611356565b60405190151581529081906020820190565b0390f35b610400915060a03d60a011610406575b6103f8818361018b565b8101906112e0565b386103b4565b503d6103ee565b61134a565b610434915060203d60201161043a575b61042c818361018b565b81019061141a565b38610349565b503d610422565b6104589150823d841161043a5761042c818361018b565b386102cd565b60031961010091011261020557600490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61010091011261020557604490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c6101009101126102055760e490565b73ffffffffffffffffffffffffffffffffffffffff81160361020557565b34610205576101206003193601126102055761065861050c3661045e565b610618610104359161051d836104d0565b61058460c061052d6101006101b3565b83358152926020810135602085015261057061056360408301803560408801526105578160200190565b35606088015260400190565b8035608087015260200190565b3560a085015201803560c084015260200190565b3560e08201526040516105ad8161059f602082019485612472565b03601f19810183528261018b565b51902073ffffffffffffffffffffffffffffffffffffffff6105f66105dc836000526000602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b1615801561065a575b6106089061138f565b6000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b005b506106086106756105dc836000526000602052604060002090565b73ffffffffffffffffffffffffffffffffffffffff16331490506105ff565b600091031261020557565b346102055760006003193601126102055760206106ba611429565b604051908152f35b34610205576040600319360112610205576106dc366101c3565b6106e461249f565b6106ed81613180565b9073__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__6040517fe170cf6e00000000000000000000000000000000000000000000000000000000815260a081806107468760048301919060206040840193603881520152565b0381855af490811561040d57600091610858575b505161076581611356565b61076e81611356565b61082057803b15610205576040517fc1d29f0100000000000000000000000000000000000000000000000000000000815260386004820152602481018490526044810193909352600090839060649082905af490811561040d577fa45339511611c62ec2e52472de1a3e6a561aa425af3ba3b39473e928be537edd9261080092610805575b506040519182918261250d565b0390a1005b80610814600061081a9361018b565b80610694565b386107f3565b6040517f7d714ba900000000000000000000000000000000000000000000000000000000815280610854846004830161250d565b0390fd5b610871915060a03d60a011610406576103f8818361018b565b3861075a565b67ffffffffffffffff81116101ae57601f01601f191660200190565b6040600319360112610205576004356108ab816104d0565b6024359067ffffffffffffffff82116102055736602383011215610205578160040135906108d882610877565b916108e6604051938461018b565b8083523660248286010111610205576020816000926024610658970183870137840101526114a1565b346102055760006003193601126102055773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036109875760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba0000000000000000000000000000000000000000000000000000000060005260046000fd5b34610205576000600319360112610205576040517f79f971250000000000000000000000000000000000000000000000000000000081526001600482015260208160248173__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__5af4801561040d576103da91600091610a2f575b506040519081529081906020820190565b610a48915060203d60201161043a5761042c818361018b565b38610a1e565b3461020557600060031936011261020557610a6761249f565b600073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b67ffffffffffffffff81116101ae5760051b60200190565b9080601f83011215610205578135610b3b81610b0c565b92610b49604051948561018b565b81845260208085019260051b82010192831161020557602001905b828210610b715750505090565b8135815260209182019101610b64565b610180600319820112610205576004359160243567ffffffffffffffff81116102055782610bb191600401610b24565b91604435916101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c60643593011261020557608490565b3461020557610658610c37610c22610c0036610b81565b92610c118197959692939751611651565b9087610c1c836116b1565b5261251d565b95908095610c3184898461260c565b506118f0565b612929565b9181601f840112156102055782359167ffffffffffffffff8311610205576020838186019501011161020557565b346102055760406003193601126102055760043567ffffffffffffffff811161020557610c9b903690600401610b24565b6024359067ffffffffffffffff821161020557610cbf610658923690600401610c3c565b91610cc861249f565b612a87565b3461020557600060031936011261020557602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346102055761016060031936011261020557602435600435610d4136610470565b906101443567ffffffffffffffff8111610205578392610d68610d70923690600401610c3c565b94909361230c565b6040805190610d7f818361018b565b60018252601f1901366020830137805115610da257610658936020820152612a87565b611682565b3461020557610658610db836610b81565b939290926118f0565b346102055760206003193601126102055773ffffffffffffffffffffffffffffffffffffffff600435610df3816104d0565b610dfb612dcd565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006034541617603455600080f35b34610205576102006003193601126102055760043567ffffffffffffffff811161020557610e5c903690600401610b24565b60243567ffffffffffffffff811161020557610e7c903690600401610b24565b906044359160643591610e8e3661020a565b60c43567ffffffffffffffff811161020557610eae903690600401610b24565b610eb7366104a0565b916101e4359567ffffffffffffffff8711610205576103da97610ee16103c8983690600401610c3c565b979096611db9565b34610205576000600319360112610205576040805190610f09818361018b565b600582527f352e302e300000000000000000000000000000000000000000000000000000006020830152805180926020825280519081602084015260005b828110610f665750506000828201840152601f01601f19168101030190f35b602082820181015187830187015286945001610f47565b346102055760206003193601126102055773ffffffffffffffffffffffffffffffffffffffff600435610faf816104d0565b610fb761249f565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006035541617603555600080f35b346102055760c060031936011261020557600435611003816104d0565b60243590611010826104d0565b60443561101c816104d0565b606435611028816104d0565b60843590611035826104d0565b60a43592611042846104d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549567ffffffffffffffff61108860ff60408a901c16159867ffffffffffffffff1690565b1680159081611281575b6001149081611277575b15908161126e575b5061124457611125958761111c60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6111c95761202d565b61112b57005b6111967fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2908060208101610800565b61123f680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61202d565b7ff92ee8a90000000000000000000000000000000000000000000000000000000060005260046000fd5b905015386110a4565b303b15915061109c565b889150611092565b34610205576020600319360112610205576106586004356112a9816104d0565b6112b161249f565b6121dc565b3461020557610140600319360112610205576106586004356024356112da36610470565b9161230c565b908160a09103126102055760405190600060a0830167ffffffffffffffff8111848210176101ae57604052815160038110156113465790608092918452602082015160208501526040820151604085015260608201516060850152500151608082015290565b5080fd5b6040513d6000823e3d90fd5b6003111561136057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1561139657565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f6f6620616c7265616479206c6f636b656420627920616e6f746865722060448201527f70617274790000000000000000000000000000000000000000000000000000006064820152fd5b90816020910312610205575190565b6040517f79f971250000000000000000000000000000000000000000000000000000000081526038600482015260208160248173__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__5af490811561040d57600091611485575090565b61149e915060203d60201161043a5761042c818361018b565b90565b909173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680301490811561160f575b50610987576114f261249f565b604051927f52d1902d00000000000000000000000000000000000000000000000000000000845260208460048173ffffffffffffffffffffffffffffffffffffffff87165afa600094816115ee575b5061158b577f4c9c8ce30000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff831660045260245b6000fd5b90917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc84036115bf576101c19293506131e4565b7faa1d49a400000000000000000000000000000000000000000000000000000000600052600484905260246000fd5b61160891955060203d60201161043a5761042c818361018b565b9338611541565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415386114e5565b9061165b82610b0c565b611668604051918261018b565b828152601f196116788294610b0c565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805115610da25760200190565b8051821015610da25760209160051b010190565b6040519060e06116e2818461018b565b368337565b604051906102e06116e2818461018b565b604051906102606116e2818461018b565b604051906109606116e2818461018b565b6040908151916116e2818461018b565b906007811015610da25760051b0190565b90816020910312610205575180151581036102055790565b906000905b6002821061176557505050565b6040808281866001953701930191019091611758565b9094939260409061179b61010094836101e0860199863783850190611753565b60c0830137016000905b600782106117b257505050565b60208060019285518152019301910190916117a5565b156117cf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152fd5b906017811015610da25760051b0190565b9094939260409061185e61010094836103e0860199863783850190611753565b60c0830137016000905b6017821061187557505050565b6020806001928551815201930191019091611868565b1561189257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4661696c656420746f207472616e7366657220455243323020746f6b656e73006044820152fd5b939290916002835111600014611aec576017835111611abd576119139285612d13565b9061191c6116e7565b9160005b60178110611a9e5750506119ac9160209161196c61195360375473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fa0c2a19a00000000000000000000000000000000000000000000000000000000845260c081019060408101906004860161183e565b03915afa801561040d576000926119d0611a36926020948691611a81575b506117c8565b6119f261195360355473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101929092529093849283919082906044820190565b03925af1801561040d576101c191600091611a52575b5061188b565b611a74915060203d602011611a7a575b611a6c818361018b565b81019061173b565b38611a4c565b503d611a62565b611a989150853d8711611a7a57611a6c818361018b565b386119ca565b80611aab600192846116be565b51611ab6828761182d565b5201611920565b7f71798fb500000000000000000000000000000000000000000000000000000000600052601760045260246000fd5b611af69285612c31565b90611aff6116d2565b9160005b60078110611b9e575050611b7691602091611b3661195360365473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fc894e75700000000000000000000000000000000000000000000000000000000845260c081019060408101906004860161177b565b03915afa801561040d57600092611b99611a36926020948691611a8157506117c8565b6119d0565b80611bab600192846116be565b51611bb6828761172a565b5201611b03565b15611bc457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964207472616e73616374696f6e2070726f706f73616c000000006044820152fd5b906013811015610da25760051b0190565b90949392604090611c536101009483610360860199863783850190611753565b60c0830137016000905b60138210611c6a57505050565b6020806001928551815201930191019091611c5d565b90604b811015610da25760051b0190565b90949392604090611cb16101009483610a60860199863783850190611753565b60c0830137016000905b604b8210611cc857505050565b6020806001928551815201930191019091611cbb565b906020808351928381520192019060005b818110611cfc5750505090565b8251845260209384019390920191600101611cef565b906000905b60028210611d2457505050565b6020806001928551815201930191019091611d17565b601f8260209493601f19938186528686013760008582860101520116010190565b9593611d9e90611d8e611dab9594611d8061149e9b999560e08c5260e08c0190611cde565b908a820360208c0152611cde565b9360408901526060880190611d12565b85820360a0870152611cde565b9260c0818503910152611d3a565b90611dcb91999693949892959961251d565b929094611de1611ddc82868961260c565b611bbd565b89898660028951118015612022575b15611f5857611e0093878a612fa1565b90611e09611709565b9160005b604b8110611f39575050611e8091602091611e40611953606b5473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937ff49c1ff400000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611c91565b03915afa801561040d57611e9b91600091611f2057506117c8565b611ea58285612929565b611eaf8851611651565b9560005b8951811015611edb5780611ec96001928c6116be565b51611ed4828b6116be565b5201611eb3565b5090919396611f1893959850957f18fd5042f65c100c3eb616143f0e3d2d83f7efe63df2a868b19f0b823c08a21b96604051968796339a88611d5b565b0390a2600190565b611a98915060203d602011611a7a57611a6c818361018b565b80611f46600192846116be565b51611f518287611c80565b5201611e0d565b611f6393878a612e26565b90611f6c6116f8565b9160005b60138110612003575050611fe391602091611fa3611953606a5473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937ff3f22e7200000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611c33565b03915afa801561040d57611ffe91600091611f2057506117c8565b611e9b565b80612010600192846116be565b5161201b8287611c22565b5201611f70565b506002875111611df0565b94929190939461203b612dcd565b73__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__803b1561020557604051917f9e43b81300000000000000000000000000000000000000000000000000000000835260009260386004820152604060248201528381604481865af4801561040d576121c6575b506120c7906120af612dcd565b6120b7612dcd565b6120bf612dcd565b6112b1612dcd565b803b156113465781604491604051928380927f9e43b81300000000000000000000000000000000000000000000000000000000825260016004830152604060248301525af4801561040d576121ae575b505061216d926101c195949261212c926130d6565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000606a541617606a55565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000606b541617606b55565b6121b982809261018b565b6121c35780612117565b80fd5b926121d5816120c7939561018b565b92906120a2565b73ffffffffffffffffffffffffffffffffffffffff16801561229e5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b906002811015610da25760051b0190565b60406101c194612300610100949897958361014086019a863783850190611753565b60c08301370190611d12565b916123879160209161231c61171a565b85815291602083015261234761195360345473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937ff5c9d69e00000000000000000000000000000000000000000000000000000000845260c08101906040810190600486016122de565b03915afa801561040d576000926123aa611a36926020948691611a8157506117c8565b6123cc61195360355473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101929092529093849283919082906064820190565b919060408301926000905b6002821061242e57505050565b6020806001928551815201930191019091612421565b919060608301926000905b6003821061245c57505050565b602080600192855181520193019101909161244f565b906000825b60088210612489575050506101000190565b6020806001928551815201930191019091612477565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633036124df57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b6040810192916101c19190611d12565b9190918051908351600a831180156125a1575b61257257600261149e9311908115612567575b501561255b57612555600a809261331a565b9361331a565b6125556002809261331a565b600291501138612543565b7f9ebbc98e00000000000000000000000000000000000000000000000000000000600052600a60045260246000fd5b50600a8111612530565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161260757565b6125ab565b9061261991939293613385565b60009291925b83518110156127275761263281856116be565b511561271f57801515806126fa575b6126c057600161267761267261266b61265a85896116be565b516000526033602052604060002090565b5460ff1690565b151590565b14612686576001905b0161261f565b61269361158791856116be565b517f41a06d2800000000000000000000000000000000000000000000000000000000600052600452602490565b6126cd61158791856116be565b517fdd57483100000000000000000000000000000000000000000000000000000000600052600452602490565b5061270581856116be565b51612718612712836125da565b866116be565b5114612641565b600190612680565b50915073__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__9060005b83518110156128755761275681856116be565b511561286d578015158061284e575b6126c0576127c060a061278161277b84886116be565b51613415565b604051809381927fe170cf6e00000000000000000000000000000000000000000000000000000000835260048301919060206040840193600181520152565b0381875af490811561040d57600091612830575b50516127df81611356565b6127e881611356565b6127f6576001905b01612743565b61280361158791856116be565b517f79e1da4700000000000000000000000000000000000000000000000000000000600052600452602490565b612848915060a03d8111610406576103f8818361018b565b386127d4565b5061285981856116be565b51612866612712836125da565b5114612765565b6001906127f0565b50929150602060405180927f92f5b06c00000000000000000000000000000000000000000000000000000000825281806128be8760048301919060206040840193600181520152565b03915af490811561040d5760009161290a575b50156128dd5750600190565b7f4acd7ab80000000000000000000000000000000000000000000000000000000060005260045260246000fd5b612923915060203d602011611a7a57611a6c818361018b565b386128d1565b91909160005b81518110156129915780612945600192846116be565b51612951575b0161292f565b61298c61296161265a83866116be565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b61294b565b505060005b8251811015612a5d576129a981846116be565b516129b7575b600101612996565b73__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__906129d781856116be565b516129e282866116be565b51833b15610205576040517fc1d29f01000000000000000000000000000000000000000000000000000000008152600160048201526024810192909252604482015291600090839060649082905af491821561040d57600192612a48575b5090506129af565b806108146000612a579361018b565b38612a40565b509050565b91612a7961149e9492604085526040850190611cde565b926020818503910152611d3a565b90919260009373__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__945b8351811015612bc757612ab781856116be565b51908115612bbe57612acd60a061278184613415565b03818b5af490811561040d57600091612ba0575b5051612aec81611356565b612af581611356565b612b7157863b15610205576040517fc1d29f01000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101929092526000826064818a5af491821561040d57600192612b5c575b505b01612aa4565b806108146000612b6b9361018b565b38612b54565b7f79e1da4700000000000000000000000000000000000000000000000000000000600052600482905260246000fd5b612bb8915060a03d8111610406576103f8818361018b565b38612ae1565b60019150612b56565b509093507f7ff08e0ca1fce6b202b83128811e4f6ceda54930aa074cd365bf68f95c20ce199192612bff604051928392339684612a62565b0390a2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126075760010190565b9092612c3d6007611651565b936001918293612c4c876116b1565b52826000815b612cdd575b5050612c6c612c6585612c04565b94876116be565b526000825b612c91575b50505080612c86612c8d92612c04565b50836116be565b5290565b8151811015612cd857908282612ca88294846116be565b51612cd1576000955b612cc860ff612cbf83612c04565b9816918a6116be565b52019091612c71565b8195612cb1565b612c76565b8351811015612d0e5780612cf28392866116be565b51612d06612cff89612c04565b988b6116be565b520181612c52565b612c57565b9092612d1f6017611651565b936001918293612d2e876116b1565b52826000815b612d9e575b5050612d47612c6585612c04565b526000825b612d605750505080612c86612c8d92612c04565b8151811015612cd857908282612d778294846116be565b51612d97576000955b612d8e60ff612cbf83612c04565b52019091612d4c565b8195612d80565b8351811015612dc85780612db38392866116be565b51612dc0612cff89612c04565b520181612d34565b612d39565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612dfc57565b7fd7e6bcf80000000000000000000000000000000000000000000000000000000060005260046000fd5b9094929395612e356013611651565b94600097885b60028110612f7957505060005b8551811015612e795780612e5e600192886116be565b51612e72612e6b8c612c04565b9b8a6116be565b5201612e48565b50919350919460005b8451811015612eb35780612e98600192876116be565b51612eac612ea58b612c04565b9a896116be565b5201612e82565b50909194612eca612ec388612c04565b97866116be565b5260005b8351811015612f125780612ee4600192866116be565b51612f0b576000975b612f0460ff612efb83612c04565b9a1691886116be565b5201612ece565b8197612eed565b50915092612f1e611429565b612f31612f2a87612c04565b96856116be565b5260005b8251811015612f665780612f4b600192856116be565b51612f5f612f5889612c04565b98876116be565b5201612f35565b5093612c8d9150929192612c8681612c04565b80612f86600192846122cd565b51612f9a612f938d612c04565b9c8b6116be565b5201612e3b565b9094929395612fb0604b611651565b94600097885b600281106130b557505060005b8551811015612fed5780612fd9600192886116be565b51612fe6612e6b8c612c04565b5201612fc3565b50919350919460005b8451811015613020578061300c600192876116be565b51613019612ea58b612c04565b5201612ff6565b50909194613030612ec388612c04565b5260005b835181101561306f578061304a600192866116be565b51613068576000975b61306160ff612efb83612c04565b5201613034565b8197613053565b5091509261307b611429565b613087612f2a87612c04565b5260005b8251811015612f6657806130a1600192856116be565b516130ae612f5889612c04565b520161308b565b806130c2600192846122cd565b516130cf612f938d612c04565b5201612fb6565b73ffffffffffffffffffffffffffffffffffffffff92918380926130f8612dcd565b613100612dcd565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006034541617603455167fffffffffffffffffffffffff00000000000000000000000000000000000000006036541617603655167fffffffffffffffffffffffff00000000000000000000000000000000000000006037541617603755565b60206131b991604051809381927f29a5f2f600000000000000000000000000000000000000000000000000000000835260048301612416565b038173__$ebe82a1924a894141c89e6680d3cbc7e88$__5af490811561040d57600091611485575090565b90813b156132d65773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28051156132a3576132a0916134a6565b50565b5050346132ac57565b7fb398979f0000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b91818351146133815761332c82611651565b9060005b84518110156133585780613346600192876116be565b5161335182866116be565b5201613330565b5092919091515b81811061336b57505090565b80600061337a600193866116be565b520161335f565b9050565b91906133918351611651565b9061339c8151611651565b9060005b85518110156133c857806133b6600192886116be565b516133c182876116be565b52016133a0565b50919290935060005b82518110156133f957806133e7600192856116be565b516133f282886116be565b52016133d1565b5091905061340681613585565b5061341083613585565b509190565b604051606081019080821067ffffffffffffffff8311176101ae5761347b926020926040528082528282015260016040820152604051809381927f25cc70e800000000000000000000000000000000000000000000000000000000835260048301612444565b038173__$03320550cd1b629da90608251571b2532e$__5af490811561040d57600091611485575090565b60008061149e93602081519101845af43d156134e4573d916134c783610877565b926134d5604051948561018b565b83523d6000602085013e6134e8565b6060915b9061352757508051156134fd57805190602001fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b8151158061357c575b613538575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b15613530565b61149e60016020835160051b840101602084015b919060408382031061363a5782519282818095602084015b8581106135d757505082518151845281526135cb92613599565b60206101c19301613599565b91509150805185600114613614577f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fd5b8211613627575b602001849186916135b1565b602090950180518651825286529461361b565b50505056fea2646970667358221220b7607e3cd684d10132b1a26b2b48ff50cb80498f2f48ccbd5bb3bc71066c9a2264736f6c634300081b0033", "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c8063092a18bc1461015757806312c0fed2146101525780632e6ea9941461014d5780633442af5c146101485780634f1ef2861461014357806352d1902d1461013e5780635ca1e16514610139578063715018a614610134578063732952411461012f5780638bb2513b1461012a5780638da5cb5b146101255780639b2e8b52146101205780639e2a71941461011b5780639fcc50af14610116578063a576b53714610111578063ad3cb1cc1461010c578063c29a6fda14610107578063cc2a9a5b14610102578063f2fde38b146100fd5763f756356a146100f857600080fd5b6112b6565b611289565b610fe6565b610f7d565b610ee9565b610e2a565b610dc1565b610da7565b610d20565b610ccd565b610c6a565b610be9565b610a4e565b6109b1565b61090f565b610893565b6106c2565b61069f565b6104ee565b61024c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff8211176101ae57604052565b61015c565b906101c1604051928361018b565b565b806023121561020557604051906101db60408361018b565b8190604411610205576004905b604482106101f557505090565b81358152602091820191016101e8565b600080fd5b8060a31215610205576040519061022260408361018b565b819060c411610205576084905b60c4821061023c57505090565b813581526020918201910161022f565b346102055760406003193601126102055761029e602061026b366101c3565b604051809381927f29a5f2f600000000000000000000000000000000000000000000000000000000835260048301612416565b038173__$ebe82a1924a894141c89e6680d3cbc7e88$__5af490811561040d5761031a91602091600091610441575b506102d860606101b3565b908082528282015260016040820152604051809381927f25cc70e800000000000000000000000000000000000000000000000000000000835260048301612444565b038173__$03320550cd1b629da90608251571b2532e$__5af490811561040d576103899160a091600091610412575b50604051809381927fe170cf6e00000000000000000000000000000000000000000000000000000000835260048301919060206040840193603881520152565b038173__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__5af4801561040d576103da916000916103de575b50516103bf81611356565b6103c881611356565b60405190151581529081906020820190565b0390f35b610400915060a03d60a011610406575b6103f8818361018b565b8101906112e0565b386103b4565b503d6103ee565b61134a565b610434915060203d60201161043a575b61042c818361018b565b81019061141a565b38610349565b503d610422565b6104589150823d841161043a5761042c818361018b565b386102cd565b60031961010091011261020557600490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61010091011261020557604490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c6101009101126102055760e490565b73ffffffffffffffffffffffffffffffffffffffff81160361020557565b34610205576101206003193601126102055761065861050c3661045e565b610618610104359161051d836104d0565b61058460c061052d6101006101b3565b83358152926020810135602085015261057061056360408301803560408801526105578160200190565b35606088015260400190565b8035608087015260200190565b3560a085015201803560c084015260200190565b3560e08201526040516105ad8161059f602082019485612472565b03601f19810183528261018b565b51902073ffffffffffffffffffffffffffffffffffffffff6105f66105dc836000526000602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b1615801561065a575b6106089061138f565b6000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b005b506106086106756105dc836000526000602052604060002090565b73ffffffffffffffffffffffffffffffffffffffff16331490506105ff565b600091031261020557565b346102055760006003193601126102055760206106ba611429565b604051908152f35b34610205576040600319360112610205576106dc366101c3565b6106e461249f565b6106ed81613180565b9073__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__6040517fe170cf6e00000000000000000000000000000000000000000000000000000000815260a081806107468760048301919060206040840193603881520152565b0381855af490811561040d57