Files
2026-03-02 12:14:09 -08:00

849 lines
46 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "PluginRegistry",
"sourceName": "contracts/plugins/PluginRegistry.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"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": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
}
],
"name": "PluginActivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
}
],
"name": "PluginDeactivated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "address",
"name": "implementation",
"type": "address"
},
{
"indexed": false,
"internalType": "string",
"name": "version",
"type": "string"
}
],
"name": "PluginRegistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "address",
"name": "oldImplementation",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newImplementation",
"type": "address"
}
],
"name": "PluginUpgraded",
"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": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PLUGIN_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "UPGRADER_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": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
}
],
"name": "activatePlugin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
}
],
"name": "deactivatePlugin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
}
],
"name": "getAllPlugins",
"outputs": [
{
"internalType": "bytes32[]",
"name": "",
"type": "bytes32[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
}
],
"name": "getPlugin",
"outputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
}
],
"name": "getPluginCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
}
],
"name": "getPluginInfo",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
},
{
"internalType": "string",
"name": "version",
"type": "string"
},
{
"internalType": "bool",
"name": "active",
"type": "bool"
},
{
"internalType": "uint256",
"name": "registeredAt",
"type": "uint256"
},
{
"internalType": "string",
"name": "description",
"type": "string"
}
],
"internalType": "struct PluginRegistry.Plugin",
"name": "",
"type": "tuple"
}
],
"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": "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": "admin",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
}
],
"name": "isPluginActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "isRegisteredPlugin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "",
"type": "uint8"
}
],
"name": "pluginCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "plugins",
"outputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
},
{
"internalType": "string",
"name": "version",
"type": "string"
},
{
"internalType": "bool",
"name": "active",
"type": "bool"
},
{
"internalType": "uint256",
"name": "registeredAt",
"type": "uint256"
},
{
"internalType": "string",
"name": "description",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "pluginsByType",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
},
{
"internalType": "address",
"name": "implementation",
"type": "address"
},
{
"internalType": "string",
"name": "version",
"type": "string"
},
{
"internalType": "string",
"name": "description",
"type": "string"
}
],
"name": "registerPlugin",
"outputs": [],
"stateMutability": "nonpayable",
"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": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum PluginRegistry.PluginType",
"name": "pluginType",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "identifier",
"type": "bytes32"
},
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "string",
"name": "newVersion",
"type": "string"
}
],
"name": "upgradePlugin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
}
],
"bytecode": "0x60a080604052346100cc57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100bd57506001600160401b036002600160401b031982821601610078575b604051611bd290816100d28239608051818181610cc10152610d7b0152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080610059565b63f92ee8a960e01b8152600490fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714611313575080630ad98bff146112955780630b2351831461120c57806320878bcd1461117b578063236ea6f0146110cf578063248a9ca3146110935780632f2ff15d1461104757806336568abe146110005780633ea9c37c14610fc55780634f1ef28614610d2b57806352d1902d14610cae5780636543111314610892578063776e61e1146108465780637e57508f146108165780637e755e571461062d5780637f17e7611461048d5780637fdb470e1461053457806391d14854146104da578063a217fddf146104be578063a391fb3c1461048d578063a403bf801461044e578063ad3cb1cc146103db578063b9d4bd8d14610311578063c4d66de8146101cb578063d547741f1461017d5763f72c0d8b1461013d57600080fd5b346101785760003660031901126101785760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b600080fd5b34610178576040366003190112610178576101c960043561019c61152d565b9080600052600080516020611b7d8339815191526020526101c46001604060002001546117a5565b611a35565b005b34610178576020366003190112610178576101e4611543565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090815460ff8160401c16159167ffffffffffffffff821680159081610309575b60011490816102ff575b1590816102f6575b506102e45767ffffffffffffffff198216600117845561028191836102c5575b50610260611ab8565b610268611ab8565b610271816117d8565b5061027b81611866565b50611916565b5061028857005b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b68ffffffffffffffffff19166801000000000000000117845584610257565b60405163f92ee8a960e01b8152600490fd5b90501585610237565b303b15915061022f565b849150610225565b346101785761032961032236611366565b9190611385565b906000526020526040600020604051906103428261140a565b80546001600160a01b0390811683529061035e60018201611448565b602084015261038a600460ff600284015416926040860193151584526003810154606087015201611448565b608084015251156103a2576020915116604051908152f35b60405162461bcd60e51b8152602060048201526011602482015270506c7567696e206e6f742061637469766560781b6044820152606490fd5b3461017857600036600319011261017857604051604081019080821067ffffffffffffffff831117610438576104349160405260058152640352e302e360dc1b60208201526040519182916020835260208301906114ed565b0390f35b634e487b7160e01b600052604160045260246000fd5b34610178576020366003190112610178576001600160a01b0361046f611543565b166000526002602052602060ff604060002054166040519015158152f35b34610178576020366003190112610178576004356005811015610178576104b56020916113b7565b54604051908152f35b3461017857600036600319011261017857602060405160008152f35b34610178576040366003190112610178576104f361152d565b600435600052600080516020611b7d83398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346101785761057561054536611366565b9190606060806040516105578161140a565b60008152826020820152600060408201526000838201520152611385565b90600052602052604060002060405161058d8161140a565b81546001600160a01b03908116825291610434906105ad60018201611448565b6020840190815260ff6002830154169160408501921515835261060c6105e160046003840154936060890194855201611448565b926080870193845260405197889760208952511660208801525160a0604088015260c08701906114ed565b92511515606086015251608085015251838203601f190160a08501526114ed565b346101785760803660031901126101785760043560058110156101785760243590610656611559565b67ffffffffffffffff90606435828111610178576106789036906004016115c2565b9261068161172b565b6001600160a01b0393838516936106a59061069d86151561165d565b3b1515611698565b6106ae86611385565b92876000526020938452604060002090858254978816976106d089151561161e565b6001600160a01b0319161782556001918201938311610438576106fd836106f786546113d0565b866116d5565b600091601f84116001146107875750827f811fd5ea4f8a42ddd34a430dc548683ff0be944a4ba7fd6dbff0c1aeee37693497959360409795936107579360009261077c575b50508160011b916000199060031b1c19161790565b90555b816000526002815283600020600160ff198254161790558351928352820152a3005b013590508b80610742565b91601f1984168560005286600020936000905b8282106107ff5750509260019285927f811fd5ea4f8a42ddd34a430dc548683ff0be944a4ba7fd6dbff0c1aeee3769349a989660409a9896106107e5575b505050811b01905561075a565b0135600019600384901b60f8161c191690558a80806107d8565b84840135865594850194928801929088019061079a565b346101785761082761032236611366565b90600052602052602060ff600260406000200154166040519015158152f35b346101785760403660031901126101785760043560058110156101785761086f6024359161139e565b805482101561017857602091610884916115f0565b90546040519160031b1c8152f35b346101785760a03660031901126101785760056004351015610178576108b6611559565b60643567ffffffffffffffff8111610178576108d69036906004016115c2565b9060843567ffffffffffffffff8111610178576108f79036906004016115c2565b919061090161172b565b6001600160a01b0390610917868316151561165d565b610923863b1515611698565b61092e600435611385565b6024356000526020528160406000205416610c745761097f604051916109538361140a565b838816835261096336888761158b565b956020840196875260016040850152426060850152369161158b565b608082015261098f600435611385565b602435600052602052604060002093828251166bffffffffffffffffffffffff60a01b8654161785555180519067ffffffffffffffff8211610438576109e5826109dc60018901546113d0565b600189016116d5565b602090601f8311600114610c0257610a15929160009183610b8f5750508160011b916000199060031b1c19161790565b60018501555b608060046002860195604084015115159660ff199760ff898354169116179055606084015160038201550191015180519067ffffffffffffffff821161043857610a6f82610a6985546113d0565b856116d5565b602090601f8311600114610b9a57610a9f929160009183610b8f5750508160011b916000199060031b1c19161790565b90555b610aad60043561139e565b80546801000000000000000081101561043857610acf916001820181556115f0565b939080549460031b6000199586602435831b921b191617905581861660005260026020526001604060002091825416179055610b0c6004356113b7565b8054938414610b795760018594019055604051941684526040602085015281604085015260608401376000606082840101527f21188bd0b2176bbb74d0b4f3113ec282be177e152b1ff8101fc2695d93bd8e8a6024359260608160043594601f80199101168101030190a3005b634e487b7160e01b600052601160045260246000fd5b015190508980610742565b90601f198316918460005260206000209260005b818110610bea5750908460019594939210610bd1575b505050811b019055610aa2565b015160001960f88460031b161c19169055888080610bc4565b92936020600181928786015181550195019301610bae565b9190600187016000526020600020906000935b601f1984168510610c59576001945083601f19811610610c40575b505050811b016001850155610a1b565b015160001960f88460031b161c19169055888080610c30565b81810151835560209485019460019093019290910190610c15565b60405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b6044820152606490fd5b34610178576000366003190112610178577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003610d195760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b604036600319011261017857610d3f611543565b602490813567ffffffffffffffff8111610178573660238201121561017857610d71903690848160040135910161158b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115610f97575b50610d19573360009081527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860209081526040909120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e39060ff1615610f7a57508316926040516352d1902d60e01b81528281600481885afa60009181610f4b575b50610e4a57604051634c9c8ce360e01b8152600481018690528690fd5b8490867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610f365750833b15610f20575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2835115610f06575060008084846101c996519101845af4903d15610efd573d610ee08161156f565b90610eee6040519283611426565b8152600081943d92013e611af9565b60609250611af9565b9250505034610f1157005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101849052fd5b60405190632a87526960e21b82526004820152fd5b9091508381813d8311610f73575b610f638183611426565b8101031261017857519087610e2d565b503d610f59565b856044916040519163e2517d3f60e01b8352336004840152820152fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141585610da7565b346101785760003660031901126101785760206040517fa3974031532a6f2ec89fd46c4443deed522229db0849f394d7ffcb8778f6ab878152f35b346101785760403660031901126101785761101961152d565b336001600160a01b03821603611035576101c990600435611a35565b60405163334bd91960e11b8152600490fd5b34610178576040366003190112610178576101c960043561106661152d565b9080600052600080516020611b7d83398151915260205261108e6001604060002001546117a5565b6119c0565b3461017857602036600319011261017857600435600052600080516020611b7d8339815191526020526020600160406000200154604051908152f35b3461017857602080600319360112610178576004356005811015610178576110f69061139e565b60405190818382549182815201908192600052846000209060005b8682821061116757868661112782880383611426565b604051928392818401908285525180915260408401929160005b82811061115057505050500390f35b835185528695509381019392810192600101611141565b835485529093019260019283019201611111565b346101785761118936611366565b9061119261172b565b61119b81611385565b82600052602052600260406000206111bd60018060a01b03825416151561161e565b01805460ff1916905560058110156111f6577f39be5d3af885c85c2a7fc31e6988187615bbfdb819d60a47946d6649391fa59c600080a3005b634e487b7160e01b600052602160045260246000fd5b346101785761121d61032236611366565b60009182526020526040902080546001600160a01b031661043461124360018401611448565b9260ff6002820154169061125e600460038301549201611448565b9061127b604051968796875260a0602088015260a08701906114ed565b9215156040860152606085015283820360808501526114ed565b34610178576112a336611366565b906112ac61172b565b6112b581611385565b82600052602052600260406000206112d760018060a01b03825416151561161e565b01805460ff1916600117905560058110156111f6577fdc28df28073bd34b19e2f34e06b002b9f73e5715bfeb6e52ab2255c2cc60c06b600080a3005b34610178576020366003190112610178576004359063ffffffff60e01b821680920361017857602091637965db0b60e01b8114908115611355575b5015158152f35b6301ffc9a760e01b1490508361134e565b6040906003190112610178576004356005811015610178579060243590565b60058110156111f6576000526000602052604060002090565b60058110156111f6576000526001602052604060002090565b60058110156111f6576000526003602052604060002090565b90600182811c92168015611400575b60208310146113ea57565b634e487b7160e01b600052602260045260246000fd5b91607f16916113df565b60a0810190811067ffffffffffffffff82111761043857604052565b90601f8019910116810190811067ffffffffffffffff82111761043857604052565b9060405191826000825461145b816113d0565b908184526020946001916001811690816000146114cb575060011461148c575b50505061148a92500383611426565b565b600090815285812095935091905b8183106114b357505061148a935082010138808061147b565b8554888401850152948501948794509183019161149a565b9250505061148a94925060ff191682840152151560051b82010138808061147b565b919082519283825260005b848110611519575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016114f8565b602435906001600160a01b038216820361017857565b600435906001600160a01b038216820361017857565b604435906001600160a01b038216820361017857565b67ffffffffffffffff811161043857601f01601f191660200190565b9291926115978261156f565b916115a56040519384611426565b829481845281830111610178578281602093846000960137010152565b9181601f840112156101785782359167ffffffffffffffff8311610178576020838186019501011161017857565b80548210156116085760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b1561162557565b60405162461bcd60e51b815260206004820152601060248201526f141b1d59da5b881b9bdd08199bdd5b9960821b6044820152606490fd5b1561166457565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b1561169f57565b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b6044820152606490fd5b90601f81116116e357505050565b6000916000526020600020906020601f850160051c83019410611721575b601f0160051c01915b82811061171657505050565b81815560010161170a565b9092508290611701565b3360009081527f8b6686aea1ede07eaae152938a84efff8c6bc7c90343bb6da6aa1ecb37807a8360205260409020547fa3974031532a6f2ec89fd46c4443deed522229db0849f394d7ffcb8778f6ab879060ff16156117875750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b80600052600080516020611b7d83398151915260205260406000203360005260205260ff60406000205416156117875750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812054909190600080516020611b7d8339815191529060ff16611861578280526020526040822081835260205260408220600160ff198254161790553391600080516020611b5d8339815191528180a4600190565b505090565b6001600160a01b031660008181527f8b6686aea1ede07eaae152938a84efff8c6bc7c90343bb6da6aa1ecb37807a8360205260408120549091907fa3974031532a6f2ec89fd46c4443deed522229db0849f394d7ffcb8778f6ab8790600080516020611b7d8339815191529060ff16611910578184526020526040832082845260205260408320600160ff19825416179055600080516020611b5d833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860205260408120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e390600080516020611b7d8339815191529060ff16611910578184526020526040832082845260205260408320600160ff19825416179055600080516020611b5d833981519152339380a4600190565b90600091808352600080516020611b7d83398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014611910578184526020526040832082845260205260408320600160ff19825416179055600080516020611b5d833981519152339380a4600190565b90600091808352600080516020611b7d83398151915280602052604084209260018060a01b03169283855260205260ff60408520541660001461191057818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611ae757565b604051631afcd79f60e31b8152600490fd5b90611b205750805115611b0e57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580611b53575b611b31575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15611b2956fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212208af662d579c1e68ab1b624db97be783c02277dfac2209aad8f1686c9440e4c6064736f6c63430008160033",
"deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714611313575080630ad98bff146112955780630b2351831461120c57806320878bcd1461117b578063236ea6f0146110cf578063248a9ca3146110935780632f2ff15d1461104757806336568abe146110005780633ea9c37c14610fc55780634f1ef28614610d2b57806352d1902d14610cae5780636543111314610892578063776e61e1146108465780637e57508f146108165780637e755e571461062d5780637f17e7611461048d5780637fdb470e1461053457806391d14854146104da578063a217fddf146104be578063a391fb3c1461048d578063a403bf801461044e578063ad3cb1cc146103db578063b9d4bd8d14610311578063c4d66de8146101cb578063d547741f1461017d5763f72c0d8b1461013d57600080fd5b346101785760003660031901126101785760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b600080fd5b34610178576040366003190112610178576101c960043561019c61152d565b9080600052600080516020611b7d8339815191526020526101c46001604060002001546117a5565b611a35565b005b34610178576020366003190112610178576101e4611543565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090815460ff8160401c16159167ffffffffffffffff821680159081610309575b60011490816102ff575b1590816102f6575b506102e45767ffffffffffffffff198216600117845561028191836102c5575b50610260611ab8565b610268611ab8565b610271816117d8565b5061027b81611866565b50611916565b5061028857005b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b68ffffffffffffffffff19166801000000000000000117845584610257565b60405163f92ee8a960e01b8152600490fd5b90501585610237565b303b15915061022f565b849150610225565b346101785761032961032236611366565b9190611385565b906000526020526040600020604051906103428261140a565b80546001600160a01b0390811683529061035e60018201611448565b602084015261038a600460ff600284015416926040860193151584526003810154606087015201611448565b608084015251156103a2576020915116604051908152f35b60405162461bcd60e51b8152602060048201526011602482015270506c7567696e206e6f742061637469766560781b6044820152606490fd5b3461017857600036600319011261017857604051604081019080821067ffffffffffffffff831117610438576104349160405260058152640352e302e360dc1b60208201526040519182916020835260208301906114ed565b0390f35b634e487b7160e01b600052604160045260246000fd5b34610178576020366003190112610178576001600160a01b0361046f611543565b166000526002602052602060ff604060002054166040519015158152f35b34610178576020366003190112610178576004356005811015610178576104b56020916113b7565b54604051908152f35b3461017857600036600319011261017857602060405160008152f35b34610178576040366003190112610178576104f361152d565b600435600052600080516020611b7d83398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346101785761057561054536611366565b9190606060806040516105578161140a565b60008152826020820152600060408201526000838201520152611385565b90600052602052604060002060405161058d8161140a565b81546001600160a01b03908116825291610434906105ad60018201611448565b6020840190815260ff6002830154169160408501921515835261060c6105e160046003840154936060890194855201611448565b926080870193845260405197889760208952511660208801525160a0604088015260c08701906114ed565b92511515606086015251608085015251838203601f190160a08501526114ed565b346101785760803660031901126101785760043560058110156101785760243590610656611559565b67ffffffffffffffff90606435828111610178576106789036906004016115c2565b9261068161172b565b6001600160a01b0393838516936106a59061069d86151561165d565b3b1515611698565b6106ae86611385565b92876000526020938452604060002090858254978816976106d089151561161e565b6001600160a01b0319161782556001918201938311610438576106fd836106f786546113d0565b866116d5565b600091601f84116001146107875750827f811fd5ea4f8a42ddd34a430dc548683ff0be944a4ba7fd6dbff0c1aeee37693497959360409795936107579360009261077c575b50508160011b916000199060031b1c19161790565b90555b816000526002815283600020600160ff198254161790558351928352820152a3005b013590508b80610742565b91601f1984168560005286600020936000905b8282106107ff5750509260019285927f811fd5ea4f8a42ddd34a430dc548683ff0be944a4ba7fd6dbff0c1aeee3769349a989660409a9896106107e5575b505050811b01905561075a565b0135600019600384901b60f8161c191690558a80806107d8565b84840135865594850194928801929088019061079a565b346101785761082761032236611366565b90600052602052602060ff600260406000200154166040519015158152f35b346101785760403660031901126101785760043560058110156101785761086f6024359161139e565b805482101561017857602091610884916115f0565b90546040519160031b1c8152f35b346101785760a03660031901126101785760056004351015610178576108b6611559565b60643567ffffffffffffffff8111610178576108d69036906004016115c2565b9060843567ffffffffffffffff8111610178576108f79036906004016115c2565b919061090161172b565b6001600160a01b0390610917868316151561165d565b610923863b1515611698565b61092e600435611385565b6024356000526020528160406000205416610c745761097f604051916109538361140a565b838816835261096336888761158b565b956020840196875260016040850152426060850152369161158b565b608082015261098f600435611385565b602435600052602052604060002093828251166bffffffffffffffffffffffff60a01b8654161785555180519067ffffffffffffffff8211610438576109e5826109dc60018901546113d0565b600189016116d5565b602090601f8311600114610c0257610a15929160009183610b8f5750508160011b916000199060031b1c19161790565b60018501555b608060046002860195604084015115159660ff199760ff898354169116179055606084015160038201550191015180519067ffffffffffffffff821161043857610a6f82610a6985546113d0565b856116d5565b602090601f8311600114610b9a57610a9f929160009183610b8f5750508160011b916000199060031b1c19161790565b90555b610aad60043561139e565b80546801000000000000000081101561043857610acf916001820181556115f0565b939080549460031b6000199586602435831b921b191617905581861660005260026020526001604060002091825416179055610b0c6004356113b7565b8054938414610b795760018594019055604051941684526040602085015281604085015260608401376000606082840101527f21188bd0b2176bbb74d0b4f3113ec282be177e152b1ff8101fc2695d93bd8e8a6024359260608160043594601f80199101168101030190a3005b634e487b7160e01b600052601160045260246000fd5b015190508980610742565b90601f198316918460005260206000209260005b818110610bea5750908460019594939210610bd1575b505050811b019055610aa2565b015160001960f88460031b161c19169055888080610bc4565b92936020600181928786015181550195019301610bae565b9190600187016000526020600020906000935b601f1984168510610c59576001945083601f19811610610c40575b505050811b016001850155610a1b565b015160001960f88460031b161c19169055888080610c30565b81810151835560209485019460019093019290910190610c15565b60405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481c9959da5cdd195c995960721b6044820152606490fd5b34610178576000366003190112610178577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003610d195760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b604036600319011261017857610d3f611543565b602490813567ffffffffffffffff8111610178573660238201121561017857610d71903690848160040135910161158b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115610f97575b50610d19573360009081527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860209081526040909120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e39060ff1615610f7a57508316926040516352d1902d60e01b81528281600481885afa60009181610f4b575b50610e4a57604051634c9c8ce360e01b8152600481018690528690fd5b8490867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610f365750833b15610f20575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2835115610f06575060008084846101c996519101845af4903d15610efd573d610ee08161156f565b90610eee6040519283611426565b8152600081943d92013e611af9565b60609250611af9565b9250505034610f1157005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101849052fd5b60405190632a87526960e21b82526004820152fd5b9091508381813d8311610f73575b610f638183611426565b8101031261017857519087610e2d565b503d610f59565b856044916040519163e2517d3f60e01b8352336004840152820152fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141585610da7565b346101785760003660031901126101785760206040517fa3974031532a6f2ec89fd46c4443deed522229db0849f394d7ffcb8778f6ab878152f35b346101785760403660031901126101785761101961152d565b336001600160a01b03821603611035576101c990600435611a35565b60405163334bd91960e11b8152600490fd5b34610178576040366003190112610178576101c960043561106661152d565b9080600052600080516020611b7d83398151915260205261108e6001604060002001546117a5565b6119c0565b3461017857602036600319011261017857600435600052600080516020611b7d8339815191526020526020600160406000200154604051908152f35b3461017857602080600319360112610178576004356005811015610178576110f69061139e565b60405190818382549182815201908192600052846000209060005b8682821061116757868661112782880383611426565b604051928392818401908285525180915260408401929160005b82811061115057505050500390f35b835185528695509381019392810192600101611141565b835485529093019260019283019201611111565b346101785761118936611366565b9061119261172b565b61119b81611385565b82600052602052600260406000206111bd60018060a01b03825416151561161e565b01805460ff1916905560058110156111f6577f39be5d3af885c85c2a7fc31e6988187615bbfdb819d60a47946d6649391fa59c600080a3005b634e487b7160e01b600052602160045260246000fd5b346101785761121d61032236611366565b60009182526020526040902080546001600160a01b031661043461124360018401611448565b9260ff6002820154169061125e600460038301549201611448565b9061127b604051968796875260a0602088015260a08701906114ed565b9215156040860152606085015283820360808501526114ed565b34610178576112a336611366565b906112ac61172b565b6112b581611385565b82600052602052600260406000206112d760018060a01b03825416151561161e565b01805460ff1916600117905560058110156111f6577fdc28df28073bd34b19e2f34e06b002b9f73e5715bfeb6e52ab2255c2cc60c06b600080a3005b34610178576020366003190112610178576004359063ffffffff60e01b821680920361017857602091637965db0b60e01b8114908115611355575b5015158152f35b6301ffc9a760e01b1490508361134e565b6040906003190112610178576004356005811015610178579060243590565b60058110156111f6576000526000602052604060002090565b60058110156111f6576000526001602052604060002090565b60058110156111f6576000526003602052604060002090565b90600182811c92168015611400575b60208310146113ea57565b634e487b7160e01b600052602260045260246000fd5b91607f16916113df565b60a0810190811067ffffffffffffffff82111761043857604052565b90601f8019910116810190811067ffffffffffffffff82111761043857604052565b9060405191826000825461145b816113d0565b908184526020946001916001811690816000146114cb575060011461148c575b50505061148a92500383611426565b565b600090815285812095935091905b8183106114b357505061148a935082010138808061147b565b8554888401850152948501948794509183019161149a565b9250505061148a94925060ff191682840152151560051b82010138808061147b565b919082519283825260005b848110611519575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016114f8565b602435906001600160a01b038216820361017857565b600435906001600160a01b038216820361017857565b604435906001600160a01b038216820361017857565b67ffffffffffffffff811161043857601f01601f191660200190565b9291926115978261156f565b916115a56040519384611426565b829481845281830111610178578281602093846000960137010152565b9181601f840112156101785782359167ffffffffffffffff8311610178576020838186019501011161017857565b80548210156116085760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b1561162557565b60405162461bcd60e51b815260206004820152601060248201526f141b1d59da5b881b9bdd08199bdd5b9960821b6044820152606490fd5b1561166457565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b1561169f57565b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b6044820152606490fd5b90601f81116116e357505050565b6000916000526020600020906020601f850160051c83019410611721575b601f0160051c01915b82811061171657505050565b81815560010161170a565b9092508290611701565b3360009081527f8b6686aea1ede07eaae152938a84efff8c6bc7c90343bb6da6aa1ecb37807a8360205260409020547fa3974031532a6f2ec89fd46c4443deed522229db0849f394d7ffcb8778f6ab879060ff16156117875750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b80600052600080516020611b7d83398151915260205260406000203360005260205260ff60406000205416156117875750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812054909190600080516020611b7d8339815191529060ff16611861578280526020526040822081835260205260408220600160ff198254161790553391600080516020611b5d8339815191528180a4600190565b505090565b6001600160a01b031660008181527f8b6686aea1ede07eaae152938a84efff8c6bc7c90343bb6da6aa1ecb37807a8360205260408120549091907fa3974031532a6f2ec89fd46c4443deed522229db0849f394d7ffcb8778f6ab8790600080516020611b7d8339815191529060ff16611910578184526020526040832082845260205260408320600160ff19825416179055600080516020611b5d833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860205260408120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e390600080516020611b7d8339815191529060ff16611910578184526020526040832082845260205260408320600160ff19825416179055600080516020611b5d833981519152339380a4600190565b90600091808352600080516020611b7d83398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014611910578184526020526040832082845260205260408320600160ff19825416179055600080516020611b5d833981519152339380a4600190565b90600091808352600080516020611b7d83398151915280602052604084209260018060a01b03169283855260205260ff60408520541660001461191057818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611ae757565b604051631afcd79f60e31b8152600490fd5b90611b205750805115611b0e57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580611b53575b611b31575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15611b2956fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212208af662d579c1e68ab1b624db97be783c02277dfac2209aad8f1686c9440e4c6064736f6c63430008160033",
"linkReferences": {},
"deployedLinkReferences": {}
}