{
  "_format": "hh-sol-artifact-1",
  "contractName": "Settings",
  "sourceName": "contracts/core/Settings.sol",
  "abi": [
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        }
      ],
      "name": "ChangingAddressForbidden",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        }
      ],
      "name": "InvalidKey",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        }
      ],
      "name": "InvalidUintValue",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        }
      ],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "value",
          "type": "address"
        }
      ],
      "name": "AddressSettingsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "value",
          "type": "bool"
        }
      ],
      "name": "BoolSettingsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "variable",
          "type": "bytes32"
        }
      ],
      "name": "SettingsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address[]",
          "name": "executors",
          "type": "address[]"
        }
      ],
      "name": "TrustedEVMExecutorsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "string[]",
          "name": "executors",
          "type": "string[]"
        }
      ],
      "name": "TrustedTVMExecutorsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "UintSettingsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ADMIN",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "disableInitializers",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        }
      ],
      "name": "getAddressSetting",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        }
      ],
      "name": "getBoolSetting",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        }
      ],
      "name": "getStringSetting",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTrustedEVMExecutors",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTrustedTVMExecutors",
      "outputs": [
        {
          "internalType": "string[]",
          "name": "",
          "type": "string[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        }
      ],
      "name": "getUintSetting",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adminAddress",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "value",
          "type": "address"
        }
      ],
      "name": "setAddressSetting",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "value",
          "type": "bool"
        }
      ],
      "name": "setBoolSetting",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "internalType": "string",
          "name": "value",
          "type": "string"
        }
      ],
      "name": "setStringSetting",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "trustedEVMExecutors",
          "type": "address[]"
        }
      ],
      "name": "setTrustedEVMExecutors",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string[]",
          "name": "trustedTVMExecutors",
          "type": "string[]"
        }
      ],
      "name": "setTrustedTVMExecutors",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "key",
          "type": "bytes32"
        },
        {
          "internalType": "uint64",
          "name": "value",
          "type": "uint64"
        }
      ],
      "name": "setUintSetting",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a060405230608052348015601357600080fd5b50608051611e4061003d60003960008181610ea501528181610ece015261101f0152611e406000f3fe6080604052600436106101665760003560e01c806381c04407116100d1578063c1c2c4371161008a578063c8029da811610064578063c8029da814610490578063d547741f146104b2578063f165f4b4146104d2578063fd32b9fa146104f257600080fd5b8063c1c2c4371461042e578063c4d66de81461044e578063c7f7d04a1461046e57600080fd5b806381c044071461032d57806391d148541461034d578063a217fddf1461036d578063ad39965d14610382578063ad3cb1cc146103d0578063b896a1811461040e57600080fd5b806336568abe1161012357806336568abe146102755780633fe8ef0f146102955780634f1ef286146102b557806352d1902d146102c85780637866077b146102dd5780637c74627a146102fd57600080fd5b806301ffc9a71461016b5780631c63030a146101a0578063248a9ca3146101ee5780632a0acc6a1461021c5780632f2ff15d1461023e57806331f4490014610260575b600080fd5b34801561017757600080fd5b5061018b610186366004611676565b610512565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d66101bb3660046116a0565b6000908152602081905260409020546001600160401b031690565b6040516001600160401b039091168152602001610197565b3480156101fa57600080fd5b5061020e6102093660046116a0565b610549565b604051908152602001610197565b34801561022857600080fd5b5061020e600080516020611d8b83398151915281565b34801561024a57600080fd5b5061025e6102593660046116d5565b61056b565b005b34801561026c57600080fd5b5061025e61058d565b34801561028157600080fd5b5061025e6102903660046116d5565b6105cd565b3480156102a157600080fd5b5061025e6102b03660046116d5565b610605565b61025e6102c33660046117a2565b610668565b3480156102d457600080fd5b5061020e610687565b3480156102e957600080fd5b5061025e6102f8366004611846565b6106a4565b34801561030957600080fd5b5061018b6103183660046116a0565b60009081526002602052604090205460ff1690565b34801561033957600080fd5b5061025e610348366004611900565b610712565b34801561035957600080fd5b5061018b6103683660046116d5565b61076b565b34801561037957600080fd5b5061020e600081565b34801561038e57600080fd5b506103b861039d3660046116a0565b6000908152600160205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610197565b3480156103dc57600080fd5b50610401604051806040016040528060058152602001640352e302e360dc1b81525081565b604051610197919061198c565b34801561041a57600080fd5b5061025e61042936600461199f565b6107a3565b34801561043a57600080fd5b506104016104493660046116a0565b610810565b34801561045a57600080fd5b5061025e610469366004611a3b565b6108b2565b34801561047a57600080fd5b506104836109e6565b6040516101979190611a56565b34801561049c57600080fd5b506104a5610abf565b6040516101979190611abb565b3480156104be57600080fd5b5061025e6104cd3660046116d5565b610b21565b3480156104de57600080fd5b5061025e6104ed366004611b07565b610b3d565b3480156104fe57600080fd5b5061025e61050d366004611b43565b610baa565b60006001600160e01b03198216637965db0b60e01b148061054357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000908152600080516020611dab833981519152602052604090206001015490565b61057482610549565b61057d81610bf6565b6105878383610c03565b50505050565b600080516020611deb833981519152546001600160401b0316156105c35760405162dc149f60e41b815260040160405180910390fd5b6105cb610ca8565b565b6001600160a01b03811633146105f65760405163334bd91960e11b815260040160405180910390fd5b6106008282610d43565b505050565b600080516020611d8b83398151915261061d81610bf6565b6106278383610dbf565b60008381526001602052604080822080546001600160a01b0319166001600160a01b038616179055518491600080516020611dcb83398151915291a2505050565b610670610e9a565b61067982610f3f565b6106838282610f57565b5050565b6000610691611014565b50600080516020611d6b83398151915290565b600080516020611d8b8339815191526106bc81610bf6565b81516106cf906005906020850190611553565b50816040516106de9190611b6d565b604051908190038120907fdf0903e67c3a4fc263ca7520a3911c684b4d7004cb5f4651a1e6fb660d414e9d90600090a25050565b600080516020611d8b83398151915261072a81610bf6565b610734838361105d565b600083815260036020526040902061074c8382611c43565b506040518390600080516020611dcb83398151915290600090a2505050565b6000918252600080516020611dab833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020611d8b8339815191526107bb81610bf6565b81516107ce9060049060208501906115a9565b50816040516107dd9190611d01565b604051908190038120907e653e88a963cfbf443e7e07366d26e53c7d4eb4b620a8a9a3cd59490b153e4a90600090a25050565b600081815260036020526040902080546060919061082d90611bbb565b80601f016020809104026020016040519081016040528092919081815260200182805461085990611bbb565b80156108a65780601f1061087b576101008083540402835291602001916108a6565b820191906000526020600020905b81548152906001019060200180831161088957829003601f168201915b50505050509050919050565b600080516020611deb8339815191528054600160401b810460ff1615906001600160401b03166000811580156108e55750825b90506000826001600160401b031660011480156109015750303b155b90508115801561090f575080155b1561092d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561095757845460ff60401b1916600160401b1785555b61095f6110b3565b6109676110b3565b61097f600080516020611d8b833981519152806110bb565b610997600080516020611d8b83398151915287610c03565b5083156109de57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610ab6578382906000526020600020018054610a2990611bbb565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5590611bbb565b8015610aa25780601f10610a7757610100808354040283529160200191610aa2565b820191906000526020600020905b815481529060010190602001808311610a8557829003601f168201915b505050505081526020019060010190610a0a565b50505050905090565b60606004805480602002602001604051908101604052809291908181526020018280548015610b1757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610af9575b5050505050905090565b610b2a82610549565b610b3381610bf6565b6105878383610d43565b600080516020611d8b833981519152610b5581610bf6565b610b6883836001600160401b031661111e565b600083815260208190526040808220805467ffffffffffffffff19166001600160401b038616179055518491600080516020611dcb83398151915291a2505050565b600080516020611d8b833981519152610bc281610bf6565b600083815260026020526040808220805460ff1916851515179055518491600080516020611dcb83398151915291a2505050565b610c0081336112d2565b50565b6000600080516020611dab833981519152610c1e848461076b565b610c9e576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610c543390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610543565b6000915050610543565b600080516020611deb8339815191528054600160401b900460ff1615610ce15760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614610c0057805467ffffffffffffffff19166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150565b6000600080516020611dab833981519152610d5e848461076b565b15610c9e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610543565b6001600160a01b038116610dee576040516383cf4a2b60e01b8152600481018390526024015b60405180910390fd5b7f74108225d5b838030da6279474524322f9c8b07ad500246d400a882d1adc4a678203610e1e576106838261130b565b7ffe7a664f6e0c3521ff1c6c504d38ef3e9f443169aed5f833bbef58ef2647083b8203610e4e576106838261130b565b7f211c2745ac5ee6e09e5cfea6b039edcef274b70fb1404ff78779e4759bf707838203610e7e576106838261130b565b604051635326e49560e11b815260048101839052602401610de5565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610f2157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610f15600080516020611d6b833981519152546001600160a01b031690565b6001600160a01b031614155b156105cb5760405163703e46dd60e11b815260040160405180910390fd5b600080516020611d8b83398151915261068381610bf6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610fb1575060408051601f3d908101601f19168201909252610fae91810190611d35565b60015b610fd957604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610de5565b600080516020611d6b833981519152811461100a57604051632a87526960e21b815260048101829052602401610de5565b6106008383611344565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105cb5760405163703e46dd60e11b815260040160405180910390fd5b7f8966879121cfb6c0f964e7eacbe2052f82e9cfff16d18b638bfd80da1189d0308203611088575050565b7fb91d3c5ffbf64f5db586fb9e283ef216271d92de17b247d061043614a5364b868203610e7e575050565b6105cb61139a565b600080516020611dab83398151915260006110d584610549565b600085815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b7f4974a2122f752ac8bcaeec9beacd1bb419a4c873fda1aa7058360e08c5c9401c82036111745780158061115357506103e881115b1561068357604051635631091760e11b815260048101839052602401610de5565b7f7f409c90678ce93e65834482eacce2014a08dd7ce43a3ec31af5320a72db7a6282036111c95780158061115357506103e881111561068357604051635631091760e11b815260048101839052602401610de5565b7fb85db7dee54693d742881af46464432adde0803726a71dd9f6234a601792cf9a82036112165761012c81111561068357604051635631091760e11b815260048101839052602401610de5565b7fc8a0e0a9d335faf7a58f75bc4896d12c9488e34801b4a891a6ba2ff43ae4ad2f820315610683577f30d9b452ee51929ed46b0efac730a78ccd37a793a5acf24feda636390b210516820315610683577f4f27e928da73627e3874c3712f79e2e58f25a77db3929917088d7d5014f08604820315610683577fe30954f078b83da37fe6529e73721e4b7b8cfc0f9ab2bb4f1f9828ca6b2ef12082031561068357604051635326e49560e11b815260048101839052602401610de5565b6112dc828261076b565b6106835760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610de5565b6000818152600160205260409020546001600160a01b031615610c0057604051630d58b82360e31b815260048101829052602401610de5565b61134d826113d1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611392576106008282611436565b6106836114ac565b600080516020611deb83398151915254600160401b900460ff166105cb57604051631afcd79f60e31b815260040160405180910390fd5b806001600160a01b03163b60000361140757604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610de5565b600080516020611d6b83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516114539190611d4e565b600060405180830381855af49150503d806000811461148e576040519150601f19603f3d011682016040523d82523d6000602084013e611493565b606091505b50915091506114a38583836114cb565b95945050505050565b34156105cb5760405163b398979f60e01b815260040160405180910390fd5b6060826114e0576114db8261152a565b611523565b81511580156114f757506001600160a01b0384163b155b1561152057604051639996b31560e01b81526001600160a01b0385166004820152602401610de5565b50805b9392505050565b80511561153a5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b828054828255906000526020600020908101928215611599579160200282015b8281111561159957825182906115899082611c43565b5091602001919060010190611573565b506115a592915061160a565b5090565b8280548282559060005260206000209081019282156115fe579160200282015b828111156115fe57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906115c9565b506115a5929150611627565b808211156115a557600061161e828261163c565b5060010161160a565b5b808211156115a55760008155600101611628565b50805461164890611bbb565b6000825580601f10611658575050565b601f016020900490600052602060002090810190610c009190611627565b60006020828403121561168857600080fd5b81356001600160e01b03198116811461152357600080fd5b6000602082840312156116b257600080fd5b5035919050565b80356001600160a01b03811681146116d057600080fd5b919050565b600080604083850312156116e857600080fd5b823591506116f8602084016116b9565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561173f5761173f611701565b604052919050565b6000806001600160401b0384111561176157611761611701565b50601f8301601f191660200161177681611717565b91505082815283838301111561178b57600080fd5b828260208301376000602084830101529392505050565b600080604083850312156117b557600080fd5b6117be836116b9565b915060208301356001600160401b038111156117d957600080fd5b8301601f810185136117ea57600080fd5b6117f985823560208401611747565b9150509250929050565b60006001600160401b0382111561181c5761181c611701565b5060051b60200190565b600082601f83011261183757600080fd5b61152383833560208501611747565b60006020828403121561185857600080fd5b81356001600160401b0381111561186e57600080fd5b8201601f8101841361187f57600080fd5b803561189261188d82611803565b611717565b8082825260208201915060208360051b8501019250868311156118b457600080fd5b602084015b838110156118f55780356001600160401b038111156118d757600080fd5b6118e689602083890101611826565b845250602092830192016118b9565b509695505050505050565b6000806040838503121561191357600080fd5b8235915060208301356001600160401b0381111561193057600080fd5b6117f985828601611826565b60005b8381101561195757818101518382015260200161193f565b50506000910152565b6000815180845261197881602086016020860161193c565b601f01601f19169290920160200192915050565b6020815260006115236020830184611960565b6000602082840312156119b157600080fd5b81356001600160401b038111156119c757600080fd5b8201601f810184136119d857600080fd5b80356119e661188d82611803565b8082825260208201915060208360051b850101925086831115611a0857600080fd5b6020840193505b82841015611a3157611a20846116b9565b825260209384019390910190611a0f565b9695505050505050565b600060208284031215611a4d57600080fd5b611523826116b9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015611aaf57603f19878603018452611a9a858351611960565b94506020938401939190910190600101611a7e565b50929695505050505050565b602080825282518282018190526000918401906040840190835b81811015611afc5783516001600160a01b0316835260209384019390920191600101611ad5565b509095945050505050565b60008060408385031215611b1a57600080fd5b8235915060208301356001600160401b0381168114611b3857600080fd5b809150509250929050565b60008060408385031215611b5657600080fd5b8235915060208301358015158114611b3857600080fd5b8151600090829060208501835b82811015611bb05781518051611b9481876020850161193c565b601f01601f191694909401935060209190910190600101611b7a565b509195945050505050565b600181811c90821680611bcf57607f821691505b602082108103611bef57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561060057806000526020600020601f840160051c81016020851015611c1c5750805b601f840160051c820191505b81811015611c3c5760008155600101611c28565b5050505050565b81516001600160401b03811115611c5c57611c5c611701565b611c7081611c6a8454611bbb565b84611bf5565b6020601f821160018114611ca45760008315611c8c5750848201515b600019600385901b1c1916600184901b178455611c3c565b600084815260208120601f198516915b82811015611cd45787850151825560209485019460019092019101611cb4565b5084821015611cf25786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b8151600090829060208501835b82811015611bb05781516001600160a01b0316845260209384019390910190600101611d0e565b600060208284031215611d4757600080fd5b5051919050565b60008251611d6081846020870161193c565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4202dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060fff43fb3dd5e4309106861e1122d0446898fbf9d2162cf48cb55d05801ca52f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220b4ff7badb8df11c032272822ec2676f4ca9fb821e6f4d6963f68a4293b81bb9564736f6c634300081c0033",
  "deployedBytecode": "0x6080604052600436106101665760003560e01c806381c04407116100d1578063c1c2c4371161008a578063c8029da811610064578063c8029da814610490578063d547741f146104b2578063f165f4b4146104d2578063fd32b9fa146104f257600080fd5b8063c1c2c4371461042e578063c4d66de81461044e578063c7f7d04a1461046e57600080fd5b806381c044071461032d57806391d148541461034d578063a217fddf1461036d578063ad39965d14610382578063ad3cb1cc146103d0578063b896a1811461040e57600080fd5b806336568abe1161012357806336568abe146102755780633fe8ef0f146102955780634f1ef286146102b557806352d1902d146102c85780637866077b146102dd5780637c74627a146102fd57600080fd5b806301ffc9a71461016b5780631c63030a146101a0578063248a9ca3146101ee5780632a0acc6a1461021c5780632f2ff15d1461023e57806331f4490014610260575b600080fd5b34801561017757600080fd5b5061018b610186366004611676565b610512565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101d66101bb3660046116a0565b6000908152602081905260409020546001600160401b031690565b6040516001600160401b039091168152602001610197565b3480156101fa57600080fd5b5061020e6102093660046116a0565b610549565b604051908152602001610197565b34801561022857600080fd5b5061020e600080516020611d8b83398151915281565b34801561024a57600080fd5b5061025e6102593660046116d5565b61056b565b005b34801561026c57600080fd5b5061025e61058d565b34801561028157600080fd5b5061025e6102903660046116d5565b6105cd565b3480156102a157600080fd5b5061025e6102b03660046116d5565b610605565b61025e6102c33660046117a2565b610668565b3480156102d457600080fd5b5061020e610687565b3480156102e957600080fd5b5061025e6102f8366004611846565b6106a4565b34801561030957600080fd5b5061018b6103183660046116a0565b60009081526002602052604090205460ff1690565b34801561033957600080fd5b5061025e610348366004611900565b610712565b34801561035957600080fd5b5061018b6103683660046116d5565b61076b565b34801561037957600080fd5b5061020e600081565b34801561038e57600080fd5b506103b861039d3660046116a0565b6000908152600160205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610197565b3480156103dc57600080fd5b50610401604051806040016040528060058152602001640352e302e360dc1b81525081565b604051610197919061198c565b34801561041a57600080fd5b5061025e61042936600461199f565b6107a3565b34801561043a57600080fd5b506104016104493660046116a0565b610810565b34801561045a57600080fd5b5061025e610469366004611a3b565b6108b2565b34801561047a57600080fd5b506104836109e6565b6040516101979190611a56565b34801561049c57600080fd5b506104a5610abf565b6040516101979190611abb565b3480156104be57600080fd5b5061025e6104cd3660046116d5565b610b21565b3480156104de57600080fd5b5061025e6104ed366004611b07565b610b3d565b3480156104fe57600080fd5b5061025e61050d366004611b43565b610baa565b60006001600160e01b03198216637965db0b60e01b148061054357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000908152600080516020611dab833981519152602052604090206001015490565b61057482610549565b61057d81610bf6565b6105878383610c03565b50505050565b600080516020611deb833981519152546001600160401b0316156105c35760405162dc149f60e41b815260040160405180910390fd5b6105cb610ca8565b565b6001600160a01b03811633146105f65760405163334bd91960e11b815260040160405180910390fd5b6106008282610d43565b505050565b600080516020611d8b83398151915261061d81610bf6565b6106278383610dbf565b60008381526001602052604080822080546001600160a01b0319166001600160a01b038616179055518491600080516020611dcb83398151915291a2505050565b610670610e9a565b61067982610f3f565b6106838282610f57565b5050565b6000610691611014565b50600080516020611d6b83398151915290565b600080516020611d8b8339815191526106bc81610bf6565b81516106cf906005906020850190611553565b50816040516106de9190611b6d565b604051908190038120907fdf0903e67c3a4fc263ca7520a3911c684b4d7004cb5f4651a1e6fb660d414e9d90600090a25050565b600080516020611d8b83398151915261072a81610bf6565b610734838361105d565b600083815260036020526040902061074c8382611c43565b506040518390600080516020611dcb83398151915290600090a2505050565b6000918252600080516020611dab833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020611d8b8339815191526107bb81610bf6565b81516107ce9060049060208501906115a9565b50816040516107dd9190611d01565b604051908190038120907e653e88a963cfbf443e7e07366d26e53c7d4eb4b620a8a9a3cd59490b153e4a90600090a25050565b600081815260036020526040902080546060919061082d90611bbb565b80601f016020809104026020016040519081016040528092919081815260200182805461085990611bbb565b80156108a65780601f1061087b576101008083540402835291602001916108a6565b820191906000526020600020905b81548152906001019060200180831161088957829003601f168201915b50505050509050919050565b600080516020611deb8339815191528054600160401b810460ff1615906001600160401b03166000811580156108e55750825b90506000826001600160401b031660011480156109015750303b155b90508115801561090f575080155b1561092d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561095757845460ff60401b1916600160401b1785555b61095f6110b3565b6109676110b3565b61097f600080516020611d8b833981519152806110bb565b610997600080516020611d8b83398151915287610c03565b5083156109de57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610ab6578382906000526020600020018054610a2990611bbb565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5590611bbb565b8015610aa25780601f10610a7757610100808354040283529160200191610aa2565b820191906000526020600020905b815481529060010190602001808311610a8557829003601f168201915b505050505081526020019060010190610a0a565b50505050905090565b60606004805480602002602001604051908101604052809291908181526020018280548015610b1757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610af9575b5050505050905090565b610b2a82610549565b610b3381610bf6565b6105878383610d43565b600080516020611d8b833981519152610b5581610bf6565b610b6883836001600160401b031661111e565b600083815260208190526040808220805467ffffffffffffffff19166001600160401b038616179055518491600080516020611dcb83398151915291a2505050565b600080516020611d8b833981519152610bc281610bf6565b600083815260026020526040808220805460ff1916851515179055518491600080516020611dcb83398151915291a2505050565b610c0081336112d2565b50565b6000600080516020611dab833981519152610c1e848461076b565b610c9e576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610c543390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610543565b6000915050610543565b600080516020611deb8339815191528054600160401b900460ff1615610ce15760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614610c0057805467ffffffffffffffff19166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150565b6000600080516020611dab833981519152610d5e848461076b565b15610c9e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610543565b6001600160a01b038116610dee576040516383cf4a2b60e01b8152600481018390526024015b60405180910390fd5b7f74108225d5b838030da6279474524322f9c8b07ad500246d400a882d1adc4a678203610e1e576106838261130b565b7ffe7a664f6e0c3521ff1c6c504d38ef3e9f443169aed5f833bbef58ef2647083b8203610e4e576106838261130b565b7f211c2745ac5ee6e09e5cfea6b039edcef274b70fb1404ff78779e4759bf707838203610e7e576106838261130b565b604051635326e49560e11b815260048101839052602401610de5565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610f2157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610f15600080516020611d6b833981519152546001600160a01b031690565b6001600160a01b031614155b156105cb5760405163703e46dd60e11b815260040160405180910390fd5b600080516020611d8b83398151915261068381610bf6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610fb1575060408051601f3d908101601f19168201909252610fae91810190611d35565b60015b610fd957604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610de5565b600080516020611d6b833981519152811461100a57604051632a87526960e21b815260048101829052602401610de5565b6106008383611344565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105cb5760405163703e46dd60e11b815260040160405180910390fd5b7f8966879121cfb6c0f964e7eacbe2052f82e9cfff16d18b638bfd80da1189d0308203611088575050565b7fb91d3c5ffbf64f5db586fb9e283ef216271d92de17b247d061043614a5364b868203610e7e575050565b6105cb61139a565b600080516020611dab83398151915260006110d584610549565b600085815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b7f4974a2122f752ac8bcaeec9beacd1bb419a4c873fda1aa7058360e08c5c9401c82036111745780158061115357506103e881115b1561068357604051635631091760e11b815260048101839052602401610de5565b7f7f409c90678ce93e65834482eacce2014a08dd7ce43a3ec31af5320a72db7a6282036111c95780158061115357506103e881111561068357604051635631091760e11b815260048101839052602401610de5565b7fb85db7dee54693d742881af46464432adde0803726a71dd9f6234a601792cf9a82036112165761012c81111561068357604051635631091760e11b815260048101839052602401610de5565b7fc8a0e0a9d335faf7a58f75bc4896d12c9488e34801b4a891a6ba2ff43ae4ad2f820315610683577f30d9b452ee51929ed46b0efac730a78ccd37a793a5acf24feda636390b210516820315610683577f4f27e928da73627e3874c3712f79e2e58f25a77db3929917088d7d5014f08604820315610683577fe30954f078b83da37fe6529e73721e4b7b8cfc0f9ab2bb4f1f9828ca6b2ef12082031561068357604051635326e49560e11b815260048101839052602401610de5565b6112dc828261076b565b6106835760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610de5565b6000818152600160205260409020546001600160a01b031615610c0057604051630d58b82360e31b815260048101829052602401610de5565b61134d826113d1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611392576106008282611436565b6106836114ac565b600080516020611deb83398151915254600160401b900460ff166105cb57604051631afcd79f60e31b815260040160405180910390fd5b806001600160a01b03163b60000361140757604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610de5565b600080516020611d6b83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516114539190611d4e565b600060405180830381855af49150503d806000811461148e576040519150601f19603f3d011682016040523d82523d6000602084013e611493565b606091505b50915091506114a38583836114cb565b95945050505050565b34156105cb5760405163b398979f60e01b815260040160405180910390fd5b6060826114e0576114db8261152a565b611523565b81511580156114f757506001600160a01b0384163b155b1561152057604051639996b31560e01b81526001600160a01b0385166004820152602401610de5565b50805b9392505050565b80511561153a5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b828054828255906000526020600020908101928215611599579160200282015b8281111561159957825182906115899082611c43565b5091602001919060010190611573565b506115a592915061160a565b5090565b8280548282559060005260206000209081019282156115fe579160200282015b828111156115fe57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906115c9565b506115a5929150611627565b808211156115a557600061161e828261163c565b5060010161160a565b5b808211156115a55760008155600101611628565b50805461164890611bbb565b6000825580601f10611658575050565b601f016020900490600052602060002090810190610c009190611627565b60006020828403121561168857600080fd5b81356001600160e01b03198116811461152357600080fd5b6000602082840312156116b257600080fd5b5035919050565b80356001600160a01b03811681146116d057600080fd5b919050565b600080604083850312156116e857600080fd5b823591506116f8602084016116b9565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561173f5761173f611701565b604052919050565b6000806001600160401b0384111561176157611761611701565b50601f8301601f191660200161177681611717565b91505082815283838301111561178b57600080fd5b828260208301376000602084830101529392505050565b600080604083850312156117b557600080fd5b6117be836116b9565b915060208301356001600160401b038111156117d957600080fd5b8301601f810185136117ea57600080fd5b6117f985823560208401611747565b9150509250929050565b60006001600160401b0382111561181c5761181c611701565b5060051b60200190565b600082601f83011261183757600080fd5b61152383833560208501611747565b60006020828403121561185857600080fd5b81356001600160401b0381111561186e57600080fd5b8201601f8101841361187f57600080fd5b803561189261188d82611803565b611717565b8082825260208201915060208360051b8501019250868311156118b457600080fd5b602084015b838110156118f55780356001600160401b038111156118d757600080fd5b6118e689602083890101611826565b845250602092830192016118b9565b509695505050505050565b6000806040838503121561191357600080fd5b8235915060208301356001600160401b0381111561193057600080fd5b6117f985828601611826565b60005b8381101561195757818101518382015260200161193f565b50506000910152565b6000815180845261197881602086016020860161193c565b601f01601f19169290920160200192915050565b6020815260006115236020830184611960565b6000602082840312156119b157600080fd5b81356001600160401b038111156119c757600080fd5b8201601f810184136119d857600080fd5b80356119e661188d82611803565b8082825260208201915060208360051b850101925086831115611a0857600080fd5b6020840193505b82841015611a3157611a20846116b9565b825260209384019390910190611a0f565b9695505050505050565b600060208284031215611a4d57600080fd5b611523826116b9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015611aaf57603f19878603018452611a9a858351611960565b94506020938401939190910190600101611a7e565b50929695505050505050565b602080825282518282018190526000918401906040840190835b81811015611afc5783516001600160a01b0316835260209384019390920191600101611ad5565b509095945050505050565b60008060408385031215611b1a57600080fd5b8235915060208301356001600160401b0381168114611b3857600080fd5b809150509250929050565b60008060408385031215611b5657600080fd5b8235915060208301358015158114611b3857600080fd5b8151600090829060208501835b82811015611bb05781518051611b9481876020850161193c565b601f01601f191694909401935060209190910190600101611b7a565b509195945050505050565b600181811c90821680611bcf57607f821691505b602082108103611bef57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561060057806000526020600020601f840160051c81016020851015611c1c5750805b601f840160051c820191505b81811015611c3c5760008155600101611c28565b5050505050565b81516001600160401b03811115611c5c57611c5c611701565b611c7081611c6a8454611bbb565b84611bf5565b6020601f821160018114611ca45760008315611c8c5750848201515b600019600385901b1c1916600184901b178455611c3c565b600084815260208120601f198516915b82811015611cd45787850151825560209485019460019092019101611cb4565b5084821015611cf25786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b8151600090829060208501835b82811015611bb05781516001600160a01b0316845260209384019390910190600101611d0e565b600060208284031215611d4757600080fd5b5051919050565b60008251611d6081846020870161193c565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4202dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060fff43fb3dd5e4309106861e1122d0446898fbf9d2162cf48cb55d05801ca52f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220b4ff7badb8df11c032272822ec2676f4ca9fb821e6f4d6963f68a4293b81bb9564736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
