@woolball/commander-token-contracts
Version:
Commander token contracts
903 lines • 81.6 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "CommanderToken",
"sourceName": "contracts/CommanderToken.sol",
"abi": [
{
"inputs": [
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
}
],
"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": "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": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_approvedId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_NFTContract",
"type": "address"
},
{
"internalType": "uint256",
"name": "_NFTTokenId",
"type": "uint256"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
}
],
"stateMutability": "view",
"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": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApprovedNft",
"outputs": [
{
"internalType": "address",
"name": "_NFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "ownerNftContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "ownerNftTokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operatorNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "operatorNftTokenId",
"type": "uint256"
}
],
"name": "isApprovedForAll",
"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": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "isBurnable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_dependableContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_dependentTokenId",
"type": "uint256"
}
],
"name": "isDependent",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "isTransferable",
"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": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "ownerOfNft",
"outputs": [
{
"internalType": "address",
"name": "NFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "owner",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_toTokenId",
"type": "uint256"
},
{
"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"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromTokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_toAddress",
"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": "_fromNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromTokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_toTokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_operatorNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_operatorId",
"type": "uint256"
},
{
"internalType": "bool",
"name": "_approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"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": "bool",
"name": "burnable",
"type": "bool"
}
],
"name": "setBurnable",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "contract ICommanderToken",
"name": "_dependableContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_dependentTokenId",
"type": "uint256"
},
{
"internalType": "bool",
"name": "_dependent",
"type": "bool"
}
],
"name": "setDependence",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bool",
"name": "transferable",
"type": "bool"
}
],
"name": "setTransferable",
"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": "_fromNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_toId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"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": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_fromId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_toAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_fromAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_toNFTContractAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_toId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b5060405162004006380380620040068339818101604052810190620000379190620002e8565b818181600090816200004a9190620005b8565b5080600190816200005c9190620005b8565b5050506200007f620000736200008760201b60201c565b6200008f60201b60201c565b50506200069f565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001be8262000173565b810181811067ffffffffffffffff82111715620001e057620001df62000184565b5b80604052505050565b6000620001f562000155565b9050620002038282620001b3565b919050565b600067ffffffffffffffff82111562000226576200022562000184565b5b620002318262000173565b9050602081019050919050565b60005b838110156200025e57808201518184015260208101905062000241565b60008484015250505050565b6000620002816200027b8462000208565b620001e9565b905082815260208101848484011115620002a0576200029f6200016e565b5b620002ad8482856200023e565b509392505050565b600082601f830112620002cd57620002cc62000169565b5b8151620002df8482602086016200026a565b91505092915050565b600080604083850312156200030257620003016200015f565b5b600083015167ffffffffffffffff81111562000323576200032262000164565b5b6200033185828601620002b5565b925050602083015167ffffffffffffffff81111562000355576200035462000164565b5b6200036385828601620002b5565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003c057607f821691505b602082108103620003d657620003d562000378565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000401565b6200044c868362000401565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000499620004936200048d8462000464565b6200046e565b62000464565b9050919050565b6000819050919050565b620004b58362000478565b620004cd620004c482620004a0565b8484546200040e565b825550505050565b600090565b620004e4620004d5565b620004f1818484620004aa565b505050565b5b8181101562000519576200050d600082620004da565b600181019050620004f7565b5050565b601f82111562000568576200053281620003dc565b6200053d84620003f1565b810160208510156200054d578190505b620005656200055c85620003f1565b830182620004f6565b50505b505050565b600082821c905092915050565b60006200058d600019846008026200056d565b1980831691505092915050565b6000620005a883836200057a565b9150826002028217905092915050565b620005c3826200036d565b67ffffffffffffffff811115620005df57620005de62000184565b5b620005eb8254620003a7565b620005f88282856200051d565b600060209050601f8311600181146200063057600084156200061b578287015190505b6200062785826200059a565b86555062000697565b601f1984166200064086620003dc565b60005b828110156200066a5784890151825560018201915060208501945060208101905062000643565b868310156200068a578489015162000686601f8916826200057a565b8355505b6001600288020188555050505b505050505050565b61395780620006af6000396000f3fe608060405234801561001057600080fd5b506004361061021b5760003560e01c806389c8af8311610125578063ba24bb37116100ad578063dfe28fbf1161007c578063dfe28fbf1461067e578063e985e9c51461069a578063f2fde38b146106ca578063f63e7020146106e6578063fe99049a146107025761021b565b8063ba24bb37146105d2578063c6f88d4a14610602578063c74b2ca914610632578063c87b56dd1461064e5761021b565b8063a22cb465116100f4578063a22cb4651461051d578063ac689bcd14610539578063b256456914610555578063b88d4fde14610585578063b922f94c146105a15761021b565b806389c8af83146104955780638da5cb5b146104b15780638fc76be7146104cf57806395d89b41146104ff5761021b565b8063285d2180116101a857806342966c681161017757806342966c68146103df5780636352211e146103fb57806370a082311461042b578063715018a61461045b57806373fc1a0f146104655761021b565b8063285d21801461036f578063336996241461038b578063426a8493146103a757806342842e0e146103c35761021b565b8063095ea7b3116101ef578063095ea7b3146102ce5780630febdd49146102ea5780631cb98226146103065780631d856ea71461033757806323b872dd146103535761021b565b8062fdd58e1461022057806301ffc9a71461025057806306fdde0314610280578063081812fc1461029e575b600080fd5b61023a6004803603810190610235919061262e565b61071e565b604051610247919061267d565b60405180910390f35b61026a600480360381019061026591906126f0565b61082a565b6040516102779190612738565b60405180910390f35b61028861090c565b60405161029591906127e3565b60405180910390f35b6102b860048036038101906102b39190612805565b61099e565b6040516102c59190612841565b60405180910390f35b6102e860048036038101906102e3919061262e565b6109e4565b005b61030460048036038101906102ff919061285c565b610afb565b005b610320600480360381019061031b9190612805565b610b51565b60405161032e9291906128c3565b60405180910390f35b610351600480360381019061034c91906128ec565b610bf3565b005b61036d60048036038101906103689190612967565b610bfa565b005b610389600480360381019061038491906129e6565b610c5a565b005b6103a560048036038101906103a09190612a39565b610c5f565b005b6103c160048036038101906103bc9190612a79565b610d39565b005b6103dd60048036038101906103d89190612967565b610d3e565b005b6103f960048036038101906103f49190612805565b610d5e565b005b61041560048036038101906104109190612805565b610d61565b6040516104229190612841565b60405180910390f35b61044560048036038101906104409190612acc565b610de7565b604051610452919061267d565b60405180910390f35b610463610e9e565b005b61047f600480360381019061047a9190612af9565b610eb2565b60405161048c9190612738565b60405180910390f35b6104af60048036038101906104aa9190612b4c565b610f58565b005b6104b9610f5e565b6040516104c69190612841565b60405180910390f35b6104e960048036038101906104e49190612bb3565b610f88565b6040516104f69190612738565b60405180910390f35b610507611005565b60405161051491906127e3565b60405180910390f35b61053760048036038101906105329190612c06565b611097565b005b610553600480360381019061054e9190612b4c565b6110ad565b005b61056f600480360381019061056a9190612805565b6110b3565b60405161057c9190612738565b60405180910390f35b61059f600480360381019061059a9190612d7b565b6110ba565b005b6105bb60048036038101906105b69190612805565b61111c565b6040516105c99291906128c3565b60405180910390f35b6105ec60048036038101906105e79190612967565b611195565b6040516105f99190612738565b60405180910390f35b61061c60048036038101906106179190612805565b61123b565b6040516106299190612738565b60405180910390f35b61064c60048036038101906106479190612e3c565b611242565b005b61066860048036038101906106639190612805565b611248565b60405161067591906127e3565b60405180910390f35b61069860048036038101906106939190612a39565b6112b0565b005b6106b460048036038101906106af9190612ea3565b61138a565b6040516106c19190612738565b60405180910390f35b6106e460048036038101906106df9190612acc565b61141e565b005b61070060048036038101906106fb91906128ec565b6114a1565b005b61071c6004803603810190610717919061285c565b6114a8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590612f55565b60405180910390fd5b600082036107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c890612fe7565b60405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109055750610904826114ae565b5b9050919050565b60606000805461091b90613036565b80601f016020809104026020016040519081016040528092919081815260200182805461094790613036565b80156109945780601f1061096957610100808354040283529160200191610994565b820191906000526020600020905b81548152906001019060200180831161097757829003601f168201915b5050505050905090565b60006109a982611518565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ef82610d61565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a56906130d9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7e611563565b73ffffffffffffffffffffffffffffffffffffffff161480610aad5750610aac81610aa7611563565b61138a565b5b610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae39061316b565b60405180910390fd5b610af6838361156b565b505050565b610b0c610b06611563565b82611624565b610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b42906131fd565b60405180910390fd5b50505050565b600080610b5d83611518565b6000600a60008581526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509050806000015181602001519250925050915091565b5050505050565b610c0b610c05611563565b82611624565b610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c41906131fd565b60405180910390fd5b610c558383836117b6565b505050565b505050565b610c70610c6a611563565b83611624565b610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca6906131fd565b60405180910390fd5b806007600084815260200190815260200160002060020160016101000a81548160ff0219169083151502179055506007600083815260200190815260200160002060000160009054906101000a900460ff16610d355760016007600084815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505b5050565b505050565b610d59838383604051806020016040528060008152506110ba565b505050565b50565b600080610d6d83611aaf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590613269565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e906132fb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ea6611aec565b610eb06000611b6a565b565b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509392505050565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006007600085815260200190815260200160002060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1690509392505050565b60606001805461101490613036565b80601f016020809104026020016040519081016040528092919081815260200182805461104090613036565b801561108d5780601f106110625761010080835404028352916020019161108d565b820191906000526020600020905b81548152906001019060200180831161107057829003601f168201915b5050505050905090565b6110a96110a2611563565b8383611c30565b5050565b50505050565b6000919050565b6110cb6110c5611563565b83611624565b61110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906131fd565b60405180910390fd5b61111684848484611d9c565b50505050565b600080600061112a84611df8565b90506000151581151514611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90613367565b60405180910390fd5b600061117e85611e3d565b905080600001518160200151935093505050915091565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff1690509392505050565b6000919050565b50505050565b606061125382611518565b600061125d611eca565b9050600081511161127d57604051806020016040528060008152506112a8565b8061128784611ee1565b6040516020016112989291906133c3565b6040516020818303038152906040525b915050919050565b6112c16112bb611563565b83611624565b611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f7906131fd565b60405180910390fd5b806007600084815260200190815260200160002060020160006101000a81548160ff0219169083151502179055506007600083815260200190815260200160002060000160009054906101000a900460ff166113865760016007600084815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611426611aec565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613459565b60405180910390fd5b61149e81611b6a565b50565b5050505050565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61152181611faf565b611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790613269565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115de83610d61565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061163083611ff0565b90506000600281111561164657611645613479565b5b81600281111561165957611658613479565b5b03611670576116688484612098565b9150506117b0565b6001600281111561168457611683613479565b5b81600281111561169757611696613479565b5b036117ae576000806116a88561111c565b915091508173ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016116e5919061267d565b602060405180830381865afa158015611702573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172691906134bd565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614806117665750611765828288610eb2565b5b806117a457508573ffffffffffffffffffffffffffffffffffffffff1661178c8661099e565b73ffffffffffffffffffffffffffffffffffffffff16145b93505050506117b0565b505b92915050565b8273ffffffffffffffffffffffffffffffffffffffff166117d682610d61565b73ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118239061355c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361189b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611892906135ee565b60405180910390fd5b6118a8838383600161212d565b8273ffffffffffffffffffffffffffffffffffffffff166118c882610d61565b73ffffffffffffffffffffffffffffffffffffffff161461191e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119159061355c565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611aaa8383836001612253565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611af4611563565b73ffffffffffffffffffffffffffffffffffffffff16611b12610f5e565b73ffffffffffffffffffffffffffffffffffffffff1614611b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5f9061365a565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c95906136c6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d8f9190612738565b60405180910390a3505050565b611da78484846117b6565b611db384848484612259565b611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613758565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611e1a83611e3d565b6000015173ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611e45612556565b600860008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509050919050565b606060405180602001604052806000815250905090565b606060006001611ef0846123e0565b01905060008167ffffffffffffffff811115611f0f57611f0e612c50565b5b6040519080825280601f01601f191660200182016040528015611f415781602001600182028036833780820191505090505b509050600082602001820190505b600115611fa4578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611f9857611f97613778565b5b04945060008503611f4f575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16611fd183611aaf565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080611ffc83611aaf565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461203c576000915050612093565b600061204784611e3d565b9050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461208c57600192505050612093565b5060029150505b919050565b6000806120a483610d61565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120e657506120e5818561138a565b5b8061212457508373ffffffffffffffffffffffffffffffffffffffff1661210c8461099e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b600181111561224d57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146121c15780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b991906137d6565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461224c5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612244919061380a565b925050819055505b5b50505050565b50505050565b600061227a8473ffffffffffffffffffffffffffffffffffffffff16612533565b156123d3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122a3611563565b8786866040518563ffffffff1660e01b81526004016122c59493929190613893565b6020604051808303816000875af192505050801561230157506040513d601f19601f820116820180604052508101906122fe91906138f4565b60015b612383573d8060008114612331576040519150601f19603f3d011682016040523d82523d6000602084013e612336565b606091505b50600081510361237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290613758565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123d8565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061243e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161243457612433613778565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061247b576d04ee2d6d415b85acef8100000000838161247157612470613778565b5b0492506020810190505b662386f26fc1000083106124aa57662386f26fc1000083816124a05761249f613778565b5b0492506010810190505b6305f5e10083106124d3576305f5e10083816124c9576124c8613778565b5b0492506008810190505b61271083106124f85761271083816124ee576124ed613778565b5b0492506004810190505b6064831061251b576064838161251157612510613778565b5b0492506002810190505b600a831061252a576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125c58261259a565b9050919050565b6125d5816125ba565b81146125e057600080fd5b50565b6000813590506125f2816125cc565b92915050565b6000819050919050565b61260b816125f8565b811461261657600080fd5b50565b60008135905061262881612602565b92915050565b6000806040838503121561264557612644612590565b5b6000612653858286016125e3565b925050602061266485828601612619565b9150509250929050565b612677816125f8565b82525050565b6000602082019050612692600083018461266e565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126cd81612698565b81146126d857600080fd5b50565b6000813590506126ea816126c4565b92915050565b60006020828403121561270657612705612590565b5b6000612714848285016126db565b91505092915050565b60008115159050919050565b6127328161271d565b82525050565b600060208201905061274d6000830184612729565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561278d578082015181840152602081019050612772565b60008484015250505050565b6000601f19601f8301169050919050565b60006127b582612753565b6127bf818561275e565b93506127cf81856020860161276f565b6127d881612799565b840191505092915050565b600060208201905081810360008301526127fd81846127aa565b905092915050565b60006020828403121561281b5761281a612590565b5b600061282984828501612619565b91505092915050565b61283b816125ba565b82525050565b60006020820190506128566000830184612832565b92915050565b6000806000806080858703121561287657612875612590565b5b6000612884878288016125e3565b9450506020612895878288016125e3565b93505060406128a687828801612619565b92505060606128b787828801612619565b91505092959194509250565b60006040820190506128d86000830185612832565b6128e5602083018461266e565b9392505050565b600080600080600060a0868803121561290857612907612590565b5b6000612916888289016125e3565b955050602061292788828901612619565b9450506040612938888289016125e3565b935050606061294988828901612619565b925050608061295a88828901612619565b9150509295509295909350565b6000806000606084860312156129805761297f612590565b5b600061298e868287016125e3565b935050602061299f868287016125e3565b92505060406129b086828701612619565b9150509250925092565b6129c38161271d565b81146129ce57600080fd5b50565b6000813590506129e0816129ba565b92915050565b6000806000606084860312156129ff576129fe612590565b5b6000612a0d868287016125e3565b9350506020612a1e86828701612619565b9250506040612a2f868287016129d1565b9150509250925092565b60008060408385031215612a5057612a4f612590565b5b6000612a5e85828601612619565b9250506020612a6f858286016129d1565b9150509250929050565b600080600060608486031215612a9257612a91612590565b5b6000612aa0868287016125e3565b9350506020612ab186828701612619565b9250506040612ac286828701612619565b9150509250925092565b600060208284031215612ae257612ae1612590565b5b6000612af0848285016125e3565b91505092915050565b600080600060608486031215612b1257612b11612590565b5b6000612b20868287016125e3565b9350506020612b3186828701612619565b9250506040612b42868287016125e3565b9150509250925092565b60008060008060808587031215612b6657612b65612590565b5b6000612b74878288016125e3565b9450506020612b8587828801612619565b9350506040612b96878288016125e3565b9250506060612ba787828801612619565b91505092959194509250565b600080600060608486031215612bcc57612bcb612590565b5b6000612bda86828701612619565b9350506020612beb868287016125e3565b9250506040612bfc86828701612619565b9150509250925092565b60008060408385031215612c1d57612c1c612590565b5b6000612c2b858286016125e3565b9250506020612c3c858286016129d1565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c8882612799565b810181811067ffffffffffffffff82111715612ca757612ca6612c50565b5b80604052505050565b6000612cba612586565b9050612cc68282612c7f565b919050565b600067ffffffffffffffff821115612ce657612ce5612c50565b5b612cef82612799565b9050602081019050919050565b82818337600083830152505050565b6000612d1e612d1984612ccb565b612cb0565b905082815260208101848484011115612d3a57612d39612c4b565b5b612d45848285612cfc565b509392505050565b600082601f830112612d6257612d61612c46565b5b8135612d72848260208601612d0b565b91505092915050565b60008060008060808587031215612d9557612d94612590565b5b6000612da3878288016125e3565b9450506020612db4878288016125e3565b9350506040612dc587828801612619565b925050606085013567ffffffffffffffff811115612de657612de5612595565b5b612df287828801612d4d565b91505092959194509250565b6000612e09826125ba565b9050919050565b612e1981612dfe565b8114612e2457600080fd5b50565b600081359050612e3681612e10565b92915050565b60008060008060808587031215612e5657612e55612590565b5b6000612e6487828801612619565b9450506020612e7587828801612e27565b9350506040612e8687828801612619565b9250506060612e97878288016129d1565b91505092959194509250565b60008060408385031215612eba57612eb9612590565b5b6000612ec8858286016125e3565b9250506020612ed9858286016125e3565b9150509250929050565b7f4552433732313a20636f6e74726163742061646472657373207a65726f20697360008201527f206e6f7420612076616c6964206f776e65720000000000000000000000000000602082015250565b6000612f3f60328361275e565b9150612f4a82612ee3565b604082019050919050565b60006020820190508181036000830152612f6e81612f32565b9050919050565b7f4552433732313a204e465420746f6b656e204944207a65726f206973206e6f7460008201527f20612076616c6964206f776e6572000000000000000000000000000000000000602082015250565b6000612fd1602e8361275e565b9150612fdc82612f75565b604082019050919050565b6000602082019050818103600083015261300081612fc4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061304e57607f821691505b60208210810361306157613060613007565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006130c360218361275e565b91506130ce82613067565b604082019050919050565b600060208201905081810360008301526130f2816130b6565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613155603d8361275e565b9150613160826130f9565b604082019050919050565b6000602082019050818103600083015261318481613148565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006131e7602d8361275e565b91506131f28261318b565b604082019050919050565b60006020820190508181036000830152613216816131da565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061325360188361275e565b915061325e8261321d565b602082019050919050565b6000602082019050818103600083015261328281613246565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006132e560298361275e565b91506132f082613289565b604082019050919050565b60006020820190508181036000830152613314816132d8565b9050919050565b7f436f6d6d616e646572546f6b656e3a20696e76616c696420746f6b656e204944600082015250565b600061335160208361275e565b915061335c8261331b565b602082019050919050565b6000602082019050818103600083015261338081613344565b9050919050565b600081905092915050565b600061339d82612753565b6133a78185613387565b93506133b781856020860161276f565b80840191505092915050565b60006133cf8285613392565b91506133db8284613392565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061344360268361275e565b915061344e826133e7565b604082019050919050565b6000602082019050818103600083015261347281613436565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000815190506134b7816125cc565b92915050565b6000602082840312156134d3576134d2612590565b5b60006134e1848285016134a8565b91505092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000