[ { "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": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "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": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "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": "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": [], "name": "acceptOwnership", "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": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_allowedTransferTimeInSeconds", "type": "uint256" } ], "name": "approveTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "approvedTransfers", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "transferExpiryDate", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseUri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "batchMintInFibonacci", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "controlledTransfers", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "core", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "disableControlledTransfers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "enableControlledTransfers", "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": "initialMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialMintCalled", "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": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "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": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "previousFibonacci", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "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": "string", "name": "_uri", "type": "string" } ], "name": "setBaseUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_core", "type": "address" } ], "name": "setCoreContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_treasury", "type": "address" } ], "name": "setTreasury", "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": [], "name": "tokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalTokensBurnt", "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" }, { "inputs": [ { "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "transferNFTs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b503360405180604001604052806006815260200165141cde53919560d21b8152506040518060400160405280600381526020016250535960e81b81525081600090816200005f9190620001e4565b5060016200006e8282620001e4565b5050506001600160a01b038116620000a057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000ab81620000cf565b506001600855600d805460ff60a81b1916600160a81b1790556002600a55620002b0565b600780546001600160a01b0319169055620000ea81620000ed565b50565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200016a57607f821691505b6020821081036200018b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001df57600081815260208120601f850160051c81016020861015620001ba5750805b601f850160051c820191505b81811015620001db57828155600101620001c6565b5050505b505050565b81516001600160401b038111156200020057620002006200013f565b620002188162000211845462000155565b8462000191565b602080601f831160018114620002505760008415620002375750858301515b600019600386901b1c1916600185901b178555620001db565b600085815260208120601f198616915b82811015620002815788860151825594840194600190910190840162000260565b5085821015620002a05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612f1d80620002c06000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c806395d89b4111610160578063c6266693116100d8578063ef530a921161008c578063f2f4eb2611610071578063f2f4eb2614610648578063f2fde38b14610668578063fbf6b7801461067b57600080fd5b8063ef530a921461062d578063f0f442601461063557600080fd5b8063e30c3978116100bd578063e30c3978146105b3578063e75125a1146105d1578063e985e9c5146105e457600080fd5b8063c62666931461058d578063c87b56dd146105a057600080fd5b8063a22cb4651161012f578063b88d4fde11610114578063b88d4fde146104df578063bb3d33b7146104f2578063c44010b91461051757600080fd5b8063a22cb465146104c3578063a681c2e9146104d657600080fd5b806395d89b41146104985780639abc8320146104a05780639fc5ce2a146104a8578063a0bcfc7f146104b057600080fd5b8063455f6f311161020e578063739cd9ff116101c257806379ba5097116101a757806379ba50971461045f5780637b3aba2a146104675780638da5cb5b1461047a57600080fd5b8063739cd9ff1461043157806374594e7d1461043957600080fd5b80636352211e116101f35780636352211e1461040357806370a0823114610416578063715018a61461042957600080fd5b8063455f6f31146103da57806361d027b3146103e357600080fd5b8063150b7a021161026557806323b872dd1161024a57806323b872dd146103a157806342842e0e146103b457806342966c68146103c757600080fd5b8063150b7a021461032157806317d70f7c1461038a57600080fd5b806301ffc9a71461029757806306fdde03146102bf578063081812fc146102d4578063095ea7b31461030c575b600080fd5b6102aa6102a53660046126e1565b610683565b60405190151581526020015b60405180910390f35b6102c7610768565b6040516102b6919061276c565b6102e76102e236600461277f565b6107fa565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b6565b61031f61031a3660046127c1565b610830565b005b61035961032f3660046127eb565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016102b6565b61039360095481565b6040519081526020016102b6565b61031f6103af366004612886565b61083f565b61031f6103c2366004612886565b6109b0565b61031f6103d536600461277f565b6109cb565b610393600b5481565b600d546102e79073ffffffffffffffffffffffffffffffffffffffff1681565b6102e761041136600461277f565b610a6d565b6103936104243660046128c2565b610a78565b61031f610af3565b61031f610b07565b600d546102aa907501000000000000000000000000000000000000000000900460ff1681565b61031f610bfd565b61031f6104753660046128dd565b610c71565b60065473ffffffffffffffffffffffffffffffffffffffff166102e7565b6102c7610e8f565b6102c7610e9e565b61031f610f2c565b61031f6104be3660046129f6565b6110ae565b61031f6104d1366004612a3f565b6110c2565b610393600a5481565b61031f6104ed366004612a7b565b6110cd565b600d546102aa9074010000000000000000000000000000000000000000900460ff1681565b61055c61052536600461277f565b600f6020526000908152604090208054600182015460029092015490919073ffffffffffffffffffffffffffffffffffffffff1683565b60408051938452602084019290925273ffffffffffffffffffffffffffffffffffffffff16908201526060016102b6565b61031f61059b3660046128c2565b6110ea565b6102c76105ae36600461277f565b6111dc565b60075473ffffffffffffffffffffffffffffffffffffffff166102e7565b61031f6105df366004612af7565b611244565b6102aa6105f2366004612baf565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b61031f611415565b61031f6106433660046128c2565b611598565b600c546102e79073ffffffffffffffffffffffffffffffffffffffff1681565b61031f6106763660046128c2565b61168a565b61031f61173a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061071657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061076257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461077790612be2565b80601f01602080910402602001604051908101604052809291908181526020018280546107a390612be2565b80156107f05780601f106107c5576101008083540402835291602001916107f0565b820191906000526020600020905b8154815290600101906020018083116107d357829003601f168201915b5050505050905090565b600061080582611817565b5060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16610762565b61083b828233611876565b5050565b600d547501000000000000000000000000000000000000000000900460ff16801561088857503061086f82610a6d565b73ffffffffffffffffffffffffffffffffffffffff1614155b156109a0576000818152600f602052604090206002015473ffffffffffffffffffffffffffffffffffffffff838116911614610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5073794e46543a20496e636f727265637420526563656976657200000000000060448201526064015b60405180910390fd5b6000818152600f60205260409020600101544211156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f5073794e46543a20417070726f76616c20457870697265640000000000000000604482015260640161091c565b6109ab838383611883565b505050565b6109ab838383604051806020016040528060008152506110cd565b600d5473ffffffffffffffffffffffffffffffffffffffff163314610a4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5073794e46543a2043616c6c6572204973204e6f742054726561737572790000604482015260640161091c565b600b8054906000610a5c83612c64565b9190505550610a6a8161196e565b50565b600061076282611817565b600073ffffffffffffffffffffffffffffffffffffffff8216610aca576040517f89c62b640000000000000000000000000000000000000000000000000000000081526000600482015260240161091c565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b610afb6119cf565b610b056000611a22565b565b610b0f6119cf565b600d547501000000000000000000000000000000000000000000900460ff1615610bbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f5073794e46543a20436f6e74726f6c6c6564205472616e736665727320416c7260448201527f6561647920456e61626c65640000000000000000000000000000000000000000606482015260840161091c565b600d80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b600754339073ffffffffffffffffffffffffffffffffffffffff168114610c68576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161091c565b610a6a81611a22565b600c5473ffffffffffffffffffffffffffffffffffffffff163314610cf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5073794e46543a2043616c6c6572204e6f7420436f726520436f6e7472616374604482015260640161091c565b6009548310610d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5073794e46543a204e6f6e204578697374656e7420546f6b656e000000000000604482015260640161091c565b6000838152600f60205260409020600101544211610dfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5073794e46543a205472616e7366657220526571756573742043757272656e7460448201527f6c79204163746976650000000000000000000000000000000000000000000000606482015260840161091c565b60405180606001604052808481526020018242610e1a9190612c9c565b815273ffffffffffffffffffffffffffffffffffffffff9384166020918201526000948552600f815260409485902082518155908201516001820155930151600290930180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169390921692909217905550565b60606001805461077790612be2565b600e8054610eab90612be2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed790612be2565b8015610f245780601f10610ef957610100808354040283529160200191610f24565b820191906000526020600020905b815481529060010190602001808311610f0757829003601f168201915b505050505081565b600c5473ffffffffffffffffffffffffffffffffffffffff163314610fad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5073794e46543a2043616c6c6572204e6f7420436f726520436f6e7472616374604482015260640161091c565b610fb5611a53565b600d5474010000000000000000000000000000000000000000900460ff161561103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5073794e46543a20496e697469616c204d696e7420436f6d706c657465000000604482015260640161091c565b600d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560005b60038110156110a15761108f3082611a96565b8061109981612c64565b91505061107c565b600955610b056001600855565b6110b66119cf565b600e61083b8282612cfd565b61083b338383611ab0565b6110d884848461083f565b6110e484848484611bad565b50505050565b6110f26119cf565b73ffffffffffffffffffffffffffffffffffffffff8116611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5073794e46543a20436f72652043616e6e6f74204265205a65726f204164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161091c565b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606111e782611817565b5060006111f2611da4565b90506000815111611212576040518060200160405280600081525061123d565b8061121c84611db3565b60405160200161122d929190612e17565b6040516020818303038152906040525b9392505050565b600c5473ffffffffffffffffffffffffffffffffffffffff1633146112c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5073794e46543a2043616c6c6572204e6f7420436f726520436f6e7472616374604482015260640161091c565b73ffffffffffffffffffffffffffffffffffffffff8116611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5073794e46543a20526563697069656e742043616e6e6f74204265205a65726f60448201527f2041646472657373000000000000000000000000000000000000000000000000606482015260840161091c565b81516000036113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5073794e46543a20546f6b656e20417272617920456d70747900000000000000604482015260640161091c565b60005b82518110156109ab5761140330838584815181106113f6576113f6612e46565b6020026020010151611e71565b8061140d81612c64565b9150506113d6565b600c5473ffffffffffffffffffffffffffffffffffffffff163314611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5073794e46543a2043616c6c6572204e6f7420436f726520436f6e7472616374604482015260640161091c565b61149e611a53565b600d5474010000000000000000000000000000000000000000900460ff16611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f5073794e46543a20496e697469616c204d696e74204e6f7420436f6d706c657460448201527f6564000000000000000000000000000000000000000000000000000000000000606482015260840161091c565b600a80546009549091555b801561158d5761156530600954611a96565b6009805490600061157583612c64565b9190505550808061158590612e75565b915050611553565b50610b056001600855565b6115a06119cf565b73ffffffffffffffffffffffffffffffffffffffff8116611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f5073794e46543a2054726561737572792043616e6e6f74204265205a65726f2060448201527f4164647265737300000000000000000000000000000000000000000000000000606482015260840161091c565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6116926119cf565b6007805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556116f560065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6117426119cf565b600d547501000000000000000000000000000000000000000000900460ff166117ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f5073794e46543a20436f6e74726f6c6c6564205472616e736665727320416c7260448201527f656164792044697361626c656400000000000000000000000000000000000000606482015260840161091c565b600d80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610762576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810184905260240161091c565b6109ab8383836001611e8c565b73ffffffffffffffffffffffffffffffffffffffff82166118d3576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526000600482015260240161091c565b60006118e0838333612057565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8086166004830152602482018490528216604482015260640161091c565b600061197d6000836000612057565b905073ffffffffffffffffffffffffffffffffffffffff811661083b576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810183905260240161091c565b60065473ffffffffffffffffffffffffffffffffffffffff163314610b05576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161091c565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610a6a816121d4565b600260085403611a8f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600855565b61083b82826040518060200160405280600081525061224b565b73ffffffffffffffffffffffffffffffffffffffff8216611b15576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161091c565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83163b156110e4576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290611c22903390889087908790600401612eaa565b6020604051808303816000875af1925050508015611c7b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c7891810190612ef3565b60015b611d0a573d808015611ca9576040519150601f19603f3d011682016040523d82523d6000602084013e611cae565b606091505b508051600003611d02576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161091c565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014611d9d576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161091c565b5050505050565b6060600e805461077790612be2565b60606000611dc083612262565b600101905060008167ffffffffffffffff811115611de057611de0612902565b6040519080825280601f01601f191660200182016040528015611e0a576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611e1457509392505050565b6109ab83838360405180602001604052806000815250612344565b8080611ead575073ffffffffffffffffffffffffffffffffffffffff821615155b15612002576000611ebd84611817565b905073ffffffffffffffffffffffffffffffffffffffff831615801590611f1057508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611f4f575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209387168352929052205460ff16155b15611f9e576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161091c565b811561200057838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff908116908316156120915761209181848661234f565b73ffffffffffffffffffffffffffffffffffffffff811615612107576120bb600085600080611e8c565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff8516156121505773ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61225583836123ff565b6109ab6000848484611bad565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106122ab577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106122d7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106122f557662386f26fc10000830492506010015b6305f5e100831061230d576305f5e100830492506008015b612710831061232157612710830492506004015b60648310612333576064830492506002015b600a83106107625760010192915050565b6110d88484846124b0565b61235a8383836125ec565b6109ab5773ffffffffffffffffffffffffffffffffffffffff83166123ae576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810182905260240161091c565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024810182905260440161091c565b73ffffffffffffffffffffffffffffffffffffffff821661244f576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526000600482015260240161091c565b600061245d83836000612057565b905073ffffffffffffffffffffffffffffffffffffffff8116156109ab576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526000600482015260240161091c565b73ffffffffffffffffffffffffffffffffffffffff8216612500576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526000600482015260240161091c565b600061250e83836000612057565b905073ffffffffffffffffffffffffffffffffffffffff8116612560576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810183905260240161091c565b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8086166004830152602482018490528216604482015260640161091c565b600073ffffffffffffffffffffffffffffffffffffffff8316158015906126ab57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061267a575073ffffffffffffffffffffffffffffffffffffffff80851660009081526005602090815260408083209387168352929052205460ff165b806126ab575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116145b949350505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610a6a57600080fd5b6000602082840312156126f357600080fd5b813561123d816126b3565b60005b83811015612719578181015183820152602001612701565b50506000910152565b6000815180845261273a8160208601602086016126fe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061123d6020830184612722565b60006020828403121561279157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146127bc57600080fd5b919050565b600080604083850312156127d457600080fd5b6127dd83612798565b946020939093013593505050565b60008060008060006080868803121561280357600080fd5b61280c86612798565b945061281a60208701612798565b935060408601359250606086013567ffffffffffffffff8082111561283e57600080fd5b818801915088601f83011261285257600080fd5b81358181111561286157600080fd5b89602082850101111561287357600080fd5b9699959850939650602001949392505050565b60008060006060848603121561289b57600080fd5b6128a484612798565b92506128b260208501612798565b9150604084013590509250925092565b6000602082840312156128d457600080fd5b61123d82612798565b6000806000606084860312156128f257600080fd5b833592506128b260208501612798565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561297857612978612902565b604052919050565b600067ffffffffffffffff83111561299a5761299a612902565b6129cb60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601612931565b90508281528383830111156129df57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612a0857600080fd5b813567ffffffffffffffff811115612a1f57600080fd5b8201601f81018413612a3057600080fd5b6126ab84823560208401612980565b60008060408385031215612a5257600080fd5b612a5b83612798565b915060208301358015158114612a7057600080fd5b809150509250929050565b60008060008060808587031215612a9157600080fd5b612a9a85612798565b9350612aa860208601612798565b925060408501359150606085013567ffffffffffffffff811115612acb57600080fd5b8501601f81018713612adc57600080fd5b612aeb87823560208401612980565b91505092959194509250565b60008060408385031215612b0a57600080fd5b823567ffffffffffffffff80821115612b2257600080fd5b818501915085601f830112612b3657600080fd5b8135602082821115612b4a57612b4a612902565b8160051b9250612b5b818401612931565b8281529284018101928181019089851115612b7557600080fd5b948201945b84861015612b9357853582529482019490820190612b7a565b9650612ba29050878201612798565b9450505050509250929050565b60008060408385031215612bc257600080fd5b612bcb83612798565b9150612bd960208401612798565b90509250929050565b600181811c90821680612bf657607f821691505b602082108103612c2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c9557612c95612c35565b5060010190565b8082018082111561076257610762612c35565b601f8211156109ab57600081815260208120601f850160051c81016020861015612cd65750805b601f850160051c820191505b81811015612cf557828155600101612ce2565b505050505050565b815167ffffffffffffffff811115612d1757612d17612902565b612d2b81612d258454612be2565b84612caf565b602080601f831160018114612d7e5760008415612d485750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612cf5565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612dcb57888601518255948401946001909101908401612dac565b5085821015612e0757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008351612e298184602088016126fe565b835190830190612e3d8183602088016126fe565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081612e8457612e84612c35565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612ee96080830184612722565b9695505050505050565b600060208284031215612f0557600080fd5b815161123d816126b356fea164736f6c6343000814000a