[
  {
    "inputs": [
      {
        "internalType": "contract INonfungiblePositionManagerLike",
        "name": "positionManager_",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "AlreadyRegistered",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "BuybackAlreadySet",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidSplit",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "NotCreatorRecipient",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "NotReferrer",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyFactory",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ReentrancyGuardReentrantCall",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "SafeERC20FailedOperation",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "UnknownToken",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroAddress",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "buyback",
        "type": "address"
      }
    ],
    "name": "BuybackSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "previous",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "CreatorRecipientUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "caller",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "creatorToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "creatorQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "holderQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "buybackQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "burnedToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "referrerToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "referrerQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "protocolToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "protocolQuote",
            "type": "uint256"
          }
        ],
        "indexed": false,
        "internalType": "struct OvenLocker.Fees",
        "name": "fees",
        "type": "tuple"
      }
    ],
    "name": "FeesCollected",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "kind",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "ForwardDeferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "asset",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "OwedClaimed",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "asset",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "PaymentDeferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "quote",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "creatorRecipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "referrer",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint16",
            "name": "creatorBps",
            "type": "uint16"
          },
          {
            "internalType": "uint16",
            "name": "holderBps",
            "type": "uint16"
          },
          {
            "internalType": "uint16",
            "name": "buybackBps",
            "type": "uint16"
          },
          {
            "internalType": "uint16",
            "name": "referrerBps",
            "type": "uint16"
          }
        ],
        "indexed": false,
        "internalType": "struct OvenLocker.Split",
        "name": "split",
        "type": "tuple"
      }
    ],
    "name": "PositionLocked",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "previous",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "referrer",
        "type": "address"
      }
    ],
    "name": "ReferrerUpdated",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "buyback",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "buybackPending",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "asset",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "claimOwed",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "collectFees",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "creatorToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "creatorQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "holderQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "buybackQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "burnedToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "referrerToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "referrerQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "protocolToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "protocolQuote",
            "type": "uint256"
          }
        ],
        "internalType": "struct OvenLocker.Fees",
        "name": "f",
        "type": "tuple"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "earningsOf",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "creatorToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "creatorQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "holderQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "buybackQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "burnedToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "referrerToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "referrerQuote",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "protocolToken",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "protocolQuote",
            "type": "uint256"
          }
        ],
        "internalType": "struct OvenLocker.Fees",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "factory",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "holderPending",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "asset",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "owed",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "positionCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "positionManager",
    "outputs": [
      {
        "internalType": "contract INonfungiblePositionManagerLike",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "positionOf",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "token",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "quote",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorRecipient",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "referrer",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "uint16",
                "name": "creatorBps",
                "type": "uint16"
              },
              {
                "internalType": "uint16",
                "name": "holderBps",
                "type": "uint16"
              },
              {
                "internalType": "uint16",
                "name": "buybackBps",
                "type": "uint16"
              },
              {
                "internalType": "uint16",
                "name": "referrerBps",
                "type": "uint16"
              }
            ],
            "internalType": "struct OvenLocker.Split",
            "name": "split",
            "type": "tuple"
          }
        ],
        "internalType": "struct OvenLocker.Position",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "quote",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "creatorRecipient",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "referrer",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint16",
            "name": "creatorBps",
            "type": "uint16"
          },
          {
            "internalType": "uint16",
            "name": "holderBps",
            "type": "uint16"
          },
          {
            "internalType": "uint16",
            "name": "buybackBps",
            "type": "uint16"
          },
          {
            "internalType": "uint16",
            "name": "referrerBps",
            "type": "uint16"
          }
        ],
        "internalType": "struct OvenLocker.Split",
        "name": "split",
        "type": "tuple"
      }
    ],
    "name": "register",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "buyback_",
        "type": "address"
      }
    ],
    "name": "setBuyback",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "setCreatorRecipient",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "referrer",
        "type": "address"
      }
    ],
    "name": "setReferrer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]
