[ { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "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": "uint256", "name": "currentGame", "type": "uint256" } ], "name": "GameEnded", "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": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "string", "name": "encryptedScore", "type": "string" }, { "indexed": false, "internalType": "string", "name": "hashScore", "type": "string" } ], "name": "ScoreAdded", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "userAddress", "type": "address" } ], "name": "newUser", "type": "event" }, { "inputs": [], "name": "activeTokenCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "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": [], "name": "clearScores", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentGame", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "forwarder", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getScore", "outputs": [ { "internalType": "string", "name": "encryptedScore", "type": "string" }, { "internalType": "string", "name": "hashScore", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" } ], "name": "isAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "safeMint", "outputs": [], "stateMutability": "nonpayable", "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": "newForwarder", "type": "address" } ], "name": "setForwarder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "encryptedScore", "type": "string" }, { "internalType": "string", "name": "hashScore", "type": "string" } ], "name": "setUserScore", "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": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561000f575f80fd5b5060405161333b38038061333b8339818101604052810190610031919061026d565b806040518060400160405280600681526020017f576f72646c6500000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5752444c00000000000000000000000000000000000000000000000000000000815250815f90816100ac91906104d2565b5080600190816100bc91906104d2565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361012f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161012691906105b0565b60405180910390fd5b61013e8161014c60201b60201c565b505f600b81905550506105c9565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61023c82610213565b9050919050565b61024c81610232565b8114610256575f80fd5b50565b5f8151905061026781610243565b92915050565b5f602082840312156102825761028161020f565b5b5f61028f84828501610259565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061031357607f821691505b602082108103610326576103256102cf565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261034d565b610392868361034d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6103d66103d16103cc846103aa565b6103b3565b6103aa565b9050919050565b5f819050919050565b6103ef836103bc565b6104036103fb826103dd565b848454610359565b825550505050565b5f90565b61041761040b565b6104228184846103e6565b505050565b5b818110156104455761043a5f8261040f565b600181019050610428565b5050565b601f82111561048a5761045b8161032c565b6104648461033e565b81016020851015610473578190505b61048761047f8561033e565b830182610427565b50505b505050565b5f82821c905092915050565b5f6104aa5f198460080261048f565b1980831691505092915050565b5f6104c2838361049b565b9150826002028217905092915050565b6104db82610298565b67ffffffffffffffff8111156104f4576104f36102a2565b5b6104fe82546102fc565b610509828285610449565b5f60209050601f83116001811461053a575f8415610528578287015190505b61053285826104b7565b865550610599565b601f1984166105488661032c565b5f5b8281101561056f5784890151825560018201915060208501945060208101905061054a565b8683101561058c5784890151610588601f89168261049b565b8355505b6001600288020188555050505b505050505050565b6105aa81610232565b82525050565b5f6020820190506105c35f8301846105a1565b92915050565b612d65806105d65f395ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c8063715018a6116100dc578063b88d4fde11610095578063c87b56dd1161006f578063c87b56dd14610420578063e985e9c514610450578063f2fde38b14610480578063f645d4f91461049c57610171565b8063b88d4fde146103b8578063b9998a24146103d4578063babcc539146103f057610171565b8063715018a61461032e5780638b68e038146103385780638b7d9cad146103565780638da5cb5b1461036057806395d89b411461037e578063a22cb4651461039c57610171565b806340d097c31161012e57806340d097c31461025c57806342842e0e146102785780635ea160e71461029457806360b663bb146102b05780636352211e146102ce57806370a08231146102fe57610171565b806301ffc9a71461017557806306fdde03146101a5578063081812fc146101c3578063095ea7b3146101f35780630e1af57b1461020f57806323b872dd14610240575b5f80fd5b61018f600480360381019061018a919061209d565b6104ba565b60405161019c91906120e2565b60405180910390f35b6101ad61059b565b6040516101ba919061216b565b60405180910390f35b6101dd60048036038101906101d891906121be565b61062a565b6040516101ea9190612228565b60405180910390f35b61020d6004803603810190610208919061226b565b610645565b005b610229600480360381019061022491906121be565b61065b565b6040516102379291906122a9565b60405180910390f35b61025a600480360381019061025591906122de565b610825565b005b6102766004803603810190610271919061232e565b610924565b005b610292600480360381019061028d91906122de565b6109d9565b005b6102ae60048036038101906102a99190612485565b6109f8565b005b6102b8610b0c565b6040516102c5919061251c565b60405180910390f35b6102e860048036038101906102e391906121be565b610b12565b6040516102f59190612228565b60405180910390f35b6103186004803603810190610313919061232e565b610b23565b604051610325919061251c565b60405180910390f35b610336610bd9565b005b610340610bec565b60405161034d919061251c565b60405180910390f35b61035e610bf2565b005b610368610d7f565b6040516103759190612228565b60405180910390f35b610386610da7565b604051610393919061216b565b60405180910390f35b6103b660048036038101906103b1919061255f565b610e37565b005b6103d260048036038101906103cd919061263b565b610e4d565b005b6103ee60048036038101906103e9919061232e565b610e72565b005b61040a6004803603810190610405919061232e565b610ebd565b60405161041791906120e2565b60405180910390f35b61043a600480360381019061043591906121be565b610fb8565b604051610447919061216b565b60405180910390f35b61046a600480360381019061046591906126bb565b61101e565b60405161047791906120e2565b60405180910390f35b61049a6004803603810190610495919061232e565b6110ac565b005b6104a4611130565b6040516104b19190612228565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610594575061059382611155565b5b9050919050565b60605f80546105a990612726565b80601f01602080910402602001604051908101604052809291908181526020018280546105d590612726565b80156106205780601f106105f757610100808354040283529160200191610620565b820191905f5260205f20905b81548152906001019060200180831161060357829003601f168201915b5050505050905090565b5f610634826111be565b5061063e82611244565b9050919050565b610657828261065261127d565b611284565b5050565b6060805f73ffffffffffffffffffffffffffffffffffffffff1661067e84611296565b73ffffffffffffffffffffffffffffffffffffffff16036106d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cb906127a0565b60405180910390fd5b5f60085f8581526020019081526020015f206040518060400160405290815f8201805461070090612726565b80601f016020809104026020016040519081016040528092919081815260200182805461072c90612726565b80156107775780601f1061074e57610100808354040283529160200191610777565b820191905f5260205f20905b81548152906001019060200180831161075a57829003601f168201915b5050505050815260200160018201805461079090612726565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc90612726565b80156108075780601f106107de57610100808354040283529160200191610807565b820191905f5260205f20905b8154815290600101906020018083116107ea57829003601f168201915b5050505050815250509050805f015181602001519250925050915091565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610895575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161088c9190612228565b60405180910390fd5b5f6108a883836108a361127d565b6112cf565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461091e578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610915939291906127be565b60405180910390fd5b50505050565b61092c6114da565b5f60075f81548092919061093f90612820565b91905055905061094f8282611561565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff16817fac6f3b3478499a86fb027b918c393ac90993bb6b0e228789805ca8ea34e0cae260405160405180910390a35050565b6109f383838360405180602001604052805f815250610e4d565b505050565b610a006114da565b5f73ffffffffffffffffffffffffffffffffffffffff16610a2084611296565b73ffffffffffffffffffffffffffffffffffffffff1603610a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d906127a0565b60405180910390fd5b5f60085f8581526020019081526020015f205f018054610a9590612726565b905003610b075760405180604001604052808381526020018281525060085f8581526020019081526020015f205f820151815f019081610ad59190612a04565b506020820151816001019081610aeb9190612a04565b50905050600a5f815480929190610b0190612820565b91905055505b505050565b600b5481565b5f610b1c826111be565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b94575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610b8b9190612228565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610be16114da565b610bea5f61157e565b565b600a5481565b610bfa610d7f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c7f5750600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590612b1d565b60405180910390fd5b5f5b600754811015610d2f575f60085f8381526020019081526020015f205f018054610ce990612726565b905014610d225760085f8281526020019081526020015f205f8082015f610d109190611fdf565b600182015f610d1f9190611fdf565b50505b8080600101915050610cc0565b505f600a81905550600b547fce24807f7e4b60b4e641462f13029fa5e5f79075bbc3f8e5cd43ecd19661d76060405160405180910390a2600b5f815480929190610d7890612820565b9190505550565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610db690612726565b80601f0160208091040260200160405190810160405280929190818152602001828054610de290612726565b8015610e2d5780601f10610e0457610100808354040283529160200191610e2d565b820191905f5260205f20905b815481529060010190602001808311610e1057829003601f168201915b5050505050905090565b610e49610e4261127d565b8383611641565b5050565b610e58848484610825565b610e6c610e6361127d565b858585856117aa565b50505050565b610e7a6114da565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610ec6610d7f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f015760019050610fb3565b5f610f0b83610b23565b11610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290612b85565b60405180910390fd5b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60085f8381526020019081526020015f205f018054610fab90612726565b905014159150505b919050565b6060610fc3826111be565b505f610fcd611956565b90505f815111610feb5760405180602001604052805f815250611016565b80610ff58461196c565b604051602001611006929190612bdd565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6110b46114da565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611124575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161111b9190612228565b60405180910390fd5b61112d8161157e565b50565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f806111c983611296565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361123b57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611232919061251c565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6112918383836001611a36565b505050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f806112da84611296565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461131b5761131a818486611bf5565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146113a65761135a5f855f80611a36565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461142557600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6114e261127d565b73ffffffffffffffffffffffffffffffffffffffff16611500610d7f565b73ffffffffffffffffffffffffffffffffffffffff161461155f5761152361127d565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115569190612228565b60405180910390fd5b565b61157a828260405180602001604052805f815250611cb8565b5050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b157816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016116a89190612228565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161179d91906120e2565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b111561194f578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b81526004016118089493929190612c52565b6020604051808303815f875af192505050801561184357506040513d601f19601f820116820180604052508101906118409190612cb0565b60015b6118c4573d805f8114611871576040519150601f19603f3d011682016040523d82523d5f602084013e611876565b606091505b505f8151036118bc57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118b39190612228565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461194d57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119449190612228565b60405180910390fd5b505b5050505050565b606060405180602001604052805f815250905090565b60605f600161197a84611cdb565b0190505f8167ffffffffffffffff81111561199857611997612361565b5b6040519080825280601f01601f1916602001820160405280156119ca5781602001600182028036833780820191505090505b5090505f82602001820190505b600115611a2b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611a2057611a1f612cdb565b5b0494505f85036119d7575b819350505050919050565b8080611a6e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611ba0575f611a7d846111be565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ae757508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611afa5750611af8818461101e565b155b15611b3c57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611b339190612228565b60405180910390fd5b8115611b9e57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611c00838383611e2c565b611cb3575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c7457806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611c6b919061251c565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611caa929190612d08565b60405180910390fd5b505050565b611cc28383611eec565b611cd6611ccd61127d565b5f8585856117aa565b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611d37577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611d2d57611d2c612cdb565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611d74576d04ee2d6d415b85acef81000000008381611d6a57611d69612cdb565b5b0492506020810190505b662386f26fc100008310611da357662386f26fc100008381611d9957611d98612cdb565b5b0492506010810190505b6305f5e1008310611dcc576305f5e1008381611dc257611dc1612cdb565b5b0492506008810190505b6127108310611df1576127108381611de757611de6612cdb565b5b0492506004810190505b60648310611e145760648381611e0a57611e09612cdb565b5b0492506002810190505b600a8310611e23576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ee357508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ea45750611ea3848461101e565b5b80611ee257508273ffffffffffffffffffffffffffffffffffffffff16611eca83611244565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f5c575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611f539190612228565b60405180910390fd5b5f611f6883835f6112cf565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fda575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611fd19190612228565b60405180910390fd5b505050565b508054611feb90612726565b5f825580601f10611ffc5750612019565b601f0160209004905f5260205f2090810190612018919061201c565b5b50565b5b80821115612033575f815f90555060010161201d565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61207c81612048565b8114612086575f80fd5b50565b5f8135905061209781612073565b92915050565b5f602082840312156120b2576120b1612040565b5b5f6120bf84828501612089565b91505092915050565b5f8115159050919050565b6120dc816120c8565b82525050565b5f6020820190506120f55f8301846120d3565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61213d826120fb565b6121478185612105565b9350612157818560208601612115565b61216081612123565b840191505092915050565b5f6020820190508181035f8301526121838184612133565b905092915050565b5f819050919050565b61219d8161218b565b81146121a7575f80fd5b50565b5f813590506121b881612194565b92915050565b5f602082840312156121d3576121d2612040565b5b5f6121e0848285016121aa565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612212826121e9565b9050919050565b61222281612208565b82525050565b5f60208201905061223b5f830184612219565b92915050565b61224a81612208565b8114612254575f80fd5b50565b5f8135905061226581612241565b92915050565b5f806040838503121561228157612280612040565b5b5f61228e85828601612257565b925050602061229f858286016121aa565b9150509250929050565b5f6040820190508181035f8301526122c18185612133565b905081810360208301526122d58184612133565b90509392505050565b5f805f606084860312156122f5576122f4612040565b5b5f61230286828701612257565b935050602061231386828701612257565b9250506040612324868287016121aa565b9150509250925092565b5f6020828403121561234357612342612040565b5b5f61235084828501612257565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61239782612123565b810181811067ffffffffffffffff821117156123b6576123b5612361565b5b80604052505050565b5f6123c8612037565b90506123d4828261238e565b919050565b5f67ffffffffffffffff8211156123f3576123f2612361565b5b6123fc82612123565b9050602081019050919050565b828183375f83830152505050565b5f612429612424846123d9565b6123bf565b9050828152602081018484840111156124455761244461235d565b5b612450848285612409565b509392505050565b5f82601f83011261246c5761246b612359565b5b813561247c848260208601612417565b91505092915050565b5f805f6060848603121561249c5761249b612040565b5b5f6124a9868287016121aa565b935050602084013567ffffffffffffffff8111156124ca576124c9612044565b5b6124d686828701612458565b925050604084013567ffffffffffffffff8111156124f7576124f6612044565b5b61250386828701612458565b9150509250925092565b6125168161218b565b82525050565b5f60208201905061252f5f83018461250d565b92915050565b61253e816120c8565b8114612548575f80fd5b50565b5f8135905061255981612535565b92915050565b5f806040838503121561257557612574612040565b5b5f61258285828601612257565b92505060206125938582860161254b565b9150509250929050565b5f67ffffffffffffffff8211156125b7576125b6612361565b5b6125c082612123565b9050602081019050919050565b5f6125df6125da8461259d565b6123bf565b9050828152602081018484840111156125fb576125fa61235d565b5b612606848285612409565b509392505050565b5f82601f83011261262257612621612359565b5b81356126328482602086016125cd565b91505092915050565b5f805f806080858703121561265357612652612040565b5b5f61266087828801612257565b945050602061267187828801612257565b9350506040612682878288016121aa565b925050606085013567ffffffffffffffff8111156126a3576126a2612044565b5b6126af8782880161260e565b91505092959194509250565b5f80604083850312156126d1576126d0612040565b5b5f6126de85828601612257565b92505060206126ef85828601612257565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061273d57607f821691505b6020821081036127505761274f6126f9565b5b50919050565b7f546f6b656e20646f6573206e6f742065786973740000000000000000000000005f82015250565b5f61278a601483612105565b915061279582612756565b602082019050919050565b5f6020820190508181035f8301526127b78161277e565b9050919050565b5f6060820190506127d15f830186612219565b6127de602083018561250d565b6127eb6040830184612219565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61282a8261218b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361285c5761285b6127f3565b5b600182019050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026128c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612888565b6128cd8683612888565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6129086129036128fe8461218b565b6128e5565b61218b565b9050919050565b5f819050919050565b612921836128ee565b61293561292d8261290f565b848454612894565b825550505050565b5f90565b61294961293d565b612954818484612918565b505050565b5b818110156129775761296c5f82612941565b60018101905061295a565b5050565b601f8211156129bc5761298d81612867565b61299684612879565b810160208510156129a5578190505b6129b96129b185612879565b830182612959565b50505b505050565b5f82821c905092915050565b5f6129dc5f19846008026129c1565b1980831691505092915050565b5f6129f483836129cd565b9150826002028217905092915050565b612a0d826120fb565b67ffffffffffffffff811115612a2657612a25612361565b5b612a308254612726565b612a3b82828561297b565b5f60209050601f831160018114612a6c575f8415612a5a578287015190505b612a6485826129e9565b865550612acb565b601f198416612a7a86612867565b5f5b82811015612aa157848901518255600182019150602085019450602081019050612a7c565b86831015612abe5784890151612aba601f8916826129cd565b8355505b6001600288020188555050505b505050505050565b7f43616c6c6572206973206e6f74206f776e6572206f7220666f727761726465725f82015250565b5f612b07602083612105565b9150612b1282612ad3565b602082019050919050565b5f6020820190508181035f830152612b3481612afb565b9050919050565b7f4164647265737320646f6573206e6f74206f776e20616e7920746f6b656e73005f82015250565b5f612b6f601f83612105565b9150612b7a82612b3b565b602082019050919050565b5f6020820190508181035f830152612b9c81612b63565b9050919050565b5f81905092915050565b5f612bb7826120fb565b612bc18185612ba3565b9350612bd1818560208601612115565b80840191505092915050565b5f612be88285612bad565b9150612bf48284612bad565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f612c2482612c00565b612c2e8185612c0a565b9350612c3e818560208601612115565b612c4781612123565b840191505092915050565b5f608082019050612c655f830187612219565b612c726020830186612219565b612c7f604083018561250d565b8181036060830152612c918184612c1a565b905095945050505050565b5f81519050612caa81612073565b92915050565b5f60208284031215612cc557612cc4612040565b5b5f612cd284828501612c9c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050612d1b5f830185612219565b612d28602083018461250d565b939250505056fea2646970667358221220106f4c171a3fbe29369669a47fd932e068c334936c62677aade7b8d4d2c05a7a64736f6c634300081a0033000000000000000000000000ac5290dcd0d958fdd25cff52f81ff350cae77603