{
  "_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": "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": "noV2",
      "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": "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": "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": "noV2_",
          "type": "bool"
        }
      ],
      "name": "setNoV2",
      "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": "0x6080604052348015600e575f5ffd5b506002805466ff00ffffff00ff191690555f196001555f600355610b6a806100355f395ff3fe608060405234801561000f575f5ffd5b506004361061016d575f3560e01c806375d475f9116100d9578063bcce539911610093578063d99ba4081161006e578063d99ba408146103f6578063e8e617b71461040c578063ee89ef3a1461041f578063f57c302e14610427575f5ffd5b8063bcce5399146103ba578063c3af904e146103ce578063d6281d3e146103e3575f5ffd5b806375d475f91461030b5780637806ce811461033b5780639568ca0f1461034e5780639d76940214610360578063a9cc471814610381578063aeec8f9d1461038e575f5ffd5b806331ca29441161012a57806331ca294414610260578063352870141461028a5780635177cd131461029e5780635ee0c7dd146102ce57806363bd1d4a146102e15780636db65619146102f8575f5ffd5b806301ffc9a7146101715780630dc13e9914610199578063150b7a02146101ad578063286ee351146101d95780632bb2adb3146102035780632fb6436214610231575b5f5ffd5b61018461017f36600461092a565b610430565b60405190151581526020015b60405180910390f35b60025461018490600160381b900460ff1681565b6101c06101bb36600461096c565b6104c6565b6040516001600160e01b03199091168152602001610190565b6102016101e7366004610a01565b600280549115156101000261ff0019909216919091179055565b005b610201610211366004610a01565b600280549115156401000000000264ff0000000019909216919091179055565b61020161023f366004610a01565b60028054911515600160301b0266ff00000000000019909216919091179055565b61020161026e366004610a01565b60028054911515620100000262ff000019909216919091179055565b600254610184906301000000900460ff1681565b6102016102ac366004610a01565b60028054911515650100000000000265ff000000000019909216919091179055565b6101c06102dc366004610a20565b6105b9565b6102ea60015481565b604051908152602001610190565b6002546101849062010000900460ff1681565b610201610319366004610a01565b60028054911515600160381b0267ff0000000000000019909216919091179055565b610201610349366004610a5f565b600355565b60025461018490610100900460ff1681565b61020161036e366004610a01565b6002805460ff1916911515919091179055565b6002546101849060ff1681565b61020161039c366004610a01565b6002805491151563010000000263ff00000019909216919091179055565b60025461018490600160301b900460ff1681565b60025461018490640100000000900460ff1681565b6101c06103f1366004610a20565b61071e565b6002546101849065010000000000900460ff1681565b6101c061041a366004610a76565b61080a565b6102ea5f5481565b6102ea60035481565b6002545f90600160301b900460ff1615610448575f5ffd5b6002546301000000900460ff161561046157505f919050565b6001600160e01b03198216633ece0a8960e01b14806104a55750600254600160381b900460ff161580156104a557506001600160e01b03198216635ee0c7dd60e01b145b806104c057506001600160e01b031982166301ffc9a760e01b145b92915050565b6002545f9060ff161561054b5760025462010000900460ff16156104e8575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e45524337323152656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084015b60405180910390fd5b5f8481555f196001556040515f516020610b155f395f51905f52916105759187908a908a90610ab0565b60405180910390a1600254640100000000900460ff161561059e5750630badf00d60e01b6105b0565b6105a66108f6565b50630a85bd0160e11b5b95945050505050565b6002545f90600160381b900460ff161561062a5760405162461bcd60e51b815260206004820152602c60248201527f53686f756c646e27742063616c6c2074686973206d6574686f6420696620563260448201526b081b9bdd08195b98589b195960a21b6064820152608401610542565b600254610100900460ff16156106ad5760025462010000900460ff161561064f575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e506f6c6963795265706c616365643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b6064820152608401610542565b5f83905560018290556040515f516020610b155f395f51905f52906106da90600390869089908990610ab0565b60405180910390a160025465010000000000900460ff16156107045750630badf00d60e01b610716565b61070c6108f6565b50635ee0c7dd60e01b5b949350505050565b6002545f9060ff161561079e5760025462010000900460ff1615610740575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e5061796f757452656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b6064820152608401610542565b5f83905560018281556040515f516020610b155f395f51905f52916107c891869089908990610ab0565b60405180910390a1600254640100000000900460ff16156107f15750630badf00d60e01b610716565b6107f96108f6565b50636b140e9f60e11b949350505050565b6002545f9060ff16156108895760025462010000900460ff161561082c575f5ffd5b60405162461bcd60e51b815260206004820152602c60248201527f6f6e506f6c696379457870697265643a205468657920746f6c64206d6520492060448201526b1a185d99481d1bc819985a5b60a21b6064820152608401610542565b5f8281556001556040515f516020610b155f395f51905f52906108b490600290859088908890610ab0565b60405180910390a1600254640100000000900460ff16156108dd5750630badf00d60e01b6108ef565b6108e56108f6565b5063e8e617b760e01b5b9392505050565b5f5b6003548110156109275761090d816001610af5565b61091e61091b836064610af5565b90565b556001016108f8565b50565b5f6020828403121561093a575f5ffd5b81356001600160e01b0319811681146108ef575f5ffd5b80356001600160a01b0381168114610967575f5ffd5b919050565b5f5f5f5f5f60808688031215610980575f5ffd5b61098986610951565b945061099760208701610951565b935060408601359250606086013567ffffffffffffffff8111156109b9575f5ffd5b8601601f810188136109c9575f5ffd5b803567ffffffffffffffff8111156109df575f5ffd5b8860208284010111156109f0575f5ffd5b959894975092955050506020019190565b5f60208284031215610a11575f5ffd5b813580151581146108ef575f5ffd5b5f5f5f5f60808587031215610a33575f5ffd5b610a3c85610951565b9350610a4a60208601610951565b93969395505050506040820135916060013590565b5f60208284031215610a6f575f5ffd5b5035919050565b5f5f5f60608486031215610a88575f5ffd5b610a9184610951565b9250610a9f60208501610951565b929592945050506040919091013590565b6080810160048610610ad057634e487b7160e01b5f52602160045260245ffd5b94815260208101939093526001600160a01b0391821660408401521660609091015290565b808201808211156104c057634e487b7160e01b5f52601160045260245ffdfecb6442f1752a34d49fd946725ee915eae9914b3fe3f3193b98232c772393e7c5a264697066735822122035daeb15837aafe20f221941736d87414daac6b3bbf21bb77fec1870e9183c9b64736f6c634300081c0033",
  "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061016d575f3560e01c806375d475f9116100d9578063bcce539911610093578063d99ba4081161006e578063d99ba408146103f6578063e8e617b71461040c578063ee89ef3a1461041f578063f57c302e14610427575f5ffd5b8063bcce5399146103ba578063c3af904e146103ce578063d6281d3e146103e3575f5ffd5b806375d475f91461030b5780637806ce811461033b5780639568ca0f1461034e5780639d76940214610360578063a9cc471814610381578063aeec8f9d1461038e575f5ffd5b806331ca29441161012a57806331ca294414610260578063352870141461028a5780635177cd131461029e5780635ee0c7dd146102ce57806363bd1d4a146102e15780636db65619146102f8575f5ffd5b806301ffc9a7146101715780630dc13e9914610199578063150b7a02146101ad578063286ee351146101d95780632bb2adb3146102035780632fb6436214610231575b5f5ffd5b61018461017f36600461092a565b610430565b60405190151581526020015b60405180910390f35b60025461018490600160381b900460ff1681565b6101c06101bb36600461096c565b6104c6565b6040516001600160e01b03199091168152602001610190565b6102016101e7366004610a01565b600280549115156101000261ff0019909216919091179055565b005b610201610211366004610a01565b600280549115156401000000000264ff0000000019909216919091179055565b61020161023f366004610a01565b60028054911515600160301b0266ff00000000000019909216919091179055565b61020161026e366004610a01565b60028054911515620100000262ff000019909216919091179055565b600254610184906301000000900460ff1681565b6102016102ac366004610a01565b60028054911515650100000000000265ff000000000019909216919091179055565b6101c06102dc366004610a20565b6105b9565b6102ea60015481565b604051908152602001610190565b6002546101849062010000900460ff1681565b610201610319366004610a01565b60028054911515600160381b0267ff0000000000000019909216919091179055565b610201610349366004610a5f565b600355565b60025461018490610100900460ff1681565b61020161036e366004610a01565b6002805460ff1916911515919091179055565b6002546101849060ff1681565b61020161039c366004610a01565b6002805491151563010000000263ff00000019909216919091179055565b60025461018490600160301b900460ff1681565b60025461018490640100000000900460ff1681565b6101c06103f1366004610a20565b61071e565b6002546101849065010000000000900460ff1681565b6101c061041a366004610a76565b61080a565b6102ea5f5481565b6102ea60035481565b6002545f90600160301b900460ff1615610448575f5ffd5b6002546301000000900460ff161561046157505f919050565b6001600160e01b03198216633ece0a8960e01b14806104a55750600254600160381b900460ff161580156104a557506001600160e01b03198216635ee0c7dd60e01b145b806104c057506001600160e01b031982166301ffc9a760e01b145b92915050565b6002545f9060ff161561054b5760025462010000900460ff16156104e8575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e45524337323152656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084015b60405180910390fd5b5f8481555f196001556040515f516020610b155f395f51905f52916105759187908a908a90610ab0565b60405180910390a1600254640100000000900460ff161561059e5750630badf00d60e01b6105b0565b6105a66108f6565b50630a85bd0160e11b5b95945050505050565b6002545f90600160381b900460ff161561062a5760405162461bcd60e51b815260206004820152602c60248201527f53686f756c646e27742063616c6c2074686973206d6574686f6420696620563260448201526b081b9bdd08195b98589b195960a21b6064820152608401610542565b600254610100900460ff16156106ad5760025462010000900460ff161561064f575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e506f6c6963795265706c616365643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b6064820152608401610542565b5f83905560018290556040515f516020610b155f395f51905f52906106da90600390869089908990610ab0565b60405180910390a160025465010000000000900460ff16156107045750630badf00d60e01b610716565b61070c6108f6565b50635ee0c7dd60e01b5b949350505050565b6002545f9060ff161561079e5760025462010000900460ff1615610740575f5ffd5b60405162461bcd60e51b815260206004820152602d60248201527f6f6e5061796f757452656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b6064820152608401610542565b5f83905560018281556040515f516020610b155f395f51905f52916107c891869089908990610ab0565b60405180910390a1600254640100000000900460ff16156107f15750630badf00d60e01b610716565b6107f96108f6565b50636b140e9f60e11b949350505050565b6002545f9060ff16156108895760025462010000900460ff161561082c575f5ffd5b60405162461bcd60e51b815260206004820152602c60248201527f6f6e506f6c696379457870697265643a205468657920746f6c64206d6520492060448201526b1a185d99481d1bc819985a5b60a21b6064820152608401610542565b5f8281556001556040515f516020610b155f395f51905f52906108b490600290859088908890610ab0565b60405180910390a1600254640100000000900460ff16156108dd5750630badf00d60e01b6108ef565b6108e56108f6565b5063e8e617b760e01b5b9392505050565b5f5b6003548110156109275761090d816001610af5565b61091e61091b836064610af5565b90565b556001016108f8565b50565b5f6020828403121561093a575f5ffd5b81356001600160e01b0319811681146108ef575f5ffd5b80356001600160a01b0381168114610967575f5ffd5b919050565b5f5f5f5f5f60808688031215610980575f5ffd5b61098986610951565b945061099760208701610951565b935060408601359250606086013567ffffffffffffffff8111156109b9575f5ffd5b8601601f810188136109c9575f5ffd5b803567ffffffffffffffff8111156109df575f5ffd5b8860208284010111156109f0575f5ffd5b959894975092955050506020019190565b5f60208284031215610a11575f5ffd5b813580151581146108ef575f5ffd5b5f5f5f5f60808587031215610a33575f5ffd5b610a3c85610951565b9350610a4a60208601610951565b93969395505050506040820135916060013590565b5f60208284031215610a6f575f5ffd5b5035919050565b5f5f5f60608486031215610a88575f5ffd5b610a9184610951565b9250610a9f60208501610951565b929592945050506040919091013590565b6080810160048610610ad057634e487b7160e01b5f52602160045260245ffd5b94815260208101939093526001600160a01b0391821660408401521660609091015290565b808201808211156104c057634e487b7160e01b5f52601160045260245ffdfecb6442f1752a34d49fd946725ee915eae9914b3fe3f3193b98232c772393e7c5a264697066735822122035daeb15837aafe20f221941736d87414daac6b3bbf21bb77fec1870e9183c9b64736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
