diff --git a/serverless/Serverless Stack Diagram.png b/serverless/Serverless Stack Diagram.png new file mode 100644 index 0000000..51a298f Binary files /dev/null and b/serverless/Serverless Stack Diagram.png differ diff --git a/serverless/package.json b/serverless/package.json index beae1cb..2f37f76 100644 --- a/serverless/package.json +++ b/serverless/package.json @@ -8,7 +8,7 @@ "invoke:build": "yarn build && serverless invoke local --function submitBuildInfo", "prisma:generate": "npx prisma generate", "prisma:pull": "npx prisma db pull --force", - "start": "serverless offline", + "start": "yarn build && serverless offline", "generate:layers": "./scripts/prepare-prisma-client-lambda-layer.sh && ./scripts/prepare-libs-lambda-layer.sh && ./scripts/prepare-node-modules-lambda-layer.sh", "deploy:dev": "yarn build && yarn generate:layers && yarn sls deploy --stage dev" }, @@ -22,6 +22,7 @@ "esbuild": "^0.17.12", "json-schema-to-ts": "^2.7.2", "serverless": "^3.28.1", + "serverless-dotenv-plugin": "^6.0.0", "serverless-esbuild": "^1.42.0", "serverless-offline": "^12.0.4", "ts-node": "^10.9.1", @@ -35,7 +36,6 @@ "@prisma/client": "^4.13.0", "@types/node": "^18.15.11", "aws-sdk": "^2.1342.0", - "dotenv": "^16.0.3", "prisma": "^4.13.0", "ts-node": "^10.9.1", "typescript": "^5.0.4", diff --git a/serverless/prisma/schema.prisma b/serverless/prisma/schema.prisma index 4ecf390..3bd0b5d 100644 --- a/serverless/prisma/schema.prisma +++ b/serverless/prisma/schema.prisma @@ -1,5 +1,6 @@ generator client { provider = "prisma-client-js" + binaryTargets = ["native", "rhel-openssl-1.0.x"] } datasource db { diff --git a/serverless/scripts/deploy.sh b/serverless/scripts/deploy.sh new file mode 100755 index 0000000..982ad41 --- /dev/null +++ b/serverless/scripts/deploy.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +bold=$(tput bold) +normal=$(tput sgr0) + +source .env + +echo "${bold}Starting the deployment process${normal}" + +echo "${bold}Installing dependencies via Yarn${normal}" + +yarn + +if [[ -z "${DATABASE_URL}" ]]; then + printf "%s" "Enter the Mongo Database URL: " + read -r DB_URL + export DATABASE_URL=$DB_URL +fi + +if [[ -z "${JSON_RPC}" ]]; then + printf "%s" "Enter the JSON RPC endpoint: " + read -r JSON_RPC + export JSON_RPC=$JSON_RPC +fi + +if [[ -z "${CONTRACT_ADDRESS}" ]]; then + printf "%s" "Enter the contract address: " + read -r CONTRACT_ADDRESS + export CONTRACT_ADDRESS=$CONTRACT_ADDRESS +fi + +if [[ -z "${PRIVATE_KEY}" ]]; then + printf "%s" "Enter the private key: " + read -r PRIVATE_KEY + export PRIVATE_KEY=$PRIVATE_KEY +fi + +if [[ -z "${AWS_ACCESS_KEY_ID}" ]]; then + printf "%s" "Enter the AWS access key ID: " + read -r AWS_ACCESS_KEY_ID + export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID +fi + +if [[ -z "${AWS_SECRET_ACCESS_KEY}" ]]; then + printf "%s" "Enter the AWS secret access key: " + read -r AWS_SECRET_ACCESS_KEY + export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY +fi + +echo "${bold}Copying the Prisma schema file to function directories${normal}" +cp prisma/schema.prisma dist/serverless/src/functions/builds/ +cp prisma/schema.prisma dist/serverless/src/functions/mints/ + +echo "${bold}Running the build command${normal}" +yarn build + +echo "${bold}Copying the rhel openssl engine to dist/${normal}" +cp node_modules/.prisma/client/libquery_engine-rhel-openssl-1.0.x.so.node dist/serverless/src/functions/mints +cp node_modules/.prisma/client/libquery_engine-rhel-openssl-1.0.x.so.node dist/serverless/src/functions/builds + +echo "${bold}Copying the .env file to dist/${normal}" +cp .env src/ + +echo "${bold}Copying the Prisma schema file to function directories${normal}" +cp prisma/schema.prisma dist/serverless/src/functions/builds/ +cp prisma/schema.prisma dist/serverless/src/functions/mints/ + +echo "${bold}Generating Prisma Client${normal}" +yarn prisma:generate + +echo "${bold}Creating layer zip files${normal}" +/bin/bash ./scripts/prepare-libs-lambda-layer.sh +/bin/bash ./scripts/prepare-prisma-client-lambda-layer.sh +/bin/bash ./scripts/prepare-node-modules-lambda-layer.sh + +echo "${bold}Deploying to AWS lambda${normal}" +yarn sls deploy --stage dev --verbose + +# step 0 -> run yarn +# step 1 -> take params (env variables) +# step 2 -> build tsc files with yarn build +# step 3 -> run yarn generate:prisma +# step 4 -> run the other shell scripts for layer generation +# step 5 -> run the deployment command to aws + +# TODO the .env file needs to move to the inside of the serverless dir in dist (zip file) +# TODO Prisma.schema files aren't being packaged with the functions in the nfa-serverless.zip file in .serverless. \ No newline at end of file diff --git a/serverless/serverless.yaml b/serverless/serverless.yaml index ab71c3a..aaa3af3 100644 --- a/serverless/serverless.yaml +++ b/serverless/serverless.yaml @@ -6,6 +6,7 @@ plugins: - serverless-offline provider: + timeout: 150 name: aws runtime: nodejs18.x stage: ${opt:stage, 'prd'} @@ -26,6 +27,10 @@ layers: TopicPrismaAwsPrismaClient: path: lambda-layers-prisma-client +package: { + patterns: ["dist/**/*.prisma", "**/libquery_engine-rhel-openssl-1.0.x.so.node", "dist/serverless/.env", '!node_modules/**'], +} + custom: esbuild: bundle: true @@ -40,46 +45,42 @@ custom: functions: submitBuildInfo: - handler: src/functions/builds/handler.submitBuildInfo # Change `src` to `dist` for deployment + # Deployment: + handler: ./dist/serverless/src/functions/builds/handler.submitBuildInfo # TODO This will not work, need to change to nfa-serverless/dist/serverless/src/functions/builds/handler.submitBuildInfo + # Local development: + # handler: ./src/functions/builds/handler.submitBuildInfo events: - http: path: build method: post cors: true - request: - parameters: - querystrings: - githubOrg: true - githubRepo: true - commitHash: true - author: true - timestamp: true - ipfsHash: true - tokenId: true - environment: + environment: # TODO They won't be loaded from the shell environment, need to find a way to pass them from the deployment script NODE_ENV: production - DATABASE_URL: ${env:DATABASE_URL} - CONTRACT_ADDRESS: ${env:CONTRACT_ADDRESS} - PRIVATE_KEY: ${env:PRIVATE_KEY} - JSON_RPC: ${env:JSON_RPC} + # DATABASE_URL: ${env:DATABASE_URL} + # CONTRACT_ADDRESS: ${env:CONTRACT_ADDRESS} + # PRIVATE_KEY: ${env:PRIVATE_KEY} + # JSON_RPC: ${env:JSON_RPC} layers: - { Ref: TopicAwsNodeModulesLambdaLayer } - { Ref: TopicAwsLibsLambdaLayer } - { Ref: TopicPrismaAwsPrismaClientLambdaLayer } submitMintInfo: - handler: src/functions/mints/handler.submitMintInfo + # Deployment: + handler: ./dist/serverless/src/functions/mints/handler.submitMintInfo # TODO This will not work, need to change to nfa-serverless/dist/serverless/src/functions/mints/handler.submitMintInfo + # Local development: + # handler: ./src/functions/mints/handler.submitMintInfo events: - http: path: mint method: post cors: true - environment: + environment: # TODO They won't be loaded from the shell environment, need to find a way to pass them from the deployment script NODE_ENV: production - DATABASE_URL: ${env:DATABASE_URL} - CONTRACT_ADDRESS: ${env:CONTRACT_ADDRESS} - PRIVATE_KEY: ${env:PRIVATE_KEY} - JSON_RPC: ${env:JSON_RPC} + # DATABASE_URL: ${env:DATABASE_URL} + # CONTRACT_ADDRESS: ${env:CONTRACT_ADDRESS} + # PRIVATE_KEY: ${env:PRIVATE_KEY} + # JSON_RPC: ${env:JSON_RPC} layers: - { Ref: TopicAwsNodeModulesLambdaLayer } - { Ref: TopicAwsLibsLambdaLayer } diff --git a/serverless/src/functions/builds/handler.ts b/serverless/src/functions/builds/handler.ts index 31a43d8..50d8be0 100644 --- a/serverless/src/functions/builds/handler.ts +++ b/serverless/src/functions/builds/handler.ts @@ -27,7 +27,8 @@ export const submitBuildInfo = async ( ipfsHash: data.ipfsHash, domain: data.domain, }; - + console.log(buildInfo); + // Add build record to the database, if it's not already added const buildRecord = await prisma.builds.findMany({ where: { @@ -37,8 +38,12 @@ export const submitBuildInfo = async ( domain: buildInfo.domain, }, }); + console.log(buildRecord); + if (buildRecord.length == 0) { + console.log('here i am'); + await prisma.builds.create({ data: { githubRepository: buildInfo.githubRepository, diff --git a/serverless/src/functions/mints/handler.ts b/serverless/src/functions/mints/handler.ts index aee1ee3..29f697d 100644 --- a/serverless/src/functions/mints/handler.ts +++ b/serverless/src/functions/mints/handler.ts @@ -14,22 +14,20 @@ export const submitMintInfo = async ( ///context: APIGatewayEventRequestContext ): Promise => { try { - if (event.body === null) { + if (event.body === null || event.body === undefined) { return formatJSONResponse({ status: 422, message: 'Required parameters were not passed.', }); } const id = v4(); - /**if (!verifyAlchemySig(event.headers.xalchemywork)) { throw new Error('Invalid sig'); }**/ - + const eventBody = JSON.parse(event.body); - const topics = eventBody.event.data.block.logs[1].slice(1, 3); + const topics = eventBody.event.data.block.logs[1].topics.slice(1, 4); const hexCalldata = eventBody.event.data.block.logs[1].data; - const decodedLogs = web3.eth.abi.decodeLog( [ { @@ -131,9 +129,9 @@ export const submitMintInfo = async ( ipfsHash: decodedLogs.ipfsHash, domain: decodedLogs.externalURL, }; - + initPrisma(); - + // Check if there is any build associated with the repository, commit hash, tokenId, and ipfsHash const build = await prisma.builds.findMany({ diff --git a/serverless/src/libs/FleekERC721.json b/serverless/src/libs/FleekERC721.json new file mode 100644 index 0000000..126accf --- /dev/null +++ b/serverless/src/libs/FleekERC721.json @@ -0,0 +1,2466 @@ +{ + "buildId": "ac10169ad2aa4aa05d336485b75a1a2f", + "timestamp": "5/17/2023, 5:27:20 PM", + "address": "0xdAbc1E0f926545a2898c644870FA4DC39E83EB70", + "transactionHash": "0xfc68decd1ce3d80c8bb94ef0c715792ef0fc555e9b63b85945841349a5640918", + "gasPrice": 1746000023, + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AccessPointAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "AccessPointCreationStatusAlreadySet", + "type": "error" + }, + { + "inputs": [], + "name": "AccessPointNotExistent", + "type": "error" + }, + { + "inputs": [], + "name": "AccessPointScoreCannotBeLower", + "type": "error" + }, + { + "inputs": [], + "name": "ContractIsNotPausable", + "type": "error" + }, + { + "inputs": [], + "name": "ContractIsNotPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ContractIsPaused", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidTokenIdForAccessPoint", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeAccessPointOwner", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeENSOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "MustBeTokenOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "MustBeTokenVerifier", + "type": "error" + }, + { + "inputs": [], + "name": "MustHaveAtLeastOneOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "role", + "type": "uint8" + } + ], + "name": "MustHaveCollectionRole", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "role", + "type": "uint8" + } + ], + "name": "MustHaveTokenRole", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "name": "PausableIsSetTo", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requiredValue", + "type": "uint256" + } + ], + "name": "RequiredPayment", + "type": "error" + }, + { + "inputs": [], + "name": "RoleAlreadySet", + "type": "error" + }, + { + "inputs": [], + "name": "ThereIsNoTokenMinted", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum FleekBilling.Billing", + "name": "key", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "BillingChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "apName", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bool", + "name": "verified", + "type": "bool" + }, + { + "indexed": true, + "internalType": "address", + "name": "triggeredBy", + "type": "address" + } + ], + "name": "ChangeAccessPointContentVerify", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "apName", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "enum FleekAccessPoints.AccessPointCreationStatus", + "name": "status", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "triggeredBy", + "type": "address" + } + ], + "name": "ChangeAccessPointCreationStatus", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "apName", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bool", + "name": "verified", + "type": "bool" + }, + { + "indexed": true, + "internalType": "address", + "name": "triggeredBy", + "type": "address" + } + ], + "name": "ChangeAccessPointNameVerify", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "apName", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "score", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "triggeredBy", + "type": "address" + } + ], + "name": "ChangeAccessPointScore", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum FleekAccessControl.CollectionRoles", + "name": "role", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "toAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "status", + "type": "bool" + }, + { + "indexed": false, + "internalType": "address", + "name": "byAddress", + "type": "address" + } + ], + "name": "CollectionRoleChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "key", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "value", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "triggeredBy", + "type": "address" + } + ], + "name": "MetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "key", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "address", + "name": "triggeredBy", + "type": "address" + } + ], + "name": "MetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "key", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint24", + "name": "value", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "address", + "name": "triggeredBy", + "type": "address" + } + ], + "name": "MetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "key", + "type": "string" + }, + { + "indexed": false, + "internalType": "string[4]", + "name": "value", + "type": "string[4]" + }, + { + "indexed": true, + "internalType": "address", + "name": "triggeredBy", + "type": "address" + } + ], + "name": "MetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "key", + "type": "string" + }, + { + "indexed": false, + "internalType": "bool", + "name": "value", + "type": "bool" + }, + { + "indexed": true, + "internalType": "address", + "name": "triggeredBy", + "type": "address" + } + ], + "name": "MetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "apName", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "NewAccessPoint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "externalURL", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "ENS", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "commitHash", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "gitRepository", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "ipfsHash", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "logo", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint24", + "name": "color", + "type": "uint24" + }, + { + "indexed": false, + "internalType": "bool", + "name": "accessPointAutoApproval", + "type": "bool" + }, + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "NewMint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bool", + "name": "isPausable", + "type": "bool" + }, + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "PausableStatusChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bool", + "name": "isPaused", + "type": "bool" + }, + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "PauseStatusChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "apName", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "RemoveAccessPoint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "enum FleekAccessControl.TokenRoles", + "name": "role", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "toAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "status", + "type": "bool" + }, + { + "indexed": false, + "internalType": "address", + "name": "byAddress", + "type": "address" + } + ], + "name": "TokenRoleChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "byAddress", + "type": "address" + } + ], + "name": "TokenRolesCleared", + "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": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "byAddress", + "type": "address" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "apName", + "type": "string" + } + ], + "name": "addAccessPoint", + "outputs": [], + "stateMutability": "payable", + "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": "string", + "name": "apName", + "type": "string" + } + ], + "name": "decreaseAccessPointScore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "apName", + "type": "string" + } + ], + "name": "getAccessPointJSON", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum FleekBilling.Billing", + "name": "key", + "type": "uint8" + } + ], + "name": "getBilling", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastTokenId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getToken", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getTokenVerifier", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum FleekAccessControl.CollectionRoles", + "name": "role", + "type": "uint8" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantCollectionRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "enum FleekAccessControl.TokenRoles", + "name": "role", + "type": "uint8" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantTokenRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum FleekAccessControl.CollectionRoles", + "name": "role", + "type": "uint8" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasCollectionRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "enum FleekAccessControl.TokenRoles", + "name": "role", + "type": "uint8" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasTokenRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "apName", + "type": "string" + } + ], + "name": "increaseAccessPointScore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "initialBillings", + "type": "uint256[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "apName", + "type": "string" + } + ], + "name": "isAccessPointNameVerified", + "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": "isPausable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isTokenVerified", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "externalURL", + "type": "string" + }, + { + "internalType": "string", + "name": "ens", + "type": "string" + }, + { + "internalType": "string", + "name": "commitHash", + "type": "string" + }, + { + "internalType": "string", + "name": "gitRepository", + "type": "string" + }, + { + "internalType": "string", + "name": "ipfsHash", + "type": "string" + }, + { + "internalType": "string", + "name": "logo", + "type": "string" + }, + { + "internalType": "uint24", + "name": "color", + "type": "uint24" + }, + { + "internalType": "bool", + "name": "accessPointAutoApproval", + "type": "bool" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "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": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "apName", + "type": "string" + } + ], + "name": "removeAccessPoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum FleekAccessControl.CollectionRoles", + "name": "role", + "type": "uint8" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeCollectionRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "enum FleekAccessControl.TokenRoles", + "name": "role", + "type": "uint8" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeTokenRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_apAutoApproval", + "type": "bool" + } + ], + "name": "setAccessPointAutoApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "apName", + "type": "string" + }, + { + "internalType": "bool", + "name": "verified", + "type": "bool" + } + ], + "name": "setAccessPointContentVerify", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "apName", + "type": "string" + }, + { + "internalType": "bool", + "name": "verified", + "type": "bool" + } + ], + "name": "setAccessPointNameVerify", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "apName", + "type": "string" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAccessPoint", + "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": "enum FleekBilling.Billing", + "name": "key", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "setBilling", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "pausable", + "type": "bool" + } + ], + "name": "setPausable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_commitHash", + "type": "string" + }, + { + "internalType": "string", + "name": "_gitRepository", + "type": "string" + }, + { + "internalType": "string", + "name": "_ipfsHash", + "type": "string" + }, + { + "internalType": "string", + "name": "_domain", + "type": "string" + } + ], + "name": "setTokenBuild", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint24", + "name": "_tokenColor", + "type": "uint24" + } + ], + "name": "setTokenColor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_tokenDescription", + "type": "string" + } + ], + "name": "setTokenDescription", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_tokenENS", + "type": "string" + } + ], + "name": "setTokenENS", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_tokenExternalURL", + "type": "string" + } + ], + "name": "setTokenExternalURL", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_tokenLogo", + "type": "string" + } + ], + "name": "setTokenLogo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_tokenLogo", + "type": "string" + }, + { + "internalType": "uint24", + "name": "_tokenColor", + "type": "uint24" + } + ], + "name": "setTokenLogoAndColor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_tokenName", + "type": "string" + } + ], + "name": "setTokenName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "verified", + "type": "bool" + } + ], + "name": "setTokenVerified", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "setTokenVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60808060405234620000975760cc549060ff8260081c16151560011462000080575061ff0019166101001760cc556040513381526001907f959581ef17eb8c8936ef9832169bc89dbcd1358765adca8ca81f28b416bb5efa90602090a26200006662000148565b620000706200009d565b604051615b059081620001c38239f35b632e15c5c160e21b81526001600482015260249150fd5b50600080fd5b60005460ff8160081c16620000f15760ff80821610620000ba5750565b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a1565b505060405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b60cc5460ff8116620001ae5760ff8160081c16156200019a5760019060ff19161760cc5560007f07e8f74f605213c41c1a057118d86bca5540e9cf52c351026d0d65e46421aa1a6020604051338152a2565b5050604051635970d9f560e11b8152600490fd5b50506040516306d39fcd60e41b8152600490fdfe6040608081526004361015610015575b50600080fd5b600090813560e01c806301468deb146108ce57806301ffc9a7146108b257806302dba24d1461089657806306fdde031461087a578063081812fc1461085e578063095ea7b3146108465780630a212d2f1461082e57806323b872dd14610816578063246a908b146107fe57806327dc5cec146107e25780632d957aad146107ca578063355c5561146107a35780633ccfd60b1461078c5780633e233205146107745780633f4ba83a1461075d57806342842e0e1461074557806342966c681461072e57806342e44bbf1461071657806349aa155e146106fe5780635aa6ab3b146106e65780636352211e146106ca57806370a08231146106ae57806372c299c414610679578063736d323a146106625780637469a03b1461064b57806378278cca1461063357806383c4c00d146106085780638456cb59146105f15780638a2e25be146105d95780638c3c0a44146105c157806394ec65c5146105aa57806395d89b411461058e578063a09a16011461055e578063a22cb46514610546578063a27d0b271461052e578063a397c83014610517578063a7ef6a97146104fc578063aad045a2146104e4578063b187bd26146104b8578063b20b94f1146104a0578063b30437a01461048d578063b42dbe381461042d578063b88d4fde14610412578063b948a3c5146103fa578063ba4c458a146103e2578063c87b56dd146103bb578063cdb0e89e146103a3578063d7a75be114610387578063e4b50cb814610357578063e944725014610333578063e985e9c5146102db578063eb5fd26b146102c3578063f4fe5f0c146102925763f931517714610274575061000f565b3461028e5761028b61028536610bac565b90613604565b51f35b5080fd5b503461028e576102bf91506102ae6102a936610a0f565b61457a565b905190151581529081906020820190565b0390f35b503461028e5761028b6102d536611177565b90613d0e565b503461028e576102bf91506102ae61032c6103156102f83661115f565b6001600160a01b039091166000908152606a602052604090209091565b9060018060a01b0316600052602052604060002090565b5460ff1690565b503461028e576102bf91506102ae61032c61031561035036610c15565b9190611c8e565b503461028e576102bf915061037361036e36610a0f565b61342a565b9497959693909392919251978897886110ef565b503461028e576102bf91506102ae61039e36610beb565b611ee4565b503461028e5761028b6103b536610bac565b906138a1565b503461028e576102bf91506103d76103d236610a0f565b612f67565b9051918291826109fe565b503461028e5761028b6103f43661102e565b9161208a565b503461028e5761028b61040c36610bac565b90613b95565b503461028e5761028b61042436610fd4565b929190916117b7565b503461028e576102bf91506102ae61032c61048861031561044d36610915565b939091610479610467826000526099602052604060002090565b5491600052609a602052604060002090565b90600052602052604060002090565b611cca565b5061028b61049a36610bac565b906145b2565b503461028e5761028b6104b236610df4565b90614af7565b503461028e576102bf91506104cc36610996565b60cc54905160ff909116151581529081906020820190565b503461028e5761028b6104f636610e2f565b90614952565b503461028e5761028b61050e36610f51565b93929092613f2e565b503461028e5761028b61052936610beb565b611ffb565b503461028e5761028b61054036610915565b91614d79565b503461028e5761028b61055836610f39565b90611603565b503461028e576102bf915061057236610996565b60cc54905160089190911c60ff16151581529081906020820190565b503461028e576102bf91506105a236610996565b6103d7611406565b503461028e5761028b6105bc36610beb565b611f2c565b503461028e5761028b6105d336610c15565b90614e88565b503461028e5761028b6105eb36610ef9565b916149fb565b503461028e5761060036610996565b61028b615032565b503461028e576102bf915061061c36610996565b6106246134e8565b90519081529081906020820190565b503461028e5761028b61064536610ec6565b916137e6565b503461028e5761028b61065d36610beb565b61486e565b503461028e5761028b61067436610eaa565b6150fb565b503461028e576102bf915061069561069036610a0f565b6143c3565b90516001600160a01b0390911681529081906020820190565b503461028e576102bf91506106246106c536610e92565b61119a565b503461028e576102bf91506106956106e136610a0f565b611260565b503461028e5761028b6106f836610e4f565b91613dcb565b503461028e5761028b61071036610e2f565b90614402565b503461028e5761028b61072836610df4565b90614bea565b503461028e5761028b61074036610a0f565b6140ab565b503461028e5761028b61075736610a5c565b9161177d565b503461028e5761076c36610996565b61028b61509e565b503461028e5761028b61078636610ddc565b90615171565b503461028e5761079b36610996565b61028b615183565b506102bf91506106246107b536610c8c565b9b9a909a999199989298979397969496612880565b503461028e5761028b6107dc36610c15565b90614c8a565b503461028e576102bf91506103d76107f936610beb565b611d2e565b503461028e5761028b61081036610bac565b90613a17565b503461028e5761028b61082836610a5c565b9161172f565b503461028e5761028b61084036610a40565b906142b2565b503461028e5761028b61085836610a21565b9061149f565b503461028e576102bf915061069561087536610a0f565b6115c5565b503461028e576102bf915061088e36610996565b6103d761134f565b503461028e576102bf91506106246108ad3661097e565b612070565b503461028e576102bf91506102ae6108c93661095c565b613515565b503461028e5761028b6108e036610915565b91614f69565b6001600160a01b038116141561000f57565b60043590610905826108e6565b565b6101643590610905826108e6565b606090600319011261000f57600435906024356001811015610941579060443561093e816108e6565b90565b505050600080fd5b6001600160e01b03198116141561000f57565b602090600319011261000f5760043561093e81610949565b6002111561000f57565b602090600319011261000f5760043561093e81610974565b600090600319011261000f57565b918091926000905b8282106109c45750116109bd575050565b6000910152565b915080602091830151818601520182916109ac565b906020916109f2815180928185528580860191016109a4565b601f01601f1916010190565b90602061093e9281815201906109d9565b602090600319011261000f5760043590565b604090600319011261000f57600435610a39816108e6565b9060243590565b604090600319011261000f576004359060243561093e816108e6565b606090600319011261000f57600435610a74816108e6565b90602435610a81816108e6565b9060443590565b50634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117610aba57604052565b610ac2610a88565b604052565b90601f801991011681019081106001600160401b03821117610aba57604052565b60405190608082018281106001600160401b03821117610aba57604052565b6040519060c082018281106001600160401b03821117610aba57604052565b6020906001600160401b038111610b43575b601f01601f19160190565b610b4b610a88565b610b38565b929192610b5c82610b26565b91610b6a6040519384610ac7565b829481845281830111610b87578281602093846000960137010152565b5050505050600080fd5b9080601f830112156109415781602061093e93359101610b50565b906040600319830112610be45760043591602435906001600160401b038211610bdb5761093e91600401610b91565b50505050600080fd5b5050600080fd5b6020600319820112610be457600435906001600160401b0382116109415761093e91600401610b91565b604090600319011261000f57600435610c2d81610974565b9060243561093e816108e6565b9181601f84011215610941578235916001600160401b038311610bdb576020838186019501011161094157565b610124359062ffffff8216821415610be457565b6101443590811515821415610be457565b90610180600319830112610be457610ca26108f8565b91602435906001600160401b03808311610b8757610cc4826004948501610b91565b93604435828111610dd05783610cdb918601610b91565b93606435838111610dc35784610cf2918301610b91565b93608435848111610db55781610d09918401610c3a565b9490949360a435828111610da55783610d23918601610b91565b9360c435838111610d945784610d3a918301610b91565b9360e435848111610d825781610d51918401610b91565b9361010435908111610d8257610d679201610b91565b90610d70610c67565b90610d79610c7b565b9061093e610907565b50505050505050505050505050600080fd5b505050505050505050505050600080fd5b5050505050505050505050600080fd5b505050505050505050600080fd5b5050505050505050600080fd5b50505050505050600080fd5b604090600319011261000f57600435610a3981610974565b6040600319820112610be457600435906001600160401b03821161094157610e1e91600401610b91565b906024358015158114156109415790565b604090600319011261000f57600435906024358015158114156109415790565b906060600319830112610be45760043591602435906001600160401b038211610bdb57610e7e91600401610b91565b9060443562ffffff8116811415610bdb5790565b602090600319011261000f5760043561093e816108e6565b602090600319011261000f57600435801515811415610be45790565b906040600319830112610be45760043591602435906001600160401b038211610bdb57610ef591600401610c3a565b9091565b906060600319830112610be45760043591602435906001600160401b038211610bdb57610f2891600401610b91565b90604435801515811415610bdb5790565b604090600319011261000f57600435610e1e816108e6565b9060a0600319830112610be457600435916001600160401b0390602435828111610b875781610f8291600401610b91565b92604435838111610fc95782610f9a91600401610b91565b92606435818111610dd05783610fb291600401610b91565b92608435918211610dd05761093e91600401610b91565b505050505050600080fd5b906080600319830112610be457600435610fed816108e6565b91602435610ffa816108e6565b9160443591606435906001600160401b038211610fc95780602383011215610fc95781602461093e93600401359101610b50565b906060600319830112610be4576001600160401b0390600435828111610bdb578361105b91600401610b91565b92602435838111610b87578161107391600401610b91565b9260443591818311610fc95780602384011215610fc95782600401359182116110e2575b8160051b604051936020936110ae85840187610ac7565b8552602484860192820101928311610dc357602401905b8282106110d3575050505090565b813581529083019083016110c5565b6110ea610a88565b611097565b959062ffffff946111376111589561112960c0999661111b611145969d9e9d60e08e81815201906109d9565b8c810360208e0152906109d9565b908a820360408c01526109d9565b9088820360608a01526109d9565b91608087015285820360a08701526109d9565b9416910152565b604090600319011261000f57600435610c2d816108e6565b604090600319011261000f576004359060243562ffffff81168114156109415790565b6001600160a01b031680156111ba57600052606860205260406000205490565b505060405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b1561121a57565b5060405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152606760205260409020546001600160a01b031661093e811515611213565b90600182811c921680156112b5575b602083101461129d57565b5050634e487b7160e01b600052602260045260246000fd5b91607f1691611292565b90600092918054916112d083611283565b91828252600193848116908160001461133257506001146112f2575b50505050565b90919394506000526020928360002092846000945b83861061131e5750505050010190388080806112ec565b805485870183015294019385908201611307565b60ff191660208401525050604001935038915081905080806112ec565b604051906000826065549161136383611283565b808352926001908181169081156113e9575060011461138a575b5061090592500383610ac7565b6065600090815291507f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c75b8483106113ce575061090593505081016020013861137d565b81935090816020925483858a010152019101909185926113b5565b94505050505060ff1916602083015261090582604081013861137d565b604051906000826066549161141a83611283565b808352926001908181169081156113e95750600114611440575061090592500383610ac7565b6066600090815291507f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943545b848310611484575061090593505081016020013861137d565b81935090816020925483858a0101520191019091859261146b565b906114a981611260565b6001600160a01b038181169084168114611572573314908115611544575b50156114d65761090591611aa1565b505060405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260849150fd5b6001600160a01b03166000908152606a6020526040902060ff915061156a903390610315565b5416386114c7565b5050505050608460405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152fd5b6000818152606760205260409020546115e8906001600160a01b03161515611213565b6000908152606960205260409020546001600160a01b031690565b6001600160a01b038116919033831461168457816116436116549233600052606a60205260406000209060018060a01b0316600052602052604060002090565b9060ff801983541691151516179055565b60405190151581527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3565b50505050606460405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b156116d357565b5060405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b9061090592916117476117428433611853565b6116cc565b611926565b60405190602082018281106001600160401b03821117611770575b60405260008252565b611778610a88565b611767565b90916109059260405192602084018481106001600160401b038211176117aa575b604052600084526117b7565b6117b2610a88565b61179e565b906117db9392916117cb6117428433611853565b6117d6838383611926565b611bad565b156117e257565b5060405162461bcd60e51b8152806117fc60048201611800565b0390fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b6001600160a01b038061186584611260565b16928183169284841494851561189b575b50508315611885575b50505090565b611891919293506115c5565b161438808061187f565b6000908152606a602090815260408083206001600160a01b03949094168352929052205460ff1693503880611876565b156118d257565b5060405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b61194a9061193384611260565b6001600160a01b03828116939091821684146118cb565b8316928315611a4b576119c8826119658784611a2296613559565b611987856119816119758a611260565b6001600160a01b031690565b146118cb565b6119ae61199e886000526069602052604060002090565b80546001600160a01b0319169055565b6001600160a01b0316600090815260686020526040902090565b80546000190190556001600160a01b038116600090815260686020526040902060018154019055611a03856000526067602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051a4565b505050505050608460405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152fd5b600082815260696020526040902080546001600160a01b0319166001600160a01b0383161790556001600160a01b0380611ada84611260565b169116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256000604051a4565b600090815260676020526040902054610905906001600160a01b03161515611213565b90816020910312610be4575161093e81610949565b6001600160a01b03918216815291166020820152604081019190915260806060820181905261093e929101906109d9565b506040513d6000823e3d90fd5b3d15611ba8573d90611b8e82610b26565b91611b9c6040519384610ac7565b82523d6000602084013e565b606090565b92909190823b15611c5c57611be0926020926000604051809681958294630a85bd0160e11b9a8b85523360048601611b3f565b03926001600160a01b03165af160009181611c3c575b50611c2e57505050611c06611b7d565b80519081611c2957505060405162461bcd60e51b8152806117fc60048201611800565b602001fd5b6001600160e01b0319161490565b611c55919250611c4c3d82610ac7565b3d810190611b2a565b9038611bf6565b50505050600190565b50634e487b7160e01b600052602160045260246000fd5b60021115611c8657565b610905611c65565b611c9781611c7c565b6000526098602052604060002090565b611cb081611c7c565b6000526097602052604060002090565b60011115611c8657565b906001811015611ce3575b600052602052604060002090565b611ceb611c65565b611cd5565b90611d03602092828151948592016109a4565b0190565b6020611d209181604051938285809451938492016109a4565b810161013081520301902090565b6001600160a01b0390816002611d4383611d07565b015460101c1615611ecf57611d5790611d07565b908154611d63906156b9565b906001830154611d72906156b9565b92600201548060081c60ff16611d8790615955565b91611d9460ff8316615955565b908260101c16611da3906158a0565b9160b01c60ff16611db38161473a565b611dbc906156b9565b604051607b60f81b60208201529586959194916021870169113a37b5b2b724b2111d60b11b8152600a01611def91611cf0565b611df8906156ac565b671139b1b7b932911d60c11b8152600801611e1291611cf0565b611e1b906156ac565b6e113730b6b2ab32b934b334b2b2111d60891b8152600f01611e3c91611cf0565b611e45906156ac565b711131b7b73a32b73a2b32b934b334b2b2111d60711b8152601201611e6991611cf0565b611e72906156ac565b681137bbb732b9111d1160b91b8152600901611e8d91611cf0565b61088b60f21b8152600201681139ba30ba3ab9911d60b91b8152600901611eb391611cf0565b607d60f81b815260010103601f198101825261093e9082610ac7565b5050604051630d436c3560e21b815260049150fd5b6001600160a01b036002611ef783611d07565b015460101c1615611f18576002611f0f60ff92611d07565b015460081c1690565b5050604051630d436c3560e21b8152600490fd5b6001600160a01b036002611f3f83611d07565b015460101c1615611f18576001611f5582611d07565b01611f608154611fc7565b9055611f6b81611d07565b547f3ea1c0fcf71b86fca8f96ccac3cf26fba8983d3bbbe7bd720f1865d67fbaee43611fab6001611f9b85611d07565b0154604051918291339683611fdf565b0390a3565b50634e487b7160e01b600052601160045260246000fd5b6001906000198114611fd7570190565b611d03611fb0565b929190611ff66020916040865260408601906109d9565b930152565b6001600160a01b03600261200e83611d07565b015460101c1615611f1857600161202482611d07565b01541561204157600161203682611d07565b01611f608154612055565b50506040516341f3125f60e11b8152600490fd5b8015612063575b6000190190565b61206b611fb0565b61205c565b61207981611c7c565b60005260fe60205260406000205490565b90916000549260ff8460081c1615809481956121ac575b811561218c575b501561212c576120ce92846120c5600160ff196000541617600055565b612113576121ba565b6120d457565b6120e461ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1565b61212761010061ff00196000541617600055565b6121ba565b5050505050608460405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152fd5b303b1591508161219e575b50386120a8565b6001915060ff161438612197565b600160ff82161091506120a1565b9291906121d760ff60005460081c166121d2816122fc565b6122fc565b83516001600160401b0381116122ef575b6121fc816121f7606554611283565b612374565b602080601f8311600114612259575090806122399392612246969760009261224e575b50508160011b916000199060031b1c191617606555612465565b612241612638565b6127b2565b6109056151ea565b01519050388061221f565b90601f1983169661228c60656000527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c790565b926000905b8982106122d75750509183916001936122399695612246999a106122be575b505050811b01606555612465565b015160001960f88460031b161c191690553880806122b0565b80600185968294968601518155019501930190612291565b6122f7610a88565b6121e8565b1561230357565b5060405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b818110612368575050565b6000815560010161235d565b90601f8211612381575050565b6109059160656000527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c7906020601f840160051c830193106123cb575b601f0160051c019061235d565b90915081906123be565b90601f82116123e2575050565b6109059160666000527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354906020601f840160051c830193106123cb57601f0160051c019061235d565b9190601f811161243a57505050565b610905926000526020600020906020601f840160051c830193106123cb57601f0160051c019061235d565b9081516001600160401b03811161254f575b61248b81612486606654611283565b6123d5565b602080601f83116001146124c757508192936000926124bc575b50508160011b916000199060031b1c191617606655565b0151905038806124a5565b90601f198316946124fa60666000527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435490565b926000905b87821061253757505083600195961061251e575b505050811b01606655565b015160001960f88460031b161c19169055388080612513565b806001859682949686015181550195019301906124ff565b612557610a88565b612477565b91909182516001600160401b03811161262b575b6125848161257e8454611283565b8461242b565b602080601f83116001146125c05750819293946000926125b5575b50508160011b916000199060031b1c1916179055565b01519050388061259f565b90601f198316956125d685600052602060002090565b926000905b888210612613575050836001959697106125fa575b505050811b019055565b015160001960f88460031b161c191690553880806125f0565b806001859682949686015181550195019301906125db565b612633610a88565b612570565b600061264a60ff825460081c166122fc565b808052609860209081526040808320336000908152908352819020549192909160ff1661277e57808052609883528181203360009081526020919091526040902061269d905b805460ff19166001179055565b808052609783528181206126b18154612792565b905581516001815233602082018190527faf048a30703f33a377518eb62cc39bd3a14d6d1a1bb8267dcc440f1bde67b61a949183908690604090a36001825260988152828220336000908152602091909152604090205460ff166127695791816097600194858495526098815261273f612690338686209060018060a01b0316600052602052604060002090565b858352522061274e8154612792565b90555160018152336020820181905292908060408101611fab565b5050516397b705ed60e01b8152600492509050fd5b50516397b705ed60e01b8152600492509050fd5b6001906001198111611fd7570190565b6002906002198111611fd7570190565b906127c460ff60005460081c166122fc565b60005b825181101561281157806127dd6127ff92611c7c565b8351811015612804575b6127fa60208260051b860101518261282d565b611fc7565b6127c7565b61280c612816565b6127e7565b509050565b50634e487b7160e01b600052603260045260246000fd5b6040907f6819853ffee8927169953e7bdc42aaba347fb03ff918a45bfccaf88626d900969261285b82611c7c565b8160005260fe60205280836000205582519161287681611c7c565b82526020820152a1565b9496919792989b999093959b612894612ee1565b600160005260986020526128d26128ce61032c8d7fe66b7f18a15fed257e722ee4e0b46d479842712099771fae6234a4975b3be6fa610315565b1590565b612a5c578a938c9389612a4d575b610163549e8f9a6128f18c8b612db2565b8d8d8d6101635461290190612792565b6101635561291a90600052610164602052604060002090565b906129258c8361255c565b612932906001830161255c565b61293f826002830161255c565b61294d838e60038401612a8a565b61295a876004830161255c565b60058101805462ffffff191662ffffff8a161790556000600682015561297e610ae8565b9184835285602084015286604084015260608301526007016129a99060008052602052604060002090565b906129b391612b57565b6040519a8b9a600160a01b60019003169e339e6129d09b8d612c97565b037f11d53b6a608f8a1150f88cdb3e563af3830dd531f39be8e1cdaa8cc8b43d77b491a4612a0983600052610165602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055612a3b82600052610166602052604060002090565b805460ff1916905561093e9082612ebd565b612a578a8a61522b565b6128e0565b505050505050505050505050505060405163070198dd60e51b8152806117fc60048201906001602083019252565b9092916001600160401b038111612b4a575b612aaa8161257e8454611283565b6000601f8211600114612ae35781929394600092612ad85750508160011b916000199060031b1c1916179055565b01359050388061259f565b601f19821694612af884600052602060002090565b91805b878110612b32575083600195969710612b1857505050811b019055565b0135600019600384901b60f8161c191690553880806125f0565b90926020600181928686013581550194019101612afb565b612b52610a88565b612a9c565b91909182519283516001600160401b038111612c69575b612b8281612b7c8554611283565b8561242b565b6020948590601f8311600114612bf05761090595968360609460039694612bcb94600092612be5575b50508160011b9160001990881b1c19161786555b8201516001860161255c565b612bdc60408201516002860161255c565b0151910161255c565b015190503880612bab565b90601f19831691612c0686600052602060002090565b9260005b818110612c5257508460039694612bcb946109059a9b9460609860019510612c3a575b505050811b018655612bbf565b0151600019838a1b60f8161c19169055388080612c2d565b929389600181928786015181550195019301612c0a565b612c71610a88565b612b6e565b908060209392818452848401376000828201840152601f01601f1916010190565b9790612d5597612d129b9e9d9b6109059d98612d048c612d4b9a6101409f999a612cf6612d3c9c612ce8612d2e9c612cda612d209c610160808a528901906109d9565b9087820360208901526109d9565b9085820360408701526109d9565b926060818503910152612c76565b8c810360808e0152906109d9565b908a820360a08c01526109d9565b9088820360c08a01526109d9565b9086820360e08801526109d9565b62ffffff909916610100850152565b1515610120830152565b6001600160a01b03909216910152565b15612d6c57565b5060405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b6001600160a01b038116908115612e7557600083815260676020526040902054612e4b9190612ded906001600160a01b031615155b15612d65565b612df561520c565b600084815260676020526040902054612e18906001600160a01b03161515612de7565b6001600160a01b038116600090815260686020526040902060018154019055611a03846000526067602052604060002090565b60007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef81604051a4565b50505050606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b906109059160005261013160205260406000209060ff801983541691151516179055565b6000805260fe6020527f32796e36004994222362c2f9423d5e208bb848170964890784a8d59ed40f50af5434811415612f175750565b6024915060405190635f7e28df60e01b82526004820152fd5b600160005260fe6020527f457c8a48b4735f56b938837eb0a8a5f9c55f23c1a85767ce3b65c3e59d3d32b75434811415612f175750565b600081815260676020526040902054612f8a906001600160a01b03161515611213565b612f9381611260565b90600090815260206101318152604060ff818420541692610166835260ff828220541690610164845282812094613006845197612fcf89610a9f565b601d89527f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000878a01526001600160a01b03166158a0565b9260038701600588019261304a85613029613024875462ffffff1690565b61599b565b8b8a51938492839263891c235f60e01b8452886004820191600486016155e8565b038173__$ecf603b2c2aa531f37c90ec146d2a3e91a$__5af495861561341d575b80966133f3575b505061307d90615955565b9161308790615955565b90600789019160068a015493836130a986809690600052602052604060002090565b946130bd9190600052602052604060002090565b600101946130ca906156b9565b955462ffffff166130da9061599b565b9689519b8c998c8b016130f590600190607b60f81b81520190565b67113730b6b2911d1160c11b81526008016131109083615630565b61088b60f21b81526002016e113232b9b1b934b83a34b7b7111d1160891b8152600f016131409060018401615630565b61088b60f21b8152600201681137bbb732b9111d1160b91b815260090161316691611cf0565b61088b60f21b81526002016f1132bc3a32b93730b62fbab936111d1160811b815260100161319691600201615630565b61088b60f21b8152600201681134b6b0b3b2911d1160b91b81526009016131bc91611cf0565b61088b60f21b81526002017f226163636573735f706f696e745f6175746f5f617070726f76616c223a0000008152601d016131f691611cf0565b6131ff906156ac565b6a113b32b934b334b2b2111d60a91b8152600b0161321c91611cf0565b613225906156ac565b6e2261747472696275746573223a205b60881b8152600f017f7b2274726169745f74797065223a2022454e53222c202276616c7565223a22008152601f0161326c91615630565b62089f4b60ea1b81526003017f7b2274726169745f74797065223a2022436f6d6d69742048617368222c20227681526630b63ab2911d1160c91b60208201526027016132b791615630565b62089f4b60ea1b81526003017f7b2274726169745f74797065223a20225265706f7369746f7279222c20227661815265363ab2911d1160d11b602082015260260161330191615630565b62089f4b60ea1b81526003017f7b2274726169745f74797065223a202256657273696f6e222c202276616c7565815262111d1160e91b602082015260230161334891611cf0565b62089f4b60ea1b81526003017f7b2274726169745f74797065223a2022436f6c6f72222c202276616c7565223a8152601160f91b602082015260210161338d91611cf0565b61227d60f01b8152600201605d60f81b8152600101607d60f81b81526001010392601f199384810182526133c19082610ac7565b6133ca906154af565b905193849283016133da91611cf0565b6133e391611cf0565b03908101825261093e9082610ac7565b61307d92965090613415913d90823e61340c3d82610ac7565b3d81019061558a565b949038613072565b613425611b70565b61306b565b60008181526067602052604090205461344d906001600160a01b03161515611213565b60005261016460205260409081600020600681015462ffffff6005830154169380516134848161347d81876112bf565b0382610ac7565b9481516134988161347d81600189016112bf565b9460046134d584516134b18161347d8160028c016112bf565b9661347d86516134c88161347d81600387016112bf565b97965180948193016112bf565b9190565b60018110612063576000190190565b6101635480156135015760018110612063576000190190565b50506040516327e4ec1b60e21b8152600490fd5b63ffffffff60e01b166380ac58cd60e01b8114908115613548575b811561353a575090565b6301ffc9a760e01b14919050565b635b5e139f60e01b81149150613530565b9061356261520c565b6001600160a01b03918216151580806135a2575b1561358757505050610905906135ad565b61359057505050565b16156135995750565b610905906135ad565b508282161515613576565b806000526099602052604060002060018154811981116135f7575b0190557f8c7eb22d1ba10f86d9249f2a8eb0e3e35b4f0b2f21f92dea9ec25a4d84b20fa06020604051338152a2565b6135ff611fb0565b6135c8565b61360d81611260565b6001600160a01b0316331415613749575b600081815260676020526040902054613641906001600160a01b03161515611213565b8060005260206101648152600260406000200190835180916001600160401b03821161373c575b61367c826136768654611283565b8661242b565b80601f83116001146136ce57506000916136c3575b508160011b916000199060031b1c19161790555b600080516020615aa283398151915260405180611fab339582613757565b905084015138613691565b9150601f1983166136e485600052602060002090565b926000905b828210613724575050908360019493921061370b575b5050811b0190556136a5565b86015160001960f88460031b161c1916905538806136ff565b80600185968294968c015181550195019301906136e9565b613744610a88565b613668565b6137528161378a565b61361e565b90608061093e9260408152600b60408201526a195e1d195c9b985b15549360aa1b606082015281602082015201906109d9565b600081815260996020908152604080832054609a83528184209084528252808320838052825280832033845290915281205460ff16156137c8575050565b604492506040519163158eff0360e21b835260048301526024820152fd5b90611fab600080516020615aa28339815191529161380384611260565b6001600160a01b0316331415613893575b61381e858261522b565b600084815260676020526040902054613841906001600160a01b03161515611213565b6138638582600361385d88600052610164602052604060002090565b01612a8a565b604051918291604083526003604084015262454e5360e81b60608401526080602084015233966080840191612c76565b61389c8461378a565b613814565b6138aa81611260565b6001600160a01b03163314156139dd575b6000818152606760205260409020546138de906001600160a01b03161515611213565b8060005260206101648152604060002090835180916001600160401b0382116139d0575b613910826136768654611283565b80601f83116001146139625750600091613957575b508160011b916000199060031b1c19161790555b600080516020615aa283398151915260405180611fab3395826139eb565b905084015138613925565b9150601f19831661397885600052602060002090565b926000905b8282106139b8575050908360019493921061399f575b5050811b019055613939565b86015160001960f88460031b161c191690553880613993565b80600185968294968c0151815501950193019061397d565b6139d8610a88565b613902565b6139e68161378a565b6138bb565b90608061093e926040815260046040820152636e616d6560e01b606082015281602082015201906109d9565b613a2081611260565b6001600160a01b0316331415613b54575b600081815260676020526040902054613a54906001600160a01b03161515611213565b8060005260206101648152600180604060002001918451906001600160401b038211613b47575b613a89826136768654611283565b80601f8311600114613adc575081928291600093613ad1575b501b916000199060031b1c19161790555b600080516020615aa283398151915260405180611fab339582613b62565b870151925038613aa2565b9082601f198116613af287600052602060002090565b936000905b87838310613b2d5750505010613b14575b5050811b019055613ab3565b86015160001960f88460031b161c191690553880613b08565b8b8601518755909501949384019386935090810190613af7565b613b4f610a88565b613a7b565b613b5d8161378a565b613a31565b90608061093e9260408152600b60408201526a3232b9b1b934b83a34b7b760a91b606082015281602082015201906109d9565b613b9e81611260565b6001600160a01b0316331415613cd4575b600081815260676020526040902054613bd2906001600160a01b03161515611213565b8060005260206101648152600460406000200190835180916001600160401b038211613cc7575b613c07826136768654611283565b80601f8311600114613c595750600091613c4e575b508160011b916000199060031b1c19161790555b600080516020615aa283398151915260405180611fab339582613ce2565b905084015138613c1c565b9150601f198316613c6f85600052602060002090565b926000905b828210613caf5750509083600194939210613c96575b5050811b019055613c30565b86015160001960f88460031b161c191690553880613c8a565b80600185968294968c01518155019501930190613c74565b613ccf610a88565b613bf9565b613cdd8161378a565b613baf565b90608061093e926040815260046040820152636c6f676f60e01b606082015281602082015201906109d9565b613d1781611260565b6001600160a01b0316331415613dbd575b600081815260676020526040902054613d4b906001600160a01b03161515611213565b600081815261016460205260409020600501805462ffffff191662ffffff841617905562ffffff6040519260408452600560408501526431b7b637b960d91b60608501521660208301527f7a3039988e102050cb4e0b6fe203e58afd9545e192ef2ca50df8d14ee2483e7e60803393a3565b613dc68161378a565b613d28565b92919092613dd881611260565b6001600160a01b0316331415613f20575b600081815260676020526040902054613e0c906001600160a01b03161515611213565b80600052602093610164855260046040600020018151956001600160401b038711613f13575b613e408761257e8454611283565b80601f8811600114613ea2575095806109059697600091613e97575b508160011b916000199060031b1c19161790555b81600080516020615aa283398151915260405180613e8f339582613ce2565b0390a3613d0e565b905083015138613e5c565b90601f198816613eb784600052602060002090565b926000905b828210613efb575050918891610905989960019410613ee2575b5050811b019055613e70565b85015160001960f88460031b161c191690553880613ed6565b80600185968294968a01518155019501930190613ebc565b613f1b610a88565b613e32565b613f298161378a565b613de9565b92909391613f3b84611260565b6001600160a01b031633141561402e575b600084815260676020526040902054613f6f906001600160a01b03161515611213565b613fe4613f7a610ae8565b868152826020820152836040820152846060820152613fdf6007613fa988600052610164602052604060002090565b016006613fc189600052610164602052604060002090565b0190613fcd8254611fc7565b80925590600052602052604060002090565b612b57565b613fec610ae8565b9485526020850152604084015260608301527fc34cc0b39823c062f2d31bfcde1d16c45decb5d1378a2f63942221b5d39dfbf060405180611fab33958261403c565b6140378461378a565b613f4c565b604081526005604082015264189d5a5b1960da1b6060820152608081019060209160808383015291610100820193926000905b6004821061407f57505050505090565b9091929394838061409c600193607f1989820301865289516109d9565b9701920192019093929161406f565b6140b481611260565b6001600160a01b039081163314156141d55760008183926140d484611260565b6140dc61520c565b16151580806141ce575b83146141b757506140f6836135ad565b6140ff83611260565b61411661199e856000526069602052604060002090565b6001600160a01b03811660009081526068602052604090208319815401905561414c61199e856000526067602052604060002090565b167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef82604051a4614193600261418d83600052610164602052604060002090565b016141ef565b61419a5750565b6141b261090591600052610164602052604060002090565b61426a565b6141c0576140f6565b6141c9836135ad565b6140f6565b50826140e6565b5060249150604051906355d2292f60e11b82526004820152fd5b61093e9054611283565b6001600160fe1b038111600116614211575b60021b90565b614219611fb0565b61420b565b6142288154611283565b9081614232575050565b81601f60009311600114614244575055565b8183526020832061426091601f0160051c81019060010161235d565b8160208120915555565b60066000916142788161421e565b6142846001820161421e565b6142906002820161421e565b61429c6003820161421e565b6142a86004820161421e565b8260058201550155565b6142bb81611260565b6001600160a01b03163314156143a8576001600160a01b03821660009081527fe66b7f18a15fed257e722ee4e0b46d479842712099771fae6234a4975b3be6fa602052604090205460ff161561438c5761431481611b07565b61432d82611a0383600052610165602052604060002090565b60408051818152600891810191909152673b32b934b334b2b960c11b60608201526001600160a01b03909216602083015233917f967cd1f911fe3c627b223c427ab2e2a18d89bef4a19ba762b552fd5fbc1033aa908060808101611fab565b505060405163070198dd60e51b81526001600482015260249150fd5b905060249150604051906355d2292f60e11b82526004820152fd5b6000818152606760205260409020546143e6906001600160a01b03161515611213565b600090815261016560205260409020546001600160a01b031690565b61440a6144d4565b8060005261016560205260409160018060a01b038360002054163314156144bb5760008281526067602052604090205461444e906001600160a01b03161515611213565b8160005261016660205261447181846000209060ff801983541691151516179055565b6008835193808552840152671d995c9a599a595960c21b6060840152151560208301527e91a55492d3e3f4e2c9b36ff4134889d9118003521f9d531728503da510b11f60803393a3565b509060249250519063926e6e9960e01b82526004820152fd5b3360009081527fe66b7f18a15fed257e722ee4e0b46d479842712099771fae6234a4975b3be6fa602052604090205460ff161561450d57565b5060405163070198dd60e51b815260016004820152602490fd5b3360009081527fddaeee8e61001dbcfaf4f92c6943552c392a86665d734d3c1905d7b3c23b1b1e602052604090205460ff161561456057565b5060405163070198dd60e51b815260006004820152602490fd5b60008181526067602052604090205461459d906001600160a01b03161515611213565b60005261016660205260ff6040600020541690565b6145ba61520c565b6145c2612f30565b6000818152606760205260409020546145e5906001600160a01b03161515611213565b6001600160a01b0361460c60026145fb85611d07565b015460101c6001600160a01b031690565b16614725577fb3f4be48c43e81d71721c23e88ed2db7f6782bf8b181c690104db1e31f82bbe890604051817f8140554c907b4ba66a04ea1f43b882cba992d3db4cd5c49298a56402d7b36ca233928061466588826109fe565b0390a361468061032c82600052610131602052604060002090565b156146da576146d5906146c7614694610b07565b828152600060208201819052604082018190526060820152336080820152600160a08201526146c286611d07565b614744565b604051918291339583614820565b0390a2565b6146d5906147176146e9610b07565b828152600060208201819052604082018190526060820152336080820152600060a08201526146c286611d07565b6040519182913395836147fc565b505060405163142d0c2f60e11b815260049150fd5b60041115611c8657565b6002908251815560208301516001820155019061477360408201511515839060ff801983541691151516179055565b6060810151825461ff00191690151560081b61ff00161782556080810151825462010000600160b01b0319811660109290921b62010000600160b01b0316918217845560a0909201516147c58161473a565b60048110156147ef575b62010000600160b81b03199092161760b09190911b60ff60b01b16179055565b6147f7611c65565b6147cf565b6040906148166000939594956060835260608301906109d9565b9460208201520152565b6040906148166001939594956060835260608301906109d9565b6040906148166003939594956060835260608301906109d9565b6040906148166002939594956060835260608301906109d9565b61487661520c565b6001600160a01b0380600261488a84611d07565b015460101c1615611ecf5760026148a083611d07565b015460101c1633141561493e576148cf60026148bb83611d07565b01805460ff60b01b1916600360b01b179055565b6148d881611d07565b546040517fb3f4be48c43e81d71721c23e88ed2db7f6782bf8b181c690104db1e31f82bbe833918061490b85878361483a565b0390a27fef2f6bed86b96d79b41799f5285f73b31274bb303ebe5d55a3cb48c567ab2db060405180611fab3395826109fe565b5050604051631851b23d60e01b8152600490fd5b61495b81611260565b6001600160a01b03163314156143a85760008181526067602052604090205461498e906001600160a01b03161515611213565b6149988282612ebd565b6040519160408352601760408401527f616363657373506f696e744175746f417070726f76616c0000000000000000006060840152151560208301527e91a55492d3e3f4e2c9b36ff4134889d9118003521f9d531728503da510b11f60803393a3565b919091614a0781611260565b6001600160a01b0316331415614adb57614a2083611d07565b8181541415614ac55760020190614a3c825460ff9060b01c1690565b614a458161473a565b614aaf577fb3f4be48c43e81d71721c23e88ed2db7f6782bf8b181c690104db1e31f82bbe89215614a8b57815460ff60b01b1916600160b01b179091556146d5906146c7565b815460ff60b01b1916600160b11b179091556146d590604051918291339583614854565b5050505050600460405163d9e5c51160e01b8152fd5b50505050506004604051636653b1a360e01b8152fd5b91505060249150604051906355d2292f60e11b82526004820152fd5b614aff6144d4565b614b0881614bbf565b600081815261016560205260409020546001600160a01b0391908216331415614ba257506002614b3783611d07565b015460101c1615611ecf57614b63826002614b5184611d07565b019060ff801983541691151516179055565b7fe2e598f7ff2dfd4bc3bd989635401b4c56846b7893cb7eace51d099f21e69bff611fab614b9083611d07565b54604051918291339615159583611fdf565b92505050602491506040519063926e6e9960e01b82526004820152fd5b6001600160a01b036002614bd283611d07565b015460101c1615611f1857614be690611d07565b5490565b614bf26144d4565b614bfb81614bbf565b600081815261016560205260409020546001600160a01b0391908216331415614ba257506002614c2a83611d07565b015460101c1615611ecf57614c5d826002614c4484611d07565b019061ff00825491151560081b169061ff001916179055565b7f17bd9b465aa0cdc6b308874903e9c38b13f561ecb1f2edaa8bf3969fe603d11c611fab614b9083611d07565b614c9261520c565b614c9a614527565b614ca381611c7c565b60008181526098602090815260408083206001600160a01b038616845290915290205460ff16614d6457614cd681611c7c565b60008181526098602090815260408083206001600160a01b03861684529091529020614d0190612690565b614d0a81611ca7565b614d148154612792565b9055614d1f81611c7c565b60408051600181523360208201526001600160a01b03909316927faf048a30703f33a377518eb62cc39bd3a14d6d1a1bb8267dcc440f1bde67b61a9181908101611fab565b50506040516397b705ed60e01b815260049150fd5b614d8161520c565b614d8a81611260565b6001600160a01b03908116331415614e6b57816000526099602052614dd261032c8561031586610488604060002054609a602052604060002090600052602052604060002090565b614e55577fa4e6ad394cc40a3bae0d24623f88f7bb2e1463d19dab64bafd9985b0bc78211890614e2f6126908661031587610488614e1a896000526099602052604060002090565b546104798a600052609a602052604060002090565b614e3884611cc0565b60408051600181523360208201529190951694819081015b0390a4565b505050505060046040516397b705ed60e01b8152fd5b5091505060249150604051906355d2292f60e11b82526004820152fd5b614e9061520c565b614e98614527565b614eab6128ce61032c8461031585611c8e565b614d6457614eb881611c7c565b801580614f56575b614f4157614ede614ed48361031584611c8e565b805460ff19169055565b614ee781611ca7565b614ef181546134d9565b9055614efc81611c7c565b60408051600081523360208201526001600160a01b03909316927faf048a30703f33a377518eb62cc39bd3a14d6d1a1bb8267dcc440f1bde67b61a9181908101611fab565b50506040516360ed092b60e01b815260049150fd5b506001614f6282611ca7565b5414614ec0565b614f7161520c565b614f7a81611260565b6001600160a01b03908116331415614e6b57816000526099602052614fc56128ce61032c8661031587610488604060002054609a602052604060002090600052602052604060002090565b614e55577fa4e6ad394cc40a3bae0d24623f88f7bb2e1463d19dab64bafd9985b0bc7821189061500d614ed48661031587610488614e1a896000526099602052604060002090565b61501684611cc0565b6040805160008152336020820152919095169481908101614e50565b61503a614527565b61504261520c565b60cc5460ff8160081c161561508a5760019060ff19161760cc5560007f07e8f74f605213c41c1a057118d86bca5540e9cf52c351026d0d65e46421aa1a6020604051338152a2565b5050604051635970d9f560e11b8152600490fd5b6150a6614527565b60cc5460ff8116156150e75760ff191660cc5560007f07e8f74f605213c41c1a057118d86bca5540e9cf52c351026d0d65e46421aa1a6020604051338152a2565b50506040516355d413dd60e01b8152600490fd5b615103614527565b60cc549015159060ff8160081c16151582146151575761ff008260081b169061ff0019161760cc557f959581ef17eb8c8936ef9832169bc89dbcd1358765adca8ca81f28b416bb5efa6020604051338152a2565b506024915060405190632e15c5c160e21b82526004820152fd5b906109059161517e614527565b61282d565b61518b614527565b4780600081156151e1575b600080809381933390f1156151d4575b6040519081527f8c7cdad0d12a8db3e23561b42da6f10c8137914c97beff202213a410e1f520a360203392a2565b6151dc611b70565b6151a6565b506108fc615196565b6151fb60ff60005460081c166122fc565b60cc805461ffff1916610100179055565b60ff60cc541661521857565b506040516306d39fcd60e41b8152600490fd5b615237916000916152ff565b604051906302571be360e01b825260048201526020816024816e0c2e074ec69a0dfb2997ba6c7d2e1e5afa9081156152c6575b600091615298575b506001600160a01b031633141561528557565b50604051631644084960e21b8152600490fd5b906152a33d83610ac7565b6020823d810103126152c05750516152ba816108e6565b38615272565b91505080fd5b6152ce611b70565b61526a565b908210156152df570190565b611d03612816565b90939293848311610b87578411610bdb578101920390565b91805b82811061535b5750906153199181615320946152e7565b3691610b50565b60208151910120604051615355816153476020820194856040916000825260208201520190565b03601f198101835282610ac7565b51902090565b601760f91b61538c61537f6153718487896152d3565b356001600160f81b03191690565b6001600160f81b03191690565b1461539f5761539a90611fc7565b615302565b6153b56153ae82949394612792565b83866152ff565b92615319926153c494956152e7565b8051602091820120604080519283019384528201526153558160608101615347565b60405190606082018281106001600160401b03821117615456575b604052604082527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040837f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201520152565b61545e610a88565b615401565b6040519061547082610a9f565b6008825260203681840137565b9061548782610b26565b6154946040519182610ac7565b82815280926154a5601f1991610b26565b0190602036910137565b805115615581576154be6153e6565b6154e26154dd6154d86154d185516127a2565b6003900490565b6141f9565b61547d565b9160208301918182518301915b82821061552f5750505060039051068060011461551c57600214615511575090565b603d90600019015390565b50603d9081600019820153600119015390565b9091936004906003809401938451600190603f9082828260121c16880101518553828282600c1c16880101518386015382828260061c16880101516002860153168501015190820153019391906154ef565b5061093e61174c565b602081830312610941578051906001600160401b038211610bdb570181601f820112156109415780516155bc81610b26565b926155ca6040519485610ac7565b81845260208284010111610bdb5761093e91602080850191016109a4565b9261561461093e9593615606615622946080885260808801906112bf565b9086820360208801526112bf565b9084820360408601526112bf565b9160608184039101526109d9565b60009291815461563f81611283565b92600191808316908115615697575060011461565b5750505050565b90919293945060005260209081600020906000915b85831061568657505050500190388080806112ec565b805485840152918301918101615670565b60ff19168452505050019150388080806112ec565b600b60fa1b815260010190565b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000808210156157ee575b506d04ee2d6d415b85acef8100000000808310156157df575b50662386f26fc10000808310156157d0575b506305f5e100808310156157c1575b50612710808310156157b2575b5060648210156157a2575b600a80921015615798575b60019081602161575082870161547d565b95860101905b615762575b5050505090565b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a83530491821561579357919082615756565b61575b565b916001019161573f565b9190606460029104910191615734565b60049193920491019138615729565b6008919392049101913861571c565b6010919392049101913861570d565b602091939204910191386156fb565b6040935081049150386156e2565b6040519061580982610a9f565b6007825260203681840137565b6020908051156152df570190565b6021908051600110156152df570190565b90602091805182101561584757010190565b61584f612816565b010190565b1561585b57565b50606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b60405190606082018281106001600160401b03821117615948575b604052602a8252604036602084013760306158d583615816565b5360786158e183615824565b536029905b600182116158f95761093e915015615854565b80600f6159359216601081101561593b575b6f181899199a1a9b1b9c1cb0b131b232b360811b901a61592b8486615835565b5360041c91612055565b906158e6565b615943612816565b61590b565b615950610a88565b6158bb565b1561597a5760405161596681610a9f565b60048152637472756560e01b602082015290565b60405161598681610a9f565b600581526466616c736560d81b602082015290565b62ffffff166159a8615463565b9060306159b483615816565b5360786159c083615824565b5360079081905b60018211615a5c576159da915015615854565b6159e26157fc565b91825115615a4f575b60236020840153600190815b838110615a05575050505090565b615a3d906001198111615a42575b6001600160f81b0319615a2882860185615835565b511660001a615a378288615835565b53611fc7565b6159f7565b615a4a611fb0565b615a13565b615a57612816565b6159eb565b80600f615a8e92166010811015615a94575b6f181899199a1a9b1b9c1cb0b131b232b360811b901a61592b8487615835565b906159c7565b615a9c612816565b615a6e56fe0eef1ffa5f2982ad38bb9f5022d2ac4c29b22af1469b6ed4f49176c737d74a18a3646970667358221220643a832f303122bb101860c1f4e4f43c514c06eba21d20ca2352d0017715cc8a6c6578706572696d656e74616cf564736f6c634300080c0041", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessPointAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccessPointCreationStatusAlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccessPointNotExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccessPointScoreCannotBeLower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContractIsNotPausable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContractIsNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContractIsPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenIdForAccessPoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeAccessPointOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeENSOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"MustBeTokenOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"MustBeTokenVerifier\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveAtLeastOneOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"role\",\"type\":\"uint8\"}],\"name\":\"MustHaveCollectionRole\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"role\",\"type\":\"uint8\"}],\"name\":\"MustHaveTokenRole\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"PausableIsSetTo\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredValue\",\"type\":\"uint256\"}],\"name\":\"RequiredPayment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoleAlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThereIsNoTokenMinted\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum FleekBilling.Billing\",\"name\":\"key\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"BillingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"verified\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"triggeredBy\",\"type\":\"address\"}],\"name\":\"ChangeAccessPointContentVerify\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum FleekAccessPoints.AccessPointCreationStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"triggeredBy\",\"type\":\"address\"}],\"name\":\"ChangeAccessPointCreationStatus\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"verified\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"triggeredBy\",\"type\":\"address\"}],\"name\":\"ChangeAccessPointNameVerify\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"score\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"triggeredBy\",\"type\":\"address\"}],\"name\":\"ChangeAccessPointScore\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum FleekAccessControl.CollectionRoles\",\"name\":\"role\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"byAddress\",\"type\":\"address\"}],\"name\":\"CollectionRoleChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"triggeredBy\",\"type\":\"address\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"triggeredBy\",\"type\":\"address\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"value\",\"type\":\"uint24\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"triggeredBy\",\"type\":\"address\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string[4]\",\"name\":\"value\",\"type\":\"string[4]\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"triggeredBy\",\"type\":\"address\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"triggeredBy\",\"type\":\"address\"}],\"name\":\"MetadataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NewAccessPoint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"externalURL\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ENS\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"commitHash\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"gitRepository\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ipfsHash\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"logo\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"color\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"accessPointAutoApproval\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"NewMint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"isPausable\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PausableStatusChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"isPaused\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauseStatusChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"RemoveAccessPoint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enum FleekAccessControl.TokenRoles\",\"name\":\"role\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"byAddress\",\"type\":\"address\"}],\"name\":\"TokenRoleChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"byAddress\",\"type\":\"address\"}],\"name\":\"TokenRolesCleared\",\"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\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"byAddress\",\"type\":\"address\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"}],\"name\":\"addAccessPoint\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"string\",\"name\":\"apName\",\"type\":\"string\"}],\"name\":\"decreaseAccessPointScore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"}],\"name\":\"getAccessPointJSON\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum FleekBilling.Billing\",\"name\":\"key\",\"type\":\"uint8\"}],\"name\":\"getBilling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastTokenId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenVerifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum FleekAccessControl.CollectionRoles\",\"name\":\"role\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantCollectionRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"enum FleekAccessControl.TokenRoles\",\"name\":\"role\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantTokenRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum FleekAccessControl.CollectionRoles\",\"name\":\"role\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasCollectionRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"enum FleekAccessControl.TokenRoles\",\"name\":\"role\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasTokenRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"}],\"name\":\"increaseAccessPointScore\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"initialBillings\",\"type\":\"uint256[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"}],\"name\":\"isAccessPointNameVerified\",\"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\":\"isPausable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"isTokenVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"externalURL\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ens\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"commitHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"gitRepository\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ipfsHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"logo\",\"type\":\"string\"},{\"internalType\":\"uint24\",\"name\":\"color\",\"type\":\"uint24\"},{\"internalType\":\"bool\",\"name\":\"accessPointAutoApproval\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"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\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"}],\"name\":\"removeAccessPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum FleekAccessControl.CollectionRoles\",\"name\":\"role\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeCollectionRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"enum FleekAccessControl.TokenRoles\",\"name\":\"role\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_apAutoApproval\",\"type\":\"bool\"}],\"name\":\"setAccessPointAutoApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"verified\",\"type\":\"bool\"}],\"name\":\"setAccessPointContentVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"verified\",\"type\":\"bool\"}],\"name\":\"setAccessPointNameVerify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"apName\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAccessPoint\",\"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\":\"enum FleekBilling.Billing\",\"name\":\"key\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"setBilling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pausable\",\"type\":\"bool\"}],\"name\":\"setPausable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_commitHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_gitRepository\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_ipfsHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_domain\",\"type\":\"string\"}],\"name\":\"setTokenBuild\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint24\",\"name\":\"_tokenColor\",\"type\":\"uint24\"}],\"name\":\"setTokenColor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenDescription\",\"type\":\"string\"}],\"name\":\"setTokenDescription\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenENS\",\"type\":\"string\"}],\"name\":\"setTokenENS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenExternalURL\",\"type\":\"string\"}],\"name\":\"setTokenExternalURL\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenLogo\",\"type\":\"string\"}],\"name\":\"setTokenLogo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenLogo\",\"type\":\"string\"},{\"internalType\":\"uint24\",\"name\":\"_tokenColor\",\"type\":\"uint24\"}],\"name\":\"setTokenLogoAndColor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenName\",\"type\":\"string\"}],\"name\":\"setTokenName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"verified\",\"type\":\"bool\"}],\"name\":\"setTokenVerified\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifier\",\"type\":\"address\"}],\"name\":\"setTokenVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addAccessPoint(uint256,string)\":{\"details\":\"Add a new AccessPoint register for an app token. The AP name should be a DNS or ENS url and it should be unique. Anyone can add an AP but it should requires a payment. May emit a {NewAccessPoint} event. Requirements: - the tokenId must be minted and valid. - billing for add acess point may be applied. - the contract must be not paused.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Burns a previously minted `tokenId`. May emit a {Transfer} event. Requirements: - the tokenId must be minted and valid. - the sender must be the owner of the token. - the contract must be not paused.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decreaseAccessPointScore(string)\":{\"details\":\"Decreases the score of a AccessPoint registry if is greater than 0.\"},\"getAccessPointJSON(string)\":{\"details\":\"A view function to gether information about an AccessPoint. It returns a JSON string representing the AccessPoint information.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getBilling(uint8)\":{\"details\":\"Returns the billing value for a given key.\"},\"getLastTokenId()\":{\"details\":\"Returns the last minted tokenId.\"},\"getToken(uint256)\":{\"details\":\"Returns the token metadata associated with the `tokenId`. Returns multiple string and uint values in relation to metadata fields of the App struct. Requirements: - the tokenId must be minted and valid.\"},\"getTokenVerifier(uint256)\":{\"details\":\"Returns the verifier of a token. Requirements: - the tokenId must be minted and valid.\"},\"grantCollectionRole(uint8,address)\":{\"details\":\"Grants the collection role to an address. Requirements: - the caller should have the collection role.\"},\"grantTokenRole(uint256,uint8,address)\":{\"details\":\"Grants the token role to an address. Requirements: - the caller should have the token role.\"},\"hasCollectionRole(uint8,address)\":{\"details\":\"Returns `True` if a certain address has the collection role.\"},\"hasTokenRole(uint256,uint8,address)\":{\"details\":\"Returns `True` if a certain address has the token role.\"},\"increaseAccessPointScore(string)\":{\"details\":\"Increases the score of a AccessPoint registry.\"},\"initialize(string,string,uint256[])\":{\"details\":\"Initializes the contract by setting a `name` and a `symbol` to the token collection.\"},\"isAccessPointNameVerified(string)\":{\"details\":\"A view function to check if a AccessPoint is verified.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"isPausable()\":{\"details\":\"Returns true if the contract is pausable, and false otherwise.\"},\"isPaused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"isTokenVerified(uint256)\":{\"details\":\"Returns the verification status of a token. Requirements: - the tokenId must be minted and valid.\"},\"mint(address,string,string,string,string,string,string,string,string,uint24,bool,address)\":{\"details\":\"Mints a token and returns a tokenId. If the `tokenId` has not been minted before, and the `to` address is not zero, emits a {Transfer} event. Requirements: - the caller must have ``collectionOwner``'s admin role. - billing for the minting may be applied. - the contract must be not paused.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"pause()\":{\"details\":\"Sets the contract to paused state. Requirements: - the sender must have the `controller` role. - the contract must be pausable. - the contract must be not paused.\"},\"removeAccessPoint(string)\":{\"details\":\"Remove an AccessPoint registry for an app token. It will also remove the AP from the app token APs list. May emit a {RemoveAccessPoint} event. Requirements: - the AP must exist. - must be called by the AP owner. - the contract must be not paused.\"},\"revokeCollectionRole(uint8,address)\":{\"details\":\"Revokes the collection role of an address. Requirements: - the caller should have the collection role.\"},\"revokeTokenRole(uint256,uint8,address)\":{\"details\":\"Revokes the token role of an address. Requirements: - the caller should have the token role.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setAccessPointAutoApproval(uint256,bool)\":{\"details\":\"Updates the `accessPointAutoApproval` settings on minted `tokenId`. May emit a {MetadataUpdate} event. Requirements: - the tokenId must be minted and valid. - the sender must have the `tokenController` role.\"},\"setAccessPointContentVerify(string,bool)\":{\"details\":\"Set the content verification of a AccessPoint registry. May emit a {ChangeAccessPointContentVerify} event. Requirements: - the AP must exist. - the sender must have the token controller role.\"},\"setAccessPointNameVerify(string,bool)\":{\"details\":\"Set the name verification of a AccessPoint registry. May emit a {ChangeAccessPointNameVerify} event. Requirements: - the AP must exist. - the sender must have the token controller role.\"},\"setApprovalForAccessPoint(uint256,string,bool)\":{\"details\":\"Set approval settings for an access point. It will add the access point to the token's AP list, if `approved` is true. May emit a {ChangeAccessPointApprovalStatus} event. Requirements: - the tokenId must exist and be the same as the tokenId that is set for the AP. - the AP must exist. - must be called by a token controller.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"setBilling(uint8,uint256)\":{\"details\":\"Sets the billing value for a given key. May emit a {BillingChanged} event. Requirements: - the sender must have the `collectionOwner` role.\"},\"setPausable(bool)\":{\"details\":\"Sets the contract to pausable state. Requirements: - the sender must have the `owner` role. - the contract must be in the oposite pausable state.\"},\"setTokenBuild(uint256,string,string,string,string)\":{\"details\":\"Adds a new build to a minted `tokenId`'s builds mapping. May emit a {NewBuild} event. Requirements: - the tokenId must be minted and valid. - the sender must have the `tokenController` role.\"},\"setTokenColor(uint256,uint24)\":{\"details\":\"Updates the `color` metadata field of a minted `tokenId`. May emit a {NewTokenColor} event. Requirements: - the tokenId must be minted and valid. - the sender must have the `tokenController` role.\"},\"setTokenDescription(uint256,string)\":{\"details\":\"Updates the `description` metadata field of a minted `tokenId`. May emit a {NewTokenDescription} event. Requirements: - the tokenId must be minted and valid. - the sender must have the `tokenController` role.\"},\"setTokenENS(uint256,string)\":{\"details\":\"Updates the `ENS` metadata field of a minted `tokenId`. May emit a {NewTokenENS} event. Requirements: - the tokenId must be minted and valid. - the sender must have the `tokenController` role.\"},\"setTokenExternalURL(uint256,string)\":{\"details\":\"Updates the `externalURL` metadata field of a minted `tokenId`. May emit a {NewTokenExternalURL} event. Requirements: - the tokenId must be minted and valid. - the sender must have the `tokenController` role.\"},\"setTokenLogo(uint256,string)\":{\"details\":\"Updates the `logo` metadata field of a minted `tokenId`. May emit a {NewTokenLogo} event. Requirements: - the tokenId must be minted and valid. - the sender must have the `tokenController` role.\"},\"setTokenLogoAndColor(uint256,string,uint24)\":{\"details\":\"Updates the `logo` and `color` metadata fields of a minted `tokenId`. May emit a {NewTokenLogo} and a {NewTokenColor} event. Requirements: - the tokenId must be minted and valid. - the sender must have the `tokenController` role.\"},\"setTokenName(uint256,string)\":{\"details\":\"Updates the `name` metadata field of a minted `tokenId`. May emit a {NewTokenName} event. Requirements: - the tokenId must be minted and valid. - the sender must have the `tokenController` role.\"},\"setTokenVerified(uint256,bool)\":{\"details\":\"Sets the verification status of a token. May emit a {MetadataUpdate} event. Requirements: - the tokenId must be minted and valid. - the sender must be the token verifier. - the sender must have `CollectionRoles.Verifier` role.\"},\"setTokenVerifier(uint256,address)\":{\"details\":\"Sets an address as verifier of a token. The verifier must have `CollectionRoles.Verifier` role. May emit a {MetadataUpdate} event. Requirements: - the tokenId must be minted and valid. - the sender must be the owner of the token. - the verifier must have `CollectionRoles.Verifier` role.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the token metadata associated with the `tokenId`. Returns a based64 encoded string value of the URI. Requirements: - the tokenId must be minted and valid.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"unpause()\":{\"details\":\"Sets the contract to unpaused state. Requirements: - the sender must have the `controller` role. - the contract must be paused.\"},\"withdraw()\":{\"details\":\"Withdraws all the funds from contract. May emmit a {Withdrawn} event. Requirements: - the sender must have the `collectionOwner` role.\"}},\"version\":1},\"userdoc\":{\"events\":{\"MetadataUpdate(uint256,string,string,address)\":{\"notice\":\"Event emitted when a token's metadata is updated.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FleekERC721.sol\":\"FleekERC721\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@ensdomains/ens-contracts/contracts/registry/ENS.sol\":{\"keccak256\":\"0x7cb1158c7d268b63de1468e28e2711b28d686e2628ddb22da2149cd93ddeafda\",\"urls\":[\"bzz-raw://a7018309acca24b10ea1235b1c27828f29f2ddfabb653a794639baf620dc2314\",\"dweb:/ipfs/QmakFQT5NFvGs3g8xxwtgtWdddq28Wtm6MjNSpJNhV1YpR\"]},\"@ensdomains/ens-contracts/contracts/resolvers/Resolver.sol\":{\"keccak256\":\"0x62b71222aa65138e124b94f5835c2163cc88213491e5f0a80d7a4c45641fbe64\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2def0b17096b07578ac974ab3871d71c757a01389bbfdb124d103308a3ecaad9\",\"dweb:/ipfs/QmepR8cbk2etYYnKHArZFuGNTZ2huqFihxq9mzfS3YgE3Y\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/IABIResolver.sol\":{\"keccak256\":\"0x85b373d02d19374fe570af407f459768285704bf7f30ab17c30eabfb5a10e4c3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2046ce3d92d29806d7b447f7ab4227f19b0b2e5c75fd5b4a3fcaef7fe2442141\",\"dweb:/ipfs/QmRgnfWjFetrSJngkhU7Yui1ZcK1MeatvZDpvUTYNuYnND\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/IAddrResolver.sol\":{\"keccak256\":\"0x2ad7f2fc60ebe0f93745fe70247f6a854f66af732483fda2a3c5e055614445e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43922ba183ff20d87dce7fc5d715e626b26594151e36dcc8d7c6329b9a822963\",\"dweb:/ipfs/QmTg9uHTugTxzqddN68gnhNbGt4bGJBS9mQcss6GYggR4X\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/IAddressResolver.sol\":{\"keccak256\":\"0x411447c1e90c51e09702815a85ec725ffbbe37cf96e8cc4d2a8bd4ad8a59d73e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://543aa2756447a428711b69aea79e9f4641c22f8330ba920b2a49fde8d9207f82\",\"dweb:/ipfs/QmTdpcYRWLH3BL7iytnqcSzRojTPe3YettKaTqeCvKPk54\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/IContentHashResolver.sol\":{\"keccak256\":\"0xd95cd77684ba5752c428d7dceb4ecc6506ac94f4fbb910489637eb68dcd8e366\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daf1fee7770679bd935b8b5686789a4ecc532caeef5a9b8e1b60ae0c285e743e\",\"dweb:/ipfs/QmSaHBAqtDdbQLH6QN4EbupMrq2ah8g6fqE7fLX1u4cjMZ\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/IDNSRecordResolver.sol\":{\"keccak256\":\"0xcfa52200edd337f2c6c5bf402352600584da033b21323603e53de33051a3e25d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c8355211d58db82660140191678ee342eb8a7ac46fa097ae8e03eef008f592e\",\"dweb:/ipfs/QmYDNiECPd4fJ7Vk9Xywfpg73rUvDpcYqas95ofGcpt7fM\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/IDNSZoneResolver.sol\":{\"keccak256\":\"0xca1b3a16e7005533f2800a3e66fcdccf7c574deac7913d8c810f40aec1d58dc0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4e38d5eb69e236c37e4a013628838070720c9e1923569650b01252868038c7a\",\"dweb:/ipfs/QmV397iZMRxtem79kJy5sueJadXoVL89gNViX2xciQHUrk\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/IExtendedResolver.sol\":{\"keccak256\":\"0x5d81521cfae7d9a4475d27533cd8ed0d3475d369eb0674fd90ffbdbdf292faa3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d244d15588785044b54c453ab6dc51c616ab70cb8b9e687d3e54565bcae97760\",\"dweb:/ipfs/QmXz4ZZBTFogdkdTV1mcE3ywvL2agKVZHLNNeRHCKVruYM\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/IInterfaceResolver.sol\":{\"keccak256\":\"0x390321fb58f7b927df9562450981e74b4be3907e7c09df321fd3b7409b63ae28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://045d12c6e0e4596b3672614751a9e75188183a89765a6abd938294e0294e9c56\",\"dweb:/ipfs/QmazngvagEoKe29s4M9Rv8KygWD5hrAtNPkYDPJ2pK13yx\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/INameResolver.sol\":{\"keccak256\":\"0x9ec392b612447b1acbdc01114f2da2837a658d3f3157f60a99c5269f0b623346\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b2cd9e5339b09f40e82bd91fed7d5f643dd031393eefb9aec588eaba8465049\",\"dweb:/ipfs/QmT2A8eswhJU9YadCs9BtwKNj6YGypntXmFepANQYyGw7x\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/IPubkeyResolver.sol\":{\"keccak256\":\"0x69748947093dd2fda9ddcebd0adf19a6d1e7600df1d4b1462a0417156caddca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2f86e50bd17c38fb10feb577d88d8970c585017a391ef10e3aaa3d50f81555\",\"dweb:/ipfs/QmaxLx2pqCUxf9W2dusfviZ9aSiTuVwuekGo73rjvmGifE\"]},\"@ensdomains/ens-contracts/contracts/resolvers/profiles/ITextResolver.sol\":{\"keccak256\":\"0x7c5debb3c42cd9f5de2274ea7aa053f238608314b62db441c40e31cea2543fd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://412e34ae2d84d542ffa6791486963f3fe04432a3ffd51877d441256dc2941914\",\"dweb:/ipfs/QmciS4mGAQ6KJtLiLcBFekHKhYAYMmubDWGkpZ3sUFtJPW\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8a313cf42389440e2706837c91370323b85971c06afd6d056d21e2bc86459618\",\"dweb:/ipfs/QmT8XUrUvQ9aZaPKrqgRU2JVGWnaxBcUYJA7Q7K5KcLBSZ\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\":{\"keccak256\":\"0x2a6a0b9fd2d316dcb4141159a9d13be92654066d6c0ae92757ed908ecdfecff0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c05d9be7ee043009eb9f2089b452efc0961345531fc63354a249d7337c69f3bb\",\"dweb:/ipfs/QmTXhzgaYrh6og76BP85i6exNFAv5NYw64uVWyworNogyG\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"keccak256\":\"0xbb2ed8106d94aeae6858e2551a1e7174df73994b77b13ebd120ccaaef80155f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8bc3c6a456dba727d8dd9fd33420febede490abb49a07469f61d2a3ace66a95a\",\"dweb:/ipfs/QmVAWtEVj7K5AbvgJa9Dz22KiDq9eoptCjnVZqsTMtKXyd\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"keccak256\":\"0x2c0b89cef83f353c6f9488c013d8a5968587ffdd6dfc26aad53774214b97e229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a68e662c2a82412308b1feb24f3d61a44b3b8772f44cbd440446237313c3195\",\"dweb:/ipfs/QmfBuWUE2TQef9hghDzzuVkDskw3UGAyPgLmPifTNV7K6g\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/extensions/IERC721MetadataUpgradeable.sol\":{\"keccak256\":\"0x95a471796eb5f030fdc438660bebec121ad5d063763e64d92376ffb4b5ce8b70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ffbd627e6958983d288801acdedbf3491ee0ebf1a430338bce47c96481ce9e3\",\"dweb:/ipfs/QmUM1vpmNgBV34sYf946SthDJNGhwwqjoRggmj4TUUQmdB\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"keccak256\":\"0x6b9a5d35b744b25529a2856a8093e7c03fb35a34b1c4fb5499e560f8ade140da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://187b5c3a1c9e77678732a2cc5284237f9cfca6bc28ee8bc0a0f4f951d7b3a2f8\",\"dweb:/ipfs/Qmb2KFr7WuQu7btdCiftQG64vTzrG4UyzVmo53EYHcnHYA\"]},\"@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0x9a3b990bd56d139df3e454a9edf1c64668530b5a77fc32eb063bc206f958274a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0895399d170daab2d69b4c43a0202e5a07f2e67a93b26e3354dcbedb062232f7\",\"dweb:/ipfs/QmUM1VH3XDk559Dsgh4QPvupr3YVKjz87HrSyYzzVFZbxw\"]},\"@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol\":{\"keccak256\":\"0xc6cef87559d0aeffdf0a99803de655938a7779ec0a3cd5d4383483ad85565a09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://92ad7e572cf44e6b4b37631b44b62f9eb9fb1cf14d9ce51c1504d5dc7ccaf758\",\"dweb:/ipfs/QmcnbqX85tsWnUXPmtuPLE4SczME2sJaTfmqEFkuAJvWhy\"]},\"@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\":{\"keccak256\":\"0xc1bd5b53319c68f84e3becd75694d941e8f4be94049903232cd8bc7c535aaa5a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://056027a78e6f4b78a39be530983551651ee5a052e786ca2c1c6a3bb1222b03b4\",\"dweb:/ipfs/QmXRUpywAqNwAfXS89vrtiE2THRM9dX9pQ4QxAkV1Wx9kt\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"@openzeppelin/contracts/utils/Base64.sol\":{\"keccak256\":\"0x5f3461639fe20794cfb4db4a6d8477388a15b2e70a018043084b7c4bedfa8136\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77e5309e2cc4cdc3395214edb0ff43ff5a5f7373f5a425383e540f6fab530f96\",\"dweb:/ipfs/QmTV8DZ9knJDa3b5NPBFQqjvTzodyZVjRUg5mx5A99JPLJ\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c969013129ba9e651a20735ef659fef6d8a1139ea3607bd4b26ddea2d645634\",\"dweb:/ipfs/QmVhVa6LGuzAcB8qgDtVHRkucn4ihj5UZr8xBLcJkP6ucb\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33bbf48cc069be677705037ba7520c22b1b622c23b33e1a71495f2d36549d40b\",\"dweb:/ipfs/Qmct36zWXv3j7LZB83uwbg7TXwnZSN1fqHNDZ93GG98bGz\"]},\"contracts/FleekAccessControl.sol\":{\"keccak256\":\"0xdd0352b2e9e1a7393cb85a85efb7135cc5c0d5365ee156ca78eda2c82113b6f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb62245b17047d2261afb923ffb7592cc54c78cad599828deb3342e4e6de6c99\",\"dweb:/ipfs/QmRfsz1x2dh4fx78KizNXLMjfisgvzGkizbpAasqzZvggr\"]},\"contracts/FleekAccessPoints.sol\":{\"keccak256\":\"0xa74f4f1af3f7100dde68c4824784a93927191c72f00416f96dded39b36cd43cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6aee8dc6e13e77cec72fbfadee051aad02ab25848646cda7f5a57a89126ea729\",\"dweb:/ipfs/QmWk9raFrRkASBmmZ3Ng9a5HyHYUbjfxEJKhdqwfR2WmL9\"]},\"contracts/FleekBilling.sol\":{\"keccak256\":\"0xcb1568aa8629045a5c97a365d81c448a24f0d6434798e386125633029393ed94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c775e1ea3aeab0841976c63bfcf95e64ba879ad4a4b635f76ef12fb6a5348b12\",\"dweb:/ipfs/Qmct7TaBnvH86d184URxWYtHwSHMAVyCrtvTG8hcoArD7p\"]},\"contracts/FleekERC721.sol\":{\"keccak256\":\"0xcc28cd2b0afd53d984cc2bb88d008dd4d3b7cfc4ada6448e127fd002bf48368e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce93fa89b284d106f8357ed5e370895bb077011149b9b4a9daca45fa8b30ed96\",\"dweb:/ipfs/Qme5ejsjF9k4LXRQFKf83qX3cZGPipgumoweRihwEeCcoA\"]},\"contracts/FleekPausable.sol\":{\"keccak256\":\"0x4d172714ea6231b283f96cb8e355cc9f5825e01039aa5a521e7a29bcb3ccd1cb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3f099c1af04b71bf43bb34fe8413dffb51a8962f91fd99d61693160c3272bd58\",\"dweb:/ipfs/QmWQe9XyVeD955es4fgbHJuSDNZuqsdTCSDMrfJvioZCdj\"]},\"contracts/IERCX.sol\":{\"keccak256\":\"0xa3ed18c17836d56b1663c34de75a4ce309965fa6f13e88b08eeed29aca4cf4bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae2d073b525af1cf0445655d94c78fe02492e7d4562f815251e6b44a73a5904\",\"dweb:/ipfs/Qmesee9NVvXn84TR2H8AudwGaAZvrQN3JQ9Xs7spcwVs7A\"]},\"contracts/util/FleekENS.sol\":{\"keccak256\":\"0xf9be784932977798e530160f38eefdfbb55ae25a3d9cc58b477b092ef9936039\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ffc81ef864a34e42a3ab1638e56d95f88721ec1032baadbc251a5ba3b4dd445\",\"dweb:/ipfs/QmUieEHXPHU79i1nx7KmoTVMfwjJGJHWRy2BYGd3PEceSB\"]},\"contracts/util/FleekSVG.sol\":{\"keccak256\":\"0x9d52d0defd643999776563c3ac36f084ae5a04a22c76ec316a0aadf6666c3c9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87bc5cca5451b7b8f3986dec26087857fe0f09505116536efad370172fe731a3\",\"dweb:/ipfs/QmZmDxPG8BUUjrVD92T2dktcuFQBxvHgMEnWx5aPBcSfrA\"]},\"contracts/util/FleekStrings.sol\":{\"keccak256\":\"0xccadd4e9c9c14068c6ca83c95d98a5b83b321bf442443f5432045a4313fcfce6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb4b7110961d44fba3f8f016a6fe1eeba7d783c723be7153ac8f05b24c68676d\",\"dweb:/ipfs/QmSCetjeCy7TGG9WFFbDLvpdVwYZrkMsdTBQmJuPwrugUT\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 533, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 536, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 2151, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 2370, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 724, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_name", + "offset": 0, + "slot": "101", + "type": "t_string_storage" + }, + { + "astId": 726, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_symbol", + "offset": 0, + "slot": "102", + "type": "t_string_storage" + }, + { + "astId": 730, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_owners", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 734, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_balances", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 738, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_tokenApprovals", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 744, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_operatorApprovals", + "offset": 0, + "slot": "106", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 1664, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "__gap", + "offset": 0, + "slot": "107", + "type": "t_array(t_uint256)44_storage" + }, + { + "astId": 4526, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_collectionRolesCounter", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_enum(CollectionRoles)4485,t_uint256)" + }, + { + "astId": 4534, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_collectionRoles", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_enum(CollectionRoles)4485,t_mapping(t_address,t_bool))" + }, + { + "astId": 4539, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_tokenRolesVersion", + "offset": 0, + "slot": "153", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 4551, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_tokenRoles", + "offset": 0, + "slot": "154", + "type": "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_enum(TokenRoles)4487,t_mapping(t_address,t_bool))))" + }, + { + "astId": 4884, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "__gap", + "offset": 0, + "slot": "155", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 6973, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_paused", + "offset": 0, + "slot": "204", + "type": "t_bool" + }, + { + "astId": 6975, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_canPause", + "offset": 1, + "slot": "204", + "type": "t_bool" + }, + { + "astId": 7126, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "__gap", + "offset": 0, + "slot": "205", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 5473, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_billings", + "offset": 0, + "slot": "254", + "type": "t_mapping(t_enum(Billing)5452,t_uint256)" + }, + { + "astId": 5601, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "__gap", + "offset": 0, + "slot": "255", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 4989, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_accessPoints", + "offset": 0, + "slot": "304", + "type": "t_mapping(t_string_memory_ptr,t_struct(AccessPoint)4984_storage)" + }, + { + "astId": 4993, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_autoApproval", + "offset": 0, + "slot": "305", + "type": "t_mapping(t_uint256,t_bool)" + }, + { + "astId": 5439, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "__gap", + "offset": 0, + "slot": "306", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 5693, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_appIds", + "offset": 0, + "slot": "355", + "type": "t_uint256" + }, + { + "astId": 5698, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_apps", + "offset": 0, + "slot": "356", + "type": "t_mapping(t_uint256,t_struct(Token)7203_storage)" + }, + { + "astId": 5702, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_tokenVerifier", + "offset": 0, + "slot": "357", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 5706, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "_tokenVerified", + "offset": 0, + "slot": "358", + "type": "t_mapping(t_uint256,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)44_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[44]", + "numberOfBytes": "1408" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_enum(AccessPointCreationStatus)4970": { + "encoding": "inplace", + "label": "enum FleekAccessPoints.AccessPointCreationStatus", + "numberOfBytes": "1" + }, + "t_enum(Billing)5452": { + "encoding": "inplace", + "label": "enum FleekBilling.Billing", + "numberOfBytes": "1" + }, + "t_enum(CollectionRoles)4485": { + "encoding": "inplace", + "label": "enum FleekAccessControl.CollectionRoles", + "numberOfBytes": "1" + }, + "t_enum(TokenRoles)4487": { + "encoding": "inplace", + "label": "enum FleekAccessControl.TokenRoles", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_enum(Billing)5452,t_uint256)": { + "encoding": "mapping", + "key": "t_enum(Billing)5452", + "label": "mapping(enum FleekBilling.Billing => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_enum(CollectionRoles)4485,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_enum(CollectionRoles)4485", + "label": "mapping(enum FleekAccessControl.CollectionRoles => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_enum(CollectionRoles)4485,t_uint256)": { + "encoding": "mapping", + "key": "t_enum(CollectionRoles)4485", + "label": "mapping(enum FleekAccessControl.CollectionRoles => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_enum(TokenRoles)4487,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_enum(TokenRoles)4487", + "label": "mapping(enum FleekAccessControl.TokenRoles => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_string_memory_ptr,t_struct(AccessPoint)4984_storage)": { + "encoding": "mapping", + "key": "t_string_memory_ptr", + "label": "mapping(string => struct FleekAccessPoints.AccessPoint)", + "numberOfBytes": "32", + "value": "t_struct(AccessPoint)4984_storage" + }, + "t_mapping(t_uint256,t_address)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_bool)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_mapping(t_enum(TokenRoles)4487,t_mapping(t_address,t_bool)))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(enum FleekAccessControl.TokenRoles => mapping(address => bool)))", + "numberOfBytes": "32", + "value": "t_mapping(t_enum(TokenRoles)4487,t_mapping(t_address,t_bool))" + }, + "t_mapping(t_uint256,t_mapping(t_uint256,t_mapping(t_enum(TokenRoles)4487,t_mapping(t_address,t_bool))))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(uint256 => mapping(enum FleekAccessControl.TokenRoles => mapping(address => bool))))", + "numberOfBytes": "32", + "value": "t_mapping(t_uint256,t_mapping(t_enum(TokenRoles)4487,t_mapping(t_address,t_bool)))" + }, + "t_mapping(t_uint256,t_struct(Build)7183_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct IERCX.Build)", + "numberOfBytes": "32", + "value": "t_struct(Build)7183_storage" + }, + "t_mapping(t_uint256,t_struct(Token)7203_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct IERCX.Token)", + "numberOfBytes": "32", + "value": "t_struct(Token)7203_storage" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_memory_ptr": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessPoint)4984_storage": { + "encoding": "inplace", + "label": "struct FleekAccessPoints.AccessPoint", + "members": [ + { + "astId": 4972, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "tokenId", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 4974, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "score", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 4976, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "contentVerified", + "offset": 0, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 4978, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "nameVerified", + "offset": 1, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 4980, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "owner", + "offset": 2, + "slot": "2", + "type": "t_address" + }, + { + "astId": 4983, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "status", + "offset": 22, + "slot": "2", + "type": "t_enum(AccessPointCreationStatus)4970" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Build)7183_storage": { + "encoding": "inplace", + "label": "struct IERCX.Build", + "members": [ + { + "astId": 7176, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "commitHash", + "offset": 0, + "slot": "0", + "type": "t_string_storage" + }, + { + "astId": 7178, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "gitRepository", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 7180, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "ipfsHash", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + }, + { + "astId": 7182, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "domain", + "offset": 0, + "slot": "3", + "type": "t_string_storage" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Token)7203_storage": { + "encoding": "inplace", + "label": "struct IERCX.Token", + "members": [ + { + "astId": 7185, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "name", + "offset": 0, + "slot": "0", + "type": "t_string_storage" + }, + { + "astId": 7187, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "description", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 7189, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "externalURL", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + }, + { + "astId": 7191, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "ENS", + "offset": 0, + "slot": "3", + "type": "t_string_storage" + }, + { + "astId": 7193, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "logo", + "offset": 0, + "slot": "4", + "type": "t_string_storage" + }, + { + "astId": 7195, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "color", + "offset": 0, + "slot": "5", + "type": "t_uint24" + }, + { + "astId": 7197, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "currentBuild", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 7202, + "contract": "contracts/FleekERC721.sol:FleekERC721", + "label": "builds", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_uint256,t_struct(Build)7183_storage)" + } + ], + "numberOfBytes": "256" + }, + "t_uint24": { + "encoding": "inplace", + "label": "uint24", + "numberOfBytes": "3" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "implementationAddress": "0x5c456c91fe4ADd4440aAfCb856C66F105e8Ade83" +} \ No newline at end of file diff --git a/serverless/src/libs/nfa-contract.ts b/serverless/src/libs/nfa-contract.ts index 60e589e..9c9a623 100644 --- a/serverless/src/libs/nfa-contract.ts +++ b/serverless/src/libs/nfa-contract.ts @@ -1,8 +1,5 @@ import Web3 from 'web3'; -import * as abiFile from '../../../contracts/deployments/goerli/FleekERC721.json'; -import * as dotenv from 'dotenv'; - -dotenv.config(); +import * as abiFile from './FleekERC721.json'; if ( process.env.PRIVATE_KEY === undefined || @@ -15,7 +12,6 @@ const contract_address = abiFile.address; export const abi = abiFile.abi as any; export const web3 = new Web3(process.env.JSON_RPC); +export const account = web3.eth.accounts.wallet.add(process.env.PRIVATE_KEY); +web3.eth.setProvider(Web3.givenProvider); export const nfaContract = new web3.eth.Contract(abi, contract_address); -export const account = web3.eth.accounts.privateKeyToAccount( - process.env.PRIVATE_KEY -); diff --git a/serverless/yarn.lock b/serverless/yarn.lock index a67618e..89c2131 100644 --- a/serverless/yarn.lock +++ b/serverless/yarn.lock @@ -2765,6 +2765,11 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== +dotenv-expand@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== + dotenv-expand@^9.0.0: version "9.0.0" resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-9.0.0.tgz" @@ -5580,6 +5585,15 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" +serverless-dotenv-plugin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serverless-dotenv-plugin/-/serverless-dotenv-plugin-6.0.0.tgz#c3e0c2e7fb79641433497085eecc30fe150b5ca0" + integrity sha512-8tLVNwHfDO0sBz6+m+DLTZquRk0AZq9rzqk3kphm1iIWKfan9R7RKt4hdq3eQ0kmDoqzudjPYBEXAJ5bUNKeGQ== + dependencies: + chalk "^4.1.2" + dotenv "^16.0.3" + dotenv-expand "^10.0.0" + serverless-esbuild@^1.42.0: version "1.42.0" resolved "https://registry.npmjs.org/serverless-esbuild/-/serverless-esbuild-1.42.0.tgz"