@settlemint/solidity-zeto
Version:
Smart contract set to build Zero Knowledge tokens in SettleMint
794 lines • 73.8 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "Zeto_AnonNullifierKyc",
"sourceName": "contracts/zeto_anon_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": true,
"internalType": "address",
"name": "submitter",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "UTXOTransfer",
"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_AnonNullifierKyc",
"name": "_verifier",
"type": "address"
},
{
"internalType": "contract Groth16Verifier_CheckHashesValue",
"name": "_depositVerifier",
"type": "address"
},
{
"internalType": "contract Groth16Verifier_CheckNullifierValue",
"name": "_withdrawVerifier",
"type": "address"
},
{
"internalType": "contract Groth16Verifier_AnonNullifierKycBatch",
"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"
},
{
"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": "0x60a08060405234602957306080526134fa908161002f8239608051818181610a1e0152611a260152f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063092a18bc1461015757806312c0fed21461015257806322414cf31461014d5780632e6ea994146101485780633442af5c146101435780634f1ef2861461013e57806352d1902d146101395780635ca1e16514610134578063715018a61461012f578063732952411461012a5780638bb2513b146101255780638da5cb5b146101205780639b2e8b521461011b5780639e2a7194146101165780639fcc50af14610111578063ad3cb1cc1461010c578063c29a6fda14610107578063cc2a9a5b14610102578063f2fde38b146100fd5763f756356a146100f857600080fd5b61123b565b61120e565b610f6b565b610f02565b610e6e565b610e05565b610deb565b610d64565b610d11565b610cae565b610c5b565b610b35565b610a98565b6109f6565b61097a565b6107b5565b610792565b6106f5565b6104ac565b610216565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff8211176101ae57604052565b61015c565b906101c1604051928361018b565b565b604060031982011261021157806023121561021157604051906101e760408361018b565b8190604411610211576004905b6044821061020157505090565b81358152602091820191016101f4565b600080fd5b346102115761025c6020610229366101c3565b604051809381927f29a5f2f60000000000000000000000000000000000000000000000000000000083526004830161237b565b038173__$ebe82a1924a894141c89e6680d3cbc7e88$__5af49081156103cb576102d8916020916000916103ff575b5061029660606101b3565b908082528282015260016040820152604051809381927f25cc70e8000000000000000000000000000000000000000000000000000000008352600483016123a9565b038173__$03320550cd1b629da90608251571b2532e$__5af49081156103cb576103479160a0916000916103d0575b50604051809381927fe170cf6e00000000000000000000000000000000000000000000000000000000835260048301919060206040840193603881520152565b038173__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__5af480156103cb576103989160009161039c575b505161037d816112db565b610386816112db565b60405190151581529081906020820190565b0390f35b6103be915060a03d60a0116103c4575b6103b6818361018b565b810190611265565b38610372565b503d6103ac565b6112cf565b6103f2915060203d6020116103f8575b6103ea818361018b565b810190611989565b38610307565b503d6103e0565b6104169150823d84116103f8576103ea818361018b565b3861028b565b60031961010091011261021157600490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c61010091011261021157606490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61010091011261021157604490565b73ffffffffffffffffffffffffffffffffffffffff81160361021157565b3461021157610120600319360112610211576106166104ca3661041c565b6105d661010435916104db8361048e565b61054260c06104eb6101006101b3565b83358152926020810135602085015261052e61052160408301803560408801526105158160200190565b35606088015260400190565b8035608087015260200190565b3560a085015201803560c084015260200190565b3560e082015260405161056b8161055d6020820194856123d7565b03601f19810183528261018b565b51902073ffffffffffffffffffffffffffffffffffffffff6105b461059a836000526000602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b16158015610618575b6105c690611314565b6000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b005b506105c661063361059a836000526000602052604060002090565b73ffffffffffffffffffffffffffffffffffffffff16331490506105bd565b67ffffffffffffffff81116101ae5760051b60200190565b9080601f8301121561021157813561068181610652565b9261068f604051948561018b565b81845260208085019260051b82010192831161021157602001905b8282106106b75750505090565b81358152602091820191016106aa565b9181601f840112156102115782359167ffffffffffffffff8311610211576020838186019501011161021157565b34610211576101806003193601126102115760043567ffffffffffffffff81116102115761072790369060040161066a565b60243567ffffffffffffffff81116102115761074790369060040161066a565b90604435916107553661042e565b91610164359267ffffffffffffffff8411610211576103989461077f6103869536906004016106c7565b9490936116ce565b600091031261021157565b346102115760006003193601126102115760206107ad611998565b604051908152f35b34610211576107c3366101c3565b6107cb612b3e565b6107d481613189565b9073__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__6040517fe170cf6e00000000000000000000000000000000000000000000000000000000815260a0818061082d8760048301919060206040840193603881520152565b0381855af49081156103cb5760009161093f575b505161084c816112db565b610855816112db565b61090757803b15610211576040517fc1d29f0100000000000000000000000000000000000000000000000000000000815260386004820152602481018490526044810193909352600090839060649082905af49081156103cb577fa45339511611c62ec2e52472de1a3e6a561aa425af3ba3b39473e928be537edd926108e7926108ec575b5060405191829182612bac565b0390a1005b806108fb60006109019361018b565b80610787565b386108da565b6040517f7d714ba90000000000000000000000000000000000000000000000000000000081528061093b8460048301612bac565b0390fd5b610958915060a03d60a0116103c4576103b6818361018b565b38610841565b67ffffffffffffffff81116101ae57601f01601f191660200190565b6040600319360112610211576004356109928161048e565b6024359067ffffffffffffffff82116102115736602383011215610211578160040135906109bf8261095e565b916109cd604051938461018b565b808352366024828601011161021157602081600092602461061697018387013784010152611a0d565b346102115760006003193601126102115773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a6e5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba0000000000000000000000000000000000000000000000000000000060005260046000fd5b34610211576000600319360112610211576040517f79f971250000000000000000000000000000000000000000000000000000000081526001600482015260208160248173__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__5af480156103cb5761039891600091610b16575b506040519081529081906020820190565b610b2f915060203d6020116103f8576103ea818361018b565b38610b05565b3461021157600060031936011261021157610b4e612b3e565b600073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b610180600319820112610211576004359160243567ffffffffffffffff81116102115782610c239160040161066a565b91604435916101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c60643593011261021157608490565b3461021157610616610ca9610c94610c7236610bf3565b92610c83819795969293975161160d565b9087610c8e8361148b565b52612404565b95908095610ca38489846124f3565b50611cde565b612a05565b346102115760406003193601126102115760043567ffffffffffffffff811161021157610cdf90369060040161066a565b6024359067ffffffffffffffff821161021157610d036106169236906004016106c7565b91610d0c612b3e565b612be1565b3461021157600060031936011261021157602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346102115761016060031936011261021157602435600435610d853661045e565b906101443567ffffffffffffffff8111610211578392610dac610db49236906004016106c7565b949093612271565b6040805190610dc3818361018b565b60018252601f1901366020830137805115610de657610616936020820152612be1565b61145c565b3461021157610616610dfc36610bf3565b93929092611cde565b346102115760206003193601126102115773ffffffffffffffffffffffffffffffffffffffff600435610e378161048e565b610e3f612efa565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006034541617603455600080f35b34610211576000600319360112610211576040805190610e8e818361018b565b600582527f352e302e300000000000000000000000000000000000000000000000000000006020830152805180926020825280519081602084015260005b828110610eeb5750506000828201840152601f01601f19168101030190f35b602082820181015187830187015286945001610ecc565b346102115760206003193601126102115773ffffffffffffffffffffffffffffffffffffffff600435610f348161048e565b610f3c612b3e565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006035541617603555600080f35b346102115760c060031936011261021157600435610f888161048e565b60243590610f958261048e565b604435610fa18161048e565b606435610fad8161048e565b60843590610fba8261048e565b60a43592610fc78461048e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549567ffffffffffffffff61100d60ff60408a901c16159867ffffffffffffffff1690565b1680159081611206575b60011490816111fc575b1590816111f3575b506111c9576110aa95876110a160017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61114e57611f7b565b6110b057005b61111b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080602081016108e7565b6111c4680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611f7b565b7ff92ee8a90000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611029565b303b159150611021565b889150611017565b346102115760206003193601126102115761061660043561122e8161048e565b611236612b3e565b61212a565b34610211576101406003193601126102115761061660043560243561125f3661045e565b91612271565b908160a09103126102115760405190600060a0830167ffffffffffffffff8111848210176101ae57604052815160038110156112cb5790608092918452602082015160208501526040820151604085015260608201516060850152500151608082015290565b5080fd5b6040513d6000823e3d90fd5b600311156112e557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1561131b57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f6f6620616c7265616479206c6f636b656420627920616e6f746865722060448201527f70617274790000000000000000000000000000000000000000000000000000006064820152fd5b156113a657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964207472616e73616374696f6e2070726f706f73616c000000006044820152fd5b60405190610100611415818461018b565b368337565b60405190610400611415818461018b565b6040519060e0611415818461018b565b604051906102e0611415818461018b565b604090815191611415818461018b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805115610de65760200190565b8051821015610de65760209160051b010190565b906008811015610de65760051b0190565b90816020910312610211575180151581036102115790565b906000905b600282106114e757505050565b60408082818660019537019301910190916114da565b9094939260409061151d61010094836102008601998637838501906114d5565b60c0830137016000905b6008821061153457505050565b6020806001928551815201930191019091611527565b1561155157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152fd5b906020811015610de65760051b0190565b909493926040906115e061010094836105008601998637838501906114d5565b60c0830137016000905b602082106115f757505050565b60208060019285518152019301910190916115ea565b9061161782610652565b611624604051918261018b565b828152601f196116348294610652565b0190602036910137565b906020808351928381520192019060005b81811061165c5750505090565b825184526020938401939092019160010161164f565b601f8260209493601f19938186528686013760008582860101520116010190565b92906116cb94926116af6116bd9260608752606087019061163e565b90858203602087015261163e565b926040818503910152611672565b90565b906116db91969396612404565b9590916116f16116ec8289866124f3565b61139f565b6002835111801561197e575b156118b45761170d908784612937565b9061171661141a565b9160005b602081106118955750506117a69160209161176661174d606b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937f3cc08b2400000000000000000000000000000000000000000000000000000000845260c08101906040810190600486016115c0565b03915afa80156103cb576117c291600091611866575b5061154a565b6117cc8582612a05565b6117d6815161160d565b916117e1865161160d565b9360005b835181101561182357806117fb60019286611498565b516118068288611498565b52611811818a611498565b5161181c8289611498565b52016117e5565b50929461185e9196507fcb56a7130431b68e0e636f24584d40580490c1bf882bef3701f317d47ba98c38949250604051938493339785611693565b0390a2600190565b611888915060203d60201161188e575b611880818361018b565b8101906114bd565b386117bc565b503d611876565b806118a260019284611498565b516118ad82876115af565b520161171a565b6118bf90878461283d565b906118c8611404565b9160005b6008811061195f57505061193f916020916118ff61174d606a5473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fc9219a7a00000000000000000000000000000000000000000000000000000000845260c08101906040810190600486016114fd565b03915afa80156103cb5761195a91600091611866575061154a565b6117c2565b8061196c60019284611498565b5161197782876114ac565b52016118cc565b5060028751116116fd565b90816020910312610211575190565b6040517f79f971250000000000000000000000000000000000000000000000000000000081526038600482015260208160248173__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__5af49081156103cb576000916119f4575090565b6116cb915060203d6020116103f8576103ea818361018b565b909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115611b7b575b50610a6e57611a5e612b3e565b604051927f52d1902d00000000000000000000000000000000000000000000000000000000845260208460048173ffffffffffffffffffffffffffffffffffffffff87165afa60009481611b5a575b50611af7577f4c9c8ce30000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff831660045260245b6000fd5b90917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8403611b2b576101c19293506131ed565b7faa1d49a400000000000000000000000000000000000000000000000000000000600052600484905260246000fd5b611b7491955060203d6020116103f8576103ea818361018b565b9338611aad565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141538611a51565b906007811015610de65760051b0190565b90949392604090611bee61010094836101e08601998637838501906114d5565b60c0830137016000905b60078210611c0557505050565b6020806001928551815201930191019091611bf8565b906017811015610de65760051b0190565b90949392604090611c4c61010094836103e08601998637838501906114d5565b60c0830137016000905b60178210611c6357505050565b6020806001928551815201930191019091611c56565b15611c8057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4661696c656420746f207472616e7366657220455243323020746f6b656e73006044820152fd5b939290916002835111600014611eaa576017835111611e7b57611d019285612e40565b90611d0a61143b565b9160005b60178110611e5c575050611d8191602091611d4161174d60375473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fa0c2a19a00000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611c2c565b03915afa80156103cb57600092611da4611e0a926020948691611e45575061154a565b611dc661174d60355473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101929092529093849283919082906044820190565b03925af180156103cb576101c191600091611e26575b50611c79565b611e3f915060203d60201161188e57611880818361018b565b38611e20565b6118889150853d871161188e57611880818361018b565b80611e6960019284611498565b51611e748287611c1b565b5201611d0e565b7f71798fb500000000000000000000000000000000000000000000000000000000600052601760045260246000fd5b611eb49285612d5e565b90611ebd61142b565b9160005b60078110611f5c575050611f3491602091611ef461174d60365473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fc894e75700000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611bce565b03915afa80156103cb57600092611f57611e0a926020948691611e45575061154a565b611da4565b80611f6960019284611498565b51611f748287611bbd565b5201611ec1565b949291909394611f89612efa565b73__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__803b1561021157604051917f9e43b81300000000000000000000000000000000000000000000000000000000835260009260386004820152604060248201528381604481865af480156103cb57612114575b5061201590611ffd612efa565b612005612efa565b61200d612efa565b611236612efa565b803b156112cb5781604491604051928380927f9e43b81300000000000000000000000000000000000000000000000000000000825260016004830152604060248301525af480156103cb576120fc575b50506120bb926101c195949261207a92612f53565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000606a541617606a55565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000606b541617606b55565b61210782809261018b565b6121115780612065565b80fd5b9261212381612015939561018b565b9290611ff0565b73ffffffffffffffffffffffffffffffffffffffff1680156121ec5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b906000905b6002821061222d57505050565b6020806001928551815201930191019091612220565b60406101c194612265610100949897958361014086019a8637838501906114d5565b60c0830137019061221b565b916122ec9160209161228161144c565b8581529160208301526122ac61174d60345473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937ff5c9d69e00000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601612243565b03915afa80156103cb5760009261230f611e0a926020948691611e45575061154a565b61233161174d60355473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101929092529093849283919082906064820190565b919060408301926000905b6002821061239357505050565b6020806001928551815201930191019091612386565b919060608301926000905b600382106123c157505050565b60208060019285518152019301910190916123b4565b906000825b600882106123ee575050506101000190565b60208060019285518152019301910190916123dc565b9190918051908351600a83118015612488575b6124595760026116cb931190811561244e575b50156124425761243c600a8092612ffd565b93612ffd565b61243c60028092612ffd565b60029150113861242a565b7f9ebbc98e00000000000000000000000000000000000000000000000000000000600052600a60045260246000fd5b50600a8111612417565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116124ee57565b612492565b9061250091939293613068565b60009291925b835181101561260e576125198185611498565b511561260657801515806125e1575b6125a757600161255e6125596125526125418589611498565b516000526033602052604060002090565b5460ff1690565b151590565b1461256d576001905b01612506565b61257a611af39185611498565b517f41a06d2800000000000000000000000000000000000000000000000000000000600052600452602490565b6125b4611af39185611498565b517fdd57483100000000000000000000000000000000000000000000000000000000600052600452602490565b506125ec8185611498565b516125ff6125f9836124c1565b86611498565b5114612528565b600190612567565b50915073__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__9060005b835181101561275c5761263d8185611498565b51156127545780151580612735575b6125a7576126a760a06126686126628488611498565b516130f8565b604051809381927fe170cf6e00000000000000000000000000000000000000000000000000000000835260048301919060206040840193600181520152565b0381875af49081156103cb57600091612717575b50516126c6816112db565b6126cf816112db565b6126dd576001905b0161262a565b6126ea611af39185611498565b517f79e1da4700000000000000000000000000000000000000000000000000000000600052600452602490565b61272f915060a03d81116103c4576103b6818361018b565b386126bb565b506127408185611498565b5161274d6125f9836124c1565b511461264c565b6001906126d7565b50929150602060405180927f92f5b06c00000000000000000000000000000000000000000000000000000000825281806127a58760048301919060206040840193600181520152565b03915af49081156103cb576000916127f1575b50156127c45750600190565b7f4acd7ab80000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61280a915060203d60201161188e57611880818361018b565b386127b8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124ee5760010190565b612847600861160d565b91600094855b835181101561287e578061286360019286611498565b516128776128708a612810565b9988611498565b520161284d565b50909361289461288d87612810565b9685611498565b5260005b82518110156128dc57806128ae60019285611498565b516128d5576000965b6128ce60ff6128c583612810565b99169187611498565b5201612898565b81966128b7565b509290506128e8611998565b6128fb6128f486612810565b9584611498565b5260005b8151811015612930578061291560019284611498565b5161292961292288612810565b9786611498565b52016128ff565b5090925050565b612941602061160d565b91600094855b8351811015612971578061295d60019286611498565b5161296a6128708a612810565b5201612947565b50909361298061288d87612810565b5260005b82518110156129bf578061299a60019285611498565b516129b8576000965b6129b160ff6128c583612810565b5201612984565b81966129a3565b509290506129cb611998565b6129d76128f486612810565b5260005b815181101561293057806129f160019284611498565b516129fe61292288612810565b52016129db565b91909160005b8151811015612a6d5780612a2160019284611498565b51612a2d575b01612a0b565b612a68612a3d6125418386611498565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b612a27565b505060005b8251811015612b3957612a858184611498565b51612a93575b600101612a72565b73__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__90612ab38185611498565b51612abe8286611498565b51833b15610211576040517fc1d29f01000000000000000000000000000000000000000000000000000000008152600160048201526024810192909252604482015291600090839060649082905af49182156103cb57600192612b24575b509050612a8b565b806108fb6000612b339361018b565b38612b1c565b509050565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612b7e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b6040810192916101c1919061221b565b91612bd36116cb949260408552604085019061163e565b926020818503910152611672565b90919260009373__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__945b8351811015612d2157612c118185611498565b51908115612d1857612c2760a0612668846130f8565b03818b5af49081156103cb57600091612cfa575b5051612c46816112db565b612c4f816112db565b612ccb57863b15610211576040517fc1d29f01000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101929092526000826064818a5af49182156103cb57600192612cb6575b505b01612bfe565b806108fb6000612cc59361018b565b38612cae565b7f79e1da4700000000000000000000000000000000000000000000000000000000600052600482905260246000fd5b612d12915060a03d81116103c4576103b6818361018b565b38612c3b565b60019150612cb0565b509093507f7ff08e0ca1fce6b202b83128811e4f6ceda54930aa074cd365bf68f95c20ce199192612d59604051928392339684612bbc565b0390a2565b9092612d6a600761160d565b936001918293612d798761148b565b52826000815b612e0a575b5050612d99612d9285612810565b9487611498565b526000825b612dbe575b50505080612db3612dba92612810565b5083611498565b5290565b8151811015612e0557908282612dd5829484611498565b51612dfe576000955b612df560ff612dec83612810565b9816918a611498565b52019091612d9e565b8195612dde565b612da3565b8351811015612e3b5780612e1f839286611498565b51612e33612e2c89612810565b988b611498565b520181612d7f565b612d84565b9092612e4c601761160d565b936001918293612e5b8761148b565b52826000815b612ecb575b5050612e74612d9285612810565b526000825b612e8d5750505080612db3612dba92612810565b8151811015612e0557908282612ea4829484611498565b51612ec4576000955b612ebb60ff612dec83612810565b52019091612e79565b8195612ead565b8351811015612ef55780612ee0839286611498565b51612eed612e2c89612810565b520181612e61565b612e66565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612f2957565b7fd7e6bcf80000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff9291838092612f75612efa565b612f7d612efa565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006034541617603455167fffffffffffffffffffffffff00000000000000000000000000000000000000006036541617603655167fffffffffffffffffffffffff00000000000000000000000000000000000000006037541617603755565b91818351146130645761300f8261160d565b9060005b845181101561303b578061302960019287611498565b516130348286611498565b5201613013565b5092919091515b81811061304e57505090565b80600061305d60019386611498565b5201613042565b9050565b9190613074835161160d565b9061307f815161160d565b9060005b85518110156130ab578061309960019288611498565b516130a48287611498565b5201613083565b50919290935060005b82518110156130dc57806130ca60019285611498565b516130d58288611498565b52016130b4565b509190506130e981613369565b506130f383613369565b509190565b604051606081019080821067ffffffffffffffff8311176101ae5761315e926020926040528082528282015260016040820152604051809381927f25cc70e8000000000000000000000000000000000000000000000000000000008352600483016123a9565b038173__$03320550cd1b629da90608251571b2532e$__5af49081156103cb576000916119f4575090565b60206131c291604051809381927f29a5f2f60000000000000000000000000000000000000000000000000000000083526004830161237b565b038173__$ebe82a1924a894141c89e6680d3cbc7e88$__5af49081156103cb576000916119f4575090565b90813b156132df5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28051156132ac576132a991613323565b50565b5050346132b557565b7fb398979f0000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b6000806116cb93602081519101845af43d15613361573d916133448361095e565b92613352604051948561018b565b83523d6000602085013e613381565b606091613381565b6116cb60016020835160051b8401016020840161341e565b906133c0575080511561339657805190602001fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b81511580613415575b6133d1575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b156133c9565b91906040838203106134bf5782519282818095602084015b85811061345c57505082518151845281526134509261341e565b60206101c1930161341e565b91509150805185600114613499577f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fd5b82116134ac575b60200184918691613436565b60209095018051865182528652946134a0565b50505056fea2646970667358221220763a4916a453ce2222e4e93e1032dc9954849961737a9e719001e626aabb566d64736f6c634300081b0033",
"deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c8063092a18bc1461015757806312c0fed21461015257806322414cf31461014d5780632e6ea994146101485780633442af5c146101435780634f1ef2861461013e57806352d1902d146101395780635ca1e16514610134578063715018a61461012f578063732952411461012a5780638bb2513b146101255780638da5cb5b146101205780639b2e8b521461011b5780639e2a7194146101165780639fcc50af14610111578063ad3cb1cc1461010c578063c29a6fda14610107578063cc2a9a5b14610102578063f2fde38b146100fd5763f756356a146100f857600080fd5b61123b565b61120e565b610f6b565b610f02565b610e6e565b610e05565b610deb565b610d64565b610d11565b610cae565b610c5b565b610b35565b610a98565b6109f6565b61097a565b6107b5565b610792565b6106f5565b6104ac565b610216565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff8211176101ae57604052565b61015c565b906101c1604051928361018b565b565b604060031982011261021157806023121561021157604051906101e760408361018b565b8190604411610211576004905b6044821061020157505090565b81358152602091820191016101f4565b600080fd5b346102115761025c6020610229366101c3565b604051809381927f29a5f2f60000000000000000000000000000000000000000000000000000000083526004830161237b565b038173__$ebe82a1924a894141c89e6680d3cbc7e88$__5af49081156103cb576102d8916020916000916103ff575b5061029660606101b3565b908082528282015260016040820152604051809381927f25cc70e8000000000000000000000000000000000000000000000000000000008352600483016123a9565b038173__$03320550cd1b629da90608251571b2532e$__5af49081156103cb576103479160a0916000916103d0575b50604051809381927fe170cf6e00000000000000000000000000000000000000000000000000000000835260048301919060206040840193603881520152565b038173__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__5af480156103cb576103989160009161039c575b505161037d816112db565b610386816112db565b60405190151581529081906020820190565b0390f35b6103be915060a03d60a0116103c4575b6103b6818361018b565b810190611265565b38610372565b503d6103ac565b6112cf565b6103f2915060203d6020116103f8575b6103ea818361018b565b810190611989565b38610307565b503d6103e0565b6104169150823d84116103f8576103ea818361018b565b3861028b565b60031961010091011261021157600490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c61010091011261021157606490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61010091011261021157604490565b73ffffffffffffffffffffffffffffffffffffffff81160361021157565b3461021157610120600319360112610211576106166104ca3661041c565b6105d661010435916104db8361048e565b61054260c06104eb6101006101b3565b83358152926020810135602085015261052e61052160408301803560408801526105158160200190565b35606088015260400190565b8035608087015260200190565b3560a085015201803560c084015260200190565b3560e082015260405161056b8161055d6020820194856123d7565b03601f19810183528261018b565b51902073ffffffffffffffffffffffffffffffffffffffff6105b461059a836000526000602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b16158015610618575b6105c690611314565b6000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b005b506105c661063361059a836000526000602052604060002090565b73ffffffffffffffffffffffffffffffffffffffff16331490506105bd565b67ffffffffffffffff81116101ae5760051b60200190565b9080601f8301121561021157813561068181610652565b9261068f604051948561018b565b81845260208085019260051b82010192831161021157602001905b8282106106b75750505090565b81358152602091820191016106aa565b9181601f840112156102115782359167ffffffffffffffff8311610211576020838186019501011161021157565b34610211576101806003193601126102115760043567ffffffffffffffff81116102115761072790369060040161066a565b60243567ffffffffffffffff81116102115761074790369060040161066a565b90604435916107553661042e565b91610164359267ffffffffffffffff8411610211576103989461077f6103869536906004016106c7565b9490936116ce565b600091031261021157565b346102115760006003193601126102115760206107ad611998565b604051908152f35b34610211576107c3366101c3565b6107cb612b3e565b6107d481613189565b9073__$dc6c4dd02ac6da041aea5ed0aea43c2a22$__6040517fe170cf6e00000000000000000000000000000000000000000000000000000000815260a0818061082d8760048301919060206040840193603881520152565b0381855af49081156103cb5760009161093f575b505161084c816112db565b610855816112db565b61090757803b15610211576040517fc1d29f0100000000000000000000000000000000000000000000000000000000815260386004820152602481018490526044810193909352600090839060649082905af49081156103cb577fa45339511611c62ec2e52472de1a3e6a561aa425af3ba3b39473e928be537edd926108e7926108ec575b5060405191829182612bac565b0390a1005b806108fb60006109019361018b565b80610787565b386108da565b6040517f7d714ba90000000000000000000000000000000000000000000000000000000081528061093b8460048301612bac565b0390fd5b610958915060a03d60a0116103c4576103b6818361018b565b38610841565b67ffffffffffffffff81116101ae57601f01601f191660200190565b6040600319360112610211576004356109928161048e565b6024359067ffffffffffffffff82116102115736602383011215610211578160040135906109bf8261095e565b916109cd604051938461018b565b808352366024828601011161021157602081600092602461061697018387013784010152611a0d565b346102115760006003193601126102115773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a6e5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba00000000000000000000000000