{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721Holder",
  "sourceName": "contracts/condition_oracles/ERC721Holder.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_nftToken",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "_claimInterface",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "_rewardToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_rewardTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_defaultReward",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_defaultConsumer",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "nftId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "integrityHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "claim",
          "type": "bytes"
        }
      ],
      "name": "ClaimedNftReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "claim",
          "type": "bytes"
        }
      ],
      "name": "ConsumedClaim",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "consumer",
          "type": "address"
        }
      ],
      "name": "ConsumerAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "consumer",
          "type": "address"
        }
      ],
      "name": "ConsumerRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DefaultRewardChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "nftId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RewardChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "claimInterface",
          "type": "bytes4"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "rewardToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "rewardTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "integrityHash",
          "type": "bytes32"
        }
      ],
      "name": "SettingsChanged",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_nftToken",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "_claimInterface",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "_rewardToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_rewardTokenId",
          "type": "uint256"
        }
      ],
      "name": "adminChangeSettings",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "adminSetDefaultReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256[]",
          "name": "_nftIds",
          "type": "uint256[]"
        }
      ],
      "name": "adminSetReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_consumer",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_allow",
          "type": "bool"
        }
      ],
      "name": "adminSwitchConsumer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "canConsumeClaims",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_claim",
          "type": "bytes"
        }
      ],
      "name": "consumeClaim",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_nftId",
          "type": "uint256"
        }
      ],
      "name": "getReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_claim",
          "type": "bytes"
        }
      ],
      "name": "hasClaim",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "integrityHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nftToken",
      "outputs": [
        {
          "internalType": "contract IERC721",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_claimInterface",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_nftId",
          "type": "uint256"
        }
      ],
      "name": "prepareClaim",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052656c6f737365726003553480156200001b57600080fd5b5060405162002815380380620028158339818101604052810190620000419190620006bb565b6200006162000055620001a460201b60201c565b620001ac60201b60201c565b85600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000b58585856200027060201b60201c565b6000821115620000c757816005819055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000198576001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f28b26e7a3d20aedbc5f8f2ebf7da671c0491723a2b78f47a097b0e46dee0714260405160405180910390a25b5050505050506200090b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b63ffffffff60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806200030857506340c10f1960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8062000358575063731133e960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806200039057506200038f838373ffffffffffffffffffffffffffffffffffffffff166200046260201b62000ca81790919060201c565b5b620003d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c990620007de565b60405180910390fd5b6000828285604051602001620003eb939291906200089a565b6040516020818303038152906040528051906020012090508060018190555080828473ffffffffffffffffffffffffffffffffffffffff167f5157785fd6fe43b0ec091c749d339b04dbcfb552938b8c019a63f1af607893ec87604051620004549190620008ee565b60405180910390a450505050565b600062000475836200049860201b60201c565b80156200049057506200048f8383620004f660201b60201c565b5b905092915050565b6000620004cc827f01ffc9a700000000000000000000000000000000000000000000000000000000620004f660201b60201c565b8015620004ef5750620004ed8263ffffffff60e01b620004f660201b60201c565b155b9050919050565b6000806301ffc9a760e01b83604051602401620005149190620008ee565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015620005a0575060208210155b8015620005ad5750600081115b94505050505092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005eb82620005be565b9050919050565b620005fd81620005de565b81146200060957600080fd5b50565b6000815190506200061d81620005f2565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200065a8162000623565b81146200066657600080fd5b50565b6000815190506200067a816200064f565b92915050565b6000819050919050565b620006958162000680565b8114620006a157600080fd5b50565b600081519050620006b5816200068a565b92915050565b60008060008060008060c08789031215620006db57620006da620005b9565b5b6000620006eb89828a016200060c565b9650506020620006fe89828a0162000669565b95505060406200071189828a016200060c565b94505060606200072489828a01620006a4565b93505060806200073789828a01620006a4565b92505060a06200074a89828a016200060c565b9150509295509295509295565b600082825260208201905092915050565b7f436f6e646974696f6e616c4469737472696275746f723a20496e76616c69642060008201527f696e746572666163650000000000000000000000000000000000000000000000602082015250565b6000620007c660298362000757565b9150620007d38262000768565b604082019050919050565b60006020820190508181036000830152620007f981620007b7565b9050919050565b60008160601b9050919050565b60006200081a8262000800565b9050919050565b60006200082e826200080d565b9050919050565b6200084a6200084482620005de565b62000821565b82525050565b6000819050919050565b6200086f620008698262000680565b62000850565b82525050565b6000819050919050565b620008946200088e8262000623565b62000875565b82525050565b6000620008a8828662000835565b601482019150620008ba82856200085a565b602082019150620008cc82846200087f565b600482019150819050949350505050565b620008e88162000623565b82525050565b6000602082019050620009056000830184620008dd565b92915050565b611efa806200091b6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063a088dd6111610097578063d4f05a7611610066578063d4f05a7614610274578063e00f961314610290578063f2fde38b146102c0578063f4deebc6146102dc576100f5565b8063a088dd61146101ec578063cb7f01411461020a578063d06fcba814610226578063d120469e14610244576100f5565b80636afdb9b4116100d35780636afdb9b414610164578063715018a614610194578063819581751461019e5780638da5cb5b146101ce576100f5565b8063192c1bef146100fa5780631c4b774b1461011857806337db343514610148575b600080fd5b6101026102f8565b60405161010f919061111d565b60405180910390f35b610132600480360381019061012d9190611178565b6102fe565b60405161013f919061111d565b60405180910390f35b610162600480360381019061015d919061125b565b610365565b005b61017e600480360381019061017991906112c2565b6103bf565b60405161018b919061130a565b60405180910390f35b61019c6103df565b005b6101b860048036038101906101b39190611325565b6103f3565b6040516101c5919061141c565b60405180910390f35b6101d6610470565b6040516101e3919061144d565b60405180910390f35b6101f4610499565b6040516102019190611481565b60405180910390f35b610224600480360381019061021f91906114c8565b61049f565b005b61022e6105ed565b60405161023b9190611567565b60405180910390f35b61025e600480360381019061025991906115e7565b610613565b60405161026b919061111d565b60405180910390f35b61028e6004803603810190610289919061169d565b610911565b005b6102aa60048036038101906102a591906115e7565b610a5a565b6040516102b7919061130a565b60405180910390f35b6102da60048036038101906102d591906112c2565b610b98565b005b6102f660048036038101906102f19190611178565b610c1b565b005b60055481565b60006007600083815260200190815260200160002060009054906101000a900460ff161561032f5760009050610360565b60006006600084815260200190815260200160002054905060008111156103595780915050610360565b6005549150505b919050565b61036d610ccd565b83600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103b9838383610d4b565b50505050565b60026020528060005260406000206000915054906101000a900460ff1681565b6103e7610ccd565b6103f16000610f2c565b565b6060600084848760405160200161040c93929190611787565b6040516020818303038152906040528051906020012090508083604051602001610436919061111d565b6040516020818303038152906040526040516020016104569291906117c4565b604051602081830303815290604052915050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60015481565b6104a7610ccd565b801561054d576001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f28b26e7a3d20aedbc5f8f2ebf7da671c0491723a2b78f47a097b0e46dee0714260405160405180910390a26105e9565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fe3f5ed5f263f1f01764a96edfc7d025f511ec5f7d180e8816908b78bcf74f09860405160405180910390a25b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069890611851565b60405180910390fd5b60008084848101906106b391906119cd565b915091506000818060200190518101906106cd9190611a3e565b90506001548314610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90611ab7565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610785919061111d565b602060405180830381865afa1580156107a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c69190611aec565b73ffffffffffffffffffffffffffffffffffffffff161461081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081390611b65565b60405180910390fd5b6000610827826102fe565b9050600081111561085f5760016007600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8773ffffffffffffffffffffffffffffffffffffffff167fd99dccc570c01ecb4da5de9a05d71a0bca8c76d6f18502d46f9c7f11219eba8d88886040516108a7929190611bb2565b60405180910390a283828973ffffffffffffffffffffffffffffffffffffffff167f6890536c50a0a1f6d16b53b24bfb822a687e197b0eee7810544b93e20834c068848b8b6040516108fb93929190611bd6565b60405180910390a4809450505050509392505050565b610919610ccd565b600083101561095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095490611c54565b60405180910390fd5b60005b828290508161ffff161015610a5457600083838361ffff1681811061098857610987611c74565b5b905060200201359050600085036109f95760016007600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506000817f453d330bbd1ce32fd7bfa00c1af928bb5abe16a97e3d0188e53fbef00b8e293a60405160405180910390a3610a40565b84600660008381526020019081526020016000208190555084817f453d330bbd1ce32fd7bfa00c1af928bb5abe16a97e3d0188e53fbef00b8e293a60405160405180910390a35b508080610a4c90611ce0565b915050610960565b50505050565b60008060008484810190610a6e91906119cd565b91509150600081806020019051810190610a889190611a3e565b90506001548314610a9f5760009350505050610b91565b8673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b11919061111d565b602060405180830381865afa158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b529190611aec565b73ffffffffffffffffffffffffffffffffffffffff1614610b795760009350505050610b91565b6000610b84826102fe565b9050600081119450505050505b9392505050565b610ba0610ccd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690611d7c565b60405180910390fd5b610c1881610f2c565b50565b610c23610ccd565b6000811015610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90611c54565b60405180910390fd5b806005819055507f353ed6008d7f2d5e863681cf25ee8ddfa2dc9231c0d85f9f90c9d9d6de831c6f81604051610c9d919061111d565b60405180910390a150565b6000610cb383610ff0565b8015610cc55750610cc4838361103d565b5b905092915050565b610cd56110fc565b73ffffffffffffffffffffffffffffffffffffffff16610cf3610470565b73ffffffffffffffffffffffffffffffffffffffff1614610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090611de8565b60405180910390fd5b565b63ffffffff60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610de257506340c10f1960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e31575063731133e960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e615750610e60838373ffffffffffffffffffffffffffffffffffffffff16610ca890919063ffffffff16565b5b610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790611e7a565b60405180910390fd5b6000828285604051602001610eb793929190611787565b6040516020818303038152906040528051906020012090508060018190555080828473ffffffffffffffffffffffffffffffffffffffff167f5157785fd6fe43b0ec091c749d339b04dbcfb552938b8c019a63f1af607893ec87604051610f1e9190611ea9565b60405180910390a450505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061101c827f01ffc9a70000000000000000000000000000000000000000000000000000000061103d565b801561103657506110348263ffffffff60e01b61103d565b155b9050919050565b6000806301ffc9a760e01b836040516024016110599190611ea9565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156110e4575060208210155b80156110f05750600081115b94505050505092915050565b600033905090565b6000819050919050565b61111781611104565b82525050565b6000602082019050611132600083018461110e565b92915050565b6000604051905090565b600080fd5b600080fd5b61115581611104565b811461116057600080fd5b50565b6000813590506111728161114c565b92915050565b60006020828403121561118e5761118d611142565b5b600061119c84828501611163565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111d0826111a5565b9050919050565b6111e0816111c5565b81146111eb57600080fd5b50565b6000813590506111fd816111d7565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61123881611203565b811461124357600080fd5b50565b6000813590506112558161122f565b92915050565b6000806000806080858703121561127557611274611142565b5b6000611283878288016111ee565b945050602061129487828801611246565b93505060406112a5878288016111ee565b92505060606112b687828801611163565b91505092959194509250565b6000602082840312156112d8576112d7611142565b5b60006112e6848285016111ee565b91505092915050565b60008115159050919050565b611304816112ef565b82525050565b600060208201905061131f60008301846112fb565b92915050565b6000806000806080858703121561133f5761133e611142565b5b600061134d87828801611246565b945050602061135e878288016111ee565b935050604061136f87828801611163565b925050606061138087828801611163565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156113c65780820151818401526020810190506113ab565b60008484015250505050565b6000601f19601f8301169050919050565b60006113ee8261138c565b6113f88185611397565b93506114088185602086016113a8565b611411816113d2565b840191505092915050565b6000602082019050818103600083015261143681846113e3565b905092915050565b611447816111c5565b82525050565b6000602082019050611462600083018461143e565b92915050565b6000819050919050565b61147b81611468565b82525050565b60006020820190506114966000830184611472565b92915050565b6114a5816112ef565b81146114b057600080fd5b50565b6000813590506114c28161149c565b92915050565b600080604083850312156114df576114de611142565b5b60006114ed858286016111ee565b92505060206114fe858286016114b3565b9150509250929050565b6000819050919050565b600061152d611528611523846111a5565b611508565b6111a5565b9050919050565b600061153f82611512565b9050919050565b600061155182611534565b9050919050565b61156181611546565b82525050565b600060208201905061157c6000830184611558565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126115a7576115a6611582565b5b8235905067ffffffffffffffff8111156115c4576115c3611587565b5b6020830191508360018202830111156115e0576115df61158c565b5b9250929050565b600080600060408486031215611600576115ff611142565b5b600061160e868287016111ee565b935050602084013567ffffffffffffffff81111561162f5761162e611147565b5b61163b86828701611591565b92509250509250925092565b60008083601f84011261165d5761165c611582565b5b8235905067ffffffffffffffff81111561167a57611679611587565b5b6020830191508360208202830111156116965761169561158c565b5b9250929050565b6000806000604084860312156116b6576116b5611142565b5b60006116c486828701611163565b935050602084013567ffffffffffffffff8111156116e5576116e4611147565b5b6116f186828701611647565b92509250509250925092565b60008160601b9050919050565b6000611715826116fd565b9050919050565b60006117278261170a565b9050919050565b61173f61173a826111c5565b61171c565b82525050565b6000819050919050565b61176061175b82611104565b611745565b82525050565b6000819050919050565b61178161177c82611203565b611766565b82525050565b6000611793828661172e565b6014820191506117a3828561174f565b6020820191506117b38284611770565b600482019150819050949350505050565b60006040820190506117d96000830185611472565b81810360208301526117eb81846113e3565b90509392505050565b600082825260208201905092915050565b7f6e6f74206120636f6e73756d6572000000000000000000000000000000000000600082015250565b600061183b600e836117f4565b915061184682611805565b602082019050919050565b6000602082019050818103600083015261186a8161182e565b9050919050565b61187a81611468565b811461188557600080fd5b50565b60008135905061189781611871565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118da826113d2565b810181811067ffffffffffffffff821117156118f9576118f86118a2565b5b80604052505050565b600061190c611138565b905061191882826118d1565b919050565b600067ffffffffffffffff821115611938576119376118a2565b5b611941826113d2565b9050602081019050919050565b82818337600083830152505050565b600061197061196b8461191d565b611902565b90508281526020810184848401111561198c5761198b61189d565b5b61199784828561194e565b509392505050565b600082601f8301126119b4576119b3611582565b5b81356119c484826020860161195d565b91505092915050565b600080604083850312156119e4576119e3611142565b5b60006119f285828601611888565b925050602083013567ffffffffffffffff811115611a1357611a12611147565b5b611a1f8582860161199f565b9150509250929050565b600081519050611a388161114c565b92915050565b600060208284031215611a5457611a53611142565b5b6000611a6284828501611a29565b91505092915050565b7f696e76616c696420636c61696d00000000000000000000000000000000000000600082015250565b6000611aa1600d836117f4565b9150611aac82611a6b565b602082019050919050565b60006020820190508181036000830152611ad081611a94565b9050919050565b600081519050611ae6816111d7565b92915050565b600060208284031215611b0257611b01611142565b5b6000611b1084828501611ad7565b91505092915050565b7f6e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000611b4f600c836117f4565b9150611b5a82611b19565b602082019050919050565b60006020820190508181036000830152611b7e81611b42565b9050919050565b6000611b918385611397565b9350611b9e83858461194e565b611ba7836113d2565b840190509392505050565b60006020820190508181036000830152611bcd818486611b85565b90509392505050565b6000604082019050611beb600083018661110e565b8181036020830152611bfe818486611b85565b9050949350505050565b7f696e76616c696420726577617264000000000000000000000000000000000000600082015250565b6000611c3e600e836117f4565b9150611c4982611c08565b602082019050919050565b60006020820190508181036000830152611c6d81611c31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff82169050919050565b6000611ceb82611cd2565b915061ffff8203611cff57611cfe611ca3565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d666026836117f4565b9150611d7182611d0a565b604082019050919050565b60006020820190508181036000830152611d9581611d59565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611dd26020836117f4565b9150611ddd82611d9c565b602082019050919050565b60006020820190508181036000830152611e0181611dc5565b9050919050565b7f436f6e646974696f6e616c4469737472696275746f723a20496e76616c69642060008201527f696e746572666163650000000000000000000000000000000000000000000000602082015250565b6000611e646029836117f4565b9150611e6f82611e08565b604082019050919050565b60006020820190508181036000830152611e9381611e57565b9050919050565b611ea381611203565b82525050565b6000602082019050611ebe6000830184611e9a565b9291505056fea2646970667358221220dda911fb89d67864e9600a387329d2fb3eb2ea5db1e36c0dab112c7ed28cbbf764736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063a088dd6111610097578063d4f05a7611610066578063d4f05a7614610274578063e00f961314610290578063f2fde38b146102c0578063f4deebc6146102dc576100f5565b8063a088dd61146101ec578063cb7f01411461020a578063d06fcba814610226578063d120469e14610244576100f5565b80636afdb9b4116100d35780636afdb9b414610164578063715018a614610194578063819581751461019e5780638da5cb5b146101ce576100f5565b8063192c1bef146100fa5780631c4b774b1461011857806337db343514610148575b600080fd5b6101026102f8565b60405161010f919061111d565b60405180910390f35b610132600480360381019061012d9190611178565b6102fe565b60405161013f919061111d565b60405180910390f35b610162600480360381019061015d919061125b565b610365565b005b61017e600480360381019061017991906112c2565b6103bf565b60405161018b919061130a565b60405180910390f35b61019c6103df565b005b6101b860048036038101906101b39190611325565b6103f3565b6040516101c5919061141c565b60405180910390f35b6101d6610470565b6040516101e3919061144d565b60405180910390f35b6101f4610499565b6040516102019190611481565b60405180910390f35b610224600480360381019061021f91906114c8565b61049f565b005b61022e6105ed565b60405161023b9190611567565b60405180910390f35b61025e600480360381019061025991906115e7565b610613565b60405161026b919061111d565b60405180910390f35b61028e6004803603810190610289919061169d565b610911565b005b6102aa60048036038101906102a591906115e7565b610a5a565b6040516102b7919061130a565b60405180910390f35b6102da60048036038101906102d591906112c2565b610b98565b005b6102f660048036038101906102f19190611178565b610c1b565b005b60055481565b60006007600083815260200190815260200160002060009054906101000a900460ff161561032f5760009050610360565b60006006600084815260200190815260200160002054905060008111156103595780915050610360565b6005549150505b919050565b61036d610ccd565b83600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103b9838383610d4b565b50505050565b60026020528060005260406000206000915054906101000a900460ff1681565b6103e7610ccd565b6103f16000610f2c565b565b6060600084848760405160200161040c93929190611787565b6040516020818303038152906040528051906020012090508083604051602001610436919061111d565b6040516020818303038152906040526040516020016104569291906117c4565b604051602081830303815290604052915050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60015481565b6104a7610ccd565b801561054d576001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f28b26e7a3d20aedbc5f8f2ebf7da671c0491723a2b78f47a097b0e46dee0714260405160405180910390a26105e9565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fe3f5ed5f263f1f01764a96edfc7d025f511ec5f7d180e8816908b78bcf74f09860405160405180910390a25b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069890611851565b60405180910390fd5b60008084848101906106b391906119cd565b915091506000818060200190518101906106cd9190611a3e565b90506001548314610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a90611ab7565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610785919061111d565b602060405180830381865afa1580156107a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c69190611aec565b73ffffffffffffffffffffffffffffffffffffffff161461081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081390611b65565b60405180910390fd5b6000610827826102fe565b9050600081111561085f5760016007600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8773ffffffffffffffffffffffffffffffffffffffff167fd99dccc570c01ecb4da5de9a05d71a0bca8c76d6f18502d46f9c7f11219eba8d88886040516108a7929190611bb2565b60405180910390a283828973ffffffffffffffffffffffffffffffffffffffff167f6890536c50a0a1f6d16b53b24bfb822a687e197b0eee7810544b93e20834c068848b8b6040516108fb93929190611bd6565b60405180910390a4809450505050509392505050565b610919610ccd565b600083101561095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095490611c54565b60405180910390fd5b60005b828290508161ffff161015610a5457600083838361ffff1681811061098857610987611c74565b5b905060200201359050600085036109f95760016007600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506000817f453d330bbd1ce32fd7bfa00c1af928bb5abe16a97e3d0188e53fbef00b8e293a60405160405180910390a3610a40565b84600660008381526020019081526020016000208190555084817f453d330bbd1ce32fd7bfa00c1af928bb5abe16a97e3d0188e53fbef00b8e293a60405160405180910390a35b508080610a4c90611ce0565b915050610960565b50505050565b60008060008484810190610a6e91906119cd565b91509150600081806020019051810190610a889190611a3e565b90506001548314610a9f5760009350505050610b91565b8673ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b11919061111d565b602060405180830381865afa158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b529190611aec565b73ffffffffffffffffffffffffffffffffffffffff1614610b795760009350505050610b91565b6000610b84826102fe565b9050600081119450505050505b9392505050565b610ba0610ccd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690611d7c565b60405180910390fd5b610c1881610f2c565b50565b610c23610ccd565b6000811015610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90611c54565b60405180910390fd5b806005819055507f353ed6008d7f2d5e863681cf25ee8ddfa2dc9231c0d85f9f90c9d9d6de831c6f81604051610c9d919061111d565b60405180910390a150565b6000610cb383610ff0565b8015610cc55750610cc4838361103d565b5b905092915050565b610cd56110fc565b73ffffffffffffffffffffffffffffffffffffffff16610cf3610470565b73ffffffffffffffffffffffffffffffffffffffff1614610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090611de8565b60405180910390fd5b565b63ffffffff60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610de257506340c10f1960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e31575063731133e960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e615750610e60838373ffffffffffffffffffffffffffffffffffffffff16610ca890919063ffffffff16565b5b610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790611e7a565b60405180910390fd5b6000828285604051602001610eb793929190611787565b6040516020818303038152906040528051906020012090508060018190555080828473ffffffffffffffffffffffffffffffffffffffff167f5157785fd6fe43b0ec091c749d339b04dbcfb552938b8c019a63f1af607893ec87604051610f1e9190611ea9565b60405180910390a450505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061101c827f01ffc9a70000000000000000000000000000000000000000000000000000000061103d565b801561103657506110348263ffffffff60e01b61103d565b155b9050919050565b6000806301ffc9a760e01b836040516024016110599190611ea9565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156110e4575060208210155b80156110f05750600081115b94505050505092915050565b600033905090565b6000819050919050565b61111781611104565b82525050565b6000602082019050611132600083018461110e565b92915050565b6000604051905090565b600080fd5b600080fd5b61115581611104565b811461116057600080fd5b50565b6000813590506111728161114c565b92915050565b60006020828403121561118e5761118d611142565b5b600061119c84828501611163565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111d0826111a5565b9050919050565b6111e0816111c5565b81146111eb57600080fd5b50565b6000813590506111fd816111d7565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61123881611203565b811461124357600080fd5b50565b6000813590506112558161122f565b92915050565b6000806000806080858703121561127557611274611142565b5b6000611283878288016111ee565b945050602061129487828801611246565b93505060406112a5878288016111ee565b92505060606112b687828801611163565b91505092959194509250565b6000602082840312156112d8576112d7611142565b5b60006112e6848285016111ee565b91505092915050565b60008115159050919050565b611304816112ef565b82525050565b600060208201905061131f60008301846112fb565b92915050565b6000806000806080858703121561133f5761133e611142565b5b600061134d87828801611246565b945050602061135e878288016111ee565b935050604061136f87828801611163565b925050606061138087828801611163565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156113c65780820151818401526020810190506113ab565b60008484015250505050565b6000601f19601f8301169050919050565b60006113ee8261138c565b6113f88185611397565b93506114088185602086016113a8565b611411816113d2565b840191505092915050565b6000602082019050818103600083015261143681846113e3565b905092915050565b611447816111c5565b82525050565b6000602082019050611462600083018461143e565b92915050565b6000819050919050565b61147b81611468565b82525050565b60006020820190506114966000830184611472565b92915050565b6114a5816112ef565b81146114b057600080fd5b50565b6000813590506114c28161149c565b92915050565b600080604083850312156114df576114de611142565b5b60006114ed858286016111ee565b92505060206114fe858286016114b3565b9150509250929050565b6000819050919050565b600061152d611528611523846111a5565b611508565b6111a5565b9050919050565b600061153f82611512565b9050919050565b600061155182611534565b9050919050565b61156181611546565b82525050565b600060208201905061157c6000830184611558565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126115a7576115a6611582565b5b8235905067ffffffffffffffff8111156115c4576115c3611587565b5b6020830191508360018202830111156115e0576115df61158c565b5b9250929050565b600080600060408486031215611600576115ff611142565b5b600061160e868287016111ee565b935050602084013567ffffffffffffffff81111561162f5761162e611147565b5b61163b86828701611591565b92509250509250925092565b60008083601f84011261165d5761165c611582565b5b8235905067ffffffffffffffff81111561167a57611679611587565b5b6020830191508360208202830111156116965761169561158c565b5b9250929050565b6000806000604084860312156116b6576116b5611142565b5b60006116c486828701611163565b935050602084013567ffffffffffffffff8111156116e5576116e4611147565b5b6116f186828701611647565b92509250509250925092565b60008160601b9050919050565b6000611715826116fd565b9050919050565b60006117278261170a565b9050919050565b61173f61173a826111c5565b61171c565b82525050565b6000819050919050565b61176061175b82611104565b611745565b82525050565b6000819050919050565b61178161177c82611203565b611766565b82525050565b6000611793828661172e565b6014820191506117a3828561174f565b6020820191506117b38284611770565b600482019150819050949350505050565b60006040820190506117d96000830185611472565b81810360208301526117eb81846113e3565b90509392505050565b600082825260208201905092915050565b7f6e6f74206120636f6e73756d6572000000000000000000000000000000000000600082015250565b600061183b600e836117f4565b915061184682611805565b602082019050919050565b6000602082019050818103600083015261186a8161182e565b9050919050565b61187a81611468565b811461188557600080fd5b50565b60008135905061189781611871565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118da826113d2565b810181811067ffffffffffffffff821117156118f9576118f86118a2565b5b80604052505050565b600061190c611138565b905061191882826118d1565b919050565b600067ffffffffffffffff821115611938576119376118a2565b5b611941826113d2565b9050602081019050919050565b82818337600083830152505050565b600061197061196b8461191d565b611902565b90508281526020810184848401111561198c5761198b61189d565b5b61199784828561194e565b509392505050565b600082601f8301126119b4576119b3611582565b5b81356119c484826020860161195d565b91505092915050565b600080604083850312156119e4576119e3611142565b5b60006119f285828601611888565b925050602083013567ffffffffffffffff811115611a1357611a12611147565b5b611a1f8582860161199f565b9150509250929050565b600081519050611a388161114c565b92915050565b600060208284031215611a5457611a53611142565b5b6000611a6284828501611a29565b91505092915050565b7f696e76616c696420636c61696d00000000000000000000000000000000000000600082015250565b6000611aa1600d836117f4565b9150611aac82611a6b565b602082019050919050565b60006020820190508181036000830152611ad081611a94565b9050919050565b600081519050611ae6816111d7565b92915050565b600060208284031215611b0257611b01611142565b5b6000611b1084828501611ad7565b91505092915050565b7f6e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000611b4f600c836117f4565b9150611b5a82611b19565b602082019050919050565b60006020820190508181036000830152611b7e81611b42565b9050919050565b6000611b918385611397565b9350611b9e83858461194e565b611ba7836113d2565b840190509392505050565b60006020820190508181036000830152611bcd818486611b85565b90509392505050565b6000604082019050611beb600083018661110e565b8181036020830152611bfe818486611b85565b9050949350505050565b7f696e76616c696420726577617264000000000000000000000000000000000000600082015250565b6000611c3e600e836117f4565b9150611c4982611c08565b602082019050919050565b60006020820190508181036000830152611c6d81611c31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff82169050919050565b6000611ceb82611cd2565b915061ffff8203611cff57611cfe611ca3565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d666026836117f4565b9150611d7182611d0a565b604082019050919050565b60006020820190508181036000830152611d9581611d59565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611dd26020836117f4565b9150611ddd82611d9c565b602082019050919050565b60006020820190508181036000830152611e0181611dc5565b9050919050565b7f436f6e646974696f6e616c4469737472696275746f723a20496e76616c69642060008201527f696e746572666163650000000000000000000000000000000000000000000000602082015250565b6000611e646029836117f4565b9150611e6f82611e08565b604082019050919050565b60006020820190508181036000830152611e9381611e57565b9050919050565b611ea381611203565b82525050565b6000602082019050611ebe6000830184611e9a565b9291505056fea2646970667358221220dda911fb89d67864e9600a387329d2fb3eb2ea5db1e36c0dab112c7ed28cbbf764736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
