{
  "_format": "hh-sol-artifact-1",
  "contractName": "PolicyHolderMock",
  "sourceName": "contracts/mocks/PolicyHolderMock.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum PolicyHolderMock.NotificationKind",
          "name": "kind",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "from",
          "type": "address"
        }
      ],
      "name": "NotificationReceived",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "badlyImplemented",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "badlyImplementedReplace",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "emptyRevert",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fail",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failCancellation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failReplace",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "noERC165",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "notImplemented",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "policyId_",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "policyId_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "onPayoutReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "cancelledPolicyId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "onPolicyCancelled",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "policyId_",
          "type": "uint256"
        }
      ],
      "name": "onPolicyExpired",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "oldPolicyId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPolicyId",
          "type": "uint256"
        }
      ],
      "name": "onPolicyReplaced",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "payout",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "policyId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "badlyImplemented_",
          "type": "bool"
        }
      ],
      "name": "setBadlyImplemented",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "badlyImplementedReplace_",
          "type": "bool"
        }
      ],
      "name": "setBadlyImplementedReplace",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "emptyRevert_",
          "type": "bool"
        }
      ],
      "name": "setEmptyRevert",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "fail_",
          "type": "bool"
        }
      ],
      "name": "setFail",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "fail_",
          "type": "bool"
        }
      ],
      "name": "setFailCancellation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "failReplace_",
          "type": "bool"
        }
      ],
      "name": "setFailReplace",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "noERC165_",
          "type": "bool"
        }
      ],
      "name": "setNoERC165",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "notImplemented_",
          "type": "bool"
        }
      ],
      "name": "setNotImplemented",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "spendGasCount_",
          "type": "uint256"
        }
      ],
      "name": "setSpendGasCount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "spendGasCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052348015600e575f5ffd5b506002805467ff00ffffff0000ff191690555f196001555f600355610c39806100365f395ff3fe608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80639568ca0f116100d9578063c3af904e11610093578063d99ba4081161006e578063d99ba40814610421578063e8e617b714610435578063ee89ef3a14610448578063f57c302e14610450575f5ffd5b8063c3af904e146103e7578063cc6a6523146103fb578063d6281d3e1461040e575f5ffd5b80639568ca0f1461033b5780639d7694021461034d578063a9cc47181461036e578063aeec8f9d1461037b578063b8d6d18d146103a9578063bcce5399146103d3575f5ffd5b8063352870141161014457806362eb345e1161011f57806362eb345e146102ea57806363bd1d4a146102fd5780636db65619146103145780637806ce8114610328575f5ffd5b806335287014146102935780635177cd13146102a85780635ee0c7dd146102d7575f5ffd5b806301ffc9a71461018b578063150b7a02146101b3578063286ee351146101df5780632bb2adb3146102095780632fb643621461023757806331ca294414610267575b5f5ffd5b61019e6101993660046109a8565b610459565b60405190151581526020015b60405180910390f35b6101c66101c13660046109ea565b6104c0565b6040516001600160e01b031990911681526020016101aa565b6102076101ed366004610a7f565b600280549115156101000261ff0019909216919091179055565b005b610207610217366004610a7f565b60028054911515600160281b0265ff000000000019909216919091179055565b610207610245366004610a7f565b60028054911515600160381b0267ff0000000000000019909216919091179055565b610207610275366004610a7f565b6002805491151563010000000263ff00000019909216919091179055565b60025461019e90640100000000900460ff1681565b6102076102b6366004610a7f565b60028054911515600160301b0266ff00000000000019909216919091179055565b6101c66102e5366004610a9e565b6105b3565b6101c66102f8366004610add565b6106a8565b61030660015481565b6040519081526020016101aa565b60025461019e906301000000900460ff1681565b610207610336366004610b2e565b600355565b60025461019e90610100900460ff1681565b61020761035b366004610a7f565b6002805460ff1916911515919091179055565b60025461019e9060ff1681565b610207610389366004610a7f565b600280549115156401000000000264ff0000000019909216919091179055565b6102076103b7366004610a7f565b60028054911515620100000262ff000019909216919091179055565b60025461019e90600160381b900460ff1681565b60025461019e90600160281b900460ff1681565b60025461019e9062010000900460ff1681565b6101c661041c366004610a9e565b61079c565b60025461019e90600160301b900460ff1681565b6101c6610443366004610b45565b610888565b6103065f5481565b61030660035481565b6002545f90600160381b900460ff1615610471575f5ffd5b600254640100000000900460ff161561048b57505f919050565b6001600160e01b03198216630162fc8560e11b14806104ba57506001600160e01b031982166301ffc9a760e01b145b92915050565b6002545f9060ff1615610546576002546301000000900460ff16156104e3575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e45524337323152656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084015b60405180910390fd5b5f8481555f196001556040515f516020610be45f395f51905f52916105709187908a908a90610b7f565b60405180910390a1600254600160281b900460ff16156105985750630badf00d60e01b6105aa565b6105a0610974565b50630a85bd0160e11b5b95945050505050565b6002545f90610100900460ff1615610639576002546301000000900460ff16156105db575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e506f6c6963795265706c616365643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b606482015260840161053d565b5f83905560018290556040515f516020610be45f395f51905f529061066690600390869089908990610b7f565b60405180910390a1600254600160301b900460ff161561068e5750630badf00d60e01b6106a0565b610696610974565b50635ee0c7dd60e01b5b949350505050565b6002545f9062010000900460ff1615610730576002546301000000900460ff16156106d1575f5ffd5b60405162461bcd60e51b815260206004820152602e60248201527f6f6e506f6c69637943616e63656c6c65643a205468657920746f6c64206d652060448201526d12481a185d99481d1bc819985a5b60921b606482015260840161053d565b5f8590556040515f516020610be45f395f51905f52906107589060049088908b908b90610b7f565b60405180910390a1600254600160301b900460ff16156107805750630badfeed60e01b610792565b610788610974565b506331759a2f60e11b5b9695505050505050565b6002545f9060ff161561081d576002546301000000900460ff16156107bf575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e5061796f757452656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b606482015260840161053d565b5f83905560018281556040515f516020610be45f395f51905f529161084791869089908990610b7f565b60405180910390a1600254600160281b900460ff161561086f5750630badf00d60e01b6106a0565b610877610974565b50636b140e9f60e11b949350505050565b6002545f9060ff1615610908576002546301000000900460ff16156108ab575f5ffd5b60405162461bcd60e51b815260206004820152602c60248201527f6f6e506f6c696379457870697265643a205468657920746f6c64206d6520492060448201526b1a185d99481d1bc819985a5b60a21b606482015260840161053d565b5f8281556001556040515f516020610be45f395f51905f529061093390600290859088908890610b7f565b60405180910390a1600254600160281b900460ff161561095b5750630badf00d60e01b61096d565b610963610974565b5063e8e617b760e01b5b9392505050565b5f5b6003548110156109a55761098b816001610bc4565b61099c610999836064610bc4565b90565b55600101610976565b50565b5f602082840312156109b8575f5ffd5b81356001600160e01b03198116811461096d575f5ffd5b80356001600160a01b03811681146109e5575f5ffd5b919050565b5f5f5f5f5f608086880312156109fe575f5ffd5b610a07866109cf565b9450610a15602087016109cf565b935060408601359250606086013567ffffffffffffffff811115610a37575f5ffd5b8601601f81018813610a47575f5ffd5b803567ffffffffffffffff811115610a5d575f5ffd5b886020828401011115610a6e575f5ffd5b959894975092955050506020019190565b5f60208284031215610a8f575f5ffd5b8135801515811461096d575f5ffd5b5f5f5f5f60808587031215610ab1575f5ffd5b610aba856109cf565b9350610ac8602086016109cf565b93969395505050506040820135916060013590565b5f5f5f5f5f5f60c08789031215610af2575f5ffd5b610afb876109cf565b9550610b09602088016109cf565b95989597505050506040840135936060810135936080820135935060a0909101359150565b5f60208284031215610b3e575f5ffd5b5035919050565b5f5f5f60608486031215610b57575f5ffd5b610b60846109cf565b9250610b6e602085016109cf565b929592945050506040919091013590565b6080810160058610610b9f57634e487b7160e01b5f52602160045260245ffd5b94815260208101939093526001600160a01b0391821660408401521660609091015290565b808201808211156104ba57634e487b7160e01b5f52601160045260245ffdfecb6442f1752a34d49fd946725ee915eae9914b3fe3f3193b98232c772393e7c5a26469706673582212201e273d11c8e5e44dc3ff1411fab09eeed0fd5692370cb7a792decd8b3dd2c2fe64736f6c634300081e0033",
  "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80639568ca0f116100d9578063c3af904e11610093578063d99ba4081161006e578063d99ba40814610421578063e8e617b714610435578063ee89ef3a14610448578063f57c302e14610450575f5ffd5b8063c3af904e146103e7578063cc6a6523146103fb578063d6281d3e1461040e575f5ffd5b80639568ca0f1461033b5780639d7694021461034d578063a9cc47181461036e578063aeec8f9d1461037b578063b8d6d18d146103a9578063bcce5399146103d3575f5ffd5b8063352870141161014457806362eb345e1161011f57806362eb345e146102ea57806363bd1d4a146102fd5780636db65619146103145780637806ce8114610328575f5ffd5b806335287014146102935780635177cd13146102a85780635ee0c7dd146102d7575f5ffd5b806301ffc9a71461018b578063150b7a02146101b3578063286ee351146101df5780632bb2adb3146102095780632fb643621461023757806331ca294414610267575b5f5ffd5b61019e6101993660046109a8565b610459565b60405190151581526020015b60405180910390f35b6101c66101c13660046109ea565b6104c0565b6040516001600160e01b031990911681526020016101aa565b6102076101ed366004610a7f565b600280549115156101000261ff0019909216919091179055565b005b610207610217366004610a7f565b60028054911515600160281b0265ff000000000019909216919091179055565b610207610245366004610a7f565b60028054911515600160381b0267ff0000000000000019909216919091179055565b610207610275366004610a7f565b6002805491151563010000000263ff00000019909216919091179055565b60025461019e90640100000000900460ff1681565b6102076102b6366004610a7f565b60028054911515600160301b0266ff00000000000019909216919091179055565b6101c66102e5366004610a9e565b6105b3565b6101c66102f8366004610add565b6106a8565b61030660015481565b6040519081526020016101aa565b60025461019e906301000000900460ff1681565b610207610336366004610b2e565b600355565b60025461019e90610100900460ff1681565b61020761035b366004610a7f565b6002805460ff1916911515919091179055565b60025461019e9060ff1681565b610207610389366004610a7f565b600280549115156401000000000264ff0000000019909216919091179055565b6102076103b7366004610a7f565b60028054911515620100000262ff000019909216919091179055565b60025461019e90600160381b900460ff1681565b60025461019e90600160281b900460ff1681565b60025461019e9062010000900460ff1681565b6101c661041c366004610a9e565b61079c565b60025461019e90600160301b900460ff1681565b6101c6610443366004610b45565b610888565b6103065f5481565b61030660035481565b6002545f90600160381b900460ff1615610471575f5ffd5b600254640100000000900460ff161561048b57505f919050565b6001600160e01b03198216630162fc8560e11b14806104ba57506001600160e01b031982166301ffc9a760e01b145b92915050565b6002545f9060ff1615610546576002546301000000900460ff16156104e3575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e45524337323152656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084015b60405180910390fd5b5f8481555f196001556040515f516020610be45f395f51905f52916105709187908a908a90610b7f565b60405180910390a1600254600160281b900460ff16156105985750630badf00d60e01b6105aa565b6105a0610974565b50630a85bd0160e11b5b95945050505050565b6002545f90610100900460ff1615610639576002546301000000900460ff16156105db575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e506f6c6963795265706c616365643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b606482015260840161053d565b5f83905560018290556040515f516020610be45f395f51905f529061066690600390869089908990610b7f565b60405180910390a1600254600160301b900460ff161561068e5750630badf00d60e01b6106a0565b610696610974565b50635ee0c7dd60e01b5b949350505050565b6002545f9062010000900460ff1615610730576002546301000000900460ff16156106d1575f5ffd5b60405162461bcd60e51b815260206004820152602e60248201527f6f6e506f6c69637943616e63656c6c65643a205468657920746f6c64206d652060448201526d12481a185d99481d1bc819985a5b60921b606482015260840161053d565b5f8590556040515f516020610be45f395f51905f52906107589060049088908b908b90610b7f565b60405180910390a1600254600160301b900460ff16156107805750630badfeed60e01b610792565b610788610974565b506331759a2f60e11b5b9695505050505050565b6002545f9060ff161561081d576002546301000000900460ff16156107bf575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e5061796f757452656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b606482015260840161053d565b5f83905560018281556040515f516020610be45f395f51905f529161084791869089908990610b7f565b60405180910390a1600254600160281b900460ff161561086f5750630badf00d60e01b6106a0565b610877610974565b50636b140e9f60e11b949350505050565b6002545f9060ff1615610908576002546301000000900460ff16156108ab575f5ffd5b60405162461bcd60e51b815260206004820152602c60248201527f6f6e506f6c696379457870697265643a205468657920746f6c64206d6520492060448201526b1a185d99481d1bc819985a5b60a21b606482015260840161053d565b5f8281556001556040515f516020610be45f395f51905f529061093390600290859088908890610b7f565b60405180910390a1600254600160281b900460ff161561095b5750630badf00d60e01b61096d565b610963610974565b5063e8e617b760e01b5b9392505050565b5f5b6003548110156109a55761098b816001610bc4565b61099c610999836064610bc4565b90565b55600101610976565b50565b5f602082840312156109b8575f5ffd5b81356001600160e01b03198116811461096d575f5ffd5b80356001600160a01b03811681146109e5575f5ffd5b919050565b5f5f5f5f5f608086880312156109fe575f5ffd5b610a07866109cf565b9450610a15602087016109cf565b935060408601359250606086013567ffffffffffffffff811115610a37575f5ffd5b8601601f81018813610a47575f5ffd5b803567ffffffffffffffff811115610a5d575f5ffd5b886020828401011115610a6e575f5ffd5b959894975092955050506020019190565b5f60208284031215610a8f575f5ffd5b8135801515811461096d575f5ffd5b5f5f5f5f60808587031215610ab1575f5ffd5b610aba856109cf565b9350610ac8602086016109cf565b93969395505050506040820135916060013590565b5f5f5f5f5f5f60c08789031215610af2575f5ffd5b610afb876109cf565b9550610b09602088016109cf565b95989597505050506040840135936060810135936080820135935060a0909101359150565b5f60208284031215610b3e575f5ffd5b5035919050565b5f5f5f60608486031215610b57575f5ffd5b610b60846109cf565b9250610b6e602085016109cf565b929592945050506040919091013590565b6080810160058610610b9f57634e487b7160e01b5f52602160045260245ffd5b94815260208101939093526001600160a01b0391821660408401521660609091015290565b808201808211156104ba57634e487b7160e01b5f52601160045260245ffdfecb6442f1752a34d49fd946725ee915eae9914b3fe3f3193b98232c772393e7c5a26469706673582212201e273d11c8e5e44dc3ff1411fab09eeed0fd5692370cb7a792decd8b3dd2c2fe64736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
