@paulstinchcombe/kami721c-sdk
Version:
SDK for interacting with KAMI721C NFT contracts
1,249 lines • 93.7 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "KAMI721C",
"sourceName": "contracts/KAMI721C.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "usdcAddress_",
"type": "address"
},
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
},
{
"internalType": "string",
"name": "baseTokenURI_",
"type": "string"
},
{
"internalType": "uint256",
"name": "initialMintPrice_",
"type": "uint256"
},
{
"internalType": "address",
"name": "platformAddress_",
"type": "address"
},
{
"internalType": "uint96",
"name": "platformCommissionPercentage_",
"type": "uint96"
}
],
"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": [
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"indexed": false,
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "royalties",
"type": "tuple[]"
}
],
"name": "MintRoyaltiesUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "platformAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "PlatformCommissionPaid",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint96",
"name": "newPercentage",
"type": "uint96"
},
{
"indexed": false,
"internalType": "address",
"name": "newPlatformAddress",
"type": "address"
}
],
"name": "PlatformCommissionUpdated",
"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": false,
"internalType": "uint96",
"name": "newPercentage",
"type": "uint96"
}
],
"name": "RoyaltyPercentageUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"indexed": false,
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "royalties",
"type": "tuple[]"
}
],
"name": "TokenMintRoyaltiesUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "salePrice",
"type": "uint256"
}
],
"name": "TokenSold",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"indexed": false,
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "royalties",
"type": "tuple[]"
}
],
"name": "TokenTransferRoyaltiesUpdated",
"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"
},
{
"anonymous": false,
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"indexed": false,
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "royalties",
"type": "tuple[]"
}
],
"name": "TransferRoyaltiesUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "TransferRoyaltyDistributed",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "OWNER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PLATFORM_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "RENTER_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": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getMintRoyaltyReceivers",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "",
"type": "tuple[]"
}
],
"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": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getTransferRoyaltyReceivers",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "",
"type": "tuple[]"
}
],
"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": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "mintPrice",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "platformAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "platformCommissionPercentage",
"outputs": [
{
"internalType": "uint96",
"name": "",
"type": "uint96"
}
],
"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": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "royaltyAmount",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "royaltyPercentage",
"outputs": [
{
"internalType": "uint96",
"name": "",
"type": "uint96"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "salePrice",
"type": "uint256"
}
],
"name": "sellToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "baseURI",
"type": "string"
}
],
"name": "setBaseURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "newMintPrice",
"type": "uint256"
}
],
"name": "setMintPrice",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "royalties",
"type": "tuple[]"
}
],
"name": "setMintRoyalties",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint96",
"name": "newPlatformCommissionPercentage",
"type": "uint96"
},
{
"internalType": "address",
"name": "newPlatformAddress",
"type": "address"
}
],
"name": "setPlatformCommission",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint96",
"name": "newRoyaltyPercentage",
"type": "uint96"
}
],
"name": "setRoyaltyPercentage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "royalties",
"type": "tuple[]"
}
],
"name": "setTokenMintRoyalties",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "royalties",
"type": "tuple[]"
}
],
"name": "setTokenTransferRoyalties",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint96",
"name": "feeNumerator",
"type": "uint96"
}
],
"internalType": "struct KAMI721C.RoyaltyData[]",
"name": "royalties",
"type": "tuple[]"
}
],
"name": "setTransferRoyalties",
"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": "index",
"type": "uint256"
}
],
"name": "tokenByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "tokenOfOwnerByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "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": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "usdcToken",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x604060a081523462000765576200450d803803806200001e816200076a565b928339810160e0828203126200076557620000398262000790565b60208381015190939192916001600160401b039182811162000765578362000063918301620007a5565b90868101518381116200076557846200007e918301620007a5565b9360608201519084821162000765576200009a918301620007a5565b9260808201519060c0620000b160a0850162000790565b9301516001600160601b03811695908690036200076557845196828811620004c2576001978854968988811c981680156200075a575b8c891014620004a15781908c601f998a811162000701575b50508c908983116001146200068d5760009262000681575b5050600019600383901b1c191690891b1788555b805190838211620004c257600254908982811c9216801562000676575b8c831014620004a1578b82898594116200061c575b50508b90888311600114620005b057600092620005a4575b5050600019600383901b1c191690881b176002555b601580546001600160601b03199081166103e8179091556001600160a01b03988916989095908915620005605785169889156200051c576107d08811620004d8576080528151928311620004c257600f54918883811c93168015620004b7575b8b841014620004a157828285941162000448575b508a918311600114620003de57600092620003d2575b5050600019600383901b1c191690861b17600f555b600e5560601b161760105560008052600083528360002033600052835260ff8460002054161562000395575b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e80600052600084528460002033600052845260ff8560002054161562000356575b507f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e9283600052600081528460002083600052815260ff8560002054161562000316575b8451613cd590816200081882396080518181816119e301528181611a1e01528181611a9f01528181611b8a01528181611f45015261220f0152f35b836000526000815284600020908360005252836000209060ff198254161790553391600080516020620044ed833981519152600080a438808080620002db565b806000526000845284600020336000528452846000208260ff1982541617905533903390600080516020620044ed833981519152600080a43862000297565b600080526000835283600020336000528352836000208160ff1982541617905533336000600080516020620044ed8339815191528180a462000255565b01519050388062000214565b90889350601f19831691600f6000528b6000209260005b8d82821062000431575050841162000417575b505050811b01600f5562000229565b015160001960f88460031b161c1916905538808062000408565b8385015186558c97909501949384019301620003f5565b90919250600f6000528a6000208380860160051c8201928d871062000497575b9186958c929594930160051c01915b82811062000487575050620001fe565b600081558695508b910162000477565b9250819262000468565b634e487b7160e01b600052602260045260246000fd5b92607f1692620001ea565b634e487b7160e01b600052604160045260246000fd5b8b5162461bcd60e51b8152600481018c9052601c60248201527f506c6174666f726d20636f6d6d697373696f6e20746f6f2068696768000000006044820152606490fd5b8b5162461bcd60e51b8152600481018c9052601860248201527f496e76616c696420706c6174666f726d206164647265737300000000000000006044820152606490fd5b8b5162461bcd60e51b8152600481018c9052601460248201527f496e76616c6964205553444320616464726573730000000000000000000000006044820152606490fd5b01519050388062000175565b8a9350908c91601f198416600260005283600020936000905b828210620006045750508411620005ea575b505050811b016002556200018a565b015160001960f88460031b161c19169055388080620005db565b8385015186558e979095019493840193018f620005c9565b90919250600260005288826000209181860160051c83019386106200066c575b918c91869594930160051c01915b8281106200065c57508d91506200015d565b600081558594508c91016200064a565b925081926200063c565b91607f169162000148565b01519050388062000117565b8b9350908d91601f1984168560005283600020936000905b828210620006df5750508411620006c5575b505050811b0188556200012b565b015160001960f88460031b161c19169055388080620006b7565b91929395968291958786015181550195019301908f918e9695949392620006a5565b909192508b60005289826000209181860160051c830193861062000750575b918d91869594930160051c01915b8281106200074057508e9150620000ff565b600081558594508d91016200072e565b9250819262000720565b97607f1697620000e7565b600080fd5b6040519190601f01601f191682016001600160401b03811183821017620004c257604052565b51906001600160a01b03821682036200076557565b919080601f84011215620007655782516001600160401b038111620004c257602090620007db601f8201601f191683016200076a565b92818452828287010111620007655760005b8181106200080357508260009394955001015290565b8581018301518482018401528201620007ed56fe6080806040526004908136101561001557600080fd5b60003560e01c90816301ffc9a7146125b65750806306fdde0314612508578063081812fc146124ea578063095ea7b31461236f5780630a0a35151461223e57806311eac855146121f95780631249c58b14611ef857806318160ddd14611eda57806323b872dd14611eb6578063248a9ca314611e885780632a55205a14611e4b5780632f2ff15d14611d995780632f745c5914611ce657806336568abe14611c565780633e11741f1461195457806342842e0e1461193d57806342966c68146116af578063463dace014611690578063492ae5a3146114e15780634f6ccce71461145057806355f804b3146112865780635e27a7751461125b578063602481b614610f7c5780636352211e14610f4c5780636817c76c14610f2e57806370824c5c14610ef357806370a0823114610ec85780638a71bb2d14610ea157806391d1485414610e5457806392303e0614610e2d57806395d89b4114610d5e5780639f6d68b014610c85578063a217fddf14610c69578063a22cb46514610b96578063b88d4fde14610b11578063b97c9f7714610ad6578063c87b56dd146107fe578063d547741f146107bd578063dbe55e561461079c578063e58378bb14610773578063e5f2e0cc1461050c578063e985e9c5146104b6578063f249fd161461024a5763f4a0a5281461020557600080fd5b3461024557602036600319011261024557336000908152600080516020613c60833981519152602052604090205461023f9060ff1661292b565b35600e55005b600080fd5b50346102455760403660031901126102455761026461289d565b61026c6126d4565b336000908152600080516020613c60833981519152602090815260409091205490919061029b9060ff1661292b565b6001600160a01b038116928315610472576001600160601b0316936107d0851161042e577f410d007abb80c65964518a8b4f3007c4b354d36d7cfb908d3e3fa6411506e27460408686868660105460601c906001600160601b03199060601b168417601055828103610314575b508351928352820152a1005b7f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e9081600052600083528560002081600052835260ff8660002054166103c3575b5080600052600082528460002083600052825260ff8560002054166103085780600052600082528460002083600052825284600020600160ff198254161790558233917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a485610308565b81600052600083528560002081600052835260ff86600020541615610355578160005260008352856000208160005283528560002060ff1981541690553390827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a486610355565b60405162461bcd60e51b8152908101839052601c60248201527f506c6174666f726d20636f6d6d697373696f6e20746f6f2068696768000000006044820152606490fd5b60405162461bcd60e51b8152808601849052601860248201527f496e76616c696420706c6174666f726d206164647265737300000000000000006044820152606490fd5b34610245576040366003190112610245576104cf6126be565b6104d76126d4565b9060018060a01b03809116600052600660205260406000209116600052602052602060ff604060002054166040519015158152f35b50346102455761051b3661271a565b90600080516020613c8083398151915260005260209360008552604060002033600052855261055160ff6040600020541661292b565b600084815260036020526040902054610574906001600160a01b03161515612970565b83600052601480865261058a60406000206129dc565b6000906000905b8582106107015750506127106105b2816001600160601b0380941614612f5b565b841580156105f3575b867fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e62087876105ee60405192839283612b95565b0390a2005b6106ec5761060084612a3a565b6106198361060f8a8801612a8d565b169283111561380b565b6001600160a01b039081169384156106a857509061069e939291600c7fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e620989960405195610665876127de565b865280860193845260008b815291905260409020935191516001600160a01b039190921616911660a01b6001600160a01b031916179055565b83923880806105bb565b60405162461bcd60e51b8152908101899052601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606490fd5b603283634e487b7160e01b6000525260246000fd5b909160019061074b906107306001600160a01b03610728610723888c8c612a14565b612a3a565b161515612a4e565b6107458a61073f878b8b612a14565b01612a8d565b90612aa1565b928760005282895261076c6040600020610766838a8a612a14565b90612af3565b0190610591565b34610245576000366003190112610245576020604051600080516020613c808339815191528152f35b3461024557600036600319011261024557602060105460601c604051908152f35b5034610245576040366003190112610245576107fc90356107dc6126d4565b908060005260006020526107f7600160406000200154613461565b613797565b005b503461024557602090816003193601126102455780356000818152600360205260409020549091839161083b906001600160a01b03161515612fc2565b604051906000600f549161084e836128b3565b808552848681019360019588600182169182600014610abb575050600114610a5d575b61087d9250038561282a565b835115610a41578586916000977a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000009081811015610a33575b50506d04ee2d6d415b85acef810000000080841015610a25575b50662386f26fc1000080841015610a16575b506305f5e10080841015610a07575b50612710808410156109f9575b505060648210156109e9575b600a809210156109df575b92600187019381602161093a6109248861284b565b97610932604051998a61282a565b80895261284b565b878a019a90601f1901368c37870101905b6109a9575b505050509361098f9392916109836109749660405197889551809288880190612676565b84019151809386840190612676565b0103808452018261282a565b905b6109a5604051928284938452830190612699565b0390f35b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049182156109da5791908261094b565b610950565b956001019561090f565b9590606460029104910195610904565b9701969091049038806108f8565b600891989304920196386108eb565b601091989304920196386108dc565b8791989304920196386108ca565b6040995004925038806108b0565b505050505050604051610a538161280f565b6000815290610991565b5050600f60005284867f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802866000915b858310610aa257505061087d9350820101610871565b80919294505483858b0101520191018790868893610a8c565b60ff1916875261087d94151560051b84010191506108719050565b346102455760003660031901126102455760206040517f3b652633b3026fa70803ad50b58b0ae884cefe3497643f62c67c466f41a6e88d8152f35b503461024557608036600319011261024557610b2b6126be565b90610b346126d4565b91604435606435936001600160401b038511610245573660238601121561024557610b6e610b91948660246107fc98369301359101612866565b92610b81610b7c843361316d565b612d3a565b610b8c838383613235565b613af0565b6138bd565b503461024557604036600319011261024557610bb06126be565b60243590811515809203610245576001600160a01b031691338314610c255750336000526006602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60649060206040519162461bcd60e51b8352820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b3461024557600036600319011261024557602060405160008152f35b5034610245576020366003190112610245576001600160601b03610ca761289d565b336000908152600080516020613c608339815191526020526040902054610cd09060ff1661292b565b1690610bb88211610d1a577f8df4d6c1a5c8e6c4d7a71d760d42122503a5244aeab98f2ff8e3244be07a44e3602083806001600160601b03196015541617601555604051908152a1005b60649060206040519162461bcd60e51b8352820152601b60248201527f526f79616c74792070657263656e7461676520746f6f206869676800000000006044820152fd5b3461024557600036600319011261024557604051600254600082610d81836128b3565b9182825260209360019085600182169182600014610e0d575050600114610db0575b506109919250038361282a565b84915060026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace906000915b858310610df5575050610991935082010185610da3565b80548389018501528794508693909201918101610dde565b60ff19168582015261099195151560051b8501019250879150610da39050565b346102455760003660031901126102455760206001600160601b0360105416604051908152f35b503461024557604036600319011261024557610e6e6126d4565b9035600052600060205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346102455760003660031901126102455760206001600160601b0360155416604051908152f35b34610245576020366003190112610245576020610eeb610ee66126be565b613031565b604051908152f35b346102455760003660031901126102455760206040517f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e8152f35b34610245576000366003190112610245576020600e54604051908152f35b503461024557602036600319011261024557610f6a6020913561300e565b6040516001600160a01b039091168152f35b503461024557602090816003193601126102455780356001600160401b03811161024557610fad90369083016126ea565b91600080516020613c80833981519152600052600084526040600020336000528452610fe060ff6040600020541661292b565b601280546000825580611218575b5060009060005b85811061111e575050612710611016816001600160601b0380941614612f5b565b84158015611055575b6040517fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b9080611050898983612b95565b0390a1005b6106ec5761106284612a3a565b61107c611070888701612a8d565b9384169283111561380b565b6001600160a01b03169283156110da57507fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b956040516110bb816127de565b848152015260a01b6001600160a01b03191617600b553880808061101f565b60405162461bcd60e51b8152908101879052601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606490fd5b6001600160a01b039261114c9061113d85610728610723868c8c612a14565b6107458961073f858b8b612a14565b92611158828888612a14565b8354600160401b81101561120357600181018086558110156111ee57916111c88a6111e89360019695886000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344401936111b182612a3a565b85546001600160a01b031916911617845501612a8d565b81546001600160a01b031660a09190911b6001600160a01b031916179055565b01610ff5565b603287634e487b7160e01b6000525260246000fd5b604187634e487b7160e01b6000525260246000fd5b816000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444908101905b81811061124f5750610fee565b60008155600101611242565b50346102455760203660031901126102455761127a6109a59135612ecb565b60405191829182612782565b503461024557602080600319360112610245576001600160401b039082358281116102455736602382011215610245576112c99036906024818701359101612866565b92600080516020613c808339815191526000526000825260406000203360005282526112fc60ff6040600020541661292b565b835192831161143b5750611311600f546128b3565b601f81116113d7575b5080601f83116001146113565750819260009261134b575b5050600019600383901b1c191660019190911b17600f55005b015190503880611332565b90601f19831693600f6000527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802926000905b8682106113bf57505083600195106113a6575b505050811b01600f55005b015160001960f88460031b161c1916905538808061139b565b80600185968294968601518155019501930190611388565b600f6000527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802601f840160051c810191838510611431575b601f0160051c01905b818110611425575061131a565b60008155600101611418565b909150819061140f565b604190634e487b7160e01b6000525260246000fd5b50346102455760203660031901126102455780359060095482101561148857602061147a83612abc565b90546040519160031b1c8152f35b60849060206040519162461bcd60e51b8352820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152fd5b50346102455760209060206003193601126102455780356001600160401b0381116102455761151390369083016126ea565b336000908152600080516020613c60833981519152602052604090205490929061153f9060ff1661292b565b6011938454600086558061164d575b5060009460005b8581106115b4577f89bf541e521f4acc4850978648c2c61d31963c71ae31181f246302f902941d7086866115a56127108b61159d6001600160601b0391826010541690612aa1565b161115612b35565b61105060405192839283612b95565b6001600160a01b03966115e2906115d389610728610723868c8c612a14565b6107458561073f858b8b612a14565b966115ee828888612a14565b8354600160401b81101561120357600181018086558110156111ee57916111c8866116479360019695886000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6801936111b182612a3a565b01611555565b856000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68908101905b818110611684575061154e565b60008155600101611677565b50346102455760203660031901126102455761127a6109a59135612e96565b50346102455760209081600319360112610245578035916116cf8361300e565b6001600160a01b0391903390831603611908576116eb8461300e565b808316908161186c57505060095484600052600a825280604060002055600160401b81101561185757846117288260016117419401600955612abc565b90919082549060031b91821b91600019901b1916179055565b600954600019908181019081116118425785600052600a835261176960406000205491612abc565b90549060031b1c61177d8161172884612abc565b600052600a83526040600020558460005260006040812055600954801561182d5791816003926000969594016117b281612abc565b83825491871b1b191690556009556117c98761300e565b938787526005835260408720946001600160601b0360a01b95868154169055169485875282526040862090815401905585855252604083209081541690557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4005b603185634e487b7160e01b6000525260246000fd5b601185634e487b7160e01b6000525260246000fd5b604184634e487b7160e01b6000525260246000fd5b61187590613031565b6000198101919082116118425785600052600883526040600020548281036118c2575b50856000526000604081205560005260078252604060002090600052815260006040812055611741565b8160005260078452604060002083600052845260406000205482600052600785526040600020826000528552806040600020556000526008845260406000205538611898565b826064916040519162461bcd60e51b8352820152600f60248201526e2737ba103a37b5b2b71037bbb732b960891b6044820152fd5b34610245576107fc61194e3661274d565b91612e70565b50346102455760603660031901126102455761196e6126be565b9061197a60243561300e565b906001600160a01b0382163303611c1257506127106119a66001600160601b03601554166044356129b3565b04916127106119c26001600160601b03601054166044356129b3565b046119d86119d08286612d2d565b604435612cff565b90611a0760443530857f00000000000000000000000000000000000000000000000000000000000000006130d4565b84611afe575b611a429293945080611a93575b50837f000000000000000000000000000000000000000000000000000000000000000061312c565b611a4f6024358284612e70565b60405160443581526001600160a01b039182169290911690602435907f3d5eb834b5d6cadc063c171c3f25f60bca8ea892ba9db25342278927d0af955690602090a4005b611ac38160105460601c7f000000000000000000000000000000000000000000000000000000000000000061312c565b60105460601c906040519081527f2a0edbc96cbdf959b1243e79c51b9bb83b7867279441dc220825d561c2fbb2c6602060243592a338611a1a565b6024356000908152601460205260409020805415611c0757611b1f90612d9c565b8051611b2c575b50611a0d565b9290939160005b8451811015611bf65780612710611b636001600160601b036020611b596001968b612d19565b510151168a6129b3565b0480611b71575b5001611b33565b611bae81848060a01b03611b85858b612d19565b5151167f000000000000000000000000000000000000000000000000000000000000000061312c565b828060a01b03611bbe8389612d19565b515116906040519081527f5afae38153b1f3a22beefc75f2c88831b35f5359c45067c73310b55352c6c225602060243592a338611b6a565b509194508493909250611a42611b26565b50611b1f6012612d9c565b60649060206040519162461bcd60e51b8352820152601960248201527f4f6e6c7920746f6b656e206f776e65722063616e2073656c6c000000000000006044820152fd5b503461024557604036600319011261024557611c706126d4565b336001600160a01b03821603611c8a576107fc9135613797565b60405162461bcd60e51b8152602081840152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b503461024557604036600319011261024557611d006126be565b60243591611d0d82613031565b831015611d41575060018060a01b031660005260076020526040600020906000526020526020604060002054604051908152f35b60849060206040519162461bcd60e51b8352820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152fd5b50346102455760403660031901126102455735611db46126d4565b816000526000602052611dce600160406000200154613461565b81600052600060205260406000209060018060a01b0316908160005260205260ff6040600020541615611dfd57005b8160005260006020526040600020816000526020526040600020600160ff1982541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4005b503461024557604036600319011261024557611e6b906024359035612de5565b604080516001600160a01b03939093168352602083019190915290f35b5034610245576020366003190112610245573560005260006020526020600160406000200154604051908152f35b34610245576107fc611ec73661274d565b91611ed5610b7c843361316d565b613235565b34610245576000366003190112610245576020600954604051908152f35b503461024557600036600319011261024557600e5490612710916001600160601b039083611f2a8360105416836129b3565b0491611f34612c4e565b92611f3f8184612cff565b90611f6d7f0000000000000000000000000000000000000000000000000000000000000000943033876130d4565b806121e3575b506000918451612169575b50611f8c9293949550612cff565b9081612125575b505050600d5460018101600d5560405190611fad8261280f565b6000825233156120e157600081815260036020526040902054611fdc906001600160a01b031615155b15613b69565b60095481600052602090600a825280604060002055600160401b8110156120cc5782916107fc9561201d610b91969561172885600160039701600955612abc565b61202633613031565b33600052600783526040600020816000528352846040600020558460005260088352604060002055612070611fd685600052600360205260018060a01b0360406000205416151590565b33600052815260406000206001815401905582600052526040600020336001600160601b0360a01b825416179055803360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4336139fe565b604185634e487b7160e01b6000525260246000fd5b60405162461bcd60e51b8152602081850181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606490fd5b8251156121535761214b926001600160a01b039061214290612d0c565b5151169061312c565b388080611f93565b612164925060105460601c9061312c565b61214b565b60005b85518110156121d45787612190836020612186858b612d19565b51015116856129b3565b04806121a0575b5060010161216c565b90936001916121cd916121c8826001600160a01b036121bf8a8d612d19565b5151168a61312c565b612d2d565b9390612197565b50949550859450611f8c611f7e565b6121f39060105460601c8561312c565b38611f73565b34610245576000366003190112610245576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102455761224c3661271a565b336000908152600080516020613c6083398151915260209081526040909120549093929061227c9060ff1661292b565b60008381526003602052604090205461229f906001600160a01b03161515612970565b826000526013806020526122b660406000206129dc565b6000946000905b848210612316575050506123076127107faaf4e53c3b98ff4419060c1d6732d9fdaf27c8d404b09e9b4049b6442b71e8b5949561159d6001600160601b0391826010541690612aa1565b6105ee60405192839283612b95565b919590919060019061234a9061233b6001600160a01b03610728610723888b8b612a14565b6107458461073f878a8a612a14565b92866000528783526123656040600020610766838989612a14565b01909591956122bd565b5034610245576040366003190112610245576123896126be565b602435916001600160a01b039081806123a18661300e565b1693169280841461249c57803314908115612477575b501561240d5750600083815260056020526040902080546001600160a01b031916831790556123e58361300e565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60849060206040519162461bcd60e51b8352820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b9050600052600660205260406000203360005260205260ff60406000205416386123b7565b604051