{
  "_format": "hh-sol-artifact-1",
  "contractName": "AddressArrayUtilsMock",
  "sourceName": "contracts/mocks/AddressArrayUtilsMock.sol",
  "abi": [
    {
      "inputs": [],
      "name": "getStorageArray",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        }
      ],
      "name": "setStorageArray",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "storageArray",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "a",
          "type": "address"
        }
      ],
      "name": "testContains",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        }
      ],
      "name": "testHasDuplicate",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "a",
          "type": "address"
        }
      ],
      "name": "testIndexOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "testPop",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "a",
          "type": "address"
        }
      ],
      "name": "testRemove",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "a",
          "type": "address"
        }
      ],
      "name": "testRemoveStorage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "a",
          "type": "address[]"
        }
      ],
      "name": "testValidatePairsWithArrayAddress",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "a",
          "type": "bool[]"
        }
      ],
      "name": "testValidatePairsWithArrayBool",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        },
        {
          "internalType": "bytes[]",
          "name": "a",
          "type": "bytes[]"
        }
      ],
      "name": "testValidatePairsWithArrayBytes",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        },
        {
          "internalType": "string[]",
          "name": "a",
          "type": "string[]"
        }
      ],
      "name": "testValidatePairsWithArrayString",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "A",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "a",
          "type": "uint256[]"
        }
      ],
      "name": "testValidatePairsWithArrayUint",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50610fa0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806355f411cc1161008c57806382078dfd1161006657806382078dfd146101d857806383e3e833146101eb578063e1415524146101f9578063f58a42cf1461021a576100ea565b806355f411cc146101a95780635767d975146101bc5780638207153b146101ca576100ea565b80631bdca2ea116100c85780631bdca2ea1461014d57806325cc66f51461016057806336acdf1c1461017557806341414def14610196576100ea565b80630e031ab1146100ef578063115cde9314610118578063192813a914610138575b600080fd5b6101026100fd366004610d35565b610228565b60405161010f9190610d90565b60405180910390f35b61012b61012636600461094f565b61024f565b60405161010f9190610de1565b61014b6101463660046109d7565b610262565b005b61012b61015b36600461098a565b610276565b610168610291565b60405161010f9190610da4565b61018861018336600461098a565b6102f4565b60405161010f929190610f13565b6101686101a436600461098a565b610313565b61014b6101b736600461094f565b610325565b61014b610146366004610af9565b61014b610146366004610ba9565b61014b6101e6366004610934565b610338565b61014b610146366004610a38565b61020c610207366004610cf2565b61034c565b60405161010f929190610db7565b61014b610146366004610c49565b6000818154811061023557fe5b6000918252602090912001546001600160a01b0316905081565b600061025a82610360565b90505b919050565b610272828263ffffffff61041816565b5050565b6000610288838363ffffffff61044216565b90505b92915050565b606060008054806020026020016040519081016040528092919081815260200182805480156102e957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102cb575b505050505090505b90565b600080610307848463ffffffff61045816565b915091505b9250929050565b6060610288838363ffffffff6104bb16565b80516102729060009060208401906107a5565b61034960008263ffffffff61050316565b50565b60606000610307848463ffffffff61062f16565b60008082511161038b5760405162461bcd60e51b815260040161038290610eef565b60405180910390fd5b60005b600183510381101561040f5760008382815181106103a857fe5b6020026020010151905060008260010190505b8451811015610405578481815181106103d057fe5b60200260200101516001600160a01b0316826001600160a01b031614156103fd576001935050505061025d565b6001016103bb565b505060010161038e565b50600092915050565b80518251146104395760405162461bcd60e51b815260040161038290610e52565b6102728261075e565b60008061044f8484610458565b95945050505050565b81516000908190815b818110156104ab57846001600160a01b031686828151811061047f57fe5b60200260200101516001600160a01b031614156104a35792506001915061030c9050565b600101610461565b5060001995600095509350505050565b60606000806104ca8585610458565b91509150806104eb5760405162461bcd60e51b815260040161038290610dec565b60606104f7868461062f565b50935061028b92505050565b6000806105698480548060200260200160405190810160405280929190818152602001828054801561055e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610540575b505050505084610458565b915091508061058a5760405162461bcd60e51b815260040161038290610dec565b8354600019018281146105fc578481815481106105a357fe5b9060005260206000200160009054906101000a90046001600160a01b03168584815481106105cd57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061060657fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b81516060906000908084106106565760405162461bcd60e51b815260040161038290610e1b565b60606001820367ffffffffffffffff8111801561067257600080fd5b5060405190808252806020026020018201604052801561069c578160200160208202803683370190505b50905060005b858110156106ea578681815181106106b657fe5b60200260200101518282815181106106ca57fe5b6001600160a01b03909216602092830291909101909101526001016106a2565b50600185015b8281101561073b5786818151811061070457fe5b602002602001015182600183038151811061071b57fe5b6001600160a01b03909216602092830291909101909101526001016106f0565b508086868151811061074957fe5b60200260200101519350935050509250929050565b600081511161077f5760405162461bcd60e51b815260040161038290610eb8565b61078881610360565b156103495760405162461bcd60e51b815260040161038290610e81565b8280548282559060005260206000209081019282156107fa579160200282015b828111156107fa57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906107c5565b5061080692915061080a565b5090565b6102f191905b808211156108065780546001600160a01b0319168155600101610810565b80356001600160a01b038116811461028b57600080fd5b600082601f830112610855578081fd5b813561086861086382610f4a565b610f23565b81815291506020808301908481018184028601820187101561088957600080fd5b60005b848110156108b05761089e888361082e565b8452928201929082019060010161088c565b505050505092915050565b8035801515811461028b57600080fd5b600082601f8301126108db578081fd5b813567ffffffffffffffff8111156108f1578182fd5b610904601f8201601f1916602001610f23565b915080825283602082850101111561091b57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610945578081fd5b610288838361082e565b600060208284031215610960578081fd5b813567ffffffffffffffff811115610976578182fd5b61098284828501610845565b949350505050565b6000806040838503121561099c578081fd5b823567ffffffffffffffff8111156109b2578182fd5b6109be85828601610845565b9250506109ce846020850161082e565b90509250929050565b600080604083850312156109e9578182fd5b823567ffffffffffffffff80821115610a00578384fd5b610a0c86838701610845565b93506020850135915080821115610a21578283fd5b50610a2e85828601610845565b9150509250929050565b60008060408385031215610a4a578182fd5b823567ffffffffffffffff80821115610a61578384fd5b610a6d86838701610845565b9350602091508185013581811115610a83578384fd5b85019050601f81018613610a95578283fd5b8035610aa361086382610f4a565b81815283810190838501858402850186018a1015610abf578687fd5b8694505b83851015610ae957610ad58a826108bb565b835260019490940193918501918501610ac3565b5080955050505050509250929050565b60008060408385031215610b0b578182fd5b823567ffffffffffffffff80821115610b22578384fd5b610b2e86838701610845565b9350602091508185013581811115610b44578384fd5b85019050601f81018613610b56578283fd5b8035610b6461086382610f4a565b81815283810190838501865b84811015610b9957610b878b8884358901016108cb565b84529286019290860190600101610b70565b5096999098509650505050505050565b60008060408385031215610bbb578182fd5b823567ffffffffffffffff80821115610bd2578384fd5b610bde86838701610845565b9350602091508185013581811115610bf4578384fd5b85019050601f81018613610c06578283fd5b8035610c1461086382610f4a565b81815283810190838501865b84811015610b9957610c378b8884358901016108cb565b84529286019290860190600101610c20565b60008060408385031215610c5b578182fd5b823567ffffffffffffffff80821115610c72578384fd5b610c7e86838701610845565b9350602091508185013581811115610c94578384fd5b85019050601f81018613610ca6578283fd5b8035610cb461086382610f4a565b81815283810190838501858402850186018a1015610cd0578687fd5b8694505b83851015610ae9578035835260019490940193918501918501610cd4565b60008060408385031215610d04578182fd5b823567ffffffffffffffff811115610d1a578283fd5b610d2685828601610845565b95602094909401359450505050565b600060208284031215610d46578081fd5b5035919050565b6000815180845260208085019450808401835b83811015610d855781516001600160a01b031687529582019590820190600101610d60565b509495945050505050565b6001600160a01b0391909116815260200190565b6000602082526102886020830184610d4d565b600060408252610dca6040830185610d4d565b905060018060a01b03831660208301529392505050565b901515815260200190565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b60208082526018908201527f496e646578206d757374206265203c2041206c656e6774680000000000000000604082015260600190565b602080825260159082015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604082015260600190565b6020808252601a908201527f43616e6e6f74206475706c696361746520616464726573736573000000000000604082015260600190565b60208082526018908201527f4172726179206c656e677468206d757374206265203e20300000000000000000604082015260600190565b6020808252600a90820152694120697320656d70747960b01b604082015260600190565b9182521515602082015260400190565b60405181810167ffffffffffffffff81118282101715610f4257600080fd5b604052919050565b600067ffffffffffffffff821115610f60578081fd5b506020908102019056fea26469706673582212207ec432307d5ecddab10f031b075570b8112f2d0a2576afcc211ed725578c328564736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806355f411cc1161008c57806382078dfd1161006657806382078dfd146101d857806383e3e833146101eb578063e1415524146101f9578063f58a42cf1461021a576100ea565b806355f411cc146101a95780635767d975146101bc5780638207153b146101ca576100ea565b80631bdca2ea116100c85780631bdca2ea1461014d57806325cc66f51461016057806336acdf1c1461017557806341414def14610196576100ea565b80630e031ab1146100ef578063115cde9314610118578063192813a914610138575b600080fd5b6101026100fd366004610d35565b610228565b60405161010f9190610d90565b60405180910390f35b61012b61012636600461094f565b61024f565b60405161010f9190610de1565b61014b6101463660046109d7565b610262565b005b61012b61015b36600461098a565b610276565b610168610291565b60405161010f9190610da4565b61018861018336600461098a565b6102f4565b60405161010f929190610f13565b6101686101a436600461098a565b610313565b61014b6101b736600461094f565b610325565b61014b610146366004610af9565b61014b610146366004610ba9565b61014b6101e6366004610934565b610338565b61014b610146366004610a38565b61020c610207366004610cf2565b61034c565b60405161010f929190610db7565b61014b610146366004610c49565b6000818154811061023557fe5b6000918252602090912001546001600160a01b0316905081565b600061025a82610360565b90505b919050565b610272828263ffffffff61041816565b5050565b6000610288838363ffffffff61044216565b90505b92915050565b606060008054806020026020016040519081016040528092919081815260200182805480156102e957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102cb575b505050505090505b90565b600080610307848463ffffffff61045816565b915091505b9250929050565b6060610288838363ffffffff6104bb16565b80516102729060009060208401906107a5565b61034960008263ffffffff61050316565b50565b60606000610307848463ffffffff61062f16565b60008082511161038b5760405162461bcd60e51b815260040161038290610eef565b60405180910390fd5b60005b600183510381101561040f5760008382815181106103a857fe5b6020026020010151905060008260010190505b8451811015610405578481815181106103d057fe5b60200260200101516001600160a01b0316826001600160a01b031614156103fd576001935050505061025d565b6001016103bb565b505060010161038e565b50600092915050565b80518251146104395760405162461bcd60e51b815260040161038290610e52565b6102728261075e565b60008061044f8484610458565b95945050505050565b81516000908190815b818110156104ab57846001600160a01b031686828151811061047f57fe5b60200260200101516001600160a01b031614156104a35792506001915061030c9050565b600101610461565b5060001995600095509350505050565b60606000806104ca8585610458565b91509150806104eb5760405162461bcd60e51b815260040161038290610dec565b60606104f7868461062f565b50935061028b92505050565b6000806105698480548060200260200160405190810160405280929190818152602001828054801561055e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610540575b505050505084610458565b915091508061058a5760405162461bcd60e51b815260040161038290610dec565b8354600019018281146105fc578481815481106105a357fe5b9060005260206000200160009054906101000a90046001600160a01b03168584815481106105cd57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061060657fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b81516060906000908084106106565760405162461bcd60e51b815260040161038290610e1b565b60606001820367ffffffffffffffff8111801561067257600080fd5b5060405190808252806020026020018201604052801561069c578160200160208202803683370190505b50905060005b858110156106ea578681815181106106b657fe5b60200260200101518282815181106106ca57fe5b6001600160a01b03909216602092830291909101909101526001016106a2565b50600185015b8281101561073b5786818151811061070457fe5b602002602001015182600183038151811061071b57fe5b6001600160a01b03909216602092830291909101909101526001016106f0565b508086868151811061074957fe5b60200260200101519350935050509250929050565b600081511161077f5760405162461bcd60e51b815260040161038290610eb8565b61078881610360565b156103495760405162461bcd60e51b815260040161038290610e81565b8280548282559060005260206000209081019282156107fa579160200282015b828111156107fa57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906107c5565b5061080692915061080a565b5090565b6102f191905b808211156108065780546001600160a01b0319168155600101610810565b80356001600160a01b038116811461028b57600080fd5b600082601f830112610855578081fd5b813561086861086382610f4a565b610f23565b81815291506020808301908481018184028601820187101561088957600080fd5b60005b848110156108b05761089e888361082e565b8452928201929082019060010161088c565b505050505092915050565b8035801515811461028b57600080fd5b600082601f8301126108db578081fd5b813567ffffffffffffffff8111156108f1578182fd5b610904601f8201601f1916602001610f23565b915080825283602082850101111561091b57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610945578081fd5b610288838361082e565b600060208284031215610960578081fd5b813567ffffffffffffffff811115610976578182fd5b61098284828501610845565b949350505050565b6000806040838503121561099c578081fd5b823567ffffffffffffffff8111156109b2578182fd5b6109be85828601610845565b9250506109ce846020850161082e565b90509250929050565b600080604083850312156109e9578182fd5b823567ffffffffffffffff80821115610a00578384fd5b610a0c86838701610845565b93506020850135915080821115610a21578283fd5b50610a2e85828601610845565b9150509250929050565b60008060408385031215610a4a578182fd5b823567ffffffffffffffff80821115610a61578384fd5b610a6d86838701610845565b9350602091508185013581811115610a83578384fd5b85019050601f81018613610a95578283fd5b8035610aa361086382610f4a565b81815283810190838501858402850186018a1015610abf578687fd5b8694505b83851015610ae957610ad58a826108bb565b835260019490940193918501918501610ac3565b5080955050505050509250929050565b60008060408385031215610b0b578182fd5b823567ffffffffffffffff80821115610b22578384fd5b610b2e86838701610845565b9350602091508185013581811115610b44578384fd5b85019050601f81018613610b56578283fd5b8035610b6461086382610f4a565b81815283810190838501865b84811015610b9957610b878b8884358901016108cb565b84529286019290860190600101610b70565b5096999098509650505050505050565b60008060408385031215610bbb578182fd5b823567ffffffffffffffff80821115610bd2578384fd5b610bde86838701610845565b9350602091508185013581811115610bf4578384fd5b85019050601f81018613610c06578283fd5b8035610c1461086382610f4a565b81815283810190838501865b84811015610b9957610c378b8884358901016108cb565b84529286019290860190600101610c20565b60008060408385031215610c5b578182fd5b823567ffffffffffffffff80821115610c72578384fd5b610c7e86838701610845565b9350602091508185013581811115610c94578384fd5b85019050601f81018613610ca6578283fd5b8035610cb461086382610f4a565b81815283810190838501858402850186018a1015610cd0578687fd5b8694505b83851015610ae9578035835260019490940193918501918501610cd4565b60008060408385031215610d04578182fd5b823567ffffffffffffffff811115610d1a578283fd5b610d2685828601610845565b95602094909401359450505050565b600060208284031215610d46578081fd5b5035919050565b6000815180845260208085019450808401835b83811015610d855781516001600160a01b031687529582019590820190600101610d60565b509495945050505050565b6001600160a01b0391909116815260200190565b6000602082526102886020830184610d4d565b600060408252610dca6040830185610d4d565b905060018060a01b03831660208301529392505050565b901515815260200190565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b60208082526018908201527f496e646578206d757374206265203c2041206c656e6774680000000000000000604082015260600190565b602080825260159082015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604082015260600190565b6020808252601a908201527f43616e6e6f74206475706c696361746520616464726573736573000000000000604082015260600190565b60208082526018908201527f4172726179206c656e677468206d757374206265203e20300000000000000000604082015260600190565b6020808252600a90820152694120697320656d70747960b01b604082015260600190565b9182521515602082015260400190565b60405181810167ffffffffffffffff81118282101715610f4257600080fd5b604052919050565b600067ffffffffffffffff821115610f60578081fd5b506020908102019056fea26469706673582212207ec432307d5ecddab10f031b075570b8112f2d0a2576afcc211ed725578c328564736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
