{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenController",
  "sourceName": "contracts/Bridge/token/TokenController.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accessControlManager_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "AccountBlacklisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AddressesMustDiffer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintLimitExceed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintedAmountExceed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NewCapNotGreaterThanMintedTokens",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddressNotAllowed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "value",
          "type": "bool"
        }
      ],
      "name": "BlacklistUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "MintCapChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newLimit",
          "type": "uint256"
        }
      ],
      "name": "MintLimitDecreased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newLimit",
          "type": "uint256"
        }
      ],
      "name": "MintLimitIncreased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "source",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "destination",
          "type": "address"
        }
      ],
      "name": "MintedTokensMigrated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldAccessControlManager",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAccessControlManager",
          "type": "address"
        }
      ],
      "name": "NewAccessControlManager",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "accessControlManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user_",
          "type": "address"
        }
      ],
      "name": "isBlackListed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "source_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "destination_",
          "type": "address"
        }
      ],
      "name": "migrateMinterTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "minterToCap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "minterToMintedAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newAccessControlAddress_",
          "type": "address"
        }
      ],
      "name": "setAccessControlManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "minter_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount_",
          "type": "uint256"
        }
      ],
      "name": "setMintCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user_",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "value_",
          "type": "bool"
        }
      ],
      "name": "updateBlacklist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051610d5b380380610d5b83398101604081905261002f9161011f565b61003833610073565b6000805460ff60a01b1916905561004e816100c3565b600180546001600160a01b0319166001600160a01b0392909216919091179055610148565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166100ea576040516342bcdf7f60e11b815260040160405180910390fd5b50565b60006001600160a01b0382165b92915050565b610109816100ed565b81146100ea57600080fd5b80516100fa81610100565b60006020828403121561013457610134600080fd5b60006101408484610114565b949350505050565b610c04806101576000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063c06abe7711610066578063c06abe77146101cd578063d89e2dac146101e0578063e47d6060146101f3578063f2fde38b1461021f57600080fd5b80638da5cb5b1461018d5780639155e083146101a7578063b4a0bdf3146101ba57600080fd5b80635c975abb116100c85780635c975abb14610142578063715018a61461015d5780637b517334146101655780638456cb591461018557600080fd5b80630e32cb86146100ef578063391efe12146101045780633f4ba83a1461013a575b600080fd5b6101026100fd3660046108ab565b610232565b005b6101246101123660046108ab565b60036020526000908152604090205481565b60405161013191906108dc565b60405180910390f35b61010261029f565b600054600160a01b900460ff165b60405161013191906108f2565b6101026102d3565b6101246101733660046108ab565b60046020526000908152604090205481565b6101026102e5565b6000546001600160a01b03165b6040516101319190610909565b6101026101b536600461092a565b610315565b60015461019a906001600160a01b031681565b6101026101db366004610978565b6103b3565b6101026101ee3660046109ab565b610475565b6101506102013660046108ab565b6001600160a01b031660009081526002602052604090205460ff1690565b61010261022d3660046108ab565b610621565b61023a610664565b6102438161068e565b6001546040516001600160a01b038084169216907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6102c960405180604001604052806009815260200168756e7061757365282960b81b8152506106b5565b6102d1610744565b565b6102db610664565b6102d16000610793565b61030d604051806040016040528060078152602001667061757365282960c81b8152506106b5565b6102d16107e3565b6103536040518060400160405280601d81526020017f757064617465426c61636b6c69737428616464726573732c626f6f6c290000008152506106b5565b6001600160a01b03821660008181526002602052604090819020805460ff1916841515179055517f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac906103a79084906108f2565b60405180910390a25050565b6103f16040518060400160405280601b81526020017f7365744d696e7443617028616464726573732c75696e743235362900000000008152506106b5565b6001600160a01b03821660009081526004602052604090205481101561042a5760405163ce89973d60e01b815260040160405180910390fd5b6001600160a01b03821660008181526003602052604090819020839055517f01a85f4ecff52e70907e25b863010bca98a9458d9f2fe9b3efb4c47d197e6448906103a79084906108dc565b610496604051806060016040528060248152602001610bab602491396106b5565b806001600160a01b0316826001600160a01b0316036104c8576040516380ae98f560e01b815260040160405180910390fd5b6001600160a01b0380831660008181526003602090815260408083205494861680845281842054948452600490925280832054918352822054909161050d83836109f4565b90508381111561053057604051634f2dbd1d60e01b815260040160405180910390fd5b6001600160a01b0380881660009081526004602052604080822082905591881680825290829020839055905182860391907fbe214d1fa2403a39be9a36c9f4b45125eba30bf27a8b56a619baf00493ad3e619061058e9084906108dc565b60405180910390a2876001600160a01b03167f0831a8ba59684daef8a957d2bd2d943e233993771429e9a17b71ddb1cea35cdb876040516105cf91906108dc565b60405180910390a2866001600160a01b0316886001600160a01b03167f63ce671e4a37975f0a9e340f6f72320c617a5f728b83e3860b03aa847dc26ebb60405160405180910390a35050505050505050565b610629610664565b6001600160a01b0381166106585760405162461bcd60e51b815260040161064f90610a07565b60405180910390fd5b61066181610793565b50565b6000546001600160a01b031633146102d15760405162461bcd60e51b815260040161064f90610a86565b6001600160a01b038116610661576040516342bcdf7f60e11b815260040160405180910390fd5b6001546040516318c5e8ab60e01b81526001600160a01b03909116906318c5e8ab906106e79033908590600401610aec565b602060405180830381865afa158015610704573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107289190610b17565b610661576040516282b42960e81b815260040160405180910390fd5b61074c610826565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516107899190610909565b60405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107eb61084f565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861077c3390565b600054600160a01b900460ff166102d15760405162461bcd60e51b815260040161064f90610b63565b600054600160a01b900460ff16156102d15760405162461bcd60e51b815260040161064f90610b9a565b60006001600160a01b0382165b92915050565b61089581610879565b811461066157600080fd5b80356108868161088c565b6000602082840312156108c0576108c0600080fd5b60006108cc84846108a0565b949350505050565b805b82525050565b6020810161088682846108d4565b8015156108d6565b6020810161088682846108ea565b6108d681610879565b602081016108868284610900565b801515610895565b803561088681610917565b6000806040838503121561094057610940600080fd5b600061094c85856108a0565b925050602061095d8582860161091f565b9150509250929050565b80610895565b803561088681610967565b6000806040838503121561098e5761098e600080fd5b600061099a85856108a0565b925050602061095d8582860161096d565b600080604083850312156109c1576109c1600080fd5b60006109cd85856108a0565b925050602061095d858286016108a0565b634e487b7160e01b600052601160045260246000fd5b80820180821115610886576108866109de565b6020808252810161088681602681527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160208201526564647265737360d01b604082015260600190565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572910190815260005b5060200190565b6020808252810161088681610a51565b60005b83811015610ab1578181015183820152602001610a99565b50506000910152565b6000610ac4825190565b808452602084019350610adb818560208601610a96565b601f01601f19169290920192915050565b60408101610afa8285610900565b81810360208301526108cc8184610aba565b805161088681610917565b600060208284031215610b2c57610b2c600080fd5b60006108cc8484610b0c565b601481526000602082017314185d5cd8589b194e881b9bdd081c185d5cd95960621b81529150610a7f565b6020808252810161088681610b38565b601081526000602082016f14185d5cd8589b194e881c185d5cd95960821b81529150610a7f565b6020808252810161088681610b7356fe6d6967726174654d696e746572546f6b656e7328616464726573732c6164647265737329a2646970667358221220b518eaca1e0056a71e2005a29642ab3b15a8248b99ac87467887abb9eee98c0964736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063c06abe7711610066578063c06abe77146101cd578063d89e2dac146101e0578063e47d6060146101f3578063f2fde38b1461021f57600080fd5b80638da5cb5b1461018d5780639155e083146101a7578063b4a0bdf3146101ba57600080fd5b80635c975abb116100c85780635c975abb14610142578063715018a61461015d5780637b517334146101655780638456cb591461018557600080fd5b80630e32cb86146100ef578063391efe12146101045780633f4ba83a1461013a575b600080fd5b6101026100fd3660046108ab565b610232565b005b6101246101123660046108ab565b60036020526000908152604090205481565b60405161013191906108dc565b60405180910390f35b61010261029f565b600054600160a01b900460ff165b60405161013191906108f2565b6101026102d3565b6101246101733660046108ab565b60046020526000908152604090205481565b6101026102e5565b6000546001600160a01b03165b6040516101319190610909565b6101026101b536600461092a565b610315565b60015461019a906001600160a01b031681565b6101026101db366004610978565b6103b3565b6101026101ee3660046109ab565b610475565b6101506102013660046108ab565b6001600160a01b031660009081526002602052604090205460ff1690565b61010261022d3660046108ab565b610621565b61023a610664565b6102438161068e565b6001546040516001600160a01b038084169216907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6102c960405180604001604052806009815260200168756e7061757365282960b81b8152506106b5565b6102d1610744565b565b6102db610664565b6102d16000610793565b61030d604051806040016040528060078152602001667061757365282960c81b8152506106b5565b6102d16107e3565b6103536040518060400160405280601d81526020017f757064617465426c61636b6c69737428616464726573732c626f6f6c290000008152506106b5565b6001600160a01b03821660008181526002602052604090819020805460ff1916841515179055517f6a12b3df6cba4203bd7fd06b816789f87de8c594299aed5717ae070fac781bac906103a79084906108f2565b60405180910390a25050565b6103f16040518060400160405280601b81526020017f7365744d696e7443617028616464726573732c75696e743235362900000000008152506106b5565b6001600160a01b03821660009081526004602052604090205481101561042a5760405163ce89973d60e01b815260040160405180910390fd5b6001600160a01b03821660008181526003602052604090819020839055517f01a85f4ecff52e70907e25b863010bca98a9458d9f2fe9b3efb4c47d197e6448906103a79084906108dc565b610496604051806060016040528060248152602001610bab602491396106b5565b806001600160a01b0316826001600160a01b0316036104c8576040516380ae98f560e01b815260040160405180910390fd5b6001600160a01b0380831660008181526003602090815260408083205494861680845281842054948452600490925280832054918352822054909161050d83836109f4565b90508381111561053057604051634f2dbd1d60e01b815260040160405180910390fd5b6001600160a01b0380881660009081526004602052604080822082905591881680825290829020839055905182860391907fbe214d1fa2403a39be9a36c9f4b45125eba30bf27a8b56a619baf00493ad3e619061058e9084906108dc565b60405180910390a2876001600160a01b03167f0831a8ba59684daef8a957d2bd2d943e233993771429e9a17b71ddb1cea35cdb876040516105cf91906108dc565b60405180910390a2866001600160a01b0316886001600160a01b03167f63ce671e4a37975f0a9e340f6f72320c617a5f728b83e3860b03aa847dc26ebb60405160405180910390a35050505050505050565b610629610664565b6001600160a01b0381166106585760405162461bcd60e51b815260040161064f90610a07565b60405180910390fd5b61066181610793565b50565b6000546001600160a01b031633146102d15760405162461bcd60e51b815260040161064f90610a86565b6001600160a01b038116610661576040516342bcdf7f60e11b815260040160405180910390fd5b6001546040516318c5e8ab60e01b81526001600160a01b03909116906318c5e8ab906106e79033908590600401610aec565b602060405180830381865afa158015610704573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107289190610b17565b610661576040516282b42960e81b815260040160405180910390fd5b61074c610826565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516107899190610909565b60405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107eb61084f565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861077c3390565b600054600160a01b900460ff166102d15760405162461bcd60e51b815260040161064f90610b63565b600054600160a01b900460ff16156102d15760405162461bcd60e51b815260040161064f90610b9a565b60006001600160a01b0382165b92915050565b61089581610879565b811461066157600080fd5b80356108868161088c565b6000602082840312156108c0576108c0600080fd5b60006108cc84846108a0565b949350505050565b805b82525050565b6020810161088682846108d4565b8015156108d6565b6020810161088682846108ea565b6108d681610879565b602081016108868284610900565b801515610895565b803561088681610917565b6000806040838503121561094057610940600080fd5b600061094c85856108a0565b925050602061095d8582860161091f565b9150509250929050565b80610895565b803561088681610967565b6000806040838503121561098e5761098e600080fd5b600061099a85856108a0565b925050602061095d8582860161096d565b600080604083850312156109c1576109c1600080fd5b60006109cd85856108a0565b925050602061095d858286016108a0565b634e487b7160e01b600052601160045260246000fd5b80820180821115610886576108866109de565b6020808252810161088681602681527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160208201526564647265737360d01b604082015260600190565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572910190815260005b5060200190565b6020808252810161088681610a51565b60005b83811015610ab1578181015183820152602001610a99565b50506000910152565b6000610ac4825190565b808452602084019350610adb818560208601610a96565b601f01601f19169290920192915050565b60408101610afa8285610900565b81810360208301526108cc8184610aba565b805161088681610917565b600060208284031215610b2c57610b2c600080fd5b60006108cc8484610b0c565b601481526000602082017314185d5cd8589b194e881b9bdd081c185d5cd95960621b81529150610a7f565b6020808252810161088681610b38565b601081526000602082016f14185d5cd8589b194e881c185d5cd95960821b81529150610a7f565b6020808252810161088681610b7356fe6d6967726174654d696e746572546f6b656e7328616464726573732c6164647265737329a2646970667358221220b518eaca1e0056a71e2005a29642ab3b15a8248b99ac87467887abb9eee98c0964736f6c63430008190033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
