[ { "inputs": [], "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": [], "name": "HaikuNotUnique", "type": "error" }, { "inputs": [], "name": "NoHaikusShared", "type": "error" }, { "inputs": [], "name": "NotYourHaiku", "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": "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": "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": "counter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMySharedHaikus", "outputs": [ { "components": [ { "internalType": "address", "name": "author", "type": "address" }, { "internalType": "string", "name": "line1", "type": "string" }, { "internalType": "string", "name": "line2", "type": "string" }, { "internalType": "string", "name": "line3", "type": "string" } ], "internalType": "struct ISubmission.Haiku[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "haikuCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "haikus", "outputs": [ { "internalType": "address", "name": "author", "type": "address" }, { "internalType": "string", "name": "line1", "type": "string" }, { "internalType": "string", "name": "line2", "type": "string" }, { "internalType": "string", "name": "line3", "type": "string" } ], "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": "string", "name": "_line1", "type": "string" }, { "internalType": "string", "name": "_line2", "type": "string" }, { "internalType": "string", "name": "_line3", "type": "string" } ], "name": "mintHaiku", "outputs": [], "stateMutability": "nonpayable", "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": "uint256", "name": "_id", "type": "uint256" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "shareHaiku", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "sharedHaikus", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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" } ]
60806040526040518060400160405280600581526020017f76616c7565000000000000000000000000000000000000000000000000000000815250600990816100489190610329565b50348015610054575f80fd5b506040518060400160405280600881526020017f4861696b754e46540000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4841494b55000000000000000000000000000000000000000000000000000000815250815f90816100cf9190610329565b5080600190816100df9190610329565b50505060016008819055506103f8565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061016a57607f821691505b60208210810361017d5761017c610126565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101df7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101a4565b6101e986836101a4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61022d61022861022384610201565b61020a565b610201565b9050919050565b5f819050919050565b61024683610213565b61025a61025282610234565b8484546101b0565b825550505050565b5f90565b61026e610262565b61027981848461023d565b505050565b5b8181101561029c576102915f82610266565b60018101905061027f565b5050565b601f8211156102e1576102b281610183565b6102bb84610195565b810160208510156102ca578190505b6102de6102d685610195565b83018261027e565b50505b505050565b5f82821c905092915050565b5f6103015f19846008026102e6565b1980831691505092915050565b5f61031983836102f2565b9150826002028217905092915050565b610332826100ef565b67ffffffffffffffff81111561034b5761034a6100f9565b5b6103558254610153565b6103608282856102a0565b5f60209050601f831160018114610391575f841561037f578287015190505b610389858261030e565b8655506103f0565b601f19841661039f86610183565b5f5b828110156103c6578489015182556001820191506020850194506020810190506103a1565b868310156103e357848901516103df601f8916826102f2565b8355505b6001600288020188555050505b505050505050565b61349a806104055f395ff3fe608060405234801561000f575f80fd5b506004361061012a575f3560e01c806361bc221a116100ab57806397afe82d1161006f57806397afe82d14610343578063a22cb46514610373578063b88d4fde1461038f578063c87b56dd146103ab578063e985e9c5146103db5761012a565b806361bc221a146102745780636352211e1461029257806370a08231146102c25780637cb82b2a146102f257806395d89b41146103255761012a565b80632c83ea56116100f25780632c83ea56146101e457806331d81cbb14610200578063350fe1651461021e57806342842e0e1461023a57806349af5bfe146102565761012a565b806301ffc9a71461012e57806306fdde031461015e578063081812fc1461017c578063095ea7b3146101ac57806323b872dd146101c8575b5f80fd5b61014860048036038101906101439190612574565b61040b565b60405161015591906125b9565b60405180910390f35b6101666104ec565b6040516101739190612642565b60405180910390f35b61019660048036038101906101919190612695565b61057b565b6040516101a391906126ff565b60405180910390f35b6101c660048036038101906101c19190612742565b610596565b005b6101e260048036038101906101dd9190612780565b6105ac565b005b6101fe60048036038101906101f991906127d0565b6106ab565b005b610208610a13565b604051610215919061281d565b60405180910390f35b61023860048036038101906102339190612962565b610a19565b005b610254600480360381019061024f9190612780565b610eb1565b005b61025e610ed0565b60405161026b9190612b86565b60405180910390f35b61027c6112ec565b604051610289919061281d565b60405180910390f35b6102ac60048036038101906102a79190612695565b6112f5565b6040516102b991906126ff565b60405180910390f35b6102dc60048036038101906102d79190612ba6565b611306565b6040516102e9919061281d565b60405180910390f35b61030c60048036038101906103079190612695565b6113bc565b60405161031c9493929190612bd1565b60405180910390f35b61032d6115a8565b60405161033a9190612642565b60405180910390f35b61035d60048036038101906103589190612742565b611638565b60405161036a91906125b9565b60405180910390f35b61038d60048036038101906103889190612c53565b611662565b005b6103a960048036038101906103a49190612d2f565b611678565b005b6103c560048036038101906103c09190612695565b61169d565b6040516103d29190612642565b60405180910390f35b6103f560048036038101906103f09190612daf565b611703565b60405161040291906125b9565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e557506104e482611791565b5b9050919050565b60605f80546104fa90612e1a565b80601f016020809104026020016040519081016040528092919081815260200182805461052690612e1a565b80156105715780601f1061054857610100808354040283529160200191610571565b820191905f5260205f20905b81548152906001019060200180831161055457829003601f168201915b5050505050905090565b5f610585826117fa565b5061058f82611880565b9050919050565b6105a882826105a36118b9565b6118c0565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361061c575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161061391906126ff565b60405180910390fd5b5f61062f838361062a6118b9565b6118d2565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a5578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161069c93929190612e4a565b60405180910390fd5b50505050565b5f821180156106bc57506008548211155b6106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f290612ec9565b60405180910390fd5b5f600660018461070b9190612f14565b8154811061071c5761071b612f47565b5b905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461079790612e1a565b80601f01602080910402602001604051908101604052809291908181526020018280546107c390612e1a565b801561080e5780601f106107e55761010080835404028352916020019161080e565b820191905f5260205f20905b8154815290600101906020018083116107f157829003601f168201915b5050505050815260200160028201805461082790612e1a565b80601f016020809104026020016040519081016040528092919081815260200182805461085390612e1a565b801561089e5780601f106108755761010080835404028352916020019161089e565b820191905f5260205f20905b81548152906001019060200180831161088157829003601f168201915b505050505081526020016003820180546108b790612e1a565b80601f01602080910402602001604051908101604052809291908181526020018280546108e390612e1a565b801561092e5780601f106109055761010080835404028352916020019161092e565b820191905f5260205f20905b81548152906001019060200180831161091157829003601f168201915b50505050508152505090503373ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff16146109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190612fbe565b60405180910390fd5b600160075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b60085481565b5f60405180606001604052808581526020018481526020018381525090505f5b6003811015610da0575f828260038110610a5657610a55612f47565b5b602002015190505f5b600680549050811015610d91575f60068281548110610a8157610a80612f47565b5b905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610afc90612e1a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2890612e1a565b8015610b735780601f10610b4a57610100808354040283529160200191610b73565b820191905f5260205f20905b815481529060010190602001808311610b5657829003601f168201915b50505050508152602001600282018054610b8c90612e1a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb890612e1a565b8015610c035780601f10610bda57610100808354040283529160200191610c03565b820191905f5260205f20905b815481529060010190602001808311610be657829003601f168201915b50505050508152602001600382018054610c1c90612e1a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4890612e1a565b8015610c935780601f10610c6a57610100808354040283529160200191610c93565b820191905f5260205f20905b815481529060010190602001808311610c7657829003601f168201915b50505050508152505090505f60405180606001604052808360200151815260200183604001518152602001836060015181525090505f5b6003811015610d81575f828260038110610ce757610ce6612f47565b5b6020020151905085604051602001610cff9190613016565b6040516020818303038152906040528051906020012081604051602001610d269190613016565b6040516020818303038152906040528051906020012003610d73576040517f693a889e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508080600101915050610cca565b5050508080600101915050610a5f565b50508080600101915050610a39565b50610dad33600854611add565b600660405180608001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081610e6591906131c9565b506040820151816002019081610e7b91906131c9565b506060820151816003019081610e9191906131c9565b50505060085f815480929190610ea690613298565b919050555050505050565b610ecb83838360405180602001604052805f815250611678565b505050565b60605f805f90505b600680549050811015610f6b5760075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600183610f3091906132df565b81526020019081526020015f205f9054906101000a900460ff1615610f5e578180610f5a90613298565b9250505b8080600101915050610ed8565b505f8167ffffffffffffffff811115610f8757610f8661283e565b5b604051908082528060200260200182016040528015610fc057816020015b610fad6124d1565b815260200190600190039081610fa55790505b5090505f805f90505b6006805490508110156112a95760075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60018361102191906132df565b81526020019081526020015f205f9054906101000a900460ff161561129c576006818154811061105457611053612f47565b5b905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180546110cf90612e1a565b80601f01602080910402602001604051908101604052809291908181526020018280546110fb90612e1a565b80156111465780601f1061111d57610100808354040283529160200191611146565b820191905f5260205f20905b81548152906001019060200180831161112957829003601f168201915b5050505050815260200160028201805461115f90612e1a565b80601f016020809104026020016040519081016040528092919081815260200182805461118b90612e1a565b80156111d65780601f106111ad576101008083540402835291602001916111d6565b820191905f5260205f20905b8154815290600101906020018083116111b957829003601f168201915b505050505081526020016003820180546111ef90612e1a565b80601f016020809104026020016040519081016040528092919081815260200182805461121b90612e1a565b80156112665780601f1061123d57610100808354040283529160200191611266565b820191905f5260205f20905b81548152906001019060200180831161124957829003601f168201915b50505050508152505083838151811061128257611281612f47565b5b6020026020010181905250818061129890613298565b9250505b8080600101915050610fc9565b505f83036112e3576040517ff8826a6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81935050505090565b5f600854905090565b5f6112ff826117fa565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611377575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161136e91906126ff565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600681815481106113cb575f80fd5b905f5260205f2090600402015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461140f90612e1a565b80601f016020809104026020016040519081016040528092919081815260200182805461143b90612e1a565b80156114865780601f1061145d57610100808354040283529160200191611486565b820191905f5260205f20905b81548152906001019060200180831161146957829003601f168201915b50505050509080600201805461149b90612e1a565b80601f01602080910402602001604051908101604052809291908181526020018280546114c790612e1a565b80156115125780601f106114e957610100808354040283529160200191611512565b820191905f5260205f20905b8154815290600101906020018083116114f557829003601f168201915b50505050509080600301805461152790612e1a565b80601f016020809104026020016040519081016040528092919081815260200182805461155390612e1a565b801561159e5780601f106115755761010080835404028352916020019161159e565b820191905f5260205f20905b81548152906001019060200180831161158157829003601f168201915b5050505050905084565b6060600180546115b790612e1a565b80601f01602080910402602001604051908101604052809291908181526020018280546115e390612e1a565b801561162e5780601f106116055761010080835404028352916020019161162e565b820191905f5260205f20905b81548152906001019060200180831161161157829003601f168201915b5050505050905090565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b61167461166d6118b9565b8383611afa565b5050565b6116838484846105ac565b61169761168e6118b9565b85858585611c63565b50505050565b60606116a8826117fa565b505f6116b2611e0f565b90505f8151116116d05760405180602001604052805f8152506116fb565b806116da84611e25565b6040516020016116eb929190613312565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8061180583611eef565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361187757826040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161186e919061281d565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6118cd8383836001611f28565b505050565b5f806118dd84611eef565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461191e5761191d8184866120e7565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146119a95761195d5f855f80611f28565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611a2857600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b611af6828260405180602001604052805f8152506121aa565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b6a57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611b6191906126ff565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c5691906125b9565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611e08578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401611cc19493929190613387565b6020604051808303815f875af1925050508015611cfc57506040513d601f19601f82011682018060405250810190611cf991906133e5565b60015b611d7d573d805f8114611d2a576040519150601f19603f3d011682016040523d82523d5f602084013e611d2f565b606091505b505f815103611d7557836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611d6c91906126ff565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e0657836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611dfd91906126ff565b60405180910390fd5b505b5050505050565b606060405180602001604052805f815250905090565b60605f6001611e33846121cd565b0190505f8167ffffffffffffffff811115611e5157611e5061283e565b5b6040519080825280601f01601f191660200182016040528015611e835781602001600182028036833780820191505090505b5090505f82602001820190505b600115611ee4578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611ed957611ed8613410565b5b0494505f8503611e90575b819350505050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611f6057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612092575f611f6f846117fa565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fd957508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611fec5750611fea8184611703565b155b1561202e57826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161202591906126ff565b60405180910390fd5b811561209057838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6120f283838361231e565b6121a5575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361216657806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161215d919061281d565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161219c92919061343d565b60405180910390fd5b505050565b6121b483836123de565b6121c86121bf6118b9565b5f858585611c63565b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612229577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161221f5761221e613410565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612266576d04ee2d6d415b85acef8100000000838161225c5761225b613410565b5b0492506020810190505b662386f26fc10000831061229557662386f26fc10000838161228b5761228a613410565b5b0492506010810190505b6305f5e10083106122be576305f5e10083816122b4576122b3613410565b5b0492506008810190505b61271083106122e35761271083816122d9576122d8613410565b5b0492506004810190505b6064831061230657606483816122fc576122fb613410565b5b0492506002810190505b600a8310612315576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123d557508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061239657506123958484611703565b5b806123d457508273ffffffffffffffffffffffffffffffffffffffff166123bc83611880565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244e575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161244591906126ff565b60405180910390fd5b5f61245a83835f6118d2565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146124cc575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016124c391906126ff565b60405180910390fd5b505050565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125538161251f565b811461255d575f80fd5b50565b5f8135905061256e8161254a565b92915050565b5f6020828403121561258957612588612517565b5b5f61259684828501612560565b91505092915050565b5f8115159050919050565b6125b38161259f565b82525050565b5f6020820190506125cc5f8301846125aa565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612614826125d2565b61261e81856125dc565b935061262e8185602086016125ec565b612637816125fa565b840191505092915050565b5f6020820190508181035f83015261265a818461260a565b905092915050565b5f819050919050565b61267481612662565b811461267e575f80fd5b50565b5f8135905061268f8161266b565b92915050565b5f602082840312156126aa576126a9612517565b5b5f6126b784828501612681565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6126e9826126c0565b9050919050565b6126f9816126df565b82525050565b5f6020820190506127125f8301846126f0565b92915050565b612721816126df565b811461272b575f80fd5b50565b5f8135905061273c81612718565b92915050565b5f806040838503121561275857612757612517565b5b5f6127658582860161272e565b925050602061277685828601612681565b9150509250929050565b5f805f6060848603121561279757612796612517565b5b5f6127a48682870161272e565b93505060206127b58682870161272e565b92505060406127c686828701612681565b9150509250925092565b5f80604083850312156127e6576127e5612517565b5b5f6127f385828601612681565b92505060206128048582860161272e565b9150509250929050565b61281781612662565b82525050565b5f6020820190506128305f83018461280e565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612874826125fa565b810181811067ffffffffffffffff821117156128935761289261283e565b5b80604052505050565b5f6128a561250e565b90506128b1828261286b565b919050565b5f67ffffffffffffffff8211156128d0576128cf61283e565b5b6128d9826125fa565b9050602081019050919050565b828183375f83830152505050565b5f612906612901846128b6565b61289c565b9050828152602081018484840111156129225761292161283a565b5b61292d8482856128e6565b509392505050565b5f82601f83011261294957612948612836565b5b81356129598482602086016128f4565b91505092915050565b5f805f6060848603121561297957612978612517565b5b5f84013567ffffffffffffffff8111156129965761299561251b565b5b6129a286828701612935565b935050602084013567ffffffffffffffff8111156129c3576129c261251b565b5b6129cf86828701612935565b925050604084013567ffffffffffffffff8111156129f0576129ef61251b565b5b6129fc86828701612935565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612a38816126df565b82525050565b5f82825260208201905092915050565b5f612a58826125d2565b612a628185612a3e565b9350612a728185602086016125ec565b612a7b816125fa565b840191505092915050565b5f608083015f830151612a9b5f860182612a2f565b5060208301518482036020860152612ab38282612a4e565b91505060408301518482036040860152612acd8282612a4e565b91505060608301518482036060860152612ae78282612a4e565b9150508091505092915050565b5f612aff8383612a86565b905092915050565b5f602082019050919050565b5f612b1d82612a06565b612b278185612a10565b935083602082028501612b3985612a20565b805f5b85811015612b745784840389528151612b558582612af4565b9450612b6083612b07565b925060208a01995050600181019050612b3c565b50829750879550505050505092915050565b5f6020820190508181035f830152612b9e8184612b13565b905092915050565b5f60208284031215612bbb57612bba612517565b5b5f612bc88482850161272e565b91505092915050565b5f608082019050612be45f8301876126f0565b8181036020830152612bf6818661260a565b90508181036040830152612c0a818561260a565b90508181036060830152612c1e818461260a565b905095945050505050565b612c328161259f565b8114612c3c575f80fd5b50565b5f81359050612c4d81612c29565b92915050565b5f8060408385031215612c6957612c68612517565b5b5f612c768582860161272e565b9250506020612c8785828601612c3f565b9150509250929050565b5f67ffffffffffffffff821115612cab57612caa61283e565b5b612cb4826125fa565b9050602081019050919050565b5f612cd3612cce84612c91565b61289c565b905082815260208101848484011115612cef57612cee61283a565b5b612cfa8482856128e6565b509392505050565b5f82601f830112612d1657612d15612836565b5b8135612d26848260208601612cc1565b91505092915050565b5f805f8060808587031215612d4757612d46612517565b5b5f612d548782880161272e565b9450506020612d658782880161272e565b9350506040612d7687828801612681565b925050606085013567ffffffffffffffff811115612d9757612d9661251b565b5b612da387828801612d02565b91505092959194509250565b5f8060408385031215612dc557612dc4612517565b5b5f612dd28582860161272e565b9250506020612de38582860161272e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e3157607f821691505b602082108103612e4457612e43612ded565b5b50919050565b5f606082019050612e5d5f8301866126f0565b612e6a602083018561280e565b612e7760408301846126f0565b949350505050565b7f496e76616c6964206861696b75204944000000000000000000000000000000005f82015250565b5f612eb36010836125dc565b9150612ebe82612e7f565b602082019050919050565b5f6020820190508181035f830152612ee081612ea7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f1e82612662565b9150612f2983612662565b9250828203905081811115612f4157612f40612ee7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f74596f75724861696b7500000000000000000000000000000000000000005f82015250565b5f612fa8600c836125dc565b9150612fb382612f74565b602082019050919050565b5f6020820190508181035f830152612fd581612f9c565b9050919050565b5f81905092915050565b5f612ff0826125d2565b612ffa8185612fdc565b935061300a8185602086016125ec565b80840191505092915050565b5f6130218284612fe6565b915081905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026130887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261304d565b613092868361304d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6130cd6130c86130c384612662565b6130aa565b612662565b9050919050565b5f819050919050565b6130e6836130b3565b6130fa6130f2826130d4565b848454613059565b825550505050565b5f90565b61310e613102565b6131198184846130dd565b505050565b5b8181101561313c576131315f82613106565b60018101905061311f565b5050565b601f821115613181576131528161302c565b61315b8461303e565b8101602085101561316a578190505b61317e6131768561303e565b83018261311e565b50505b505050565b5f82821c905092915050565b5f6131a15f1984600802613186565b1980831691505092915050565b5f6131b98383613192565b9150826002028217905092915050565b6131d2826125d2565b67ffffffffffffffff8111156131eb576131ea61283e565b5b6131f58254612e1a565b613200828285613140565b5f60209050601f831160018114613231575f841561321f578287015190505b61322985826131ae565b865550613290565b601f19841661323f8661302c565b5f5b8281101561326657848901518255600182019150602085019450602081019050613241565b86831015613283578489015161327f601f891682613192565b8355505b6001600288020188555050505b505050505050565b5f6132a282612662565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132d4576132d3612ee7565b5b600182019050919050565b5f6132e982612662565b91506132f483612662565b925082820190508082111561330c5761330b612ee7565b5b92915050565b5f61331d8285612fe6565b91506133298284612fe6565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f61335982613335565b613363818561333f565b93506133738185602086016125ec565b61337c816125fa565b840191505092915050565b5f60808201905061339a5f8301876126f0565b6133a760208301866126f0565b6133b4604083018561280e565b81810360608301526133c6818461334f565b905095945050505050565b5f815190506133df8161254a565b92915050565b5f602082840312156133fa576133f9612517565b5b5f613407848285016133d1565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6040820190506134505f8301856126f0565b61345d602083018461280e565b939250505056fea2646970667358221220e412d0b2d35d269de35768c3f7644889533fe1e9c19e5862e29a55409728b3ca64736f6c634300081a0033