{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721Upgradeable",
  "sourceName": "contracts/token/ERC721/ERC721Upgradeable.sol",
  "abi": [
    {
      "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": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "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"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50612312806100206000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb46514610234578063b88d4fde14610250578063c87b56dd1461026c578063e985e9c51461029c576100df565b80636352211e146101b657806370a08231146101e657806395d89b4114610216576100df565b8063095ea7b3116100bd578063095ea7b31461016257806323b872dd1461017e57806342842e0e1461019a576100df565b806301ffc9a7146100e457806306fdde0314610114578063081812fc14610132575b600080fd5b6100fe60048036038101906100f99190611624565b6102cc565b60405161010b919061166c565b60405180910390f35b61011c6103ae565b6040516101299190611720565b60405180910390f35b61014c60048036038101906101479190611778565b610440565b60405161015991906117e6565b60405180910390f35b61017c6004803603810190610177919061182d565b610486565b005b6101986004803603810190610193919061186d565b61059d565b005b6101b460048036038101906101af919061186d565b6105fd565b005b6101d060048036038101906101cb9190611778565b61061d565b6040516101dd91906117e6565b60405180910390f35b61020060048036038101906101fb91906118c0565b6106a3565b60405161020d91906118fc565b60405180910390f35b61021e61075a565b60405161022b9190611720565b60405180910390f35b61024e60048036038101906102499190611943565b6107ec565b005b61026a60048036038101906102659190611ab8565b610802565b005b61028660048036038101906102819190611778565b610864565b6040516102939190611720565b60405180910390f35b6102b660048036038101906102b19190611b3b565b6108cc565b6040516102c3919061166c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061039757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103a757506103a682610960565b5b9050919050565b6060606580546103bd90611baa565b80601f01602080910402602001604051908101604052809291908181526020018280546103e990611baa565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b5050505050905090565b600061044b826109ca565b6069600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104918261061d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f890611c4d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610520610a15565b73ffffffffffffffffffffffffffffffffffffffff16148061054f575061054e81610549610a15565b6108cc565b5b61058e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058590611cdf565b60405180910390fd5b6105988383610a1d565b505050565b6105ae6105a8610a15565b82610ad6565b6105ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e490611d71565b60405180910390fd5b6105f8838383610b6b565b505050565b61061883838360405180602001604052806000815250610802565b505050565b60008061062983610e64565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069190611ddd565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90611e6f565b60405180910390fd5b606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606066805461076990611baa565b80601f016020809104026020016040519081016040528092919081815260200182805461079590611baa565b80156107e25780601f106107b7576101008083540402835291602001916107e2565b820191906000526020600020905b8154815290600101906020018083116107c557829003601f168201915b5050505050905090565b6107fe6107f7610a15565b8383610ea1565b5050565b61081361080d610a15565b83610ad6565b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084990611d71565b60405180910390fd5b61085e8484848461100d565b50505050565b606061086f826109ca565b6000610879611069565b9050600081511161089957604051806020016040528060008152506108c4565b806108a384611080565b6040516020016108b4929190611ecb565b6040516020818303038152906040525b915050919050565b6000606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6109d38161114e565b610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0990611ddd565b60405180910390fd5b50565b600033905090565b816069600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610a908361061d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610ae28361061d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b245750610b2381856108cc565b5b80610b6257508373ffffffffffffffffffffffffffffffffffffffff16610b4a84610440565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610b8b8261061d565b73ffffffffffffffffffffffffffffffffffffffff1614610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd890611f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790611ff3565b60405180910390fd5b610c5d838383600161118f565b8273ffffffffffffffffffffffffffffffffffffffff16610c7d8261061d565b73ffffffffffffffffffffffffffffffffffffffff1614610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90611f61565b60405180910390fd5b6069600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610e5f83838360016112b5565b505050565b60006067600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f069061205f565b60405180910390fd5b80606a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611000919061166c565b60405180910390a3505050565b611018848484610b6b565b611024848484846112bb565b611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a906120f1565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000600161108f84611442565b01905060008167ffffffffffffffff8111156110ae576110ad61198d565b5b6040519080825280601f01601f1916602001820160405280156110e05781602001600182028036833780820191505090505b509050600082602001820190505b600115611143578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161113757611136612111565b5b049450600085036110ee575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1661117083610e64565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60018111156112af57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146112235780606860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461121b919061216f565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146112ae5780606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112a691906121a3565b925050819055505b5b50505050565b50505050565b60006112dc8473ffffffffffffffffffffffffffffffffffffffff16611595565b15611435578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611305610a15565b8786866040518563ffffffff1660e01b8152600401611327949392919061224e565b6020604051808303816000875af192505050801561136357506040513d601f19601f8201168201806040525081019061136091906122af565b60015b6113e5573d8060008114611393576040519150601f19603f3d011682016040523d82523d6000602084013e611398565b606091505b5060008151036113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d4906120f1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061143a565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106114a0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161149657611495612111565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106114dd576d04ee2d6d415b85acef810000000083816114d3576114d2612111565b5b0492506020810190505b662386f26fc10000831061150c57662386f26fc10000838161150257611501612111565b5b0492506010810190505b6305f5e1008310611535576305f5e100838161152b5761152a612111565b5b0492506008810190505b612710831061155a5761271083816115505761154f612111565b5b0492506004810190505b6064831061157d576064838161157357611572612111565b5b0492506002810190505b600a831061158c576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611601816115cc565b811461160c57600080fd5b50565b60008135905061161e816115f8565b92915050565b60006020828403121561163a576116396115c2565b5b60006116488482850161160f565b91505092915050565b60008115159050919050565b61166681611651565b82525050565b6000602082019050611681600083018461165d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116c15780820151818401526020810190506116a6565b838111156116d0576000848401525b50505050565b6000601f19601f8301169050919050565b60006116f282611687565b6116fc8185611692565b935061170c8185602086016116a3565b611715816116d6565b840191505092915050565b6000602082019050818103600083015261173a81846116e7565b905092915050565b6000819050919050565b61175581611742565b811461176057600080fd5b50565b6000813590506117728161174c565b92915050565b60006020828403121561178e5761178d6115c2565b5b600061179c84828501611763565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117d0826117a5565b9050919050565b6117e0816117c5565b82525050565b60006020820190506117fb60008301846117d7565b92915050565b61180a816117c5565b811461181557600080fd5b50565b60008135905061182781611801565b92915050565b60008060408385031215611844576118436115c2565b5b600061185285828601611818565b925050602061186385828601611763565b9150509250929050565b600080600060608486031215611886576118856115c2565b5b600061189486828701611818565b93505060206118a586828701611818565b92505060406118b686828701611763565b9150509250925092565b6000602082840312156118d6576118d56115c2565b5b60006118e484828501611818565b91505092915050565b6118f681611742565b82525050565b600060208201905061191160008301846118ed565b92915050565b61192081611651565b811461192b57600080fd5b50565b60008135905061193d81611917565b92915050565b6000806040838503121561195a576119596115c2565b5b600061196885828601611818565b92505060206119798582860161192e565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6119c5826116d6565b810181811067ffffffffffffffff821117156119e4576119e361198d565b5b80604052505050565b60006119f76115b8565b9050611a0382826119bc565b919050565b600067ffffffffffffffff821115611a2357611a2261198d565b5b611a2c826116d6565b9050602081019050919050565b82818337600083830152505050565b6000611a5b611a5684611a08565b6119ed565b905082815260208101848484011115611a7757611a76611988565b5b611a82848285611a39565b509392505050565b600082601f830112611a9f57611a9e611983565b5b8135611aaf848260208601611a48565b91505092915050565b60008060008060808587031215611ad257611ad16115c2565b5b6000611ae087828801611818565b9450506020611af187828801611818565b9350506040611b0287828801611763565b925050606085013567ffffffffffffffff811115611b2357611b226115c7565b5b611b2f87828801611a8a565b91505092959194509250565b60008060408385031215611b5257611b516115c2565b5b6000611b6085828601611818565b9250506020611b7185828601611818565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611bc257607f821691505b602082108103611bd557611bd4611b7b565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c37602183611692565b9150611c4282611bdb565b604082019050919050565b60006020820190508181036000830152611c6681611c2a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611cc9603d83611692565b9150611cd482611c6d565b604082019050919050565b60006020820190508181036000830152611cf881611cbc565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611d5b602d83611692565b9150611d6682611cff565b604082019050919050565b60006020820190508181036000830152611d8a81611d4e565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000611dc7601883611692565b9150611dd282611d91565b602082019050919050565b60006020820190508181036000830152611df681611dba565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000611e59602983611692565b9150611e6482611dfd565b604082019050919050565b60006020820190508181036000830152611e8881611e4c565b9050919050565b600081905092915050565b6000611ea582611687565b611eaf8185611e8f565b9350611ebf8185602086016116a3565b80840191505092915050565b6000611ed78285611e9a565b9150611ee38284611e9a565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000611f4b602583611692565b9150611f5682611eef565b604082019050919050565b60006020820190508181036000830152611f7a81611f3e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611fdd602483611692565b9150611fe882611f81565b604082019050919050565b6000602082019050818103600083015261200c81611fd0565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612049601983611692565b915061205482612013565b602082019050919050565b600060208201905081810360008301526120788161203c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006120db603283611692565b91506120e68261207f565b604082019050919050565b6000602082019050818103600083015261210a816120ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061217a82611742565b915061218583611742565b92508282101561219857612197612140565b5b828203905092915050565b60006121ae82611742565b91506121b983611742565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121ee576121ed612140565b5b828201905092915050565b600081519050919050565b600082825260208201905092915050565b6000612220826121f9565b61222a8185612204565b935061223a8185602086016116a3565b612243816116d6565b840191505092915050565b600060808201905061226360008301876117d7565b61227060208301866117d7565b61227d60408301856118ed565b818103606083015261228f8184612215565b905095945050505050565b6000815190506122a9816115f8565b92915050565b6000602082840312156122c5576122c46115c2565b5b60006122d38482850161229a565b9150509291505056fea26469706673582212209542096314bb5661e625f18bcfdb5dbb9c86f79a6e09edfdbdd6dadf4cc11f0964736f6c634300080d0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb46514610234578063b88d4fde14610250578063c87b56dd1461026c578063e985e9c51461029c576100df565b80636352211e146101b657806370a08231146101e657806395d89b4114610216576100df565b8063095ea7b3116100bd578063095ea7b31461016257806323b872dd1461017e57806342842e0e1461019a576100df565b806301ffc9a7146100e457806306fdde0314610114578063081812fc14610132575b600080fd5b6100fe60048036038101906100f99190611624565b6102cc565b60405161010b919061166c565b60405180910390f35b61011c6103ae565b6040516101299190611720565b60405180910390f35b61014c60048036038101906101479190611778565b610440565b60405161015991906117e6565b60405180910390f35b61017c6004803603810190610177919061182d565b610486565b005b6101986004803603810190610193919061186d565b61059d565b005b6101b460048036038101906101af919061186d565b6105fd565b005b6101d060048036038101906101cb9190611778565b61061d565b6040516101dd91906117e6565b60405180910390f35b61020060048036038101906101fb91906118c0565b6106a3565b60405161020d91906118fc565b60405180910390f35b61021e61075a565b60405161022b9190611720565b60405180910390f35b61024e60048036038101906102499190611943565b6107ec565b005b61026a60048036038101906102659190611ab8565b610802565b005b61028660048036038101906102819190611778565b610864565b6040516102939190611720565b60405180910390f35b6102b660048036038101906102b19190611b3b565b6108cc565b6040516102c3919061166c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061039757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103a757506103a682610960565b5b9050919050565b6060606580546103bd90611baa565b80601f01602080910402602001604051908101604052809291908181526020018280546103e990611baa565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b5050505050905090565b600061044b826109ca565b6069600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104918261061d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f890611c4d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610520610a15565b73ffffffffffffffffffffffffffffffffffffffff16148061054f575061054e81610549610a15565b6108cc565b5b61058e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058590611cdf565b60405180910390fd5b6105988383610a1d565b505050565b6105ae6105a8610a15565b82610ad6565b6105ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e490611d71565b60405180910390fd5b6105f8838383610b6b565b505050565b61061883838360405180602001604052806000815250610802565b505050565b60008061062983610e64565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069190611ddd565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90611e6f565b60405180910390fd5b606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606066805461076990611baa565b80601f016020809104026020016040519081016040528092919081815260200182805461079590611baa565b80156107e25780601f106107b7576101008083540402835291602001916107e2565b820191906000526020600020905b8154815290600101906020018083116107c557829003601f168201915b5050505050905090565b6107fe6107f7610a15565b8383610ea1565b5050565b61081361080d610a15565b83610ad6565b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084990611d71565b60405180910390fd5b61085e8484848461100d565b50505050565b606061086f826109ca565b6000610879611069565b9050600081511161089957604051806020016040528060008152506108c4565b806108a384611080565b6040516020016108b4929190611ecb565b6040516020818303038152906040525b915050919050565b6000606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6109d38161114e565b610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0990611ddd565b60405180910390fd5b50565b600033905090565b816069600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610a908361061d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610ae28361061d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b245750610b2381856108cc565b5b80610b6257508373ffffffffffffffffffffffffffffffffffffffff16610b4a84610440565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610b8b8261061d565b73ffffffffffffffffffffffffffffffffffffffff1614610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd890611f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790611ff3565b60405180910390fd5b610c5d838383600161118f565b8273ffffffffffffffffffffffffffffffffffffffff16610c7d8261061d565b73ffffffffffffffffffffffffffffffffffffffff1614610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90611f61565b60405180910390fd5b6069600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610e5f83838360016112b5565b505050565b60006067600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f069061205f565b60405180910390fd5b80606a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611000919061166c565b60405180910390a3505050565b611018848484610b6b565b611024848484846112bb565b611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a906120f1565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000600161108f84611442565b01905060008167ffffffffffffffff8111156110ae576110ad61198d565b5b6040519080825280601f01601f1916602001820160405280156110e05781602001600182028036833780820191505090505b509050600082602001820190505b600115611143578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161113757611136612111565b5b049450600085036110ee575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1661117083610e64565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60018111156112af57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146112235780606860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461121b919061216f565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146112ae5780606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112a691906121a3565b925050819055505b5b50505050565b50505050565b60006112dc8473ffffffffffffffffffffffffffffffffffffffff16611595565b15611435578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611305610a15565b8786866040518563ffffffff1660e01b8152600401611327949392919061224e565b6020604051808303816000875af192505050801561136357506040513d601f19601f8201168201806040525081019061136091906122af565b60015b6113e5573d8060008114611393576040519150601f19603f3d011682016040523d82523d6000602084013e611398565b606091505b5060008151036113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d4906120f1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061143a565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106114a0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161149657611495612111565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106114dd576d04ee2d6d415b85acef810000000083816114d3576114d2612111565b5b0492506020810190505b662386f26fc10000831061150c57662386f26fc10000838161150257611501612111565b5b0492506010810190505b6305f5e1008310611535576305f5e100838161152b5761152a612111565b5b0492506008810190505b612710831061155a5761271083816115505761154f612111565b5b0492506004810190505b6064831061157d576064838161157357611572612111565b5b0492506002810190505b600a831061158c576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611601816115cc565b811461160c57600080fd5b50565b60008135905061161e816115f8565b92915050565b60006020828403121561163a576116396115c2565b5b60006116488482850161160f565b91505092915050565b60008115159050919050565b61166681611651565b82525050565b6000602082019050611681600083018461165d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116c15780820151818401526020810190506116a6565b838111156116d0576000848401525b50505050565b6000601f19601f8301169050919050565b60006116f282611687565b6116fc8185611692565b935061170c8185602086016116a3565b611715816116d6565b840191505092915050565b6000602082019050818103600083015261173a81846116e7565b905092915050565b6000819050919050565b61175581611742565b811461176057600080fd5b50565b6000813590506117728161174c565b92915050565b60006020828403121561178e5761178d6115c2565b5b600061179c84828501611763565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117d0826117a5565b9050919050565b6117e0816117c5565b82525050565b60006020820190506117fb60008301846117d7565b92915050565b61180a816117c5565b811461181557600080fd5b50565b60008135905061182781611801565b92915050565b60008060408385031215611844576118436115c2565b5b600061185285828601611818565b925050602061186385828601611763565b9150509250929050565b600080600060608486031215611886576118856115c2565b5b600061189486828701611818565b93505060206118a586828701611818565b92505060406118b686828701611763565b9150509250925092565b6000602082840312156118d6576118d56115c2565b5b60006118e484828501611818565b91505092915050565b6118f681611742565b82525050565b600060208201905061191160008301846118ed565b92915050565b61192081611651565b811461192b57600080fd5b50565b60008135905061193d81611917565b92915050565b6000806040838503121561195a576119596115c2565b5b600061196885828601611818565b92505060206119798582860161192e565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6119c5826116d6565b810181811067ffffffffffffffff821117156119e4576119e361198d565b5b80604052505050565b60006119f76115b8565b9050611a0382826119bc565b919050565b600067ffffffffffffffff821115611a2357611a2261198d565b5b611a2c826116d6565b9050602081019050919050565b82818337600083830152505050565b6000611a5b611a5684611a08565b6119ed565b905082815260208101848484011115611a7757611a76611988565b5b611a82848285611a39565b509392505050565b600082601f830112611a9f57611a9e611983565b5b8135611aaf848260208601611a48565b91505092915050565b60008060008060808587031215611ad257611ad16115c2565b5b6000611ae087828801611818565b9450506020611af187828801611818565b9350506040611b0287828801611763565b925050606085013567ffffffffffffffff811115611b2357611b226115c7565b5b611b2f87828801611a8a565b91505092959194509250565b60008060408385031215611b5257611b516115c2565b5b6000611b6085828601611818565b9250506020611b7185828601611818565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611bc257607f821691505b602082108103611bd557611bd4611b7b565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c37602183611692565b9150611c4282611bdb565b604082019050919050565b60006020820190508181036000830152611c6681611c2a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611cc9603d83611692565b9150611cd482611c6d565b604082019050919050565b60006020820190508181036000830152611cf881611cbc565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611d5b602d83611692565b9150611d6682611cff565b604082019050919050565b60006020820190508181036000830152611d8a81611d4e565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000611dc7601883611692565b9150611dd282611d91565b602082019050919050565b60006020820190508181036000830152611df681611dba565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000611e59602983611692565b9150611e6482611dfd565b604082019050919050565b60006020820190508181036000830152611e8881611e4c565b9050919050565b600081905092915050565b6000611ea582611687565b611eaf8185611e8f565b9350611ebf8185602086016116a3565b80840191505092915050565b6000611ed78285611e9a565b9150611ee38284611e9a565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000611f4b602583611692565b9150611f5682611eef565b604082019050919050565b60006020820190508181036000830152611f7a81611f3e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611fdd602483611692565b9150611fe882611f81565b604082019050919050565b6000602082019050818103600083015261200c81611fd0565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612049601983611692565b915061205482612013565b602082019050919050565b600060208201905081810360008301526120788161203c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006120db603283611692565b91506120e68261207f565b604082019050919050565b6000602082019050818103600083015261210a816120ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061217a82611742565b915061218583611742565b92508282101561219857612197612140565b5b828203905092915050565b60006121ae82611742565b91506121b983611742565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121ee576121ed612140565b5b828201905092915050565b600081519050919050565b600082825260208201905092915050565b6000612220826121f9565b61222a8185612204565b935061223a8185602086016116a3565b612243816116d6565b840191505092915050565b600060808201905061226360008301876117d7565b61227060208301866117d7565b61227d60408301856118ed565b818103606083015261228f8184612215565b905095945050505050565b6000815190506122a9816115f8565b92915050565b6000602082840312156122c5576122c46115c2565b5b60006122d38482850161229a565b9150509291505056fea26469706673582212209542096314bb5661e625f18bcfdb5dbb9c86f79a6e09edfdbdd6dadf4cc11f0964736f6c634300080d0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
