[ { "inputs": [ { "internalType": "contract IManager", "name": "manager", "type": "address" }, { "internalType": "string", "name": "tokenSymbol", "type": "string" }, { "internalType": "string", "name": "certsName", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timeStamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "groupId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "nftId", "type": "uint256" } ], "name": "ClaimCerts", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timeStamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ClaimTokens", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "timeStamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "id1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "id2", "type": "uint256" } ], "name": "Combine", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "timeStamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "id1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "id2", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Split", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "timeStamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "id1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "id2", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "percent", "type": "uint256" } ], "name": "SplitPercent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "string[]", "name": "names", "type": "string[]" } ], "name": "appendGroups", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" }, { "internalType": "string", "name": "groupName", "type": "string" }, { "internalType": "bool", "name": "finalizeGroup", "type": "bool" } ], "name": "attachFromCampaign", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "campaign", "type": "address" }, { "internalType": "uint256", "name": "groupId", "type": "uint256" }, { "internalType": "string", "name": "groupName", "type": "string" } ], "name": "attachToCampaign", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" } ], "name": "checkGroupStatus", "outputs": [ { "internalType": "enum CertsTypes.GroupError", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "groupId", "type": "uint256" }, { "internalType": "string", "name": "groupName", "type": "string" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "claimCertsFromCampaign", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nftId", "type": "uint256" } ], "name": "claimTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id1", "type": "uint256" }, { "internalType": "uint256", "name": "id2", "type": "uint256" } ], "name": "combine", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" }, { "internalType": "string", "name": "groupName", "type": "string" }, { "components": [ { "internalType": "enum CertsTypes.VestingReleaseType", "name": "releaseType", "type": "uint8" }, { "internalType": "uint256", "name": "delay", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "percent", "type": "uint256" } ], "internalType": "struct CertsTypes.VestingItem[]", "name": "vestItems", "type": "tuple[]" } ], "name": "defineVesting", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAsset", "outputs": [ { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAssetAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nftId", "type": "uint256" } ], "name": "getClaimable", "outputs": [ { "internalType": "uint256", "name": "claimable", "type": "uint256" }, { "internalType": "uint256", "name": "totalClaimed", "type": "uint256" }, { "internalType": "uint256", "name": "totalEntitlement", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getGroupCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" } ], "name": "getGroupInfo", "outputs": [ { "internalType": "string", "name": "", "type": "string" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" } ], "name": "getGroupReleasable", "outputs": [ { "internalType": "uint256", "name": "percentReleasable", "type": "uint256" }, { "internalType": "uint256", "name": "totalEntitlement", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nftId", "type": "uint256" } ], "name": "getNftInfo", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRoles", "outputs": [ { "internalType": "contract IRoles", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" } ], "name": "getVestingInfo", "outputs": [ { "components": [ { "internalType": "enum CertsTypes.VestingReleaseType", "name": "releaseType", "type": "uint8" }, { "internalType": "uint256", "name": "delay", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "percent", "type": "uint256" } ], "internalType": "struct CertsTypes.VestingItem[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVestingStartTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" } ], "name": "isGroupFinalized", "outputs": [ { "internalType": "bool", "name": "finalized", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isLive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" } ], "name": "setAssetDetails", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "groupId", "type": "uint256" }, { "internalType": "string", "name": "groupName", "type": "string" } ], "name": "setGroupFinalized", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "split", "outputs": [ { "internalType": "uint256", "name": "newId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "startTime", "type": "uint256" } ], "name": "startVesting", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a06040523480156200001157600080fd5b50604051620036f8380380620036f8833981016040819052620000349162000210565b82806001600160a01b031663710613986040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a91906200028f565b60408051808201909152600a8152695375706572436572747360b01b602082015283906000620000cb838262000345565b506001620000da828262000345565b5050600a80546001600160a01b0319166001600160a01b03938416179055506001600b5516608052816200010c600c90565b9062000119908262000345565b50600d62000128828262000345565b5050505062000411565b6001600160a01b03811681146200014857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200017357600080fd5b81516001600160401b03808211156200019057620001906200014b565b604051601f8301601f19908116603f01168101908282118183101715620001bb57620001bb6200014b565b81604052838152602092508683858801011115620001d857600080fd5b600091505b83821015620001fc5785820183015181830184015290820190620001dd565b600093810190920192909252949350505050565b6000806000606084860312156200022657600080fd5b8351620002338162000132565b60208501519093506001600160401b03808211156200025157600080fd5b6200025f8783880162000161565b935060408601519150808211156200027657600080fd5b50620002858682870162000161565b9150509250925092565b600060208284031215620002a257600080fd5b8151620002af8162000132565b9392505050565b600181811c90821680620002cb57607f821691505b602082108103620002ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034057600081815260208120601f850160051c810160208610156200031b5750805b601f850160051c820191505b818110156200033c5782815560010162000327565b5050505b505050565b81516001600160401b038111156200036157620003616200014b565b6200037981620003728454620002b6565b84620002f2565b602080601f831160018114620003b15760008415620003985750858301515b600019600386901b1c1916600185901b1785556200033c565b600085815260208120601f198616915b82811015620003e257888601518255948401946001909101908401620003c1565b5085821015620004015787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516132c46200043460003960008181610d34015261191901526132c46000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80636352211e1161013b5780639c7e4a66116100b8578063bdfb15be1161007c578063bdfb15be14610542578063c87b56dd14610555578063d5ec2d8314610568578063df12a6f61461059d578063e985e9c5146105b057600080fd5b80639c7e4a66146104d3578063a22cb46514610501578063b2ef317d14610514578063b88d4fde14610527578063b8f7a6651461053a57600080fd5b806384b34316116100ff57806384b3431614610470578063852ddaac146104835780638a50fecb1461049657806395d89b41146104a957806399d4360f146104b157600080fd5b80636352211e14610420578063670ab5e91461043357806370a082311461044457806371061398146104575780638307dc981461046857600080fd5b80632f745c59116101c9578063480567901161018d57806348056790146103be5780634b19becc146103d15780634f6ccce7146103e457806358182f26146103f75780635c222bad1461040a57600080fd5b80632f745c591461035257806331c08d75146103655780633a4dc2fb1461038557806342842e0e1461039857806346e04a2f146103ab57600080fd5b80630dbd5c55116102105780630dbd5c55146102dc57806318160ddd1461030457806320f6b0a91461030c57806323b872dd1461032c5780632f6fdf2d1461033f57600080fd5b806301ffc9a71461024d57806306545a931461027557806306fdde0314610287578063081812fc1461029c578063095ea7b3146102c7575b600080fd5b61026061025b366004612766565b6105c3565b60405190151581526020015b60405180910390f35b6010545b60405190815260200161026c565b61028f6105d4565b60405161026c91906127d3565b6102af6102aa3660046127e6565b610666565b6040516001600160a01b03909116815260200161026c565b6102da6102d5366004612816565b61068f565b005b6102ef6102ea3660046127e6565b61069e565b6040805192835260208301919091520161026c565b600854610279565b61031f61031a3660046127e6565b610728565b60405161026c919061286a565b6102da61033a3660046128d5565b6107f9565b6102da61034d3660046129d0565b610889565b610279610360366004612816565b610a43565b6103786103733660046127e6565b610aa8565b60405161026c9190612a17565b6102da6103933660046127e6565b610b28565b6102da6103a63660046128d5565b610bd3565b6102da6103b93660046127e6565b610bf3565b6102606103cc3660046127e6565b610db5565b6102796103df366004612a31565b610dd4565b6102796103f23660046127e6565b610f91565b6102da610405366004612a61565b610fea565b6104126110f1565b60405161026c929190612abc565b6102af61042e3660046127e6565b61121f565b600e546001600160a01b03166102af565b610279610452366004612aea565b61122a565b600a546001600160a01b03166102af565b601154610279565b6102da61047e366004612aea565b611272565b6102da610491366004612b05565b6112f6565b6102da6104a4366004612a31565b61143c565b61028f6115d5565b6104c46104bf3660046127e6565b6115e4565b60405161026c93929190612ba3565b6104e66104e13660046127e6565b6116b8565b6040805193845260208401929092529082015260600161026c565b6102da61050f366004612bc8565b61175f565b6102da610522366004612bff565b61176a565b6102da610535366004612c5e565b611996565b6102606119ad565b6102da610550366004612cda565b6119cf565b61028f6105633660046127e6565b611a4a565b61057b6105763660046127e6565b611a8e565b604080519485526020850193909352918301521515606082015260800161026c565b6102da6105ab366004612d31565b611ac4565b6102606105be366004612df4565b611b7c565b60006105ce82611baa565b92915050565b6060600080546105e390612e27565b80601f016020809104026020016040519081016040528092919081815260200182805461060f90612e27565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600061067182611bcf565b506000828152600460205260409020546001600160a01b03166105ce565b61069a828233611c08565b5050565b600080600c604051635433f38b60e11b8152600481019190915260248101849052737c5f656e829e71fd901df7a35d9e3f3e404f9cd19063a867e716906044016040805180830381865af41580156106fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071e9190612e61565b9094909350915050565b6060600c600401828154811061074057610740612e85565b9060005260206000209060050201600301805480602002602001604051908101604052809291908181526020016000905b828210156107ee576000848152602090206040805160808101909152600484029091018054829060ff1660028111156107ac576107ac612840565b60028111156107bd576107bd612840565b8152602001600182015481526020016002820154815260200160038201548152505081526020019060010190610771565b505050509050919050565b6001600160a01b03821661082857604051633250574960e11b8152600060048201526024015b60405180910390fd5b6000610835838333611c15565b9050836001600160a01b0316816001600160a01b031614610883576040516364283d7b60e01b81526001600160a01b038086166004830152602482018490528216604482015260640161081f565b50505050565b6108bf6108946119ad565b156040518060400160405280600c81526020016b416c7265616479206c69766560a01b815250611cec565b600a54604051630da431c960e31b8152336004820152610955916001600160a01b031690636d218e48906024015b602060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190612e9b565b604051806040016040528060098152602001684e6f2072696768747360b81b815250611cec565b6000600c604051633072329f60e01b8152737c5f656e829e71fd901df7a35d9e3f3e404f9cd191633072329f91610996919087908790600090600401612eb8565b602060405180830381865af41580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d79190612eea565b6040516314c878a960e11b815260048101829052909150737c5f656e829e71fd901df7a35d9e3f3e404f9cd190632990f152906024015b60006040518083038186803b158015610a2657600080fd5b505af4158015610a3a573d6000803e3d6000fd5b50505050505050565b6000610a4e8361122a565b8210610a7f5760405163295f44f760e21b81526001600160a01b03841660048201526024810183905260440161081f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000600c6040516373fb3e8760e11b8152600481019190915260248101839052737c5f656e829e71fd901df7a35d9e3f3e404f9cd19063e7f67d0e90604401602060405180830381865af4158015610b04573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ce9190612f03565b610b336108946119ad565b600a54604051630da431c960e31b8152336004820152610b65916001600160a01b031690636d218e48906024016108ed565b604051639ac87d9160e01b8152600c600482015260248101829052737c5f656e829e71fd901df7a35d9e3f3e404f9cd190639ac87d91906044015b60006040518083038186803b158015610bb857600080fd5b505af4158015610bcc573d6000803e3d6000fd5b5050505050565b610bee83838360405180602001604052806000815250611996565b505050565b610bfb611d0b565b610c3933610c088361121f565b6001600160a01b031614604051806040016040528060098152602001682737ba1037bbb732b960b91b815250611cec565b6000610c4482611d35565b90506000610c558260000154611d7f565b90506000610c62846116b8565b50509050610c9b600082116040518060400160405280601081526020016f4e6f7468696e6720746f20636c61696d60801b815250611cec565b80836002016000828254610caf9190612f3a565b9250508190555080826002016000828254610cca9190612f3a565b90915550610cda90503382611dac565b604080514281526020810186905290810182905233907f8385f64d7bd21488ec6ae4832b13e76534b10fa75127096e40b0cd0c8698efb59060600160405180910390a2604051630bfa614360e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bfa6143090610d739033906000906003908a908890600401612f4d565b600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b50505050505050610db26001600b55565b50565b6000610dc082611d7f565b60040154600160a01b900460ff1692915050565b6000610dde611d0b565b610deb33610c088561121f565b6000610df684611d35565b9050600081600201548260010154610e0e9190612f9f565b9050610e4e600085118015610e2257508482115b6040518060400160405280600e81526020016d125b9d985b1a5908185b5bdd5b9d60921b815250611cec565b600081836001015486610e619190612fb2565b610e6b9190612fc9565b9050610ea0600082116040518060400160405280600e81526020016d125b9d985b1a5908185b5bdd5b9d60921b815250611cec565b6000610eac8683612f9f565b905081846001016000828254610ec29190612f9f565b9250508190555080846002016000828254610edd9190612f9f565b90915550506001840154610f289015801590610f00575084600101548560020154105b6040518060400160405280600a8152602001694661696c20636865636b60b01b815250611cec565b610f383385600001548484611dc3565b60408051428152602081018a9052908101829052606081018890529095507f493ae8affdadf8bca526bb93601a9be01655081df8a914b104edcfac7ca98f999060800160405180910390a1505050506105ce6001600b55565b6000610f9c60085490565b8210610fc55760405163295f44f760e21b8152600060048201526024810183905260440161081f565b60088281548110610fd857610fd8612e85565b90600052602060002001549050919050565b610ff56108946119ad565b6000600c604051633072329f60e01b8152737c5f656e829e71fd901df7a35d9e3f3e404f9cd191633072329f91611036919088908890600090600401612eb8565b602060405180830381865af4158015611053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110779190612eea565b6040516301386f6960e61b8152600481018290523360248201528315156044820152909150737c5f656e829e71fd901df7a35d9e3f3e404f9cd190634e1bda409060640160006040518083038186803b1580156110d357600080fd5b505af41580156110e7573d6000803e3d6000fd5b5050505050505050565b600c805460609182918190600d90829061110a90612e27565b80601f016020809104026020016040519081016040528092919081815260200182805461113690612e27565b80156111835780601f1061115857610100808354040283529160200191611183565b820191906000526020600020905b81548152906001019060200180831161116657829003601f168201915b5050505050915080805461119690612e27565b80601f01602080910402602001604051908101604052809291908181526020018280546111c290612e27565b801561120f5780601f106111e45761010080835404028352916020019161120f565b820191906000526020600020905b8154815290600101906020018083116111f257829003601f168201915b5050505050905092509250509091565b60006105ce82611bcf565b60006001600160a01b038216611256576040516322718ad960e21b81526000600482015260240161081f565b506001600160a01b031660009081526003602052604090205490565b61127d6108946119ad565b600a54604051632f92cd5d60e11b81523360048201526112af916001600160a01b031690635f259aba906024016108ed565b604051636e98b91960e11b8152600c60048201526001600160a01b0382166024820152737c5f656e829e71fd901df7a35d9e3f3e404f9cd19063dd31723290604401610ba0565b6113016108946119ad565b600a54604051632f92cd5d60e11b8152336004820152611333916001600160a01b031690635f259aba906024016108ed565b6000600c604051633072329f60e01b8152737c5f656e829e71fd901df7a35d9e3f3e404f9cd191633072329f91611374919089908990600090600401612eb8565b602060405180830381865af4158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190612eea565b60405163161dae3960e11b8152909150737c5f656e829e71fd901df7a35d9e3f3e404f9cd190632c3b5c72906113f390849087908790600401612feb565b602060405180830381865af4158015611410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114349190612eea565b505050505050565b611444611d0b565b611493336114518461121f565b6001600160a01b031614801561146c575033610c088361121f565b604051806040016040528060098152602001682737ba1037bbb732b960b91b815250611cec565b600061149e83611d35565b905060006114ab83611d35565b604080516080810182528254808252600184015460208084019190915260028501548385015260039094015460ff161515606083015285548351808501909452600f84526e0446966666572656e742067726f757608c1b94840194909452909350611517921490611cec565b806020015182600101600082825461152f9190612f3a565b9091555050604081015160028301805460009061154d908490612f3a565b9091555061155c905083611e73565b60008381526012602090815260408083208381556001810184905560028101939093556003909201805460ff19169055815142815290810186905280820185905290517f808b873c4e1cdd85049d06c8bad27597e051ee1dd16b1525143bb1d16b5d09919181900360600190a1505061069a6001600b55565b6060600180546105e390612e27565b606060008080600c600401858154811061160057611600612e85565b90600052602060002090600502019050806000018160010154826002015482805461162a90612e27565b80601f016020809104026020016040519081016040528092919081815260200182805461165690612e27565b80156116a35780601f10611678576101008083540402835291602001916116a3565b820191906000526020600020905b81548152906001019060200180831161168657829003601f168201915b50505050509250935093509350509193909250565b6000806000806116c785611d35565b60018101546002820154945092509050600c604051633832942760e11b8152600481019190915260248101829052737c5f656e829e71fd901df7a35d9e3f3e404f9cd190637065284e90604401602060405180830381865af4158015611731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117559190612eea565b9350509193909250565b61069a338383611eae565b611772611d0b565b6000600c604051632d89544960e21b8152737c5f656e829e71fd901df7a35d9e3f3e404f9cd19163b6255124916117b0919088908890600401613067565b602060405180830381865af41580156117cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f19190612eea565b90506118338160040160149054906101000a900460ff166040518060400160405280600d81526020016c139bdd08199a5b985b1a5e9959609a1b815250611cec565b6004810154611885906001600160a01b03163314801561185b57506001600160a01b03861615155b6040518060400160405280600c81526020016b43616e6e6f7420636c61696d60a01b815250611cec565b60006118948686856000611dc3565b9050828260010160008282546118aa9190612f3a565b90915550506040805142815260208101879052908101849052606081018290526001600160a01b038716907f0ac9ba66a083b4b4e9109497a82a9959d9e303ea45c1e472c4ca2f13dcaad3709060800160405180910390a2604051630bfa614360e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bfa614309061195890339060009060029087908a90600401612f4d565b600060405180830381600087803b15801561197257600080fd5b505af1158015611986573d6000803e3d6000fd5b5050505050506108836001600b55565b6119a18484846107f9565b61088384848484611f4d565b6000806119b960115490565b905080158015906119c957508042115b91505090565b6119da6108946119ad565b600a54604051632f92cd5d60e11b8152336004820152611a0c916001600160a01b031690635f259aba906024016108ed565b600c604051632a0870c960e11b8152737c5f656e829e71fd901df7a35d9e3f3e404f9cd191635410e19291610a0e9190879087908790600401613086565b606060405180606001604052806022815260200161326d60229139604051611a789190600d906020016130b3565b6040516020818303038152906040529050919050565b6000806000806000611a9f86611d35565b805460018201546002830154600390930154919990985091965060ff16945092505050565b611acf6108946119ad565b600a54604051632f92cd5d60e11b8152336004820152611b01916001600160a01b031690635f259aba906024016108ed565b600c604051639b7a8f6960e01b8152737c5f656e829e71fd901df7a35d9e3f3e404f9cd191639b7a8f6991611b3b91908590600401613167565b602060405180830381865af4158015611b58573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190612eea565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b0319821663780e9d6360e01b14806105ce57506105ce8261206f565b6000818152600260205260408120546001600160a01b0316806105ce57604051637e27328960e01b81526004810184905260240161081f565b610bee83838360016120bf565b600080611c238585856121c5565b90506001600160a01b038116611c8057611c7b84600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ca3565b846001600160a01b0316816001600160a01b031614611ca357611ca381856122be565b6001600160a01b038516611cbf57611cba8461234f565b611ce2565b846001600160a01b0316816001600160a01b031614611ce257611ce285856123fe565b90505b9392505050565b8082610bee5760405162461bcd60e51b815260040161081f91906127d3565b6002600b5403611d2e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600b55565b600081815260126020908152604091829020600381015483518085019094526009845268139bdd081d985b1a5960ba1b9284019290925291611d7a9160ff1690611cec565b919050565b601080546000919083908110611d9757611d97612e85565b90600052602060002090600502019050919050565b600e546001600160a01b0316610bee81848461244e565b6000611dfd6000841160405180604001604052806013815260200172125b9d985b1a5908195b9d1a5d1b195b595b9d606a1b815250611cec565b611e056124a0565b9050611e1185826124ba565b6040805160808101825294855260208086019485528582019384526001606087018181526000858152601290935292909120955186559351938501939093559051600284015590516003909201805460ff191692151592909217909155919050565b6000611e826000836000611c15565b90506001600160a01b03811661069a57604051637e27328960e01b81526004810183905260240161081f565b6001600160a01b038216611ee057604051630b61174360e31b81526001600160a01b038316600482015260240161081f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561088357604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611f8f9033908890879087906004016131d1565b6020604051808303816000875af1925050508015611fca575060408051601f3d908101601f19168201909252611fc791810190613204565b60015b612033573d808015611ff8576040519150601f19603f3d011682016040523d82523d6000602084013e611ffd565b606091505b50805160000361202b57604051633250574960e11b81526001600160a01b038516600482015260240161081f565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610bcc57604051633250574960e11b81526001600160a01b038516600482015260240161081f565b60006001600160e01b031982166380ac58cd60e01b14806120a057506001600160e01b03198216635b5e139f60e01b145b806105ce57506301ffc9a760e01b6001600160e01b03198316146105ce565b80806120d357506001600160a01b03821615155b156121955760006120e384611bcf565b90506001600160a01b0383161580159061210f5750826001600160a01b0316816001600160a01b031614155b801561212257506121208184611b7c565b155b1561214b5760405163a9fbf51f60e01b81526001600160a01b038416600482015260240161081f565b81156121935783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600260205260408120546001600160a01b03908116908316156121f2576121f281848661251f565b6001600160a01b038116156122305761220f6000856000806120bf565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b0385161561225f576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006122c98361122a565b60008381526007602052604090205490915080821461231c576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061236190600190612f9f565b6000838152600960205260408120546008805493945090928490811061238957612389612e85565b9060005260206000200154905080600883815481106123aa576123aa612e85565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806123e2576123e2613221565b6001900381819060005260206000200160009055905550505050565b6000600161240b8461122a565b6124159190612f9f565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610bee908490612583565b60138054600091826124b183613237565b91905055905090565b6001600160a01b0382166124e457604051633250574960e11b81526000600482015260240161081f565b60006124f283836000611c15565b90506001600160a01b03811615610bee576040516339e3563760e11b81526000600482015260240161081f565b61252a8383836125e6565b610bee576001600160a01b03831661255857604051637e27328960e01b81526004810182905260240161081f565b60405163177e802f60e01b81526001600160a01b03831660048201526024810182905260440161081f565b60006125986001600160a01b03841683612649565b905080516000141580156125bd5750808060200190518101906125bb9190612e9b565b155b15610bee57604051635274afe760e01b81526001600160a01b038416600482015260240161081f565b60006001600160a01b03831615801590611ce25750826001600160a01b0316846001600160a01b0316148061262057506126208484611b7c565b80611ce25750506000908152600460205260409020546001600160a01b03908116911614919050565b6060611ce58383600084600080856001600160a01b0316848660405161266f9190613250565b60006040518083038185875af1925050503d80600081146126ac576040519150601f19603f3d011682016040523d82523d6000602084013e6126b1565b606091505b50915091506126c18683836126cb565b9695505050505050565b6060826126e0576126db82612727565b611ce5565b81511580156126f757506001600160a01b0384163b155b1561272057604051639996b31560e01b81526001600160a01b038516600482015260240161081f565b5080611ce5565b8051156127375780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160e01b031981168114610db257600080fd5b60006020828403121561277857600080fd5b8135611ce581612750565b60005b8381101561279e578181015183820152602001612786565b50506000910152565b600081518084526127bf816020860160208601612783565b601f01601f19169290920160200192915050565b602081526000611ce560208301846127a7565b6000602082840312156127f857600080fd5b5035919050565b80356001600160a01b0381168114611d7a57600080fd5b6000806040838503121561282957600080fd5b612832836127ff565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6003811061286657612866612840565b9052565b602080825282518282018190526000919060409081850190868401855b828110156128c857815161289c858251612856565b808701518588015285810151868601526060908101519085015260809093019290850190600101612887565b5091979650505050505050565b6000806000606084860312156128ea57600080fd5b6128f3846127ff565b9250612901602085016127ff565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561295057612950612911565b604052919050565b600067ffffffffffffffff83111561297257612972612911565b612985601f8401601f1916602001612927565b905082815283838301111561299957600080fd5b828260208301376000602084830101529392505050565b600082601f8301126129c157600080fd5b611ce583833560208501612958565b600080604083850312156129e357600080fd5b82359150602083013567ffffffffffffffff811115612a0157600080fd5b612a0d858286016129b0565b9150509250929050565b6020810160058310612a2b57612a2b612840565b91905290565b60008060408385031215612a4457600080fd5b50508035926020909101359150565b8015158114610db257600080fd5b600080600060608486031215612a7657600080fd5b83359250602084013567ffffffffffffffff811115612a9457600080fd5b612aa0868287016129b0565b9250506040840135612ab181612a53565b809150509250925092565b604081526000612acf60408301856127a7565b8281036020840152612ae181856127a7565b95945050505050565b600060208284031215612afc57600080fd5b611ce5826127ff565b60008060008060608587031215612b1b57600080fd5b84359350602085013567ffffffffffffffff80821115612b3a57600080fd5b612b46888389016129b0565b94506040870135915080821115612b5c57600080fd5b818701915087601f830112612b7057600080fd5b813581811115612b7f57600080fd5b8860208260071b8501011115612b9457600080fd5b95989497505060200194505050565b606081526000612bb660608301866127a7565b60208301949094525060400152919050565b60008060408385031215612bdb57600080fd5b612be4836127ff565b91506020830135612bf481612a53565b809150509250929050565b60008060008060808587031215612c1557600080fd5b612c1e856127ff565b935060208501359250604085013567ffffffffffffffff811115612c4157600080fd5b612c4d878288016129b0565b949793965093946060013593505050565b60008060008060808587031215612c7457600080fd5b612c7d856127ff565b9350612c8b602086016127ff565b925060408501359150606085013567ffffffffffffffff811115612cae57600080fd5b8501601f81018713612cbf57600080fd5b612cce87823560208401612958565b91505092959194509250565b600080600060608486031215612cef57600080fd5b612cf8846127ff565b925060208401359150604084013567ffffffffffffffff811115612d1b57600080fd5b612d27868287016129b0565b9150509250925092565b60006020808385031215612d4457600080fd5b823567ffffffffffffffff80821115612d5c57600080fd5b818501915085601f830112612d7057600080fd5b813581811115612d8257612d82612911565b8060051b612d91858201612927565b9182528381018501918581019089841115612dab57600080fd5b86860192505b83831015612de757823585811115612dc95760008081fd5b612dd78b89838a01016129b0565b8352509186019190860190612db1565b9998505050505050505050565b60008060408385031215612e0757600080fd5b612e10836127ff565b9150612e1e602084016127ff565b90509250929050565b600181811c90821680612e3b57607f821691505b602082108103612e5b57634e487b7160e01b600052602260045260246000fd5b50919050565b60008060408385031215612e7457600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ead57600080fd5b8151611ce581612a53565b848152836020820152608060408201526000612ed760808301856127a7565b9050821515606083015295945050505050565b600060208284031215612efc57600080fd5b5051919050565b600060208284031215612f1557600080fd5b815160058110611ce557600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156105ce576105ce612f24565b6001600160a01b038616815260a0810160098610612f6d57612f6d612840565b856020830152600c8510612f8357612f83612840565b8460408301528360608301528260808301529695505050505050565b818103818111156105ce576105ce612f24565b80820281158282048414176105ce576105ce612f24565b600082612fe657634e487b7160e01b600052601260045260246000fd5b500490565b83815260406020808301829052828201849052600091906060908185018785805b8981101561305757823560038110613022578283fd5b61302c8582612856565b508285013584860152868301358785015285830135868501526080938401939092019160010161300c565b50919a9950505050505050505050565b838152826020820152606060408201526000612ae160608301846127a7565b84815260018060a01b03841660208201528260408201526080606082015260006126c160808301846127a7565b6000835160206130c68285838901612783565b845491840191600090600181811c90808316806130e457607f831692505b858310810361310157634e487b7160e01b85526022600452602485fd5b808015613115576001811461312a57613157565b60ff1985168852831515840288019550613157565b60008b81526020902060005b8581101561314f5781548a820152908401908801613136565b505083880195505b50939a9950505050505050505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b828110156131c357605f198887030184526131b18683516127a7565b95509284019290840190600101613195565b509398975050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126c1908301846127a7565b60006020828403121561321657600080fd5b8151611ce581612750565b634e487b7160e01b600052603160045260246000fd5b60006001820161324957613249612f24565b5060010190565b60008251613262818460208701612783565b919091019291505056fe68747470733a2f2f73757065726c61756e636865722e696f2f6d657461646174612fa2646970667358221220a2e7696369c20c3e4d60bc0e8e5b4ebd27a0a0eead29ae5a674b487c34f927d564736f6c63430008150033000000000000000000000000f19423e3dd28a8493647c15bd68a6cd628b2973f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000074665623233233400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d466562323323342d436572747300000000000000000000000000000000000000