[ { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_minter", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "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": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "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": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "tokenUri", "type": "string" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "safeMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "_tokenURI", "type": "string" } ], "name": "setTokenURI", "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": "newAddress", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b506040516200487b3803806200487b833981810160405281019062000037919062000346565b6040518060400160405280600781526020017f4578616d706c65000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4558414d000000000000000000000000000000000000000000000000000000008152508160009081620000b4919062000607565b508060019081620000c6919062000607565b5050506001600a8190555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001276000801b836200016160201b60201c565b620001597f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6826200016160201b60201c565b5050620006ee565b6200017382826200017760201b60201c565b5050565b6200018982826200026960201b60201c565b620002655760016009600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200020a620002d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006009600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200030e82620002e1565b9050919050565b620003208162000301565b81146200032c57600080fd5b50565b600081519050620003408162000315565b92915050565b6000806040838503121562000360576200035f620002dc565b5b600062000370858286016200032f565b925050602062000383858286016200032f565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040f57607f821691505b602082108103620004255762000424620003c7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200048f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000450565b6200049b868362000450565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004e8620004e2620004dc84620004b3565b620004bd565b620004b3565b9050919050565b6000819050919050565b6200050483620004c7565b6200051c6200051382620004ef565b8484546200045d565b825550505050565b600090565b6200053362000524565b62000540818484620004f9565b505050565b5b8181101562000568576200055c60008262000529565b60018101905062000546565b5050565b601f821115620005b75762000581816200042b565b6200058c8462000440565b810160208510156200059c578190505b620005b4620005ab8562000440565b83018262000545565b50505b505050565b600082821c905092915050565b6000620005dc60001984600802620005bc565b1980831691505092915050565b6000620005f78383620005c9565b9150826002028217905092915050565b62000612826200038d565b67ffffffffffffffff8111156200062e576200062d62000398565b5b6200063a8254620003f6565b620006478282856200056c565b600060209050601f8311600181146200067f57600084156200066a578287015190505b620006768582620005e9565b865550620006e6565b601f1984166200068f866200042b565b60005b82811015620006b95784890151825560018201915060208501945060208101905062000692565b86831015620006d95784890151620006d5601f891682620005c9565b8355505b6001600288020188555050505b505050505050565b61417d80620006fe6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063b88d4fde11610097578063d539139311610071578063d5391393146104b8578063d547741f146104d6578063e985e9c5146104f2578063f2fde38b146105225761018e565b8063b88d4fde1461043c578063c6f0577114610458578063c87b56dd146104885761018e565b806370a08231146103665780638da5cb5b1461039657806391d14854146103b457806395d89b41146103e4578063a217fddf14610402578063a22cb465146104205761018e565b8063248a9ca31161014b57806336568abe1161012557806336568abe146102e257806342842e0e146102fe57806342966c681461031a5780636352211e146103365761018e565b8063248a9ca3146102655780632a55205a146102955780632f2ff15d146102c65761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b314610211578063162094c41461022d57806323b872dd14610249575b600080fd5b6101ad60048036038101906101a89190612a62565b61053e565b6040516101ba9190612aaa565b60405180910390f35b6101cb610580565b6040516101d89190612b55565b60405180910390f35b6101fb60048036038101906101f69190612bad565b610612565b6040516102089190612c1b565b60405180910390f35b61022b60048036038101906102269190612c62565b610658565b005b61024760048036038101906102429190612dd7565b61076f565b005b610263600480360381019061025e9190612e33565b61078b565b005b61027f600480360381019061027a9190612ebc565b6107eb565b60405161028c9190612ef8565b60405180910390f35b6102af60048036038101906102aa9190612f13565b61080b565b6040516102bd929190612f62565b60405180910390f35b6102e060048036038101906102db9190612f8b565b6109f5565b005b6102fc60048036038101906102f79190612f8b565b610a16565b005b61031860048036038101906103139190612e33565b610a99565b005b610334600480360381019061032f9190612bad565b610ab9565b005b610350600480360381019061034b9190612bad565b610b15565b60405161035d9190612c1b565b60405180910390f35b610380600480360381019061037b9190612fcb565b610b9b565b60405161038d9190612ff8565b60405180910390f35b61039e610c52565b6040516103ab9190612c1b565b60405180910390f35b6103ce60048036038101906103c99190612f8b565b610c78565b6040516103db9190612aaa565b60405180910390f35b6103ec610ce3565b6040516103f99190612b55565b60405180910390f35b61040a610d75565b6040516104179190612ef8565b60405180910390f35b61043a6004803603810190610435919061303f565b610d7c565b005b61045660048036038101906104519190613120565b610d92565b005b610472600480360381019061046d9190613203565b610df4565b60405161047f9190612ff8565b60405180910390f35b6104a2600480360381019061049d9190612bad565b610eee565b6040516104af9190612b55565b60405180910390f35b6104c0610f00565b6040516104cd9190612ef8565b60405180910390f35b6104f060048036038101906104eb9190612f8b565b610f24565b005b61050c60048036038101906105079190613263565b610f45565b6040516105199190612aaa565b60405180910390f35b61053c60048036038101906105379190612fcb565b610fd9565b005b6000610549826110d6565b806105595750610558826111b8565b5b80610569575061056882611219565b5b80610579575061057882611293565b5b9050919050565b60606000805461058f906132d2565b80601f01602080910402602001604051908101604052809291908181526020018280546105bb906132d2565b80156106085780601f106105dd57610100808354040283529160200191610608565b820191906000526020600020905b8154815290600101906020018083116105eb57829003601f168201915b5050505050905090565b600061061d8261130d565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061066382610b15565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ca90613375565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106f2611358565b73ffffffffffffffffffffffffffffffffffffffff16148061072157506107208161071b611358565b610f45565b5b610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790613407565b60405180910390fd5b61076a8383611360565b505050565b6000801b61077c81611419565b610786838361142d565b505050565b61079c610796611358565b826114d1565b6107db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d290613499565b60405180910390fd5b6107e6838383611566565b505050565b600060096000838152602001908152602001600020600101549050919050565b6000806000600860008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036109a05760076040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006109aa61185f565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866109d691906134e8565b6109e09190613571565b90508160000151819350935050509250929050565b6109fe826107eb565b610a0781611419565b610a118383611869565b505050565b610a1e611358565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8290613614565b60405180910390fd5b610a95828261194a565b5050565b610ab483838360405180602001604052806000815250610d92565b505050565b610aca610ac4611358565b826114d1565b610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090613499565b60405180910390fd5b610b1281611a2c565b50565b600080610b2183611a38565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990613680565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0290613712565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060018054610cf2906132d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1e906132d2565b8015610d6b5780601f10610d4057610100808354040283529160200191610d6b565b820191906000526020600020905b815481529060010190602001808311610d4e57829003601f168201915b5050505050905090565b6000801b81565b610d8e610d87611358565b8383611a75565b5050565b610da3610d9d611358565b836114d1565b610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990613499565b60405180910390fd5b610dee84848484611be1565b50505050565b6000610e207f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610c78565b80610e345750610e336000801b33610c78565b5b610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a906137a4565b60405180910390fd5b6000610e7f600c611c3d565b9050610e8b8382611c4b565b610ed98186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061142d565b610ee3600c611c69565b809150509392505050565b6060610ef982611c7f565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610f2d826107eb565b610f3681611419565b610f40838361194a565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b610fe681611419565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90613810565b60405180910390fd5b6110846000801b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661194a565b6110916000801b83611869565b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806111a157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806111b157506111b082611d91565b5b9050919050565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112125750611211826110d6565b5b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061128c575061128b826111b8565b5b9050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611306575061130582611219565b5b9050919050565b61131681611dfb565b611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613680565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113d383610b15565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61142a81611425611358565b611e3c565b50565b61143682611dfb565b611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c906138a2565b60405180910390fd5b806006600084815260200190815260200160002090816114959190613a6e565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516114c59190612ff8565b60405180910390a15050565b6000806114dd83610b15565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061151f575061151e8185610f45565b5b8061155d57508373ffffffffffffffffffffffffffffffffffffffff1661154584610612565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661158682610b15565b73ffffffffffffffffffffffffffffffffffffffff16146115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390613bb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290613c44565b60405180910390fd5b6116588383836001611ec1565b8273ffffffffffffffffffffffffffffffffffffffff1661167882610b15565b73ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590613bb2565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461185a8383836001611ec7565b505050565b6000612710905090565b6118738282610c78565b6119465760016009600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506118eb611358565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6119548282610c78565b15611a285760006009600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506119cd611358565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611a3581611ecd565b50565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613cb0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bd49190612aaa565b60405180910390a3505050565b611bec848484611566565b611bf884848484611f20565b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90613d42565b60405180910390fd5b50505050565b600081600001549050919050565b611c658282604051806020016040528060008152506120a7565b5050565b6001816000016000828254019250508190555050565b6060611c8a8261130d565b6000600660008481526020019081526020016000208054611caa906132d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd6906132d2565b8015611d235780601f10611cf857610100808354040283529160200191611d23565b820191906000526020600020905b815481529060010190602001808311611d0657829003601f168201915b505050505090506000611d34612102565b90506000815103611d49578192505050611d8c565b600082511115611d7e578082604051602001611d66929190613d9e565b60405160208183030381529060405292505050611d8c565b611d8784612119565b925050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16611e1d83611a38565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611e468282610c78565b611ebd57611e5381612181565b611e618360001c60206121ae565b604051602001611e72929190613e5a565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb49190612b55565b60405180910390fd5b5050565b50505050565b50505050565b611ed6816123ea565b6000600660008381526020019081526020016000208054611ef6906132d2565b905014611f1d57600660008281526020019081526020016000206000611f1c9190612999565b5b50565b6000611f418473ffffffffffffffffffffffffffffffffffffffff16612538565b1561209a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f6a611358565b8786866040518563ffffffff1660e01b8152600401611f8c9493929190613ee9565b6020604051808303816000875af1925050508015611fc857506040513d601f19601f82011682018060405250810190611fc59190613f4a565b60015b61204a573d8060008114611ff8576040519150601f19603f3d011682016040523d82523d6000602084013e611ffd565b606091505b506000815103612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203990613d42565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061209f565b600190505b949350505050565b6120b1838361255b565b6120be6000848484611f20565b6120fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f490613d42565b60405180910390fd5b505050565b606060405180602001604052806000815250905090565b60606121248261130d565b600061212e612102565b9050600081511161214e5760405180602001604052806000815250612179565b8061215884612778565b604051602001612169929190613d9e565b6040516020818303038152906040525b915050919050565b60606121a78273ffffffffffffffffffffffffffffffffffffffff16601460ff166121ae565b9050919050565b6060600060028360026121c191906134e8565b6121cb9190613f77565b67ffffffffffffffff8111156121e4576121e3612cac565b5b6040519080825280601f01601f1916602001820160405280156122165781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061224e5761224d613fab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106122b2576122b1613fab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026122f291906134e8565b6122fc9190613f77565b90505b600181111561239c577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061233e5761233d613fab565b5b1a60f81b82828151811061235557612354613fab565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061239590613fda565b90506122ff565b50600084146123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d79061404f565b60405180910390fd5b8091505092915050565b60006123f582610b15565b9050612405816000846001611ec1565b61240e82610b15565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612534816000846001611ec7565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c1906140bb565b60405180910390fd5b6125d381611dfb565b15612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a90614127565b60405180910390fd5b612621600083836001611ec1565b61262a81611dfb565b1561266a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266190614127565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612774600083836001611ec7565b5050565b60606000600161278784612846565b01905060008167ffffffffffffffff8111156127a6576127a5612cac565b5b6040519080825280601f01601f1916602001820160405280156127d85781602001600182028036833780820191505090505b509050600082602001820190505b60011561283b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161282f5761282e613542565b5b049450600085036127e6575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106128a4577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161289a57612899613542565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106128e1576d04ee2d6d415b85acef810000000083816128d7576128d6613542565b5b0492506020810190505b662386f26fc10000831061291057662386f26fc10000838161290657612905613542565b5b0492506010810190505b6305f5e1008310612939576305f5e100838161292f5761292e613542565b5b0492506008810190505b612710831061295e57612710838161295457612953613542565b5b0492506004810190505b60648310612981576064838161297757612976613542565b5b0492506002810190505b600a8310612990576001810190505b80915050919050565b5080546129a5906132d2565b6000825580601f106129b757506129d6565b601f0160209004906000526020600020908101906129d591906129d9565b5b50565b5b808211156129f25760008160009055506001016129da565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a3f81612a0a565b8114612a4a57600080fd5b50565b600081359050612a5c81612a36565b92915050565b600060208284031215612a7857612a77612a00565b5b6000612a8684828501612a4d565b91505092915050565b60008115159050919050565b612aa481612a8f565b82525050565b6000602082019050612abf6000830184612a9b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aff578082015181840152602081019050612ae4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b2782612ac5565b612b318185612ad0565b9350612b41818560208601612ae1565b612b4a81612b0b565b840191505092915050565b60006020820190508181036000830152612b6f8184612b1c565b905092915050565b6000819050919050565b612b8a81612b77565b8114612b9557600080fd5b50565b600081359050612ba781612b81565b92915050565b600060208284031215612bc357612bc2612a00565b5b6000612bd184828501612b98565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c0582612bda565b9050919050565b612c1581612bfa565b82525050565b6000602082019050612c306000830184612c0c565b92915050565b612c3f81612bfa565b8114612c4a57600080fd5b50565b600081359050612c5c81612c36565b92915050565b60008060408385031215612c7957612c78612a00565b5b6000612c8785828601612c4d565b9250506020612c9885828601612b98565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ce482612b0b565b810181811067ffffffffffffffff82111715612d0357612d02612cac565b5b80604052505050565b6000612d166129f6565b9050612d228282612cdb565b919050565b600067ffffffffffffffff821115612d4257612d41612cac565b5b612d4b82612b0b565b9050602081019050919050565b82818337600083830152505050565b6000612d7a612d7584612d27565b612d0c565b905082815260208101848484011115612d9657612d95612ca7565b5b612da1848285612d58565b509392505050565b600082601f830112612dbe57612dbd612ca2565b5b8135612dce848260208601612d67565b91505092915050565b60008060408385031215612dee57612ded612a00565b5b6000612dfc85828601612b98565b925050602083013567ffffffffffffffff811115612e1d57612e1c612a05565b5b612e2985828601612da9565b9150509250929050565b600080600060608486031215612e4c57612e4b612a00565b5b6000612e5a86828701612c4d565b9350506020612e6b86828701612c4d565b9250506040612e7c86828701612b98565b9150509250925092565b6000819050919050565b612e9981612e86565b8114612ea457600080fd5b50565b600081359050612eb681612e90565b92915050565b600060208284031215612ed257612ed1612a00565b5b6000612ee084828501612ea7565b91505092915050565b612ef281612e86565b82525050565b6000602082019050612f0d6000830184612ee9565b92915050565b60008060408385031215612f2a57612f29612a00565b5b6000612f3885828601612b98565b9250506020612f4985828601612b98565b9150509250929050565b612f5c81612b77565b82525050565b6000604082019050612f776000830185612c0c565b612f846020830184612f53565b9392505050565b60008060408385031215612fa257612fa1612a00565b5b6000612fb085828601612ea7565b9250506020612fc185828601612c4d565b9150509250929050565b600060208284031215612fe157612fe0612a00565b5b6000612fef84828501612c4d565b91505092915050565b600060208201905061300d6000830184612f53565b92915050565b61301c81612a8f565b811461302757600080fd5b50565b60008135905061303981613013565b92915050565b6000806040838503121561305657613055612a00565b5b600061306485828601612c4d565b92505060206130758582860161302a565b9150509250929050565b600067ffffffffffffffff82111561309a57613099612cac565b5b6130a382612b0b565b9050602081019050919050565b60006130c36130be8461307f565b612d0c565b9050828152602081018484840111156130df576130de612ca7565b5b6130ea848285612d58565b509392505050565b600082601f83011261310757613106612ca2565b5b81356131178482602086016130b0565b91505092915050565b6000806000806080858703121561313a57613139612a00565b5b600061314887828801612c4d565b945050602061315987828801612c4d565b935050604061316a87828801612b98565b925050606085013567ffffffffffffffff81111561318b5761318a612a05565b5b613197878288016130f2565b91505092959194509250565b600080fd5b600080fd5b60008083601f8401126131c3576131c2612ca2565b5b8235905067ffffffffffffffff8111156131e0576131df6131a3565b5b6020830191508360018202830111156131fc576131fb6131a8565b5b9250929050565b60008060006040848603121561321c5761321b612a00565b5b600084013567ffffffffffffffff81111561323a57613239612a05565b5b613246868287016131ad565b9350935050602061325986828701612c4d565b9150509250925092565b6000806040838503121561327a57613279612a00565b5b600061328885828601612c4d565b925050602061329985828601612c4d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132ea57607f821691505b6020821081036132fd576132fc6132a3565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061335f602183612ad0565b915061336a82613303565b604082019050919050565b6000602082019050818103600083015261338e81613352565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b60006133f1603d83612ad0565b91506133fc82613395565b604082019050919050565b60006020820190508181036000830152613420816133e4565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613483602d83612ad0565b915061348e82613427565b604082019050919050565b600060208201905081810360008301526134b281613476565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134f382612b77565b91506134fe83612b77565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613537576135366134b9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061357c82612b77565b915061358783612b77565b92508261359757613596613542565b5b828204905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006135fe602f83612ad0565b9150613609826135a2565b604082019050919050565b6000602082019050818103600083015261362d816135f1565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061366a601883612ad0565b915061367582613634565b602082019050919050565b600060208201905081810360008301526136998161365d565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006136fc602983612ad0565b9150613707826136a0565b604082019050919050565b6000602082019050818103600083015261372b816136ef565b9050919050565b7f446f6e277420686176652074686520726967687420726f6c6520284d494e544560008201527f525f524f4c45206f722044454641554c545f41444d494e5f524f4c4529290000602082015250565b600061378e603e83612ad0565b915061379982613732565b604082019050919050565b600060208201905081810360008301526137bd81613781565b9050919050565b7f496e76616c696420416464726573730000000000000000000000000000000000600082015250565b60006137fa600f83612ad0565b9150613805826137c4565b602082019050919050565b60006020820190508181036000830152613829816137ed565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b600061388c602e83612ad0565b915061389782613830565b604082019050919050565b600060208201905081810360008301526138bb8161387f565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826138e7565b61392e86836138e7565b95508019841693508086168417925050509392505050565b6000819050919050565b600061396b61396661396184612b77565b613946565b612b77565b9050919050565b6000819050919050565b61398583613950565b61399961399182613972565b8484546138f4565b825550505050565b600090565b6139ae6139a1565b6139b981848461397c565b505050565b5b818110156139dd576139d26000826139a6565b6001810190506139bf565b5050565b601f821115613a22576139f3816138c2565b6139fc846138d7565b81016020851015613a0b578190505b613a1f613a17856138d7565b8301826139be565b50505b505050565b600082821c905092915050565b6000613a4560001984600802613a27565b1980831691505092915050565b6000613a5e8383613a34565b9150826002028217905092915050565b613a7782612ac5565b67ffffffffffffffff811115613a9057613a8f612cac565b5b613a9a82546132d2565b613aa58282856139e1565b600060209050601f831160018114613ad85760008415613ac6578287015190505b613ad08582613a52565b865550613b38565b601f198416613ae6866138c2565b60005b82811015613b0e57848901518255600182019150602085019450602081019050613ae9565b86831015613b2b5784890151613b27601f891682613a34565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613b9c602583612ad0565b9150613ba782613b40565b604082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c2e602483612ad0565b9150613c3982613bd2565b604082019050919050565b60006020820190508181036000830152613c5d81613c21565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613c9a601983612ad0565b9150613ca582613c64565b602082019050919050565b60006020820190508181036000830152613cc981613c8d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613d2c603283612ad0565b9150613d3782613cd0565b604082019050919050565b60006020820190508181036000830152613d5b81613d1f565b9050919050565b600081905092915050565b6000613d7882612ac5565b613d828185613d62565b9350613d92818560208601612ae1565b80840191505092915050565b6000613daa8285613d6d565b9150613db68284613d6d565b91508190509392505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000613df8601783613d62565b9150613e0382613dc2565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000613e44601183613d62565b9150613e4f82613e0e565b601182019050919050565b6000613e6582613deb565b9150613e718285613d6d565b9150613e7c82613e37565b9150613e888284613d6d565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613ebb82613e94565b613ec58185613e9f565b9350613ed5818560208601612ae1565b613ede81612b0b565b840191505092915050565b6000608082019050613efe6000830187612c0c565b613f0b6020830186612c0c565b613f186040830185612f53565b8181036060830152613f2a8184613eb0565b905095945050505050565b600081519050613f4481612a36565b92915050565b600060208284031215613f6057613f5f612a00565b5b6000613f6e84828501613f35565b91505092915050565b6000613f8282612b77565b9150613f8d83612b77565b9250828201905080821115613fa557613fa46134b9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613fe582612b77565b915060008203613ff857613ff76134b9565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614039602083612ad0565b915061404482614003565b602082019050919050565b600060208201905081810360008301526140688161402c565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006140a5602083612ad0565b91506140b08261406f565b602082019050919050565b600060208201905081810360008301526140d481614098565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614111601c83612ad0565b915061411c826140db565b602082019050919050565b6000602082019050818103600083015261414081614104565b905091905056fea264697066735822122030390a74e39e89f864cd644d0e61d3faf007c101e4140fb23a61aa00edee225364736f6c634300081000330000000000000000000000008481aecd33b02ff4acba4e49ca4a2d7517375f910000000000000000000000008481aecd33b02ff4acba4e49ca4a2d7517375f91