// SPDX-License-Identifier: MIT
/// G&@@@@@7!!~G@@@7~!!!JGB@@@Y^G&@&~Y@&7!!YG#@@@@@B~!!?7JYY7~!!!7Y5#@G~!!!!GGG&@@@@@7~G@@@@@@@@@@@@&!!~&@@@@G~~~~&@@G^J@@@@@@@@&
/// &@@@GGG7!JJ#@@@GP!!~5&&@@@#5?!7?!7??!!!?Y5GGGGGY!!7#&GGG5JYYYBBGYY?!!!~~JYJ#@@@@@7~G@@@@@@@BGG&@&!!!PB#&&GJYGG#&&#GGGGG@@@@@&
/// &@@&JYJ!!PG&@@@&#J??B@@###@B!!!!!!Y#555?~!YJJYY?!!?##YJJB#G5P@@@BYPBPPPJ!!~?B@@@@7~G@@##&@@7~~G@&!!!~~Y#####&&####&#YYJB#####
/// !#@@@@@7!5G&@@@7!GGG&@&~~~&@Y!!~5#GB@@@B~Y@@@@@G~!7!7@@@@@G!7@@@Y~G@@@@@?!!?77&@@?!G@&!~J@@?!!G@&!!!!!G@@@@@7~&@@G~J@@@Y~!!~?
/// &5?YBBB&&Y7???JPG@@@@@&!!!&@J!75J?7?@@@@&&@@@G5Y??P&&@@&B5PGG5YYJ?Y55P#B7~~YBY!?J#&G?5@@#?J&&&G??!!!B@G??5BB&&5??G@#???5P#&&#
/// Y!~J@@&YJ7~JPPP@@YJJJ?YPPP@G!!?YPPPP@@@&#&&@@@&&&&&&&@@&&@&&&&&&&##BBGG55YJ?77!!~77!~?PBG~7@@@B~?&&&P?G&&&@&YJ#&&@@@&&&Y!B@@&
/// !?J5&&&J?!~JPPPG&J????JPPPB7?JJJPPPG@@@@@@@@&&@@@@@@@@&@&&@@@@&@@@@@@@@@@@&&&&#G5?!~~!!~!!!J5BP!5&&&Y!B@@@@@Y?&@@@@@&&&5?G&&#
/// ?#@#??J&@57???7!J@@@@@#!!!?5#@@&?7!7&@&&&@@@&&&&&&@&&@&&&&&@@@&&&@@&@@@&@@&@@@@@@&&BY7!!!!!!!~7?J!!!PB#@&@@@&&@@@@@#???&@G~!J
/// @5!Y@@@?!&@@@@&5@@@@B!7!!!JGGGG#@#~7&@&&&@@&&@@&@&&@&&@@&&&@@&&@@&&@@@&&&&&@&&&&@@@@@&BY!!!!!!!!!!!~B@B~~G@@?!&@@B~J@@@@@G~~?
/// @Y^J@@@7~PB&@@&P&@@@G~!7?!B&BGGGG7!G&&&&@@@@@&&@@@&@@&@&&@@@@@@&@&&&@@&&&@&@&&&&&@@&&@@@&5!!!!!!!7?7JG#PPGGG7~5BGGGGBBG@@#JY5
/// @B5G&&&PP7^G@@&7Y@@@G~!7!!&@@BJ7~7#@&@&&&&@@@&&&@@&@@@&&@&@@@&@&&&&&&@&&&&@@&&&&&@@@@&&@@@#J!!!!!J55J7Y&&B557!Y55G#G???&@#Y5P
/// B&&&###&&BPB&&GJ5BBBGPGGPGBBBJ!!?&@@@@@&&&&&&@&&@&&@@@@@@@&&@@&&&&&@&@&&&@@@&&@&&&&&&@@&@@@&B7!!777Y7!!?#@@@7~B&G&&&@@G~~?
/// !5G#@@@GG@@&GGJJ?7!~G@@@@@Y~!!~J&@&&@&&&@@&@@@&@@&&&&&&&@&&@@&&@&@@@&@&&@@&&&@@@@&@@@&&&&&&@@&Y7!!!7!!!!G@@@7!YP5&@@@@@@@B!!J
/// P&@&??J&@@@@@@Y~~B@@G7YBBG?!!~5&@@@@&&&&&&&@@@&&&@@&@&&&@&&&&@@@@&&&&@@&@@@&&&&@&&&@@&&&@@&&&&&G7!!!!!7!?J?J&&Y!?P7YBBB@@@&&&
/// ?&@&!~7@@GJ#@@Y!7P@@B~J&@B!!!P&@&&@&&@@&&@@&@@@&@&&@&&@@@@&&&@@&@&&&&&&@&@@@@&@@@&&&@@&@@&&@@@&@&5!!!!7!!!!?5Y&Y!G55GGGBB&@@&
/// ~&@&!!7#&5?G&&J~!5&&G75@@Y~?#@&&&&&@&&@&&&@@@@@@@@@@&&&&@&&@&@@&@@&@&&&@&&&&&&&&@&&&@&&&&@&@@@&&@@#J!!!!!!!!7?##!G#BPP5GB#&&#
/// ?#@#777??&@B???!!!!!JPG@G~7#@&@&&&&@&@&@&&@&#BB##&&&&@@&&@@@@@@@@@&@@&&@@&&&@&&@@@@&@@@&&@@&@@@&@~!!!!!!!G@Y!!G@&!!!&@G~!7
/// @Y~?GGG@@@@@@@&!!!!!!!!!!7B@@&@&@&@@&&&@&@&BGGGGGGGGGB####BGGBB###&&@&@@@@@&@@@@&&&&&@@@&@@@&&&&GY7!!!!!!!!!P@Y~~G@&~~~&@G~~?
/// &PJP&&&@@&&@@@@GP!~~?Y7!?#@@&&@&&@@@&&@&@&BGGGGGGGGGGGGGGGGGPP555YYJ#@&@&@&@@@@&&&&@@@&@@@&&&&&&&&P!!!!!!!!!Y&BGJY@@GGG@@&PGG
/// YYY5BBBBB##&&&&@@GPP5Y!Y&&@@&&@&&@&&&@@&#P5P5P555Y5YJYJJJYYY5PPPGGGGB@@&&@@&&&&@@&@@&&&@@@&&&@&&&&J!!!!!!!7!Y###5J@@B#B@@@@@@
/// !!!!~~~!~&@&PPG@@@@@P~?&@&@&@@&&@&&@&GYJ7!!!!!!~!!7!!!!!!!!7?5YYJPGGG&@&&&@&&&@@@&@&@&&&@&&&&&@@@&!!7!!!!!!!Y@Y~!?@&!!~#@@@@@
/// !B@#!!7&&@@B!7?@@J?J!?&@&@@&&@&@&&&@@5?7!!!!!!!!7!!!!!!!!!!7?555GGGPG#@&@@&&&@&@@&@&@&&@&&@&@@&@@&7!!!!!!!!77?7!!7G#&&&57B@@&
/// &@@&!!7@@P?G&&&JJ#7!Y&@@@@&@&@@&&&&@@B7!!!!!!!!!!!!!!~!!!!!!7YJYGBBB##@@&&&@&&&&&&@@&@@@@&@@&@&@@&!~!!!!!!!7!!!!!7&&JJJ7~G@@@
/// YJJYP5P@@J^5###&#Y!J&@@@@@&@&@@@&@@@@G~!!!!!!!!!!~~!!!!!!!!!~~~!!!7J5P&&@@&&&&&&&&@@@@&@@@@&&&@&@&!!!!!!!!!!!5P55?@@&&&&&GJYY
/// ??7YBBB&@5?YPPG@@77&@@@@&&@&&@@@@&@@&7!?7~!!!~!!!!!~~!!!!~!!!!!!!~!!!~5&@@&@&&@@&@@@@@@&@@@&&@@@@#!!!!!!!!!7!PBBB5@@@@@@@G~~~
/// @@&@@@@?!#@G!!7&&75@@@&@&@&&&@&@&@@@&77J555J77!!!!!PBBBG5J?!7!!!!!!~!!?G#&&@@&@&@@@&@@&&@&@&&&&@@#!!!!!!!7!!!5&@@#@&7??7!7!!!
/// @5~Y@@@7!!7!~~~!7J!Y#@@&@@&@@&&&&@@@@&&&@@@@&&&B~!?@@@@@@@@5!!!7!!77???7Y&&@&&@&&&&&&&&@@@&&@@&&@#!!!!!77!!!!!PGG&@@@@@J~!!!?
/// &BGGGGP!~JYPGGGGB5!~!G@&&@&&@@@@@@&PPGGB####&&&5!7?####BGPPJ????????77!!B@@@&&@&&&&&&@&@&@&&&&&&@&7!!!!!!!!!!~B&&@@@PGGGGY!!?
/// ?&@&~~!YYGG&@@@@@Y!7!!G@&&@&@&@&&@&PGPPP55YYYJ?????YYYYY5PGY777J?77!~!!~B@&&@&@@@&&&@&@@&&&&&&&&@&7!!!!!!!!!!5@@@&PPGGG@@B~!?
/// !#@&!!7GBGP&@@@@@?!!!!!#@&&&@@&@@@@G&@@@&@@&&Y?J7!!B@&@@@@@#!!7??!!!!!!~B@&&@&&&@@@&&@&&&&&&@@&&@&?!!!!!!7!?GG@@@G~Y@@@@@G~!J
/// PGBGPPG@@5!7??J@@?!!!!!?&@&&@@&@&@@G&@@&&&@@#J?J?~~5@&&&&&&@J!7??!!!!!!!#@&&&&&@&&@@&&&@@&&&@&@&&@J!7!!!!!!777??7G@@@@@@@G~!?
/// @5!?GGG@@@&P~~!@@@&7!!!~G@&@@&@@&&@GYP&&@@&@BJ???7!7&@&&&&&@#~!??!!!!!!!#@&@&&&&&&@@@&&&&@&&@&&&&@Y~!!!!!!Y&7!~~~G@@BBB@@G~~?
/// &Y7YBB#@@&&GJJY&&&&J~!!!?&&&@&&@&&@&J?#&@@@&YJ7!?J7~J&@@@@@@@?!???!!77!7&@@@&@@@&@&&@&@@@&&@&&@@@@5~~!!!?J5&Y!JJ?B@&555&@BJJ5
/// ?5PB@@@&&57B@@&?7???!!!!!#@@@@&@@&@#B5?PB5??J?!~!JJ7~5&&#GPPG?J5?Y??77~7&&@&@@@@@@@&@@@@@&@@@@&@@@Y!!!!!77!J&7#@@@@&~!~Y5#@@&
/// @Y~Y@@@7!&@#BGPGG@@&!!!!!J&@@@@&&&@BPJ7???7??!!~!7?J7!?7!!!77?JJ?PJ!7!!5&@@@@&&@&@@&@@@&&@&&@@&&&@5!!!!!!!!G7~Y@@@@#77??7G@@&
/// @Y~Y@@@7~&@BBJ!GB@@@5!!!7!75&@&&&&&@@G5J!7Y?7?!!!!!7????????777JJ5J?J?J&&@&&@&&@&@@&@&&&&&@&@&&&&@G~!!!!!!7!!!!#@B~J@@@@@G~!J
/// @Y~J&&&GPGBGGPPY5@@@G~!!!7!~7B&@&B&@@@&5~~JPJ7~!!777777!!!!!!~!?7777??J&&@&@&@@&&@@&&@&&@@@&&&&&&@B!!!!!!7!!!!!5BG5B@@@#BGPPP
/// @Y~J&&&BBGP&@@@YY@@@&G?!!!!!!!P&@B&@@&&GPG5BG77????????7!!!!!!!!!!!!!!!P@&@@&@&@@&&@@@&&&@@@&&&@&@#!!!!!!!!!!!!!~G@@@@@J^5&&#
/// @5!Y@@@7!&@@@@@GG@@@@@P!!!!!!!!Y&#PB@&@@@@@@B!?JYXCOPYB&B!!!!!!!!!!!!!!!~G@@&&@@@&@@@&@@&&@@@@@&&&@&!!!!!!!!!!777!G@@@@@Y!YGPP
/// @@@#77?&&@@@@@@?77?7B@5!!!!!!!!!G&J7&@@&@&#Y?!!7B#CC0&!!!!!!~!!!!!!!5#&@&@@@&@@@&@@@&@@@@@@&@&@&7!7!!!!!!?P#&@G7YBBB&@G!77
/// ?&@&~~~??&@B???P5!G@G77!!!!!!!!~5@&JB@@&&G!~~!!7J?JJJJJJ?!!!!!!!!!!~!7G@&@@@&&@&&@@@&@@@@@@&&&&&&&&?!!!!!!!777??7G@#777&@B~~?
/// ~#@&JJJ!~&@G~~!P7!Y&P~!!!!7!!!75&@@&G&@@@&B5?7!7????????7!!!!!!!!!?5#&@@&&&&&&@@@&&@&&@@&@@&@&@@&&&?!!!!!!!!!JJJ?B@&~~~G&GJY5
/// ?55B@@@Y?#&G?J?7~7P#&G?!!!!!7P&@@&@@&&@&&@@@&&J!!!7!!!7!!!!!!!!J5#&@@&@&&&&&@&@@@@@@&@@@@&&&&@@@&@&?!!!!!!!!!#@@@@@&?JJ??G&&#
/// @Y~Y@@@@@Y^G@&77P&@@@@&B?!7P&@@&@@@@&&&&&&&&&@&J~!!!!!!7!!!!?P&@@@@@@&&@@&@&&&&@&@@&&@@@@@&&&&@@@@&Y!!!!!7!!!Y@@@@@@@@@@@G~!!
/// @Y^J@@@GPGG&@JJ&@@&@@@@@&#&@@&&&&@@@&@&&&&&@@&@&Y!!?7777!75#@@@@&&@@&&@@&@@&&&&&&@@@@@@@@@@@&&&@@&&&#G#G7~!!!!&@@&#&@@@@@G~~7
/// PGBGPPPBBGP&5?&@@@@@&@@@@@@&&@@&@&&@@@&&@@&&@&@@&P?~!!!?B&&@@@@&&@&&@&@&&@@&@@@&&@&&@@@@&@&&@&&@&&&@@@@@&Y!!7!YPYBP5P5GBBB
/// G@@@GGGGB?~!7#@&&@@@@@&@@@&@@@@@@&&@&&@@&@@@@&&@@@&G5JB&@&&@&&&&@&&&&&@@@@@&@@@&&@@&@@&@@@@@@&@@&&@@@&@&&@#J!!!~~J@@GGGGP&@@@
/// @@@@@@@7~!7G&@&&@@@&&@@@@&@@&@&&@&&&BGB&&&&&&&&&&&&@@&@&@&&&&&&&@&&@&&&&@@@@@@&&&@@@&&&@@&&&&&@&&&@@&&&&&&@&G7!!7?5@@@@@@@@@@
/// @@@@&#B&&#&@@&&@@@@@&@@@@@@@@&&@@&@#GGG#@&&&@&&@&&@@@&&&@@@&@@&&@@&&&@@@@@&@@@@&@@&&@@@&@@&@&&@@@@&&@@&@@@@&@B7!YY!YBBB@@@@@&
/// J&@&&@#&@@@@@&&&@@&&@@@@@&&&@@@@&&&GGGB&&#@&@@&@&&@&&@&&&&@&&&@@@@&&@@@&@&&&&&&@@@@&@@&&@@&&&@&&@@@@@@&@&@@@&@&?!!!!77!&@@@@&
/// 7&@@@@@&&&@@@&&&&&&&@@&@#P&@@@@&#BGGGB&@@@@&@@&@@&&&&&&&&@@&@@@@@@@&&&@@&@&&&@@@@&&&@@&@&@@@&@&@@@@&&&&@&&&&@&@&Y!!!!?YB&&@@@
/// B&@@@&&&&&@@@&@&&&&@&&@&#&@&@&#GGGGB&&&@@&&@&&@@@&@@&&&&&&@&&&&@&@&##@@&@@&&&@@@@&&@@@&@@&@@&@&@@@&&@&@@&&&&&&&@&Y!!!?&5!G@@@
/// @Y!#@@@&&&@@&&&@&&@@@@@&&@&&&BGGG#&@@&@&@&&@@&@@&@&&&&&@&&@&&@&&&&@BB##&@@&&&&@@@@@@&&&@&&&&&&@@&&&@@&&&&&@&&&&@@@P!!!!YP&@@&
/// 5B#@@&@&&&&@&&@&@@@&&&&&&@&#GGGB&@@@@&@@@&&&@&&&@&&@&@&&&@@&@&&&&&@&#GGG&@&&&&&@@@&&@@@&&&&&@&@@@@@@@&&@@&@@@&@@@&@G??7!JB@@@
/// ~#@@@@@&&@@&@&@@@@@&@@@@&@&GGG#@&@&&&@@@@&&&@&&&&@@&&&@&@&&&&&@&&&&@&GGGG&@&@@@&@&&@@&&&@&&&&@@@@&&&&@&&@@&@@@@@&&&@&BYYPY&@@
/// !5&&&@@&&@@&&&@@&@@@@@@@&&&##&@&&&@@&@@&@&&@@&&&@@&@&&@&@@&@&&@&@&&@#GGGG&@@@&@&&&&@&&@&@&&@@&@&@&@&&@&&@@&&@@@@@@@@@&G&&#&@&
/// YG@@&&@@&@&&&@&@&&@@&&&&&&&#&@&&&&&@&&&&&&&&&&@&&&@@@@&@@&&@@&&&&&@&#GGGG&@@&@&&&&&@&&&&@@&&@&&@@@&&&&@&&&@@@@@@&@&@@@B5@@&&@
/// #&@&&&@@&&&&&&&&&&&&&&@&&@&#&&@@&@&@@&@@&&@&@&@&@@&@@@&&&&&&&@&&&&&&BGGGG&&&&@@&&@&&&@@&&@@&&&&&@&&&@&&@@@@@@&&&&@@&@&@P5&@&&
/// @&&&&&&&@@&&@&&&&@&@&&&@&@@@&&&@&@&&@@&@&&&&@@@@@@@@@&@@&&@&@@@&&&&@BGGGG&@&&@&&@&&@@&@&&@@&&&&@@@@&&&&@@@&&&@&&@@@&@@@&?5&@@
pragma solidity ^0.8;
import "./TokenReceiver.sol";
contract RIGHTCLICKSAVEAS {
string public symbol = "CC0";
string public name = "RIGHT CLICK SAVE AS";
address public XCOPY = 0x39Cc9C86E67BAf2129b80Fe3414c397492eA8026;
string public CID = "QmTA9VN19dxgFEF1H1dJZvmBCFsZRryBBnLKfUJZzFXNmU";
uint256 public tokenId = 1;
uint256 public totalSupply = 101;
mapping (uint256 => address) owners;
mapping(address => uint256) balances;
mapping(uint256 => address) approvals;
mapping(address => mapping(address => bool)) operatorApprovals;
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
constructor() {}
function RightClickSaveAs() public {
require (tokenId <= 101);
while (tokenId <= 101)
_mint(msg.sender, tokenId++);
}
function supportsInterface(bytes4 interfaceId)
public pure returns (bool) {
return interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f;
}
function balanceOf(address owner)
public view returns (uint256) {
require(address(0) != owner, "error address(0)");
return balances[owner];
}
function ownerOf(uint256 id)
public view returns (address) {
require(owners[id] != address(0), "error !exist");
return owners[id];
}
function tokenURI(uint256 id)
public view returns (string memory) {
require(owners[id] != address(0), "error !exist");
return string(abi.encodePacked(
'data:application/json;base64,',
encode(
bytes (
string(
abi.encodePacked(
"{",
'"name":"RIGHT CLICK SAVE AS CC0",',
'"description":"Why would I buy it when I can right click and save as? - XCOPY",',
'"image":"ipfs://',
CID,
'"',
"}"
)
)
)
)
)
);
}
function approve(address to, uint256 id)
public {
address owner = owners[id];
require(to != owner, "error to");
require(
owner == msg.sender ||
operatorApprovals[owner][msg.sender],
"error owner"
);
approvals[id] = to;
emit Approval(owner, to, id);
}
function getApproved(uint256 id)
public view returns (address) {
require(owners[id] != address(0), "error !exist");
return approvals[id];
}
function setApprovalForAll(address operator, bool approved)
public {
require(operator != msg.sender, "error operator");
operatorApprovals[msg.sender][operator] = approved;
emit ApprovalForAll(msg.sender, operator, approved);
}
function isApprovedForAll(address owner, address operator)
public view returns (bool) {
return operatorApprovals[owner][operator];
}
function transferFrom(address from, address to, uint256 id)
public {
require(owners[id] != address(0), "error !exist");
address owner = owners[id];
require(
msg.sender == owner ||
msg.sender == approvals[id] ||
operatorApprovals[owner][msg.sender],
"error msg.sender"
);
_transfer(owner, from, to, id);
}
function safeTransferFrom(address from, address to, uint256 id, bytes memory data)
public {
address owner = owners[id];
require(
msg.sender == owner ||
msg.sender == approvals[id] ||
operatorApprovals[owner][msg.sender],
"error msg.sender"
);
_transfer(owner, from, to, id);
require(_checkOnERC721Received(from, to, id, data), "error ERC721Receiver");
}
function _mint(address to, uint256 id)
private {
require(to != address(0), "error to");
require(owners[id] == address(0), "error owners[id]");
emit Transfer(address(0), XCOPY, id);
balances[to]++;
owners[id] = to;
emit Transfer(XCOPY, to, id);
require(_checkOnERC721Received(XCOPY, to, id, ""), "error ERC721Receiver");
}
function _transfer(address owner, address from, address to, uint256 id)
private {
require(owner == from, "errors owners[id]");
require(address(0) != to, "errors address(0)");
approve(address(0), id);
balances[from]--;
balances[to]++;
owners[id] = to;
emit Transfer(from, to, id);
}
function _checkOnERC721Received(address from, address to, uint256 id, bytes memory _data)
internal returns (bool) {
uint256 size;
assembly {
size := extcodesize(to)
}
if (size > 0)
try ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, _data) returns (bytes4 retval) {
return retval == ERC721TokenReceiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) revert("error ERC721Receiver");
else assembly {
revert(add(32, reason), mload(reason))
}
}
else return true;
}
function _toString(uint256 value) private pure returns (string memory) {
if (value == 0) return "0";
uint256 digits;
uint256 tmp = value;
while (tmp != 0) {
digits++;
tmp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
function encode(bytes memory data) internal pure returns (string memory) {
uint256 len = data.length;
if (len == 0) return "";
uint256 encodedLen = 4 * ((len + 2) / 3);
bytes memory result = new bytes(encodedLen + 32);
bytes memory table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
assembly {
let tablePtr := add(table, 1)
let resultPtr := add(result, 32)
for {
let i := 0
} lt(i, len) {
} {
i := add(i, 3)
let input := and(mload(add(data, i)), 0xffffff)
let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
out := shl(8, out)
out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
out := shl(8, out)
out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
out := shl(8, out)
out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
out := shl(224, out)
mstore(resultPtr, out)
resultPtr := add(resultPtr, 4)
}
switch mod(len, 3)
case 1 {
mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
}
case 2 {
mstore(sub(resultPtr, 1), shl(248, 0x3d))
}
mstore(result, encodedLen)
}
return string(result);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
interface ERC721TokenReceiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
{
"compilationTarget": {
"RIGHTCLICKSAVEAS.sol": "RIGHTCLICKSAVEAS"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"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":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":"CID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RightClickSaveAs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"XCOPY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"id","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":"id","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","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":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]