{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721ACWithBasicRoyalties",
  "sourceName": "contracts/examples/erc721ac/ERC721ACWithBasicRoyalties.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "royaltyReceiver_",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "royaltyFeeNumerator_",
          "type": "uint96"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ApprovalCallerNotOwnerNorApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ApprovalQueryForNonexistentToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BalanceQueryForZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__InvalidTransferValidatorContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__SetTransferValidatorFirst",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintERC2309QuantityExceedsLimit",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintToZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintZeroQuantity",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OwnerQueryForNonexistentToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OwnershipNotInitializedForExtraData",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ShouldNotMintToBurnAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferCallerNotOwnerNorApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferFromIncorrectOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferToNonERC721ReceiverImplementer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferToZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "URIQueryForNonexistentToken",
      "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": true,
          "internalType": "uint256",
          "name": "fromTokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "toTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "ConsecutiveTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "DefaultRoyaltySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "TokenRoyaltySet",
      "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": "address",
          "name": "oldValidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValidator",
          "type": "address"
        }
      ],
      "name": "TransferValidatorUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_OPERATOR_WHITELIST_ID",
      "outputs": [
        {
          "internalType": "uint120",
          "name": "",
          "type": "uint120"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_SECURITY_LEVEL",
      "outputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_VALIDATOR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPermittedContractReceivers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSecurityPolicy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum TransferSecurityLevels",
              "name": "transferSecurityLevel",
              "type": "uint8"
            },
            {
              "internalType": "uint120",
              "name": "operatorWhitelistId",
              "type": "uint120"
            },
            {
              "internalType": "uint120",
              "name": "permittedContractReceiversId",
              "type": "uint120"
            }
          ],
          "internalType": "struct CollectionSecurityPolicy",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTransferValidator",
      "outputs": [
        {
          "internalType": "contract ICreatorTokenTransferValidator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWhitelistedOperators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "isContractReceiverPermitted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isOperatorWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "isTransferAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quantity",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quantity",
          "type": "uint256"
        }
      ],
      "name": "safeMint",
      "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": "payable",
      "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": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "setDefaultRoyalty",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomValidatorAndSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setToDefaultSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "setTokenRoyalty",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "transferValidator_",
          "type": "address"
        }
      ],
      "name": "setTransferValidator",
      "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": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620030d5380380620030d58339810160408190526200003491620003c1565b8383838381818160029080519060200190620000529291906200024e565b508051620000689060039060208401906200024e565b505060008055506200007a3362000095565b506200008990508282620000e7565b505050505050620004a9565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620000fe82826200014960201b6200193f1760201c565b6040516001600160601b03821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b6127106001600160601b0382161115620001bd5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620002155760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620001b4565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b8280546200025c906200046c565b90600052602060002090601f016020900481019282620002805760008555620002cb565b82601f106200029b57805160ff1916838001178555620002cb565b82800160010185558215620002cb579182015b82811115620002cb578251825591602001919060010190620002ae565b50620002d9929150620002dd565b5090565b5b80821115620002d95760008155600101620002de565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200031c57600080fd5b81516001600160401b0380821115620003395762000339620002f4565b604051601f8301601f19908116603f01168101908282118183101715620003645762000364620002f4565b816040528381526020925086838588010111156200038157600080fd5b600091505b83821015620003a5578582018301518183018401529082019062000386565b83821115620003b75760008385830101525b9695505050505050565b60008060008060808587031215620003d857600080fd5b84516001600160a01b0381168114620003f057600080fd5b60208601519094506001600160601b03811681146200040e57600080fd5b60408601519093506001600160401b03808211156200042c57600080fd5b6200043a888389016200030a565b935060608701519150808211156200045157600080fd5b5062000460878288016200030a565b91505092959194509250565b600181811c908216806200048157607f821691505b60208210811415620004a357634e487b7160e01b600052602260045260246000fd5b50919050565b612c1c80620004b96000396000f3fe60806040526004361061026a5760003560e01c80635d4c1d4611610153578063a1448194116100cb578063c87b56dd1161007f578063e985e9c511610064578063e985e9c5146106bf578063f2fde38b14610708578063fd762d921461072857600080fd5b8063c87b56dd1461068a578063d007af5c146106aa57600080fd5b8063a9fc664e116100b0578063a9fc664e14610635578063b88d4fde14610655578063be537f431461066857600080fd5b8063a1448194146105f5578063a22cb4651461061557600080fd5b806370a08231116101225780638da5cb5b116101075780638da5cb5b146105a257806395d89b41146105c05780639d645a44146105d557600080fd5b806370a082311461056d578063715018a61461058d57600080fd5b80635d4c1d46146104e357806361347162146105185780636352211e146105385780636c3b86991461055857600080fd5b80631c33b328116101e657806340c10f19116101b557806342966c681161019a57806342966c6814610481578063495c8bf9146104a15780635944c753146104c357600080fd5b806340c10f191461044e57806342842e0e1461046e57600080fd5b80631c33b328146103ba57806323b872dd146103dc5780632a55205a146103ef5780632e8da8291461042e57600080fd5b8063081812fc1161023d578063098144d411610222578063098144d41461035957806318160ddd146103775780631b25b0771461039a57600080fd5b8063081812fc14610326578063095ea7b31461034657600080fd5b8063014635461461026f57806301ffc9a7146102b257806304634d8d146102e257806306fdde0314610304575b600080fd5b34801561027b57600080fd5b5061029571721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102be57600080fd5b506102d26102cd36600461240e565b610748565b60405190151581526020016102a9565b3480156102ee57600080fd5b506103026102fd366004612461565b610759565b005b34801561031057600080fd5b5061031961076f565b6040516102a991906124ee565b34801561033257600080fd5b50610295610341366004612501565b610801565b61030261035436600461251a565b61085e565b34801561036557600080fd5b506009546001600160a01b0316610295565b34801561038357600080fd5b50600154600054035b6040519081526020016102a9565b3480156103a657600080fd5b506102d26103b5366004612546565b610924565b3480156103c657600080fd5b506103cf600181565b6040516102a991906125b3565b6103026103ea3660046125c1565b6109bd565b3480156103fb57600080fd5b5061040f61040a366004612602565b610ba5565b604080516001600160a01b0390931683526020830191909152016102a9565b34801561043a57600080fd5b506102d2610449366004612624565b610c60565b34801561045a57600080fd5b5061030261046936600461251a565b610d92565b61030261047c3660046125c1565b610d9c565b34801561048d57600080fd5b5061030261049c366004612501565b610dbc565b3480156104ad57600080fd5b506104b6610dc8565b6040516102a99190612641565b3480156104cf57600080fd5b506103026104de36600461268e565b610eff565b3480156104ef57600080fd5b506104f8600181565b6040516effffffffffffffffffffffffffffff90911681526020016102a9565b34801561052457600080fd5b506103026105333660046126f6565b610f12565b34801561054457600080fd5b50610295610553366004612501565b6110b7565b34801561056457600080fd5b506103026110c2565b34801561057957600080fd5b5061038c610588366004612624565b6111ba565b34801561059957600080fd5b50610302611222565b3480156105ae57600080fd5b506008546001600160a01b0316610295565b3480156105cc57600080fd5b50610319611236565b3480156105e157600080fd5b506102d26105f0366004612624565b611245565b34801561060157600080fd5b5061030261061036600461251a565b611324565b34801561062157600080fd5b50610302610630366004612744565b61132e565b34801561064157600080fd5b50610302610650366004612624565b6113a7565b6103026106633660046127c4565b611501565b34801561067457600080fd5b5061067d611545565b6040516102a99190612888565b34801561069657600080fd5b506103196106a5366004612501565b61160f565b3480156106b657600080fd5b506104b66116b9565b3480156106cb57600080fd5b506102d26106da3660046128cc565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561071457600080fd5b50610302610723366004612624565b611789565b34801561073457600080fd5b506103026107433660046128fa565b61181b565b600061075382611a59565b92915050565b610761611aa7565b61076b8282611aaf565b5050565b60606002805461077e90612956565b80601f01602080910402602001604051908101604052809291908181526020018280546107aa90612956565b80156107f75780601f106107cc576101008083540402835291602001916107f7565b820191906000526020600020905b8154815290600101906020018083116107da57829003601f168201915b5050505050905090565b600061080c82611b09565b610842576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610869826110b7565b9050336001600160a01b038216146108bb5761088581336106da565b6108bb576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6009546000906001600160a01b0316156109b25760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561098d57600080fd5b505afa92505050801561099e575060015b6109aa575060006109b6565b5060016109b6565b5060015b9392505050565b60006109c882611b30565b9050836001600160a01b0316816001600160a01b031614610a15576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054610a418187335b6001600160a01b039081169116811491141790565b610a6c57610a4f86336106da565b610a6c57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610aac576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab98686866001611baa565b8015610ac457600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610b4f5760018401600081815260046020526040902054610b4d576000548114610b4d5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610b9d8686866001611bd8565b505050505050565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610c24575060408051808201909152600a546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b602081015160009061271090610c48906bffffffffffffffffffffffff16876129a7565b610c5291906129c6565b915196919550909350505050565b6009546000906001600160a01b031615610d8a57600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610cbf57600080fd5b505afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf791906129e8565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610d5257600080fd5b505afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107539190612a5a565b506000919050565b61076b8282611bff565b610db783838360405180602001604052806000815250611501565b505050565b610dc581611d3f565b50565b6009546060906001600160a01b031615610eec57600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610e2757600080fd5b505afa158015610e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5f91906129e8565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610eab57600080fd5b505afa158015610ebf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ee79190810190612a77565b905090565b5060408051600081526020810190915290565b610f07611aa7565b610db7838383611d4a565b610f1a611aa7565b6000610f2e6009546001600160a01b031690565b90506001600160a01b038116610f70576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610f9e9030908890600401612b29565b600060405180830381600087803b158015610fb857600080fd5b505af1158015610fcc573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b15801561102857600080fd5b505af115801561103c573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b5050505050505050565b600061075382611b30565b6110ca611aa7565b6110e571721c310194ccfc01e523fc93c9cccfa2a0ac6113a7565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c09061111d903090600190600401612b29565b600060405180830381600087803b15801561113757600080fd5b505af115801561114b573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156111a057600080fd5b505af11580156111b4573d6000803e3d6000fd5b50505050565b60006001600160a01b0382166111fc576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b61122a611da8565b6112346000611e02565b565b60606003805461077e90612956565b6009546000906001600160a01b031615610d8a57600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b1580156112a457600080fd5b505afa1580156112b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dc91906129e8565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610d3a565b61076b8282611e61565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161139b911515815260200190565b60405180910390a35050565b6113af611aa7565b60006001600160a01b0382163b1561143d576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561140157600080fd5b505afa925050508015611431575060408051601f3d908101601f1916820190925261142e91810190612a5a565b60015b61143a5761143d565b90505b6001600160a01b03821615801590611453575080155b1561148a576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61150c8484846109bd565b6001600160a01b0383163b156111b45761152884848484611e7b565b6111b4576040516368d2bf6b60e11b815260040160405180910390fd5b60408051606081018252600080825260208201819052918101919091526009546001600160a01b0316156115ee57600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b1580156115b657600080fd5b505afa1580156115ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee791906129e8565b50604080516060810182526000808252602082018190529181019190915290565b606061161a82611b09565b611650576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061166760408051602081019091526000815290565b905080516000141561168857604051806020016040528060008152506109b6565b8061169284611f72565b6040516020016116a3929190612b46565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610eec57600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561171857600080fd5b505afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175091906129e8565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610e93565b611791611da8565b6001600160a01b0381166118125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610dc581611e02565b611823611aa7565b61182c846113a7565b604051630368065360e61b81526001600160a01b0385169063da0194c09061185a9030908790600401612b29565b600060405180830381600087803b15801561187457600080fd5b505af1158015611888573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b1580156118e457600080fd5b505af11580156118f8573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d744314915060440161107f565b6127106bffffffffffffffffffffffff821611156119c55760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401611809565b6001600160a01b038216611a1b5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401611809565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217600a55565b60006001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000148061075357506301ffc9a760e01b6001600160e01b0319831614610753565b611234611da8565b611ab9828261193f565b6040516bffffffffffffffffffffffff821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b6000805482108015610753575050600090815260046020526040902054600160e01b161590565b600081600054811015611b7857600081815260046020526040902054600160e01b8116611b76575b806109b6575060001901600081815260046020526040902054611b58565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611bd157611bc98585611bc48487612b75565b611fc0565b600101611bad565b5050505050565b60005b81811015611bd157611bf78585611bf28487612b75565b61201c565b600101611bdb565b60005481611c39576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c466000848385611baa565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611cf557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611cbd565b5081611d2d576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908155610db79150848385611bd8565b610dc581600061206a565b611d558383836121e2565b6040516bffffffffffffffffffffffff821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c9060200160405180910390a3505050565b6008546001600160a01b031633146112345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611809565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61076b82826040518060200160405280600081525061230d565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611eb0903390899088908890600401612b8d565b602060405180830381600087803b158015611eca57600080fd5b505af1925050508015611efa575060408051601f3d908101601f19168201909252611ef791810190612bc9565b60015b611f55573d808015611f28576040519150601f19603f3d011682016040523d82523d6000602084013e611f2d565b606091505b508051611f4d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611fa957611fae565b611f8c565b50819003601f19909101908152919050565b6001600160a01b038381161590831615818015611fda5750805b15611ff857604051635cbd944160e01b815260040160405180910390fd5b8115612004575b611bd1565b801561200f57611fff565b611bd13386868634612373565b6001600160a01b0383811615908316158180156120365750805b1561205457604051635cbd944160e01b815260040160405180910390fd5b811561205f57611fff565b8015611fff57611fff565b600061207583611b30565b90508060008061209386600090815260066020526040902080549091565b9150915084156120d3576120a8818433610a2c565b6120d3576120b683336106da565b6120d357604051632ce44b5f60e11b815260040160405180910390fd5b6120e1836000886001611baa565b80156120ec57600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260046020526040902055600160e11b841661218c576001860160008181526004602052604090205461218a57600054811461218a5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46121d2836000886001611bd8565b5050600180548101905550505050565b6127106bffffffffffffffffffffffff821611156122685760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401611809565b6001600160a01b0382166122be5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401611809565b6040805180820182526001600160a01b0393841681526bffffffffffffffffffffffff92831660208083019182526000968752600b90529190942093519051909116600160a01b029116179055565b6123178383611bff565b6001600160a01b0383163b15610db7576000548281035b6123416000868380600101945086611e7b565b61235e576040516368d2bf6b60e11b815260040160405180910390fd5b81811061232e578160005414611bd157600080fd5b6009546001600160a01b031615611bd15760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b1580156123d957600080fd5b505afa1580156123ed573d6000803e3d6000fd5b505050505050505050565b6001600160e01b031981168114610dc557600080fd5b60006020828403121561242057600080fd5b81356109b6816123f8565b6001600160a01b0381168114610dc557600080fd5b80356bffffffffffffffffffffffff8116811461245c57600080fd5b919050565b6000806040838503121561247457600080fd5b823561247f8161242b565b915061248d60208401612440565b90509250929050565b60005b838110156124b1578181015183820152602001612499565b838111156111b45750506000910152565b600081518084526124da816020860160208601612496565b601f01601f19169290920160200192915050565b6020815260006109b660208301846124c2565b60006020828403121561251357600080fd5b5035919050565b6000806040838503121561252d57600080fd5b82356125388161242b565b946020939093013593505050565b60008060006060848603121561255b57600080fd5b83356125668161242b565b925060208401356125768161242b565b915060408401356125868161242b565b809150509250925092565b600781106125af57634e487b7160e01b600052602160045260246000fd5b9052565b602081016107538284612591565b6000806000606084860312156125d657600080fd5b83356125e18161242b565b925060208401356125f18161242b565b929592945050506040919091013590565b6000806040838503121561261557600080fd5b50508035926020909101359150565b60006020828403121561263657600080fd5b81356109b68161242b565b6020808252825182820181905260009190848201906040850190845b818110156126825783516001600160a01b03168352928401929184019160010161265d565b50909695505050505050565b6000806000606084860312156126a357600080fd5b8335925060208401356126b58161242b565b91506126c360408501612440565b90509250925092565b60078110610dc557600080fd5b6effffffffffffffffffffffffffffff81168114610dc557600080fd5b60008060006060848603121561270b57600080fd5b8335612716816126cc565b92506020840135612726816126d9565b91506040840135612586816126d9565b8015158114610dc557600080fd5b6000806040838503121561275757600080fd5b82356127628161242b565b9150602083013561277281612736565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127bc576127bc61277d565b604052919050565b600080600080608085870312156127da57600080fd5b84356127e58161242b565b93506020858101356127f68161242b565b935060408601359250606086013567ffffffffffffffff8082111561281a57600080fd5b818801915088601f83011261282e57600080fd5b8135818111156128405761284061277d565b612852601f8201601f19168501612793565b9150808252898482850101111561286857600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608201905061289b828451612591565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600080604083850312156128df57600080fd5b82356128ea8161242b565b915060208301356127728161242b565b6000806000806080858703121561291057600080fd5b843561291b8161242b565b9350602085013561292b816126cc565b9250604085013561293b816126d9565b9150606085013561294b816126d9565b939692955090935050565b600181811c9082168061296a57607f821691505b6020821081141561298b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156129c1576129c1612991565b500290565b6000826129e357634e487b7160e01b600052601260045260246000fd5b500490565b6000606082840312156129fa57600080fd5b6040516060810181811067ffffffffffffffff82111715612a1d57612a1d61277d565b6040528251612a2b816126cc565b81526020830151612a3b816126d9565b60208201526040830151612a4e816126d9565b60408201529392505050565b600060208284031215612a6c57600080fd5b81516109b681612736565b60006020808385031215612a8a57600080fd5b825167ffffffffffffffff80821115612aa257600080fd5b818501915085601f830112612ab657600080fd5b815181811115612ac857612ac861277d565b8060051b9150612ad9848301612793565b8181529183018401918481019088841115612af357600080fd5b938501935b83851015612b1d5784519250612b0d8361242b565b8282529385019390850190612af8565b98975050505050505050565b6001600160a01b0383168152604081016109b66020830184612591565b60008351612b58818460208801612496565b835190830190612b6c818360208801612496565b01949350505050565b60008219821115612b8857612b88612991565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612bbf60808301846124c2565b9695505050505050565b600060208284031215612bdb57600080fd5b81516109b6816123f856fea2646970667358221220152fe991b0d8002c93245440a2abb4834934d6d24c2dfdf74b9b5bbb9c6ef19464736f6c63430008090033",
  "deployedBytecode": "0x60806040526004361061026a5760003560e01c80635d4c1d4611610153578063a1448194116100cb578063c87b56dd1161007f578063e985e9c511610064578063e985e9c5146106bf578063f2fde38b14610708578063fd762d921461072857600080fd5b8063c87b56dd1461068a578063d007af5c146106aa57600080fd5b8063a9fc664e116100b0578063a9fc664e14610635578063b88d4fde14610655578063be537f431461066857600080fd5b8063a1448194146105f5578063a22cb4651461061557600080fd5b806370a08231116101225780638da5cb5b116101075780638da5cb5b146105a257806395d89b41146105c05780639d645a44146105d557600080fd5b806370a082311461056d578063715018a61461058d57600080fd5b80635d4c1d46146104e357806361347162146105185780636352211e146105385780636c3b86991461055857600080fd5b80631c33b328116101e657806340c10f19116101b557806342966c681161019a57806342966c6814610481578063495c8bf9146104a15780635944c753146104c357600080fd5b806340c10f191461044e57806342842e0e1461046e57600080fd5b80631c33b328146103ba57806323b872dd146103dc5780632a55205a146103ef5780632e8da8291461042e57600080fd5b8063081812fc1161023d578063098144d411610222578063098144d41461035957806318160ddd146103775780631b25b0771461039a57600080fd5b8063081812fc14610326578063095ea7b31461034657600080fd5b8063014635461461026f57806301ffc9a7146102b257806304634d8d146102e257806306fdde0314610304575b600080fd5b34801561027b57600080fd5b5061029571721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102be57600080fd5b506102d26102cd36600461240e565b610748565b60405190151581526020016102a9565b3480156102ee57600080fd5b506103026102fd366004612461565b610759565b005b34801561031057600080fd5b5061031961076f565b6040516102a991906124ee565b34801561033257600080fd5b50610295610341366004612501565b610801565b61030261035436600461251a565b61085e565b34801561036557600080fd5b506009546001600160a01b0316610295565b34801561038357600080fd5b50600154600054035b6040519081526020016102a9565b3480156103a657600080fd5b506102d26103b5366004612546565b610924565b3480156103c657600080fd5b506103cf600181565b6040516102a991906125b3565b6103026103ea3660046125c1565b6109bd565b3480156103fb57600080fd5b5061040f61040a366004612602565b610ba5565b604080516001600160a01b0390931683526020830191909152016102a9565b34801561043a57600080fd5b506102d2610449366004612624565b610c60565b34801561045a57600080fd5b5061030261046936600461251a565b610d92565b61030261047c3660046125c1565b610d9c565b34801561048d57600080fd5b5061030261049c366004612501565b610dbc565b3480156104ad57600080fd5b506104b6610dc8565b6040516102a99190612641565b3480156104cf57600080fd5b506103026104de36600461268e565b610eff565b3480156104ef57600080fd5b506104f8600181565b6040516effffffffffffffffffffffffffffff90911681526020016102a9565b34801561052457600080fd5b506103026105333660046126f6565b610f12565b34801561054457600080fd5b50610295610553366004612501565b6110b7565b34801561056457600080fd5b506103026110c2565b34801561057957600080fd5b5061038c610588366004612624565b6111ba565b34801561059957600080fd5b50610302611222565b3480156105ae57600080fd5b506008546001600160a01b0316610295565b3480156105cc57600080fd5b50610319611236565b3480156105e157600080fd5b506102d26105f0366004612624565b611245565b34801561060157600080fd5b5061030261061036600461251a565b611324565b34801561062157600080fd5b50610302610630366004612744565b61132e565b34801561064157600080fd5b50610302610650366004612624565b6113a7565b6103026106633660046127c4565b611501565b34801561067457600080fd5b5061067d611545565b6040516102a99190612888565b34801561069657600080fd5b506103196106a5366004612501565b61160f565b3480156106b657600080fd5b506104b66116b9565b3480156106cb57600080fd5b506102d26106da3660046128cc565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561071457600080fd5b50610302610723366004612624565b611789565b34801561073457600080fd5b506103026107433660046128fa565b61181b565b600061075382611a59565b92915050565b610761611aa7565b61076b8282611aaf565b5050565b60606002805461077e90612956565b80601f01602080910402602001604051908101604052809291908181526020018280546107aa90612956565b80156107f75780601f106107cc576101008083540402835291602001916107f7565b820191906000526020600020905b8154815290600101906020018083116107da57829003601f168201915b5050505050905090565b600061080c82611b09565b610842576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610869826110b7565b9050336001600160a01b038216146108bb5761088581336106da565b6108bb576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6009546000906001600160a01b0316156109b25760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561098d57600080fd5b505afa92505050801561099e575060015b6109aa575060006109b6565b5060016109b6565b5060015b9392505050565b60006109c882611b30565b9050836001600160a01b0316816001600160a01b031614610a15576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054610a418187335b6001600160a01b039081169116811491141790565b610a6c57610a4f86336106da565b610a6c57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610aac576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab98686866001611baa565b8015610ac457600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610b4f5760018401600081815260046020526040902054610b4d576000548114610b4d5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610b9d8686866001611bd8565b505050505050565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610c24575060408051808201909152600a546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b602081015160009061271090610c48906bffffffffffffffffffffffff16876129a7565b610c5291906129c6565b915196919550909350505050565b6009546000906001600160a01b031615610d8a57600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610cbf57600080fd5b505afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf791906129e8565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610d5257600080fd5b505afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107539190612a5a565b506000919050565b61076b8282611bff565b610db783838360405180602001604052806000815250611501565b505050565b610dc581611d3f565b50565b6009546060906001600160a01b031615610eec57600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610e2757600080fd5b505afa158015610e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5f91906129e8565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610eab57600080fd5b505afa158015610ebf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ee79190810190612a77565b905090565b5060408051600081526020810190915290565b610f07611aa7565b610db7838383611d4a565b610f1a611aa7565b6000610f2e6009546001600160a01b031690565b90506001600160a01b038116610f70576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610f9e9030908890600401612b29565b600060405180830381600087803b158015610fb857600080fd5b505af1158015610fcc573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b15801561102857600080fd5b505af115801561103c573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b5050505050505050565b600061075382611b30565b6110ca611aa7565b6110e571721c310194ccfc01e523fc93c9cccfa2a0ac6113a7565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c09061111d903090600190600401612b29565b600060405180830381600087803b15801561113757600080fd5b505af115801561114b573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156111a057600080fd5b505af11580156111b4573d6000803e3d6000fd5b50505050565b60006001600160a01b0382166111fc576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b61122a611da8565b6112346000611e02565b565b60606003805461077e90612956565b6009546000906001600160a01b031615610d8a57600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b1580156112a457600080fd5b505afa1580156112b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dc91906129e8565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610d3a565b61076b8282611e61565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161139b911515815260200190565b60405180910390a35050565b6113af611aa7565b60006001600160a01b0382163b1561143d576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561140157600080fd5b505afa925050508015611431575060408051601f3d908101601f1916820190925261142e91810190612a5a565b60015b61143a5761143d565b90505b6001600160a01b03821615801590611453575080155b1561148a576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61150c8484846109bd565b6001600160a01b0383163b156111b45761152884848484611e7b565b6111b4576040516368d2bf6b60e11b815260040160405180910390fd5b60408051606081018252600080825260208201819052918101919091526009546001600160a01b0316156115ee57600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b1580156115b657600080fd5b505afa1580156115ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee791906129e8565b50604080516060810182526000808252602082018190529181019190915290565b606061161a82611b09565b611650576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061166760408051602081019091526000815290565b905080516000141561168857604051806020016040528060008152506109b6565b8061169284611f72565b6040516020016116a3929190612b46565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610eec57600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561171857600080fd5b505afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175091906129e8565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610e93565b611791611da8565b6001600160a01b0381166118125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610dc581611e02565b611823611aa7565b61182c846113a7565b604051630368065360e61b81526001600160a01b0385169063da0194c09061185a9030908790600401612b29565b600060405180830381600087803b15801561187457600080fd5b505af1158015611888573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b1580156118e457600080fd5b505af11580156118f8573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d744314915060440161107f565b6127106bffffffffffffffffffffffff821611156119c55760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401611809565b6001600160a01b038216611a1b5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401611809565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217600a55565b60006001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000148061075357506301ffc9a760e01b6001600160e01b0319831614610753565b611234611da8565b611ab9828261193f565b6040516bffffffffffffffffffffffff821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b6000805482108015610753575050600090815260046020526040902054600160e01b161590565b600081600054811015611b7857600081815260046020526040902054600160e01b8116611b76575b806109b6575060001901600081815260046020526040902054611b58565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611bd157611bc98585611bc48487612b75565b611fc0565b600101611bad565b5050505050565b60005b81811015611bd157611bf78585611bf28487612b75565b61201c565b600101611bdb565b60005481611c39576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c466000848385611baa565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611cf557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611cbd565b5081611d2d576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908155610db79150848385611bd8565b610dc581600061206a565b611d558383836121e2565b6040516bffffffffffffffffffffffff821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c9060200160405180910390a3505050565b6008546001600160a01b031633146112345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611809565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61076b82826040518060200160405280600081525061230d565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611eb0903390899088908890600401612b8d565b602060405180830381600087803b158015611eca57600080fd5b505af1925050508015611efa575060408051601f3d908101601f19168201909252611ef791810190612bc9565b60015b611f55573d808015611f28576040519150601f19603f3d011682016040523d82523d6000602084013e611f2d565b606091505b508051611f4d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611fa957611fae565b611f8c565b50819003601f19909101908152919050565b6001600160a01b038381161590831615818015611fda5750805b15611ff857604051635cbd944160e01b815260040160405180910390fd5b8115612004575b611bd1565b801561200f57611fff565b611bd13386868634612373565b6001600160a01b0383811615908316158180156120365750805b1561205457604051635cbd944160e01b815260040160405180910390fd5b811561205f57611fff565b8015611fff57611fff565b600061207583611b30565b90508060008061209386600090815260066020526040902080549091565b9150915084156120d3576120a8818433610a2c565b6120d3576120b683336106da565b6120d357604051632ce44b5f60e11b815260040160405180910390fd5b6120e1836000886001611baa565b80156120ec57600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260046020526040902055600160e11b841661218c576001860160008181526004602052604090205461218a57600054811461218a5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46121d2836000886001611bd8565b5050600180548101905550505050565b6127106bffffffffffffffffffffffff821611156122685760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401611809565b6001600160a01b0382166122be5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401611809565b6040805180820182526001600160a01b0393841681526bffffffffffffffffffffffff92831660208083019182526000968752600b90529190942093519051909116600160a01b029116179055565b6123178383611bff565b6001600160a01b0383163b15610db7576000548281035b6123416000868380600101945086611e7b565b61235e576040516368d2bf6b60e11b815260040160405180910390fd5b81811061232e578160005414611bd157600080fd5b6009546001600160a01b031615611bd15760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b1580156123d957600080fd5b505afa1580156123ed573d6000803e3d6000fd5b505050505050505050565b6001600160e01b031981168114610dc557600080fd5b60006020828403121561242057600080fd5b81356109b6816123f8565b6001600160a01b0381168114610dc557600080fd5b80356bffffffffffffffffffffffff8116811461245c57600080fd5b919050565b6000806040838503121561247457600080fd5b823561247f8161242b565b915061248d60208401612440565b90509250929050565b60005b838110156124b1578181015183820152602001612499565b838111156111b45750506000910152565b600081518084526124da816020860160208601612496565b601f01601f19169290920160200192915050565b6020815260006109b660208301846124c2565b60006020828403121561251357600080fd5b5035919050565b6000806040838503121561252d57600080fd5b82356125388161242b565b946020939093013593505050565b60008060006060848603121561255b57600080fd5b83356125668161242b565b925060208401356125768161242b565b915060408401356125868161242b565b809150509250925092565b600781106125af57634e487b7160e01b600052602160045260246000fd5b9052565b602081016107538284612591565b6000806000606084860312156125d657600080fd5b83356125e18161242b565b925060208401356125f18161242b565b929592945050506040919091013590565b6000806040838503121561261557600080fd5b50508035926020909101359150565b60006020828403121561263657600080fd5b81356109b68161242b565b6020808252825182820181905260009190848201906040850190845b818110156126825783516001600160a01b03168352928401929184019160010161265d565b50909695505050505050565b6000806000606084860312156126a357600080fd5b8335925060208401356126b58161242b565b91506126c360408501612440565b90509250925092565b60078110610dc557600080fd5b6effffffffffffffffffffffffffffff81168114610dc557600080fd5b60008060006060848603121561270b57600080fd5b8335612716816126cc565b92506020840135612726816126d9565b91506040840135612586816126d9565b8015158114610dc557600080fd5b6000806040838503121561275757600080fd5b82356127628161242b565b9150602083013561277281612736565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127bc576127bc61277d565b604052919050565b600080600080608085870312156127da57600080fd5b84356127e58161242b565b93506020858101356127f68161242b565b935060408601359250606086013567ffffffffffffffff8082111561281a57600080fd5b818801915088601f83011261282e57600080fd5b8135818111156128405761284061277d565b612852601f8201601f19168501612793565b9150808252898482850101111561286857600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608201905061289b828451612591565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600080604083850312156128df57600080fd5b82356128ea8161242b565b915060208301356127728161242b565b6000806000806080858703121561291057600080fd5b843561291b8161242b565b9350602085013561292b816126cc565b9250604085013561293b816126d9565b9150606085013561294b816126d9565b939692955090935050565b600181811c9082168061296a57607f821691505b6020821081141561298b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156129c1576129c1612991565b500290565b6000826129e357634e487b7160e01b600052601260045260246000fd5b500490565b6000606082840312156129fa57600080fd5b6040516060810181811067ffffffffffffffff82111715612a1d57612a1d61277d565b6040528251612a2b816126cc565b81526020830151612a3b816126d9565b60208201526040830151612a4e816126d9565b60408201529392505050565b600060208284031215612a6c57600080fd5b81516109b681612736565b60006020808385031215612a8a57600080fd5b825167ffffffffffffffff80821115612aa257600080fd5b818501915085601f830112612ab657600080fd5b815181811115612ac857612ac861277d565b8060051b9150612ad9848301612793565b8181529183018401918481019088841115612af357600080fd5b938501935b83851015612b1d5784519250612b0d8361242b565b8282529385019390850190612af8565b98975050505050505050565b6001600160a01b0383168152604081016109b66020830184612591565b60008351612b58818460208801612496565b835190830190612b6c818360208801612496565b01949350505050565b60008219821115612b8857612b88612991565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612bbf60808301846124c2565b9695505050505050565b600060208284031215612bdb57600080fd5b81516109b6816123f856fea2646970667358221220152fe991b0d8002c93245440a2abb4834934d6d24c2dfdf74b9b5bbb9c6ef19464736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
