{
  "abi": [
    {
      "type": "constructor",
      "inputs": [
        {
          "name": "config",
          "type": "tuple",
          "internalType": "struct TermsOfServiceAllowListConfig",
          "components": [
            { "name": "enabled", "type": "bool", "internalType": "bool" },
            { "name": "signerPublicKey", "type": "address", "internalType": "address" }
          ]
        },
        { "name": "initialAllowedSenders", "type": "address[]", "internalType": "address[]" },
        { "name": "initialBlockedSenders", "type": "address[]", "internalType": "address[]" },
        { "name": "previousToSContract", "type": "address", "internalType": "address" }
      ],
      "stateMutability": "nonpayable"
    },
    { "type": "function", "name": "acceptOwnership", "inputs": [], "outputs": [], "stateMutability": "nonpayable" },
    {
      "type": "function",
      "name": "acceptTermsOfService",
      "inputs": [
        { "name": "acceptor", "type": "address", "internalType": "address" },
        { "name": "recipient", "type": "address", "internalType": "address" },
        { "name": "r", "type": "bytes32", "internalType": "bytes32" },
        { "name": "s", "type": "bytes32", "internalType": "bytes32" },
        { "name": "v", "type": "uint8", "internalType": "uint8" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "blockSender",
      "inputs": [{ "name": "sender", "type": "address", "internalType": "address" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "getAllAllowedSenders",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address[]", "internalType": "address[]" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getAllowedSendersCount",
      "inputs": [],
      "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getAllowedSendersInRange",
      "inputs": [
        { "name": "allowedSenderIdxStart", "type": "uint64", "internalType": "uint64" },
        { "name": "allowedSenderIdxEnd", "type": "uint64", "internalType": "uint64" }
      ],
      "outputs": [{ "name": "allowedSenders", "type": "address[]", "internalType": "address[]" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getBlockedSendersCount",
      "inputs": [],
      "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getBlockedSendersInRange",
      "inputs": [
        { "name": "blockedSenderIdxStart", "type": "uint64", "internalType": "uint64" },
        { "name": "blockedSenderIdxEnd", "type": "uint64", "internalType": "uint64" }
      ],
      "outputs": [{ "name": "blockedSenders", "type": "address[]", "internalType": "address[]" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getConfig",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "tuple",
          "internalType": "struct TermsOfServiceAllowListConfig",
          "components": [
            { "name": "enabled", "type": "bool", "internalType": "bool" },
            { "name": "signerPublicKey", "type": "address", "internalType": "address" }
          ]
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "getMessage",
      "inputs": [
        { "name": "acceptor", "type": "address", "internalType": "address" },
        { "name": "recipient", "type": "address", "internalType": "address" }
      ],
      "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
      "stateMutability": "pure"
    },
    {
      "type": "function",
      "name": "hasAccess",
      "inputs": [
        { "name": "user", "type": "address", "internalType": "address" },
        { "name": "", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "isBlockedSender",
      "inputs": [{ "name": "sender", "type": "address", "internalType": "address" }],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "migratePreviouslyAllowedSenders",
      "inputs": [{ "name": "previousSendersToAdd", "type": "address[]", "internalType": "address[]" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "owner",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "transferOwnership",
      "inputs": [{ "name": "to", "type": "address", "internalType": "address" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "typeAndVersion",
      "inputs": [],
      "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "unblockSender",
      "inputs": [{ "name": "sender", "type": "address", "internalType": "address" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "updateConfig",
      "inputs": [
        {
          "name": "config",
          "type": "tuple",
          "internalType": "struct TermsOfServiceAllowListConfig",
          "components": [
            { "name": "enabled", "type": "bool", "internalType": "bool" },
            { "name": "signerPublicKey", "type": "address", "internalType": "address" }
          ]
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "event",
      "name": "AddedAccess",
      "inputs": [{ "name": "user", "type": "address", "indexed": false, "internalType": "address" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "BlockedAccess",
      "inputs": [{ "name": "user", "type": "address", "indexed": false, "internalType": "address" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "ConfigUpdated",
      "inputs": [
        {
          "name": "config",
          "type": "tuple",
          "indexed": false,
          "internalType": "struct TermsOfServiceAllowListConfig",
          "components": [
            { "name": "enabled", "type": "bool", "internalType": "bool" },
            { "name": "signerPublicKey", "type": "address", "internalType": "address" }
          ]
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "OwnershipTransferRequested",
      "inputs": [
        { "name": "from", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "to", "type": "address", "indexed": true, "internalType": "address" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "OwnershipTransferred",
      "inputs": [
        { "name": "from", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "to", "type": "address", "indexed": true, "internalType": "address" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "UnblockedAccess",
      "inputs": [{ "name": "user", "type": "address", "indexed": false, "internalType": "address" }],
      "anonymous": false
    },
    { "type": "error", "name": "InvalidCalldata", "inputs": [] },
    { "type": "error", "name": "InvalidSignature", "inputs": [] },
    { "type": "error", "name": "InvalidUsage", "inputs": [] },
    { "type": "error", "name": "NoPreviousToSContract", "inputs": [] },
    { "type": "error", "name": "RecipientIsBlocked", "inputs": [] }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b5060405162001d5338038062001d53833981016040819052620000349162000525565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620001f5565b505050620000d284620002a060201b60201c565b60005b8351811015620001255762000111848281518110620000f857620000f8620005eb565b602002602001015160036200032760201b90919060201c565b506200011d8162000601565b9050620000d5565b5060005b8251811015620001ca57620001658382815181106200014c576200014c620005eb565b602002602001015160036200034760201b90919060201c565b156200018457604051638129bbcd60e01b815260040160405180910390fd5b620001b68382815181106200019d576200019d620005eb565b602002602001015160056200032760201b90919060201c565b50620001c28162000601565b905062000129565b50600280546001600160a01b0319166001600160a01b03929092169190911790555062000629915050565b336001600160a01b038216036200024f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b620002aa6200036a565b805160078054602080850180516001600160a81b0319909316941515610100600160a81b03198116959095176101006001600160a01b039485160217909355604080519485529251909116908301527f0d22b8a99f411b3dd338c961284f608489ca0dab9cdad17366a343c361bcf80a910160405180910390a150565b60006200033e836001600160a01b038416620003c8565b90505b92915050565b6001600160a01b038116600090815260018301602052604081205415156200033e565b6000546001600160a01b03163314620003c65760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640162000082565b565b6000818152600183016020526040812054620004115750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000341565b50600062000341565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200045557620004556200041a565b60405290565b80516001600160a01b03811681146200047357600080fd5b919050565b600082601f8301126200048a57600080fd5b815160206001600160401b0380831115620004a957620004a96200041a565b8260051b604051601f19603f83011681018181108482111715620004d157620004d16200041a565b604052938452858101830193838101925087851115620004f057600080fd5b83870191505b848210156200051a576200050a826200045b565b83529183019190830190620004f6565b979650505050505050565b60008060008084860360a08112156200053d57600080fd5b60408112156200054c57600080fd5b506200055762000430565b855180151581146200056857600080fd5b815262000578602087016200045b565b602082015260408601519094506001600160401b03808211156200059b57600080fd5b620005a98883890162000478565b94506060870151915080821115620005c057600080fd5b50620005cf8782880162000478565b925050620005e0608086016200045b565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b6000600182016200062257634e487b7160e01b600052601160045260246000fd5b5060010190565b61171a80620006396000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063817ef62e116100b2578063a39b06e311610081578063c3f909d411610066578063c3f909d4146102f1578063cc7ebf4914610350578063f2fde38b1461035857600080fd5b8063a39b06e314610265578063a5e1d61d146102de57600080fd5b8063817ef62e1461020f57806382184c7b1461021757806389f9a2c41461022a5780638da5cb5b1461023d57600080fd5b80633908c4d4116101095780634e10a5b3116100ee5780634e10a5b3146101d15780636b14daf8146101e457806379ba50971461020757600080fd5b80633908c4d4146101a957806347663acb146101be57600080fd5b806301a059581461013b5780630a8c9c2414610161578063181f5a771461018157806320229a8614610196575b600080fd5b61014361036b565b60405167ffffffffffffffff90911681526020015b60405180910390f35b61017461016f3660046111bb565b61037c565b60405161015891906111ee565b6101896104d8565b6040516101589190611248565b6101746101a43660046111bb565b6104f4565b6101bc6101b73660046112d8565b61065a565b005b6101bc6101cc366004611339565b610905565b6101bc6101df3660046113d2565b610966565b6101f76101f236600461147f565b610b2f565b6040519015158152602001610158565b6101bc610b59565b610174610c5b565b6101bc610225366004611339565b610c67565b6101bc610238366004611510565b610ccd565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610158565b6102d061027336600461156d565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b604051908152602001610158565b6101f76102ec366004611339565b610d88565b60408051808201825260008082526020918201528151808301835260075460ff8116151580835273ffffffffffffffffffffffffffffffffffffffff610100909204821692840192835284519081529151169181019190915201610158565b610143610da8565b6101bc610366366004611339565b610db4565b60006103776005610dc8565b905090565b60608167ffffffffffffffff168367ffffffffffffffff1611806103b357506103a56003610dc8565b8267ffffffffffffffff1610155b156103ea576040517f8129bbcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103f483836115c6565b6103ff9060016115e7565b67ffffffffffffffff1667ffffffffffffffff81111561042157610421611354565b60405190808252806020026020018201604052801561044a578160200160208202803683370190505b50905060005b61045a84846115c6565b67ffffffffffffffff1681116104d0576104896104818267ffffffffffffffff8716611608565b600390610dd2565b82828151811061049b5761049b61161b565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526104c98161164a565b9050610450565b505b92915050565b6040518060600160405280602c81526020016116e2602c913981565b60608167ffffffffffffffff168367ffffffffffffffff16118061052b575061051d6005610dc8565b8267ffffffffffffffff1610155b8061053d575061053b6005610dc8565b155b15610574576040517f8129bbcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057e83836115c6565b6105899060016115e7565b67ffffffffffffffff1667ffffffffffffffff8111156105ab576105ab611354565b6040519080825280602002602001820160405280156105d4578160200160208202803683370190505b50905060005b6105e484846115c6565b67ffffffffffffffff1681116104d05761061361060b8267ffffffffffffffff8716611608565b600590610dd2565b8282815181106106255761062561161b565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526106538161164a565b90506105da565b610665600585610dde565b1561069c576040517f62b7a34d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529188901b16603483015282516028818403018152604890920190925280519101206000906040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c810191909152605c01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201206007546000855291840180845281905260ff8616928401929092526060830187905260808301869052909250610100900473ffffffffffffffffffffffffffffffffffffffff169060019060a0016020604051602081039080840390855afa1580156107d0573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610827576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff861614158061086c57503373ffffffffffffffffffffffffffffffffffffffff87161480159061086c5750333b155b156108a3576040517f381cfcbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108ae600386610e0d565b156108fd5760405173ffffffffffffffffffffffffffffffffffffffff861681527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49060200160405180910390a15b505050505050565b61090d610e2f565b610918600582610eb2565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527f28bbd0761309a99e8fb5e5d02ada0b7b2db2e5357531ff5dbfc205c3f5b6592b906020015b60405180910390a150565b61096e610e2f565b60025473ffffffffffffffffffffffffffffffffffffffff166109bd576040517fb25f406700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff1660005b8251811015610b2a578173ffffffffffffffffffffffffffffffffffffffff16636b14daf8848381518110610a1057610a1061161b565b6020908102919091010151604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260006044820152606401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab59190611682565b15610b1a57610ae7838281518110610acf57610acf61161b565b60200260200101516005610dde90919063ffffffff16565b610b1a57610b18838281518110610b0057610b0061161b565b60200260200101516003610e0d90919063ffffffff16565b505b610b238161164a565b90506109d9565b505050565b60075460009060ff16610b4457506001610b52565b610b4f600385610dde565b90505b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610bdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60606103776003610ed4565b610c6f610e2f565b610c7a600382610eb2565b50610c86600582610e0d565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527f337cd0f3f594112b6d830afb510072d3b08556b446514f73b8109162fd1151e19060200161095b565b610cd5610e2f565b805160078054602080850180517fffffffffffffffffffffff0000000000000000000000000000000000000000009093169415157fffffffffffffffffffffff0000000000000000000000000000000000000000ff81169590951761010073ffffffffffffffffffffffffffffffffffffffff9485160217909355604080519485529251909116908301527f0d22b8a99f411b3dd338c961284f608489ca0dab9cdad17366a343c361bcf80a910161095b565b60075460009060ff16610d9d57506000919050565b6104d2600583610dde565b60006103776003610dc8565b610dbc610e2f565b610dc581610ee1565b50565b60006104d2825490565b6000610b528383610fd6565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610b52565b6000610b528373ffffffffffffffffffffffffffffffffffffffff8416611000565b60005473ffffffffffffffffffffffffffffffffffffffff163314610eb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610bd6565b565b6000610b528373ffffffffffffffffffffffffffffffffffffffff841661104f565b60606000610b5283611142565b3373ffffffffffffffffffffffffffffffffffffffff821603610f60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610bd6565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000826000018281548110610fed57610fed61161b565b9060005260206000200154905092915050565b6000818152600183016020526040812054611047575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104d2565b5060006104d2565b6000818152600183016020526040812054801561113857600061107360018361169f565b85549091506000906110879060019061169f565b90508181146110ec5760008660000182815481106110a7576110a761161b565b90600052602060002001549050808760000184815481106110ca576110ca61161b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806110fd576110fd6116b2565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104d2565b60009150506104d2565b60608160000180548060200260200160405190810160405280929190818152602001828054801561119257602002820191906000526020600020905b81548152602001906001019080831161117e575b50505050509050919050565b803567ffffffffffffffff811681146111b657600080fd5b919050565b600080604083850312156111ce57600080fd5b6111d78361119e565b91506111e56020840161119e565b90509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561123c57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161120a565b50909695505050505050565b600060208083528351808285015260005b8181101561127557858101830151858201604001528201611259565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111b657600080fd5b600080600080600060a086880312156112f057600080fd5b6112f9866112b4565b9450611307602087016112b4565b93506040860135925060608601359150608086013560ff8116811461132b57600080fd5b809150509295509295909350565b60006020828403121561134b57600080fd5b610b52826112b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113ca576113ca611354565b604052919050565b600060208083850312156113e557600080fd5b823567ffffffffffffffff808211156113fd57600080fd5b818501915085601f83011261141157600080fd5b81358181111561142357611423611354565b8060051b9150611434848301611383565b818152918301840191848101908884111561144e57600080fd5b938501935b8385101561147357611464856112b4565b82529385019390850190611453565b98975050505050505050565b60008060006040848603121561149457600080fd5b61149d846112b4565b9250602084013567ffffffffffffffff808211156114ba57600080fd5b818601915086601f8301126114ce57600080fd5b8135818111156114dd57600080fd5b8760208285010111156114ef57600080fd5b6020830194508093505050509250925092565b8015158114610dc557600080fd5b60006040828403121561152257600080fd5b6040516040810181811067ffffffffffffffff8211171561154557611545611354565b604052823561155381611502565b8152611561602084016112b4565b60208201529392505050565b6000806040838503121561158057600080fd5b611589836112b4565b91506111e5602084016112b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff8281168282160390808211156104d0576104d0611597565b67ffffffffffffffff8181168382160190808211156104d0576104d0611597565b808201808211156104d2576104d2611597565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361167b5761167b611597565b5060010190565b60006020828403121561169457600080fd5b8151610b5281611502565b818103818111156104d2576104d2611597565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe46756e6374696f6e73205465726d73206f66205365727669636520416c6c6f77204c6973742076312e312e31a164736f6c6343000813000a",
    "sourceMap": "760:7621:6:-:0;;;1820:703;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2021:10;;373:1:36;2021:10:6;590:59:37;;;;-1:-1:-1;;;590:59:37;;2848:2:90;590:59:37;;;2830:21:90;2887:2;2867:18;;;2860:30;2926:26;2906:18;;;2899:54;2970:18;;590:59:37;;;;;;;;;656:7;:18;;-1:-1:-1;;;;;;656:18:37;-1:-1:-1;;;;;656:18:37;;;;;;;;;;684:26;;;680:79;;720:32;739:12;720:18;:32::i;:::-;481:282;;298:81:36;2039:20:6::1;2052:6;2039:12;;;:20;;:::i;:::-;2071:9;2066:120;2090:21;:28;2086:1;:32;2066:120;;;2133:46;2154:21;2176:1;2154:24;;;;;;;;:::i;:::-;;;;;;;2133:16;:20;;;;:46;;;;:::i;:::-;-1:-1:-1::0;2120:3:6::1;::::0;::::1;:::i;:::-;;;2066:120;;;;2197:9;2192:277;2216:21;:28;2212:1;:32;2192:277;;;2263:51;2289:21;2311:1;2289:24;;;;;;;;:::i;:::-;;;;;;;2263:16;:25;;;;:51;;;;:::i;:::-;2259:150;;;2383:17;;-1:-1:-1::0;;;2383:17:6::1;;;;;;;;;;;2259:150;2416:46;2437:21;2459:1;2437:24;;;;;;;;:::i;:::-;;;;;;;2416:16;:20;;;;:46;;;;:::i;:::-;-1:-1:-1::0;2246:3:6::1;::::0;::::1;:::i;:::-;;;2192:277;;;-1:-1:-1::0;2475:21:6::1;:43:::0;;-1:-1:-1;;;;;;2475:43:6::1;-1:-1:-1::0;;;;;2475:43:6;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;760:7621:6;;-1:-1:-1;;760:7621:6;1536:239:37;1655:10;-1:-1:-1;;;;;1649:16:37;;;1641:52;;;;-1:-1:-1;;;1641:52:37;;3570:2:90;1641:52:37;;;3552:21:90;3609:2;3589:18;;;3582:30;3648:25;3628:18;;;3621:53;3691:18;;1641:52:37;3368:347:90;1641:52:37;1700:14;:19;;-1:-1:-1;;;;;;1700:19:37;-1:-1:-1;;;;;1700:19:37;;;;;;;;;-1:-1:-1;1758:7:37;;1731:39;;1700:19;;1758:7;;1731:39;;-1:-1:-1;1731:39:37;1536:239;:::o;3105:144:6:-;2075:20:37;:18;:20::i;:::-;3195:17:6;;:8:::1;:17:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;3195:17:6;;;;::::1;;-1:-1:-1::0;;;;;;3195:17:6;;;;;;::::1;-1:-1:-1::0;;;;;3195:17:6;;::::1;;;::::0;;;3223:21:::1;::::0;;3960:48:90;;;4050:24;;4046:50;;;4024:20;;;4017:80;3223:21:6::1;::::0;3933:18:90;3223:21:6::1;;;;;;;3105:144:::0;:::o;7773::88:-;7843:4;7862:50;7867:3;-1:-1:-1;;;;;7887:23:88;;7862:4;:50::i;:::-;7855:57;;7773:144;;;;;:::o;8294:159::-;-1:-1:-1;;;;;8423:23:88;;8374:4;4067:19;;;:12;;;:19;;;;;;:24;;8393:55;3975:121;1809:162:37;1932:7;;-1:-1:-1;;;;;1932:7:37;1918:10;:21;1910:56;;;;-1:-1:-1;;;1910:56:37;;4310:2:90;1910:56:37;;;4292:21:90;4349:2;4329:18;;;4322:30;4388:24;4368:18;;;4361:52;4430:18;;1910:56:37;4108:346:90;1910:56:37;1809:162::o;2152:354:88:-;2215:4;4067:19;;;:12;;;:19;;;;;;2227:275;;-1:-1:-1;2263:23:88;;;;;;;;:11;:23;;;;;;;;;;;;;2425:18;;2403:19;;;:12;;;:19;;;;;;:40;;;;2451:11;;2227:275;-1:-1:-1;2490:5:88;2483:12;;14:127:90;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:252;213:4;207:11;;;245:17;;-1:-1:-1;;;;;277:34:90;;313:22;;;274:62;271:88;;;339:18;;:::i;:::-;375:4;368:24;146:252;:::o;403:177::-;482:13;;-1:-1:-1;;;;;524:31:90;;514:42;;504:70;;570:1;567;560:12;504:70;403:177;;;:::o;585:923::-;650:5;703:3;696:4;688:6;684:17;680:27;670:55;;721:1;718;711:12;670:55;744:13;;776:4;-1:-1:-1;;;;;829:10:90;;;826:36;;;842:18;;:::i;:::-;888:2;885:1;881:10;920:2;914:9;983:2;979:7;974:2;970;966:11;962:25;954:6;950:38;1038:6;1026:10;1023:22;1018:2;1006:10;1003:18;1000:46;997:72;;;1049:18;;:::i;:::-;1085:2;1078:22;1135:18;;;1211:15;;;1207:24;;;1169:15;;;;-1:-1:-1;1243:15:90;;;1240:35;;;1271:1;1268;1261:12;1240:35;1307:2;1299:6;1295:15;1284:26;;1319:159;1335:6;1330:3;1327:15;1319:159;;;1401:34;1431:3;1401:34;:::i;:::-;1389:47;;1456:12;;;;1352;;;;1319:159;;;1496:6;585:923;-1:-1:-1;;;;;;;585:923:90:o;1513:1128::-;1707:6;1715;1723;1731;1775:9;1766:7;1762:23;1805:3;1801:2;1797:12;1794:32;;;1822:1;1819;1812:12;1794:32;1846:4;1842:2;1838:13;1835:33;;;1864:1;1861;1854:12;1835:33;;1890:17;;:::i;:::-;1937:9;1931:16;1992:7;1985:15;1978:23;1969:7;1966:36;1956:64;;2016:1;2013;2006:12;1956:64;2029:22;;2083:49;2128:2;2113:18;;2083:49;:::i;:::-;2078:2;2067:14;;2060:73;2201:4;2186:20;;2180:27;2071:5;;-1:-1:-1;;;;;;2256:14:90;;;2253:34;;;2283:1;2280;2273:12;2253:34;2306:72;2370:7;2361:6;2350:9;2346:22;2306:72;:::i;:::-;2296:82;;2424:2;2413:9;2409:18;2403:25;2387:41;;2453:2;2443:8;2440:16;2437:36;;;2469:1;2466;2459:12;2437:36;;2492:74;2558:7;2547:8;2536:9;2532:24;2492:74;:::i;:::-;2482:84;;;2585:50;2630:3;2619:9;2615:19;2585:50;:::i;:::-;2575:60;;1513:1128;;;;;;;:::o;2999:127::-;3060:10;3055:3;3051:20;3048:1;3041:31;3091:4;3088:1;3081:15;3115:4;3112:1;3105:15;3131:232;3170:3;3191:17;;;3188:140;;3250:10;3245:3;3241:20;3238:1;3231:31;3285:4;3282:1;3275:15;3313:4;3310:1;3303:15;3188:140;-1:-1:-1;3355:1:90;3344:13;;3131:232::o;4108:346::-;760:7621:6;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063817ef62e116100b2578063a39b06e311610081578063c3f909d411610066578063c3f909d4146102f1578063cc7ebf4914610350578063f2fde38b1461035857600080fd5b8063a39b06e314610265578063a5e1d61d146102de57600080fd5b8063817ef62e1461020f57806382184c7b1461021757806389f9a2c41461022a5780638da5cb5b1461023d57600080fd5b80633908c4d4116101095780634e10a5b3116100ee5780634e10a5b3146101d15780636b14daf8146101e457806379ba50971461020757600080fd5b80633908c4d4146101a957806347663acb146101be57600080fd5b806301a059581461013b5780630a8c9c2414610161578063181f5a771461018157806320229a8614610196575b600080fd5b61014361036b565b60405167ffffffffffffffff90911681526020015b60405180910390f35b61017461016f3660046111bb565b61037c565b60405161015891906111ee565b6101896104d8565b6040516101589190611248565b6101746101a43660046111bb565b6104f4565b6101bc6101b73660046112d8565b61065a565b005b6101bc6101cc366004611339565b610905565b6101bc6101df3660046113d2565b610966565b6101f76101f236600461147f565b610b2f565b6040519015158152602001610158565b6101bc610b59565b610174610c5b565b6101bc610225366004611339565b610c67565b6101bc610238366004611510565b610ccd565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610158565b6102d061027336600461156d565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b604051908152602001610158565b6101f76102ec366004611339565b610d88565b60408051808201825260008082526020918201528151808301835260075460ff8116151580835273ffffffffffffffffffffffffffffffffffffffff610100909204821692840192835284519081529151169181019190915201610158565b610143610da8565b6101bc610366366004611339565b610db4565b60006103776005610dc8565b905090565b60608167ffffffffffffffff168367ffffffffffffffff1611806103b357506103a56003610dc8565b8267ffffffffffffffff1610155b156103ea576040517f8129bbcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103f483836115c6565b6103ff9060016115e7565b67ffffffffffffffff1667ffffffffffffffff81111561042157610421611354565b60405190808252806020026020018201604052801561044a578160200160208202803683370190505b50905060005b61045a84846115c6565b67ffffffffffffffff1681116104d0576104896104818267ffffffffffffffff8716611608565b600390610dd2565b82828151811061049b5761049b61161b565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526104c98161164a565b9050610450565b505b92915050565b6040518060600160405280602c81526020016116e2602c913981565b60608167ffffffffffffffff168367ffffffffffffffff16118061052b575061051d6005610dc8565b8267ffffffffffffffff1610155b8061053d575061053b6005610dc8565b155b15610574576040517f8129bbcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057e83836115c6565b6105899060016115e7565b67ffffffffffffffff1667ffffffffffffffff8111156105ab576105ab611354565b6040519080825280602002602001820160405280156105d4578160200160208202803683370190505b50905060005b6105e484846115c6565b67ffffffffffffffff1681116104d05761061361060b8267ffffffffffffffff8716611608565b600590610dd2565b8282815181106106255761062561161b565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526106538161164a565b90506105da565b610665600585610dde565b1561069c576040517f62b7a34d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529188901b16603483015282516028818403018152604890920190925280519101206000906040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c810191909152605c01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201206007546000855291840180845281905260ff8616928401929092526060830187905260808301869052909250610100900473ffffffffffffffffffffffffffffffffffffffff169060019060a0016020604051602081039080840390855afa1580156107d0573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610827576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff861614158061086c57503373ffffffffffffffffffffffffffffffffffffffff87161480159061086c5750333b155b156108a3576040517f381cfcbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108ae600386610e0d565b156108fd5760405173ffffffffffffffffffffffffffffffffffffffff861681527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49060200160405180910390a15b505050505050565b61090d610e2f565b610918600582610eb2565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527f28bbd0761309a99e8fb5e5d02ada0b7b2db2e5357531ff5dbfc205c3f5b6592b906020015b60405180910390a150565b61096e610e2f565b60025473ffffffffffffffffffffffffffffffffffffffff166109bd576040517fb25f406700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff1660005b8251811015610b2a578173ffffffffffffffffffffffffffffffffffffffff16636b14daf8848381518110610a1057610a1061161b565b6020908102919091010151604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260006044820152606401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab59190611682565b15610b1a57610ae7838281518110610acf57610acf61161b565b60200260200101516005610dde90919063ffffffff16565b610b1a57610b18838281518110610b0057610b0061161b565b60200260200101516003610e0d90919063ffffffff16565b505b610b238161164a565b90506109d9565b505050565b60075460009060ff16610b4457506001610b52565b610b4f600385610dde565b90505b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610bdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60606103776003610ed4565b610c6f610e2f565b610c7a600382610eb2565b50610c86600582610e0d565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527f337cd0f3f594112b6d830afb510072d3b08556b446514f73b8109162fd1151e19060200161095b565b610cd5610e2f565b805160078054602080850180517fffffffffffffffffffffff0000000000000000000000000000000000000000009093169415157fffffffffffffffffffffff0000000000000000000000000000000000000000ff81169590951761010073ffffffffffffffffffffffffffffffffffffffff9485160217909355604080519485529251909116908301527f0d22b8a99f411b3dd338c961284f608489ca0dab9cdad17366a343c361bcf80a910161095b565b60075460009060ff16610d9d57506000919050565b6104d2600583610dde565b60006103776003610dc8565b610dbc610e2f565b610dc581610ee1565b50565b60006104d2825490565b6000610b528383610fd6565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610b52565b6000610b528373ffffffffffffffffffffffffffffffffffffffff8416611000565b60005473ffffffffffffffffffffffffffffffffffffffff163314610eb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610bd6565b565b6000610b528373ffffffffffffffffffffffffffffffffffffffff841661104f565b60606000610b5283611142565b3373ffffffffffffffffffffffffffffffffffffffff821603610f60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610bd6565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000826000018281548110610fed57610fed61161b565b9060005260206000200154905092915050565b6000818152600183016020526040812054611047575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104d2565b5060006104d2565b6000818152600183016020526040812054801561113857600061107360018361169f565b85549091506000906110879060019061169f565b90508181146110ec5760008660000182815481106110a7576110a761161b565b90600052602060002001549050808760000184815481106110ca576110ca61161b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806110fd576110fd6116b2565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104d2565b60009150506104d2565b60608160000180548060200260200160405190810160405280929190818152602001828054801561119257602002820191906000526020600020905b81548152602001906001019080831161117e575b50505050509050919050565b803567ffffffffffffffff811681146111b657600080fd5b919050565b600080604083850312156111ce57600080fd5b6111d78361119e565b91506111e56020840161119e565b90509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561123c57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161120a565b50909695505050505050565b600060208083528351808285015260005b8181101561127557858101830151858201604001528201611259565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111b657600080fd5b600080600080600060a086880312156112f057600080fd5b6112f9866112b4565b9450611307602087016112b4565b93506040860135925060608601359150608086013560ff8116811461132b57600080fd5b809150509295509295909350565b60006020828403121561134b57600080fd5b610b52826112b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113ca576113ca611354565b604052919050565b600060208083850312156113e557600080fd5b823567ffffffffffffffff808211156113fd57600080fd5b818501915085601f83011261141157600080fd5b81358181111561142357611423611354565b8060051b9150611434848301611383565b818152918301840191848101908884111561144e57600080fd5b938501935b8385101561147357611464856112b4565b82529385019390850190611453565b98975050505050505050565b60008060006040848603121561149457600080fd5b61149d846112b4565b9250602084013567ffffffffffffffff808211156114ba57600080fd5b818601915086601f8301126114ce57600080fd5b8135818111156114dd57600080fd5b8760208285010111156114ef57600080fd5b6020830194508093505050509250925092565b8015158114610dc557600080fd5b60006040828403121561152257600080fd5b6040516040810181811067ffffffffffffffff8211171561154557611545611354565b604052823561155381611502565b8152611561602084016112b4565b60208201529392505050565b6000806040838503121561158057600080fd5b611589836112b4565b91506111e5602084016112b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff8281168282160390808211156104d0576104d0611597565b67ffffffffffffffff8181168382160190808211156104d0576104d0611597565b808201808211156104d2576104d2611597565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361167b5761167b611597565b5060010190565b60006020828403121561169457600080fd5b8151610b5281611502565b818103818111156104d2576104d2611597565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe46756e6374696f6e73205465726d73206f66205365727669636520416c6c6f77204c6973742076312e312e31a164736f6c6343000813000a",
    "sourceMap": "760:7621:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6923:125;;;:::i;:::-;;;188:18:90;176:31;;;158:50;;146:2;131:18;6923:125:6;;;;;;;;5177:605;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;993:95::-;;;:::i;:::-;;;;;;;:::i;7095:663::-;;;;;;:::i;:::-;;:::i;3716:1070::-;;;;;;:::i;:::-;;:::i;:::-;;6733:143;;;;;;:::i;:::-;;:::i;7805:574::-;;;;;;:::i;:::-;;:::i;5822:201::-;;;;;;:::i;:::-;;:::i;:::-;;;5226:14:90;;5219:22;5201:41;;5189:2;5174:18;5822:201:6;5061:187:90;1026:316:37;;;:::i;4833:125:6:-;;;:::i;6513:173::-;;;;;;:::i;:::-;;:::i;3105:144::-;;;;;;:::i;:::-;;:::i;1382:81:37:-;1429:7;1451;1382:81;;1451:7;;;;6123:74:90;;6111:2;6096:18;1382:81:37;5977:226:90;3507:162:6;;;;;;:::i;:::-;3626:37;;10111:66:90;10206:2;10202:15;;;10198:24;;3626:37:6;;;10186::90;10257:15;;;10253:24;10239:12;;;10232:46;3594:7:6;;10294:12:90;;3626:37:6;;;;;;;;;;;;3616:48;;;;;;3609:55;;3507:162;;;;;;;;6619:25:90;;;6607:2;6592:18;3507:162:6;6473:177:90;6281:185:6;;;;;;:::i;:::-;;:::i;2808:108::-;-1:-1:-1;;;;;;;;;;;;;;;;;2896:15:6;;;;;;;2903:8;2896:15;;;;;;;;;;;;;;;;;;;;;;2808:108;;6895:48:90;;;6985:24;;6981:73;6959:20;;;6952:103;;;;6868:18;2808:108:6;6655:406:90;5005:125:6;;;:::i;847:98:37:-;;;;;;:::i;:::-;;:::i;6923:125:6:-;6989:6;7017:25;:16;:23;:25::i;:::-;7003:40;;6923:125;:::o;5177:605::-;5313:31;5380:19;5356:43;;:21;:43;;;:95;;;;5426:25;:16;:23;:25::i;:::-;5403:19;:48;;;;5356:95;5352:140;;;5468:17;;;;;;;;;;;;;;5352:140;5530:43;5552:21;5530:19;:43;:::i;:::-;5529:49;;5577:1;5529:49;:::i;:::-;5515:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5515:64:6;;5498:81;;5590:9;5585:165;5610:43;5632:21;5610:19;:43;:::i;:::-;5605:48;;:1;:48;5585:165;;5688:55;5716:25;5740:1;5716:25;;;;:::i;:::-;5688:16;;:19;:55::i;:::-;5668:14;5683:1;5668:17;;;;;;;;:::i;:::-;:75;;;;:17;;;;;;;;;;;:75;5655:3;;;:::i;:::-;;;5585:165;;;;5177:605;;;;;:::o;993:95::-;;;;;;;;;;;;;;;;;;;:::o;7095:663::-;7231:31;7305:19;7281:43;;:21;:43;;;:101;;;;7357:25;:16;:23;:25::i;:::-;7334:19;:48;;;;7281:101;:141;;;;7392:25;:16;:23;:25::i;:::-;:30;7281:141;7270:198;;;7444:17;;;;;;;;;;;;;;7270:198;7506:43;7528:21;7506:19;:43;:::i;:::-;7505:49;;7553:1;7505:49;:::i;:::-;7491:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7491:64:6;;7474:81;;7566:9;7561:165;7586:43;7608:21;7586:19;:43;:::i;:::-;7581:48;;:1;:48;7561:165;;7664:55;7692:25;7716:1;7692:25;;;;:::i;:::-;7664:16;;:19;:55::i;:::-;7644:14;7659:1;7644:17;;;;;;;;:::i;:::-;:75;;;;:17;;;;;;;;;;;:75;7631:3;;;:::i;:::-;;;7561:165;;3716:1070;3842:36;:16;3868:9;3842:25;:36::i;:::-;3838:84;;;3895:20;;;;;;;;;;;;;;3838:84;3626:37;;;10206:2:90;10202:15;;;10111:66;10198:24;;;3626:37:6;;;;10186::90;;;;10257:15;;;;10253:24;10239:12;;;10232:46;3626:37:6;;;;;;;;;10294:12:90;;;;3626:37:6;;;3616:48;;;;;4011:23;;4054:85;;8389:66:90;4054:85:6;;;8377:79:90;8472:12;;;8465:28;;;;8509:12;;4054:85:6;;;;;;;;;;;;;4037:108;;4054:85;4037:108;;;;4194:8;:24;;4155:35;;;;;;;;8759:25:90;;;8832:4;8820:17;;8800:18;;;8793:45;;;;8854:18;;;8847:34;;;8897:18;;;8890:34;;;4037:108:6;;-1:-1:-1;4194:24:6;;;;;;;;8731:19:90;;4155:35:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;4151:109;;4235:18;;;;;;;;;;;;;;4151:109;4541:10;:23;;;;;;:79;;-1:-1:-1;4569:10:6;:22;;;;;;;:50;;-1:-1:-1;4596:10:6;1395:19:85;:23;4569:50:6;4537:121;;;4637:14;;;;;;;;;;;;;;4537:121;4707:31;:16;4728:9;4707:20;:31::i;:::-;4703:79;;;4753:22;;6153:42:90;6141:55;;6123:74;;4753:22:6;;6111:2:90;6096:18;4753:22:6;;;;;;;4703:79;3832:954;3716:1070;;;;;:::o;6733:143::-;2075:20:37;:18;:20::i;:::-;6806:31:6::1;:16;6830:6:::0;6806:23:::1;:31::i;:::-;-1:-1:-1::0;6848:23:6::1;::::0;6153:42:90;6141:55;;6123:74;;6848:23:6::1;::::0;6111:2:90;6096:18;6848:23:6::1;;;;;;;;6733:143:::0;:::o;7805:574::-;2075:20:37;:18;:20::i;:::-;7923:21:6::1;::::0;:35:::1;:21;7919:86;;7975:23;;;;;;;;;;;;;;7919:86;8068:21;::::0;::::1;;8010:37;8096:279;8120:20;:27;8116:1;:31;8096:279;;;8166:19;:29;;;8196:20;8217:1;8196:23;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;8166:58:::1;::::0;;;::::1;::::0;;;;;;9176:42:90;9164:55;;;8166:58:6::1;::::0;::::1;9146:74:90::0;9236:18;;;9229:30;-1:-1:-1;9275:18:90;;;9268:29;9314:18;;8166:58:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8162:207;;;8241:50;8267:20;8288:1;8267:23;;;;;;;;:::i;:::-;;;;;;;8241:16;:25;;:50;;;;:::i;:::-;8236:125;;8305:45;8326:20;8347:1;8326:23;;;;;;;;:::i;:::-;;;;;;;8305:16;:20;;:45;;;;:::i;:::-;;8236:125;8149:3;::::0;::::1;:::i;:::-;;;8096:279;;;;7913:466;7805:574:::0;:::o;5822:201::-;5931:8;:16;5914:4;;5931:16;;5926:49;;-1:-1:-1;5964:4:6;5957:11;;5926:49;5987:31;:16;6013:4;5987:25;:31::i;:::-;5980:38;;5822:201;;;;;;:::o;1026:316:37:-;1150:14;;;;1136:10;:28;1128:63;;;;;;;9795:2:90;1128:63:37;;;9777:21:90;9834:2;9814:18;;;9807:30;9873:24;9853:18;;;9846:52;9915:18;;1128:63:37;;;;;;;;;1198:16;1217:7;;1240:10;1230:20;;;;;;;;-1:-1:-1;1256:27:37;;;;;;;1295:42;;1217:7;;;;;1240:10;;1217:7;;1295:42;;;1071:271;1026:316::o;4833:125:6:-;4897:16;4928:25;:16;:23;:25::i;6513:173::-;2075:20:37;:18;:20::i;:::-;6584:31:6::1;:16;6608:6:::0;6584:23:::1;:31::i;:::-;-1:-1:-1::0;6621:28:6::1;:16;6642:6:::0;6621:20:::1;:28::i;:::-;-1:-1:-1::0;6660:21:6::1;::::0;6153:42:90;6141:55;;6123:74;;6660:21:6::1;::::0;6111:2:90;6096:18;6660:21:6::1;5977:226:90::0;3105:144:6;2075:20:37;:18;:20::i;:::-;3195:17:6;;:8:::1;:17:::0;;::::1;::::0;;::::1;::::0;;;;;;;::::1;;::::0;;;;;;;::::1;;::::0;;::::1;;;::::0;;;3223:21:::1;::::0;;6895:48:90;;;6985:24;;6981:73;;;6959:20;;;6952:103;3223:21:6::1;::::0;6868:18:90;3223:21:6::1;6655:406:90::0;6281:185:6;6371:8;:16;6354:4;;6371:16;;6366:50;;-1:-1:-1;6404:5:6;;6281:185;-1:-1:-1;6281:185:6:o;6366:50::-;6428:33;:16;6454:6;6428:25;:33::i;5005:125::-;5071:6;5099:25;:16;:23;:25::i;847:98:37:-;2075:20;:18;:20::i;:::-;918:22:::1;937:2;918:18;:22::i;:::-;847:98:::0;:::o;8526:109:88:-;8589:7;8611:19;8619:3;4247:18;;4169:101;8955:150;9029:7;9075:22;9079:3;9091:5;9075:3;:22::i;8294:159::-;8423:23;;;8374:4;4067:19;;;:12;;;:19;;;;;;:24;;8393:55;3975:121;7773:144;7843:4;7862:50;7867:3;7887:23;;;7862:4;:50::i;1809:162:37:-;1932:7;;;;1918:10;:21;1910:56;;;;;;;10519:2:90;1910:56:37;;;10501:21:90;10558:2;10538:18;;;10531:30;10597:24;10577:18;;;10570:52;10639:18;;1910:56:37;10317:346:90;1910:56:37;1809:162::o;8071:150:88:-;8144:4;8163:53;8171:3;8191:23;;;8163:7;:53::i;9627:268::-;9690:16;9714:22;9739:19;9747:3;9739:7;:19::i;1536:239:37:-;1655:10;1649:16;;;;1641:52;;;;;;;10870:2:90;1641:52:37;;;10852:21:90;10909:2;10889:18;;;10882:30;10948:25;10928:18;;;10921:53;10991:18;;1641:52:37;10668:347:90;1641:52:37;1700:14;:19;;;;;;;;;;;;;;-1:-1:-1;1758:7:37;;1731:39;;1700:19;;1758:7;;1731:39;;-1:-1:-1;1731:39:37;1536:239;:::o;4590:112:88:-;4657:7;4679:3;:11;;4691:5;4679:18;;;;;;;;:::i;:::-;;;;;;;;;4672:25;;4590:112;;;;:::o;2152:354::-;2215:4;4067:19;;;:12;;;:19;;;;;;2227:275;;-1:-1:-1;2263:23:88;;;;;;;;:11;:23;;;;;;;;;;;;;2425:18;;2403:19;;;:12;;;:19;;;;;;:40;;;;2451:11;;2227:275;-1:-1:-1;2490:5:88;2483:12;;2660:1242;2726:4;2855:19;;;:12;;;:19;;;;;;2885:15;;2881:1017;;3224:21;3248:14;3261:1;3248:10;:14;:::i;:::-;3290:18;;3224:38;;-1:-1:-1;3270:17:88;;3290:22;;3311:1;;3290:22;:::i;:::-;3270:42;;3338:13;3325:9;:26;3321:352;;3363:17;3383:3;:11;;3395:9;3383:22;;;;;;;;:::i;:::-;;;;;;;;;3363:42;;3518:9;3489:3;:11;;3501:13;3489:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3585:23;;;:12;;;:23;;;;;:36;;;3321:352;3739:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3819:3;:12;;:19;3832:5;3819:19;;;;;;;;;;;3812:26;;;3854:4;3847:11;;;;;;;2881:1017;3886:5;3879:12;;;;;5224:103;5280:16;5311:3;:11;;5304:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5224:103;;;:::o;219:171:90:-;286:20;;346:18;335:30;;325:41;;315:69;;380:1;377;370:12;315:69;219:171;;;:::o;395:256::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:52;;;538:1;535;528:12;490:52;561:28;579:9;561:28;:::i;:::-;551:38;;608:37;641:2;630:9;626:18;608:37;:::i;:::-;598:47;;395:256;;;;;:::o;656:681::-;827:2;879:21;;;949:13;;852:18;;;971:22;;;798:4;;827:2;1050:15;;;;1024:2;1009:18;;;798:4;1093:218;1107:6;1104:1;1101:13;1093:218;;;1172:13;;1187:42;1168:62;1156:75;;1286:15;;;;1251:12;;;;1129:1;1122:9;1093:218;;;-1:-1:-1;1328:3:90;;656:681;-1:-1:-1;;;;;;656:681:90:o;1342:607::-;1454:4;1483:2;1512;1501:9;1494:21;1544:6;1538:13;1587:6;1582:2;1571:9;1567:18;1560:34;1612:1;1622:140;1636:6;1633:1;1630:13;1622:140;;;1731:14;;;1727:23;;1721:30;1697:17;;;1716:2;1693:26;1686:66;1651:10;;1622:140;;;1626:3;1811:1;1806:2;1797:6;1786:9;1782:22;1778:31;1771:42;1940:2;1870:66;1865:2;1857:6;1853:15;1849:88;1838:9;1834:104;1830:113;1822:121;;;;1342:607;;;;:::o;1954:196::-;2022:20;;2082:42;2071:54;;2061:65;;2051:93;;2140:1;2137;2130:12;2155:555;2248:6;2256;2264;2272;2280;2333:3;2321:9;2312:7;2308:23;2304:33;2301:53;;;2350:1;2347;2340:12;2301:53;2373:29;2392:9;2373:29;:::i;:::-;2363:39;;2421:38;2455:2;2444:9;2440:18;2421:38;:::i;:::-;2411:48;;2506:2;2495:9;2491:18;2478:32;2468:42;;2557:2;2546:9;2542:18;2529:32;2519:42;;2611:3;2600:9;2596:19;2583:33;2656:4;2649:5;2645:16;2638:5;2635:27;2625:55;;2676:1;2673;2666:12;2625:55;2699:5;2689:15;;;2155:555;;;;;;;;:::o;2715:186::-;2774:6;2827:2;2815:9;2806:7;2802:23;2798:32;2795:52;;;2843:1;2840;2833:12;2795:52;2866:29;2885:9;2866:29;:::i;2906:184::-;2958:77;2955:1;2948:88;3055:4;3052:1;3045:15;3079:4;3076:1;3069:15;3095:334;3166:2;3160:9;3222:2;3212:13;;3227:66;3208:86;3196:99;;3325:18;3310:34;;3346:22;;;3307:62;3304:88;;;3372:18;;:::i;:::-;3408:2;3401:22;3095:334;;-1:-1:-1;3095:334:90:o;3434:952::-;3518:6;3549:2;3592;3580:9;3571:7;3567:23;3563:32;3560:52;;;3608:1;3605;3598:12;3560:52;3648:9;3635:23;3677:18;3718:2;3710:6;3707:14;3704:34;;;3734:1;3731;3724:12;3704:34;3772:6;3761:9;3757:22;3747:32;;3817:7;3810:4;3806:2;3802:13;3798:27;3788:55;;3839:1;3836;3829:12;3788:55;3875:2;3862:16;3897:2;3893;3890:10;3887:36;;;3903:18;;:::i;:::-;3949:2;3946:1;3942:10;3932:20;;3972:28;3996:2;3992;3988:11;3972:28;:::i;:::-;4034:15;;;4104:11;;;4100:20;;;4065:12;;;;4132:19;;;4129:39;;;4164:1;4161;4154:12;4129:39;4188:11;;;;4208:148;4224:6;4219:3;4216:15;4208:148;;;4290:23;4309:3;4290:23;:::i;:::-;4278:36;;4241:12;;;;4334;;;;4208:148;;;4375:5;3434:952;-1:-1:-1;;;;;;;;3434:952:90:o;4391:665::-;4470:6;4478;4486;4539:2;4527:9;4518:7;4514:23;4510:32;4507:52;;;4555:1;4552;4545:12;4507:52;4578:29;4597:9;4578:29;:::i;:::-;4568:39;;4658:2;4647:9;4643:18;4630:32;4681:18;4722:2;4714:6;4711:14;4708:34;;;4738:1;4735;4728:12;4708:34;4776:6;4765:9;4761:22;4751:32;;4821:7;4814:4;4810:2;4806:13;4802:27;4792:55;;4843:1;4840;4833:12;4792:55;4883:2;4870:16;4909:2;4901:6;4898:14;4895:34;;;4925:1;4922;4915:12;4895:34;4970:7;4965:2;4956:6;4952:2;4948:15;4944:24;4941:37;4938:57;;;4991:1;4988;4981:12;4938:57;5022:2;5018;5014:11;5004:21;;5044:6;5034:16;;;;;4391:665;;;;;:::o;5253:118::-;5339:5;5332:13;5325:21;5318:5;5315:32;5305:60;;5361:1;5358;5351:12;5376:596;5482:6;5535:2;5523:9;5514:7;5510:23;5506:32;5503:52;;;5551:1;5548;5541:12;5503:52;5584:2;5578:9;5626:2;5618:6;5614:15;5695:6;5683:10;5680:22;5659:18;5647:10;5644:34;5641:62;5638:88;;;5706:18;;:::i;:::-;5742:2;5735:22;5779:23;;5811:28;5779:23;5811:28;:::i;:::-;5848:21;;5902:38;5936:2;5921:18;;5902:38;:::i;:::-;5897:2;5885:15;;5878:63;5889:6;5376:596;-1:-1:-1;;;5376:596:90:o;6208:260::-;6276:6;6284;6337:2;6325:9;6316:7;6312:23;6308:32;6305:52;;;6353:1;6350;6343:12;6305:52;6376:29;6395:9;6376:29;:::i;:::-;6366:39;;6424:38;6458:2;6447:9;6443:18;6424:38;:::i;7066:184::-;7118:77;7115:1;7108:88;7215:4;7212:1;7205:15;7239:4;7236:1;7229:15;7255:183;7323:18;7374:10;;;7362;;;7358:27;;7397:12;;;7394:38;;;7412:18;;:::i;7443:180::-;7510:18;7548:10;;;7560;;;7544:27;;7583:11;;;7580:37;;;7597:18;;:::i;7628:125::-;7693:9;;;7714:10;;;7711:36;;;7727:18;;:::i;7758:184::-;7810:77;7807:1;7800:88;7907:4;7904:1;7897:15;7931:4;7928:1;7921:15;7947:195;7986:3;8017:66;8010:5;8007:77;8004:103;;8087:18;;:::i;:::-;-1:-1:-1;8134:1:90;8123:13;;7947:195::o;9343:245::-;9410:6;9463:2;9451:9;9442:7;9438:23;9434:32;9431:52;;;9479:1;9476;9469:12;9431:52;9511:9;9505:16;9530:28;9552:5;9530:28;:::i;11020:128::-;11087:9;;;11108:11;;;11105:37;;;11122:18;;:::i;11153:184::-;11205:77;11202:1;11195:88;11302:4;11299:1;11292:15;11326:4;11323:1;11316:15",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "acceptOwnership()": "79ba5097",
    "acceptTermsOfService(address,address,bytes32,bytes32,uint8)": "3908c4d4",
    "blockSender(address)": "82184c7b",
    "getAllAllowedSenders()": "817ef62e",
    "getAllowedSendersCount()": "cc7ebf49",
    "getAllowedSendersInRange(uint64,uint64)": "0a8c9c24",
    "getBlockedSendersCount()": "01a05958",
    "getBlockedSendersInRange(uint64,uint64)": "20229a86",
    "getConfig()": "c3f909d4",
    "getMessage(address,address)": "a39b06e3",
    "hasAccess(address,bytes)": "6b14daf8",
    "isBlockedSender(address)": "a5e1d61d",
    "migratePreviouslyAllowedSenders(address[])": "4e10a5b3",
    "owner()": "8da5cb5b",
    "transferOwnership(address)": "f2fde38b",
    "typeAndVersion()": "181f5a77",
    "unblockSender(address)": "47663acb",
    "updateConfig((bool,address))": "89f9a2c4"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"signerPublicKey\",\"type\":\"address\"}],\"internalType\":\"struct TermsOfServiceAllowListConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"initialAllowedSenders\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"initialBlockedSenders\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"previousToSContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidCalldata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUsage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoPreviousToSContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RecipientIsBlocked\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"AddedAccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"BlockedAccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"signerPublicKey\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct TermsOfServiceAllowListConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"UnblockedAccess\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"acceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"}],\"name\":\"acceptTermsOfService\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"blockSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAllowedSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowedSendersCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"allowedSenderIdxStart\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"allowedSenderIdxEnd\",\"type\":\"uint64\"}],\"name\":\"getAllowedSendersInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"allowedSenders\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockedSendersCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockedSenderIdxStart\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"blockedSenderIdxEnd\",\"type\":\"uint64\"}],\"name\":\"getBlockedSendersInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"blockedSenders\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"signerPublicKey\",\"type\":\"address\"}],\"internalType\":\"struct TermsOfServiceAllowListConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"acceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"getMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"hasAccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"isBlockedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"previousSendersToAdd\",\"type\":\"address[]\"}],\"name\":\"migratePreviouslyAllowedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"unblockSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"signerPublicKey\",\"type\":\"address\"}],\"internalType\":\"struct TermsOfServiceAllowListConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"updateConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptTermsOfService(address,address,bytes32,bytes32,uint8)\":{\"params\":{\"acceptor\":\"- The wallet address that has accepted the Terms of Service on the UI\",\"r\":\"- ECDSA signature r data produced by the Chainlink Functions Subscription UI\",\"recipient\":\"- The recipient address that the acceptor is taking responsibility for\",\"s\":\"- ECDSA signature s produced by the Chainlink Functions Subscription UI\",\"v\":\"- ECDSA signature v produced by the Chainlink Functions Subscription UI\"}},\"blockSender(address)\":{\"params\":{\"sender\":\"- Address of the sender to block\"}},\"getAllAllowedSenders()\":{\"details\":\"WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that this function has an unbounded cost, and using it as part of a state-changing function may render the function uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\",\"returns\":{\"_0\":\"addresses - all allowed addresses\"}},\"getAllowedSendersCount()\":{\"returns\":{\"_0\":\"count - total number of allowed senders in the system\"}},\"getAllowedSendersInRange(uint64,uint64)\":{\"details\":\"WARNING: getAllowedSendersInRange uses EnumerableSet .length() and .at() methods to iterate over the list without the need for an extra mapping. These method can not guarantee the ordering when new elements are added. Evaluate if eventual consistency will satisfy your usecase before using it.\",\"params\":{\"allowedSenderIdxEnd\":\"- index of the allowed sender to end the range at\",\"allowedSenderIdxStart\":\"- index of the allowed sender to start the range at\"},\"returns\":{\"allowedSenders\":\"- allowed addresses in the range provided\"}},\"getBlockedSendersCount()\":{\"returns\":{\"_0\":\"count - total number of blocked senders in the system\"}},\"getBlockedSendersInRange(uint64,uint64)\":{\"details\":\"WARNING: getBlockedSendersInRange uses EnumerableSet .length() and .at() methods to iterate over the list without the need for an extra mapping. These method can not guarantee the ordering when new elements are added. Evaluate if eventual consistency will satisfy your usecase before using it.\",\"params\":{\"blockedSenderIdxEnd\":\"- index of the blocked sender to end the range at\",\"blockedSenderIdxStart\":\"- index of the blocked sender to start the range at\"},\"returns\":{\"blockedSenders\":\"- blocked addresses in the range provided\"}},\"getConfig()\":{\"returns\":{\"_0\":\"config\"}},\"getMessage(address,address)\":{\"params\":{\"acceptor\":\"- The wallet address that has accepted the Terms of Service on the UI\",\"recipient\":\"- The recipient address that the acceptor is taking responsibility for\"},\"returns\":{\"_0\":\"Hash of the message data\"}},\"isBlockedSender(address)\":{\"params\":{\"sender\":\"The transaction sender's address\"},\"returns\":{\"_0\":\"True or false\"}},\"migratePreviouslyAllowedSenders(address[])\":{\"params\":{\"previousSendersToAdd\":\"- List of addresses to migrate. These address must be allowed on the previous ToS contract and not blocked\"}},\"unblockSender(address)\":{\"params\":{\"sender\":\"- Address of the sender to unblock\"}},\"updateConfig((bool,address))\":{\"params\":{\"config\":\"- See the contents of the TermsOfServiceAllowListConfig struct in ITermsOfServiceAllowList.sol for more information\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Allows an ownership transfer to be completed by the recipient.\"},\"acceptTermsOfService(address,address,bytes32,bytes32,uint8)\":{\"notice\":\"Allows access to the sender based on acceptance of the Terms of Service\"},\"blockSender(address)\":{\"notice\":\"Removes a sender's access if already authorized, and disallows re-accepting the Terms of Service\"},\"getAllAllowedSenders()\":{\"notice\":\"Get a list of all allowed senders\"},\"getAllowedSendersCount()\":{\"notice\":\"Get details about the total number of allowed senders\"},\"getAllowedSendersInRange(uint64,uint64)\":{\"notice\":\"Retrieve a list of allowed senders using an inclusive range\"},\"getBlockedSendersCount()\":{\"notice\":\"Get details about the total number of blocked senders\"},\"getBlockedSendersInRange(uint64,uint64)\":{\"notice\":\"Retrieve a list of blocked senders using an inclusive range\"},\"getConfig()\":{\"notice\":\"Gets the contracts's configuration\"},\"getMessage(address,address)\":{\"notice\":\"Return the message data for the proof given to accept the Terms of Service\"},\"isBlockedSender(address)\":{\"notice\":\"Check if the address is blocked for usage\"},\"migratePreviouslyAllowedSenders(address[])\":{\"notice\":\"Enables migrating any previously allowed senders to the new contract\"},\"owner()\":{\"notice\":\"Get the current owner\"},\"transferOwnership(address)\":{\"notice\":\"Allows an owner to begin transferring ownership to a new address.\"},\"unblockSender(address)\":{\"notice\":\"Re-allows a previously blocked sender to accept the Terms of Service\"},\"updateConfig((bool,address))\":{\"notice\":\"Sets the contracts's configuration\"}},\"notice\":\"A contract to handle access control of subscription management dependent on signing a Terms of Service\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol\":\"TermsOfServiceAllowList\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@arbitrum/=node_modules/@arbitrum/\",\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@scroll-tech/=node_modules/@scroll-tech/\",\":forge-std/=src/v0.8/vendor/forge-std/src/\",\":hardhat/=node_modules/hardhat/\"]},\"sources\":{\"src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol\":{\"keccak256\":\"0x081518db3ff67293225e79eb837edc1c80854d5aaef47412bcf406a94a834fd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0938e801aa16ea8499c7ee44ca6469e57f71d0b4bc4bf2277ec11fd9031bb6d\",\"dweb:/ipfs/QmPMVmEiBK1nYYajioFRKSwy4cHzxcbJkLsMoHv7BGLjq6\"]},\"src/v0.8/functions/dev/v1_X/accessControl/interfaces/ITermsOfServiceAllowList.sol\":{\"keccak256\":\"0x81d0afdc4b63cce5532c0ea7579ad003bc684a43ecbf2f67b1f030c96f8bc6fb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9fe82c218bdb2447022b6948fb3d44b9255e684a503e009cdbd15522384c6e9\",\"dweb:/ipfs/QmSyAiejri8fVoinC9g518Wp42pnAU9bZWXfwK3CtfoKLA\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"keccak256\":\"0xdcb0e9135ddbe71ee27ba99fa06656960c66c964cf2ecb29696da1c1427d9861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f914a1b638300e82d8f5a020a4195235599afebab4ef1e10c6992f3c90e7df3e\",\"dweb:/ipfs/Qmf2MbuVB16qbCGii3U5cjcBvVjAHHYzKp9voJa2eDch9B\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"keccak256\":\"0x2422a055657a87e98be61f8f31abb1824ec50fd0f73949f4e3c6ac877efb6da8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fde3b9ac3a4c42ea43e2f92b037d32ab20e30818471c6e20d2590147a6c2958a\",\"dweb:/ipfs/QmQ2ohQP4GnhPUsiWCvCfb1dsoGYDdxSap3dxtnYTV4rmT\"]},\"src/v0.8/shared/interfaces/IAccessController.sol\":{\"keccak256\":\"0x2bdd0e819a586c8a0f326f227157197e3ded4f0e2c75117cc04fded3cb07ed81\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e27d99e49f62a445fc415eaa7f07b9eb475f1e3fe61e2f1187391e187d7fb8a\",\"dweb:/ipfs/QmRQdCivLYqH5dv5oox7FV6vK8zYN4hPHEYAjeAort48M2\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"keccak256\":\"0x885de72b7b4e4f1bf8ba817a3f2bcc37fd9022d342c4ce76782151c30122d767\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17c636625a5d29a140612db496d2cca9fb4b48c673adb0fd7b3957d287e75921\",\"dweb:/ipfs/QmNoBX8TY424bdQWyQC7y3kpKfgxyWxhLw7KEhhEEoBN9q\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"keccak256\":\"0xf5827cb463c01d055021684d04f9186391c2d9ac850e0d0819f76140e4fc84ed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a19c7bae07330e6d7904a0a21cf0ab0067ef096b66c1653a2e012801a931c5b9\",\"dweb:/ipfs/QmckpvSuLx8UL8zfVzAtN6ZRxyXHUSVqqz2JwYZ2jrK58h\"]},\"src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/utils/Address.sol\":{\"keccak256\":\"0x172a09a55d730f20a9bb309086a4ad06b17c612151f58bab2b44efe78d583d4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f812456ddd112f09606bfc5965c6e643558d740264273017ad556122502b4e2\",\"dweb:/ipfs/QmdWE4wncanz9Lhu5ESgSo14jAR74Ss5puCM5zUGonATLw\"]},\"src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9ec0d82ee53d4137be44f1f38f9a82d0d3a2027b3b8b226a5a90e4ee76e926d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f783b453420dee16bb4f0839e3d2485d753d2dcd317adbeecb7e510c39563f57\",\"dweb:/ipfs/QmUd4BeCaw6ZujaYvvMrCn2BNqmiP4bt4eA9rxiXY5od5E\"]}},\"version\":1}",
  "metadata": {
    "compiler": { "version": "0.8.19+commit.7dd6d404" },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "struct TermsOfServiceAllowListConfig",
              "name": "config",
              "type": "tuple",
              "components": [
                { "internalType": "bool", "name": "enabled", "type": "bool" },
                { "internalType": "address", "name": "signerPublicKey", "type": "address" }
              ]
            },
            { "internalType": "address[]", "name": "initialAllowedSenders", "type": "address[]" },
            { "internalType": "address[]", "name": "initialBlockedSenders", "type": "address[]" },
            { "internalType": "address", "name": "previousToSContract", "type": "address" }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        { "inputs": [], "type": "error", "name": "InvalidCalldata" },
        { "inputs": [], "type": "error", "name": "InvalidSignature" },
        { "inputs": [], "type": "error", "name": "InvalidUsage" },
        { "inputs": [], "type": "error", "name": "NoPreviousToSContract" },
        { "inputs": [], "type": "error", "name": "RecipientIsBlocked" },
        {
          "inputs": [{ "internalType": "address", "name": "user", "type": "address", "indexed": false }],
          "type": "event",
          "name": "AddedAccess",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "address", "name": "user", "type": "address", "indexed": false }],
          "type": "event",
          "name": "BlockedAccess",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct TermsOfServiceAllowListConfig",
              "name": "config",
              "type": "tuple",
              "components": [
                { "internalType": "bool", "name": "enabled", "type": "bool" },
                { "internalType": "address", "name": "signerPublicKey", "type": "address" }
              ],
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ConfigUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "address", "name": "from", "type": "address", "indexed": true },
            { "internalType": "address", "name": "to", "type": "address", "indexed": true }
          ],
          "type": "event",
          "name": "OwnershipTransferRequested",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "address", "name": "from", "type": "address", "indexed": true },
            { "internalType": "address", "name": "to", "type": "address", "indexed": true }
          ],
          "type": "event",
          "name": "OwnershipTransferred",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "address", "name": "user", "type": "address", "indexed": false }],
          "type": "event",
          "name": "UnblockedAccess",
          "anonymous": false
        },
        { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "acceptOwnership" },
        {
          "inputs": [
            { "internalType": "address", "name": "acceptor", "type": "address" },
            { "internalType": "address", "name": "recipient", "type": "address" },
            { "internalType": "bytes32", "name": "r", "type": "bytes32" },
            { "internalType": "bytes32", "name": "s", "type": "bytes32" },
            { "internalType": "uint8", "name": "v", "type": "uint8" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "acceptTermsOfService"
        },
        {
          "inputs": [{ "internalType": "address", "name": "sender", "type": "address" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "blockSender"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getAllAllowedSenders",
          "outputs": [{ "internalType": "address[]", "name": "", "type": "address[]" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getAllowedSendersCount",
          "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }]
        },
        {
          "inputs": [
            { "internalType": "uint64", "name": "allowedSenderIdxStart", "type": "uint64" },
            { "internalType": "uint64", "name": "allowedSenderIdxEnd", "type": "uint64" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getAllowedSendersInRange",
          "outputs": [{ "internalType": "address[]", "name": "allowedSenders", "type": "address[]" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getBlockedSendersCount",
          "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }]
        },
        {
          "inputs": [
            { "internalType": "uint64", "name": "blockedSenderIdxStart", "type": "uint64" },
            { "internalType": "uint64", "name": "blockedSenderIdxEnd", "type": "uint64" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getBlockedSendersInRange",
          "outputs": [{ "internalType": "address[]", "name": "blockedSenders", "type": "address[]" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getConfig",
          "outputs": [
            {
              "internalType": "struct TermsOfServiceAllowListConfig",
              "name": "",
              "type": "tuple",
              "components": [
                { "internalType": "bool", "name": "enabled", "type": "bool" },
                { "internalType": "address", "name": "signerPublicKey", "type": "address" }
              ]
            }
          ]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "acceptor", "type": "address" },
            { "internalType": "address", "name": "recipient", "type": "address" }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "getMessage",
          "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "user", "type": "address" },
            { "internalType": "bytes", "name": "", "type": "bytes" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "hasAccess",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [{ "internalType": "address", "name": "sender", "type": "address" }],
          "stateMutability": "view",
          "type": "function",
          "name": "isBlockedSender",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [{ "internalType": "address[]", "name": "previousSendersToAdd", "type": "address[]" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "migratePreviouslyAllowedSenders"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [{ "internalType": "address", "name": "", "type": "address" }]
        },
        {
          "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferOwnership"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "typeAndVersion",
          "outputs": [{ "internalType": "string", "name": "", "type": "string" }]
        },
        {
          "inputs": [{ "internalType": "address", "name": "sender", "type": "address" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "unblockSender"
        },
        {
          "inputs": [
            {
              "internalType": "struct TermsOfServiceAllowListConfig",
              "name": "config",
              "type": "tuple",
              "components": [
                { "internalType": "bool", "name": "enabled", "type": "bool" },
                { "internalType": "address", "name": "signerPublicKey", "type": "address" }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "updateConfig"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "acceptTermsOfService(address,address,bytes32,bytes32,uint8)": {
            "params": {
              "acceptor": "- The wallet address that has accepted the Terms of Service on the UI",
              "r": "- ECDSA signature r data produced by the Chainlink Functions Subscription UI",
              "recipient": "- The recipient address that the acceptor is taking responsibility for",
              "s": "- ECDSA signature s produced by the Chainlink Functions Subscription UI",
              "v": "- ECDSA signature v produced by the Chainlink Functions Subscription UI"
            }
          },
          "blockSender(address)": { "params": { "sender": "- Address of the sender to block" } },
          "getAllAllowedSenders()": {
            "details": "WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that this function has an unbounded cost, and using it as part of a state-changing function may render the function uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.",
            "returns": { "_0": "addresses - all allowed addresses" }
          },
          "getAllowedSendersCount()": { "returns": { "_0": "count - total number of allowed senders in the system" } },
          "getAllowedSendersInRange(uint64,uint64)": {
            "details": "WARNING: getAllowedSendersInRange uses EnumerableSet .length() and .at() methods to iterate over the list without the need for an extra mapping. These method can not guarantee the ordering when new elements are added. Evaluate if eventual consistency will satisfy your usecase before using it.",
            "params": {
              "allowedSenderIdxEnd": "- index of the allowed sender to end the range at",
              "allowedSenderIdxStart": "- index of the allowed sender to start the range at"
            },
            "returns": { "allowedSenders": "- allowed addresses in the range provided" }
          },
          "getBlockedSendersCount()": { "returns": { "_0": "count - total number of blocked senders in the system" } },
          "getBlockedSendersInRange(uint64,uint64)": {
            "details": "WARNING: getBlockedSendersInRange uses EnumerableSet .length() and .at() methods to iterate over the list without the need for an extra mapping. These method can not guarantee the ordering when new elements are added. Evaluate if eventual consistency will satisfy your usecase before using it.",
            "params": {
              "blockedSenderIdxEnd": "- index of the blocked sender to end the range at",
              "blockedSenderIdxStart": "- index of the blocked sender to start the range at"
            },
            "returns": { "blockedSenders": "- blocked addresses in the range provided" }
          },
          "getConfig()": { "returns": { "_0": "config" } },
          "getMessage(address,address)": {
            "params": {
              "acceptor": "- The wallet address that has accepted the Terms of Service on the UI",
              "recipient": "- The recipient address that the acceptor is taking responsibility for"
            },
            "returns": { "_0": "Hash of the message data" }
          },
          "isBlockedSender(address)": {
            "params": { "sender": "The transaction sender's address" },
            "returns": { "_0": "True or false" }
          },
          "migratePreviouslyAllowedSenders(address[])": {
            "params": {
              "previousSendersToAdd": "- List of addresses to migrate. These address must be allowed on the previous ToS contract and not blocked"
            }
          },
          "unblockSender(address)": { "params": { "sender": "- Address of the sender to unblock" } },
          "updateConfig((bool,address))": {
            "params": {
              "config": "- See the contents of the TermsOfServiceAllowListConfig struct in ITermsOfServiceAllowList.sol for more information"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "acceptOwnership()": { "notice": "Allows an ownership transfer to be completed by the recipient." },
          "acceptTermsOfService(address,address,bytes32,bytes32,uint8)": {
            "notice": "Allows access to the sender based on acceptance of the Terms of Service"
          },
          "blockSender(address)": {
            "notice": "Removes a sender's access if already authorized, and disallows re-accepting the Terms of Service"
          },
          "getAllAllowedSenders()": { "notice": "Get a list of all allowed senders" },
          "getAllowedSendersCount()": { "notice": "Get details about the total number of allowed senders" },
          "getAllowedSendersInRange(uint64,uint64)": {
            "notice": "Retrieve a list of allowed senders using an inclusive range"
          },
          "getBlockedSendersCount()": { "notice": "Get details about the total number of blocked senders" },
          "getBlockedSendersInRange(uint64,uint64)": {
            "notice": "Retrieve a list of blocked senders using an inclusive range"
          },
          "getConfig()": { "notice": "Gets the contracts's configuration" },
          "getMessage(address,address)": {
            "notice": "Return the message data for the proof given to accept the Terms of Service"
          },
          "isBlockedSender(address)": { "notice": "Check if the address is blocked for usage" },
          "migratePreviouslyAllowedSenders(address[])": {
            "notice": "Enables migrating any previously allowed senders to the new contract"
          },
          "owner()": { "notice": "Get the current owner" },
          "transferOwnership(address)": {
            "notice": "Allows an owner to begin transferring ownership to a new address."
          },
          "unblockSender(address)": {
            "notice": "Re-allows a previously blocked sender to accept the Terms of Service"
          },
          "updateConfig((bool,address))": { "notice": "Sets the contracts's configuration" }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@arbitrum/=node_modules/@arbitrum/",
        "@eth-optimism/=node_modules/@eth-optimism/",
        "@openzeppelin/=node_modules/@openzeppelin/",
        "@scroll-tech/=node_modules/@scroll-tech/",
        "forge-std/=src/v0.8/vendor/forge-std/src/",
        "hardhat/=node_modules/hardhat/"
      ],
      "optimizer": { "enabled": true, "runs": 1000000 },
      "metadata": { "bytecodeHash": "none" },
      "compilationTarget": {
        "src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol": "TermsOfServiceAllowList"
      },
      "evmVersion": "paris",
      "libraries": {}
    },
    "sources": {
      "src/v0.8/functions/dev/v1_X/accessControl/TermsOfServiceAllowList.sol": {
        "keccak256": "0x081518db3ff67293225e79eb837edc1c80854d5aaef47412bcf406a94a834fd7",
        "urls": [
          "bzz-raw://d0938e801aa16ea8499c7ee44ca6469e57f71d0b4bc4bf2277ec11fd9031bb6d",
          "dweb:/ipfs/QmPMVmEiBK1nYYajioFRKSwy4cHzxcbJkLsMoHv7BGLjq6"
        ],
        "license": "MIT"
      },
      "src/v0.8/functions/dev/v1_X/accessControl/interfaces/ITermsOfServiceAllowList.sol": {
        "keccak256": "0x81d0afdc4b63cce5532c0ea7579ad003bc684a43ecbf2f67b1f030c96f8bc6fb",
        "urls": [
          "bzz-raw://e9fe82c218bdb2447022b6948fb3d44b9255e684a503e009cdbd15522384c6e9",
          "dweb:/ipfs/QmSyAiejri8fVoinC9g518Wp42pnAU9bZWXfwK3CtfoKLA"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/access/ConfirmedOwner.sol": {
        "keccak256": "0xdcb0e9135ddbe71ee27ba99fa06656960c66c964cf2ecb29696da1c1427d9861",
        "urls": [
          "bzz-raw://f914a1b638300e82d8f5a020a4195235599afebab4ef1e10c6992f3c90e7df3e",
          "dweb:/ipfs/Qmf2MbuVB16qbCGii3U5cjcBvVjAHHYzKp9voJa2eDch9B"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol": {
        "keccak256": "0x2422a055657a87e98be61f8f31abb1824ec50fd0f73949f4e3c6ac877efb6da8",
        "urls": [
          "bzz-raw://fde3b9ac3a4c42ea43e2f92b037d32ab20e30818471c6e20d2590147a6c2958a",
          "dweb:/ipfs/QmQ2ohQP4GnhPUsiWCvCfb1dsoGYDdxSap3dxtnYTV4rmT"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/interfaces/IAccessController.sol": {
        "keccak256": "0x2bdd0e819a586c8a0f326f227157197e3ded4f0e2c75117cc04fded3cb07ed81",
        "urls": [
          "bzz-raw://0e27d99e49f62a445fc415eaa7f07b9eb475f1e3fe61e2f1187391e187d7fb8a",
          "dweb:/ipfs/QmRQdCivLYqH5dv5oox7FV6vK8zYN4hPHEYAjeAort48M2"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/interfaces/IOwnable.sol": {
        "keccak256": "0x885de72b7b4e4f1bf8ba817a3f2bcc37fd9022d342c4ce76782151c30122d767",
        "urls": [
          "bzz-raw://17c636625a5d29a140612db496d2cca9fb4b48c673adb0fd7b3957d287e75921",
          "dweb:/ipfs/QmNoBX8TY424bdQWyQC7y3kpKfgxyWxhLw7KEhhEEoBN9q"
        ],
        "license": "MIT"
      },
      "src/v0.8/shared/interfaces/ITypeAndVersion.sol": {
        "keccak256": "0xf5827cb463c01d055021684d04f9186391c2d9ac850e0d0819f76140e4fc84ed",
        "urls": [
          "bzz-raw://a19c7bae07330e6d7904a0a21cf0ab0067ef096b66c1653a2e012801a931c5b9",
          "dweb:/ipfs/QmckpvSuLx8UL8zfVzAtN6ZRxyXHUSVqqz2JwYZ2jrK58h"
        ],
        "license": "MIT"
      },
      "src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/utils/Address.sol": {
        "keccak256": "0x172a09a55d730f20a9bb309086a4ad06b17c612151f58bab2b44efe78d583d4e",
        "urls": [
          "bzz-raw://1f812456ddd112f09606bfc5965c6e643558d740264273017ad556122502b4e2",
          "dweb:/ipfs/QmdWE4wncanz9Lhu5ESgSo14jAR74Ss5puCM5zUGonATLw"
        ],
        "license": "MIT"
      },
      "src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/utils/structs/EnumerableSet.sol": {
        "keccak256": "0x9ec0d82ee53d4137be44f1f38f9a82d0d3a2027b3b8b226a5a90e4ee76e926d6",
        "urls": [
          "bzz-raw://f783b453420dee16bb4f0839e3d2485d753d2dcd317adbeecb7e510c39563f57",
          "dweb:/ipfs/QmUd4BeCaw6ZujaYvvMrCn2BNqmiP4bt4eA9rxiXY5od5E"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "id": 6
}
