From 7338234868dcc9df233e8fc35a461c5d9363086a Mon Sep 17 00:00:00 2001 From: GitGuru7 <128375421+GitGuru7@users.noreply.github.com> Date: Mon, 7 Oct 2024 18:21:48 +0530 Subject: [PATCH 1/5] feat: deploy ACMAggregator on zksyncsepolia & add script for ACM permission for ZKsync --- deploy/009-configure-zksync-governance.ts | 122 +++++ .../zksyncsepolia/ACMCommandsAggregator.json | 465 ++++++++++++++++++ .../0be793521835d17f112344b451092640.json | 43 ++ 3 files changed, 630 insertions(+) create mode 100644 deploy/009-configure-zksync-governance.ts create mode 100644 deployments/zksyncsepolia/ACMCommandsAggregator.json create mode 100644 deployments/zksyncsepolia/solcInputs/0be793521835d17f112344b451092640.json diff --git a/deploy/009-configure-zksync-governance.ts b/deploy/009-configure-zksync-governance.ts new file mode 100644 index 00000000..2dcc41b8 --- /dev/null +++ b/deploy/009-configure-zksync-governance.ts @@ -0,0 +1,122 @@ +import { ethers, network } from "hardhat"; +import { DeployFunction } from "hardhat-deploy/types"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { ACMCommandsAggregator } from "typechain"; + +import { SUPPORTED_NETWORKS } from "../helpers/deploy/constants"; +import { guardian } from "../helpers/deploy/deploymentUtils"; + +const functionSignatures = { + normal: [ + "setSendVersion(uint16)", + "setReceiveVersion(uint16)", + "setMaxDailyReceiveLimit(uint256)", + "pause()", + "setPrecrime(address)", + "setMinDstGas(uint16,uint16,uint256)", + "setPayloadSizeLimit(uint16,uint256)", + "setConfig(uint16,uint16,uint256,bytes)", + "addTimelocks(address[])", + "setTrustedRemoteAddress(uint16,bytes)", + "setTimelockPendingAdmin(address,uint8)", + "retryMessage(uint16,bytes,uint64,bytes)", + "setGuardian(address)", + "setSrcChainId(uint16)", + "transferBridgeOwnership(address)", + ], + fasttrack: [ + "setReceiveVersion(uint16)", + "setMaxDailyReceiveLimit(uint256)", + "pause()", + "setConfig(uint16,uint16,uint256,bytes)", + "addTimelocks(address[])", + "retryMessage(uint16,bytes,uint64,bytes)", + ], + critical: [ + "setReceiveVersion(uint16)", + "setMaxDailyReceiveLimit(uint256)", + "pause()", + "setConfig(uint16,uint16,uint256,bytes)", + "addTimelocks(address[])", + "retryMessage(uint16,bytes,uint64,bytes)", + ], + guardian: [ + "setReceiveVersion(uint16)", + "forceResumeReceive(uint16,bytes)", + "setMaxDailyReceiveLimit(uint256)", + "pause()", + "unpause()", + "setConfig(uint16,uint16,uint256,bytes)", + "addTimelocks(address[])", + "setTrustedRemoteAddress(uint16,bytes)", + "setTimelockPendingAdmin(address,uint8)", + "retryMessage(uint16,bytes,uint64,bytes)", + "setSrcChainId(uint16)", + "transferBridgeOwnership(address)", + ], +}; + +const grantPermissions = ( + OMNICHAIN_EXECUTOR_OWNER: string, + functionSigs: string[], + account: string, +): ACMCommandsAggregator.PermissionStruct[] => + functionSigs.map(functionSig => ({ + contractAddress: OMNICHAIN_EXECUTOR_OWNER, + functionSig: functionSig, + account: account, + })); + +const func: DeployFunction = async function () { + const NORMAL_TIMELOCK = await ethers.getContract("NormalTimelock"); + const FASTTRACK_TIMELOCK = await ethers.getContract("FastTrackTimelock"); + const CRITICAL_TIMELOCK = await ethers.getContract("CriticalTimelock"); + const OMNICHAIN_EXECUTOR_OWNER = await ethers.getContract("OmnichainExecutorOwner"); + const GUARDIAN = await guardian(network.name as SUPPORTED_NETWORKS); + const acmCommandsAggregator: ACMCommandsAggregator = await ethers.getContract("ACMCommandsAggregator"); + + // Grant permissions for each category + const normalGrantPermissions = grantPermissions( + OMNICHAIN_EXECUTOR_OWNER.address, + functionSignatures.normal, + NORMAL_TIMELOCK.address, + ); + const fasttrackGrantPermissions = grantPermissions( + OMNICHAIN_EXECUTOR_OWNER.address, + functionSignatures.fasttrack, + FASTTRACK_TIMELOCK.address, + ); + const criticalGrantPermissions = grantPermissions( + OMNICHAIN_EXECUTOR_OWNER.address, + functionSignatures.critical, + CRITICAL_TIMELOCK.address, + ); + const guardianGrantPermissions = grantPermissions( + OMNICHAIN_EXECUTOR_OWNER.address, + functionSignatures.guardian, + GUARDIAN, + ); + + const allGrantPermissions: ACMCommandsAggregator.PermissionStruct[] = [ + ...normalGrantPermissions, + ...fasttrackGrantPermissions, + ...criticalGrantPermissions, + ...guardianGrantPermissions, + ]; + + try { + const tx = await acmCommandsAggregator.addGrantPermissions(allGrantPermissions); + + const receipt = await tx.wait(); + const events = receipt.events?.filter(event => event.event === "GrantPermissionsAdded"); + console.log("Grant Permissions for ZKsync added with indexes: ", events?.[0].args?.index.toString()); + } catch (error) { + console.error("Error adding grant permissions:", error); + } +}; +func.tags = ["zksync-permissions"]; + +func.skip = async (hre: HardhatRuntimeEnvironment) => + hre.network.name != "zksyncsepolia" && hre.network.name != "zksyncmainnet"; + +export default func; diff --git a/deployments/zksyncsepolia/ACMCommandsAggregator.json b/deployments/zksyncsepolia/ACMCommandsAggregator.json new file mode 100644 index 00000000..03cb91dd --- /dev/null +++ b/deployments/zksyncsepolia/ACMCommandsAggregator.json @@ -0,0 +1,465 @@ +{ + "address": "0x920Bb18c4bd4D7bc41Bf39933BCAa3D078641502", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IAccessControlManagerV8", + "name": "_acm", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "EmptyPermissions", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddressNotAllowed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "GrantPermissionsAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "GrantPermissionsExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "RevokePermissionsAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "RevokePermissionsExecuted", + "type": "event" + }, + { + "inputs": [], + "name": "ACM", + "outputs": [ + { + "internalType": "contract IAccessControlManagerV8", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "functionSig", + "type": "string" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "internalType": "struct ACMCommandsAggregator.Permission[]", + "name": "_permissions", + "type": "tuple[]" + } + ], + "name": "addGrantPermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "functionSig", + "type": "string" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "internalType": "struct ACMCommandsAggregator.Permission[]", + "name": "_permissions", + "type": "tuple[]" + } + ], + "name": "addRevokePermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "executeGrantPermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "executeRevokePermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "grantPermissions", + "outputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "functionSig", + "type": "string" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "revokePermissions", + "outputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "functionSig", + "type": "string" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x51dff6be8f5cee72d003304b7354411301985af347fa7964b596fbadc31f4925", + "receipt": { + "to": "0x0000000000000000000000000000000000008006", + "from": "0xE8C6Cf867CF962d289305ECE9b139a4116674541", + "contractAddress": "0x920Bb18c4bd4D7bc41Bf39933BCAa3D078641502", + "transactionIndex": 0, + "gasUsed": "93356464", + "logsBloom": "0x00000000000400080000010000080000000000800000400000000000000000000000000000000000080000000001000000000000000000000000000000000000100100000000040000000028000040000400000000000000000000000000080000000000020100001000000000000800000080000000400000000010000000000000001000000000000004000100000000000100000000000000000000000080800000000000100000000000800100000008000000000000002000010000000000000002008000000000000000000000000c10000100000000000000000120000000000000000000000000004000000000000040000000000000000080000000", + "blockHash": "0xb6129f68307fd23fa42847ed69694b2b8f8107a6d87fcf97842b129a375c650f", + "transactionHash": "0x51dff6be8f5cee72d003304b7354411301985af347fa7964b596fbadc31f4925", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 3880027, + "transactionHash": "0x51dff6be8f5cee72d003304b7354411301985af347fa7964b596fbadc31f4925", + "address": "0x000000000000000000000000000000000000800A", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000e8c6cf867cf962d289305ece9b139a4116674541", + "0x0000000000000000000000000000000000000000000000000000000000008001" + ], + "data": "0x00000000000000000000000000000000000000000000000000115b8db89e9c80", + "logIndex": 0, + "blockHash": "0xb6129f68307fd23fa42847ed69694b2b8f8107a6d87fcf97842b129a375c650f" + }, + { + "transactionIndex": 0, + "blockNumber": 3880027, + "transactionHash": "0x51dff6be8f5cee72d003304b7354411301985af347fa7964b596fbadc31f4925", + "address": "0x0000000000000000000000000000000000008008", + "topics": ["0x27fe8c0b49f49507b9d4fe5968c9f49edfe5c9df277d433a07a0717ede97638d"], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000005e0000000000000000000000000000000000000000000000000000000000008008000000000000000000000000000000000000000000000000000000000000800e1288e5de68629fcb462fda8d25ae6c9fac5a283da71d0bdc0898c3deea8418ed", + "logIndex": 1, + "blockHash": "0xb6129f68307fd23fa42847ed69694b2b8f8107a6d87fcf97842b129a375c650f" + }, + { + "transactionIndex": 0, + "blockNumber": 3880027, + "transactionHash": "0x51dff6be8f5cee72d003304b7354411301985af347fa7964b596fbadc31f4925", + "address": "0x0000000000000000000000000000000000008008", + "topics": [ + "0x3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce241", + "0x000000000000000000000000000000000000000000000000000000000000800e", + "0x1288e5de68629fcb462fda8d25ae6c9fac5a283da71d0bdc0898c3deea8418ed" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002672030d00000000000000000000000100200190000001ff0000213d0000019401008041000001940010009cffffffffffffffff064a06450000040f0000006a0000213d000001a9011001c7000000000101043b000000c00110021000000000010004140000006a0000613d0000006a0000c13d00008010020000390000064c000104300000000001000019000000000010043f00000008070000290000006a0000413d0000019701100197000000000101041a000000000002004b000000000001042d00000000002104350000000001010433000000000001004b000000000202043b000000000112019f000005450000a13d000000000121019f000001ab0010009c0000019402008041000001940020009c00000000004304350000000a05000029000001b901000041000000040010043f000001b80100004100000007060000290000000a02000029000000400700043d0000000002000416000000400010043f0000064b0001042e000001ab0040009c000000000003004b0000000102200039000000000200003900000003022000c900000001010000390000006a0000813d000001ab0020009c00000000001204350000000103000039000000c0022002100000000002000414000000000021004b000000000201043b000000020a0000290000000609000029000000070800002900000000000b004b0000000906000029000000000300001900000020010000390000004002200210000000000402041a000000000031004b000000000403043b000000400100043d000001be02200167000001be0220027f000000000082004b000000200330003900000000050504330000002003000039000000000012004b0000001f01100039000000000070043f000800000007001d0000054c0000c13d0000000100100190000000000020043f000000010110003900000000030104330000000002020433000000400500043d0000000b02000029000000000012041b00000006010000290000000402000029000000800100043d000001ff0000c13d0000000004000039000000400800043d0000000a03000029000000000004004b0000800d02000039000001940070009c0000054b0000613d0000000000100443000400000001001d0000000501000029000000000100041a0000000401100370000000400020043f0200000200000000000000000001042f0000019403008041000001940030009c0000000001210019000001bd0110019700000000000304350000000102004039000001bd021001970000003f011000390000000001006039000001bf01200197000000200110003900000001040020390000000103200190000000000201041a00000060011002100000019702100197000000000102041a0000000002010019064a06400000040f0000000000d3004b00000040011002100000000001080433000000000041004b000000000113001900000197022001970000000000140435000000400040043f00000040011000390000000b0100002900000001040000390000000101200039000000000006004b000001aa0080009c000003510000613d0000000000d2004b0000010004400089000000000545022f00000000054501cf000000000701034f000002380000013d0000000001000412000000000000043fffffffffffffffe07fffffffffffffff000000240000000000000000ffffffff00000000020000190000000102000039000005ef0000013d0000000205000029000000000038004b0000000008980436000000007907043c00000000080200190000056d0000613d0000000003520019000000400200043d00000196056001980000001f0460018f000000600620027000000022010000390000003201000039000004e10000013d000000000043004b000003c80000813d0000002006600039000001bd03300197000000400030043f000000040030006c00000001033000390000000b03000029000000400070043f000001ab0070009c0000000907000029000900000007001d0000000002040019000000c002300210000000000207401900000194020000410000000001710049000000040040008c0000000a040000290000000003000414000000070400002900000044037000390000000003120019000000000013004b000000000054043500000000053600190000000004230019000000840270003900000064027000390000000801000029000000040270003900000000002704350000000000320435000000600300003900000024027000390000800202000039000001ad011001c70000000400500443000001ac01000041000600000001001d000700000002001d0000004001800039000000020190003900000000007a043500000000017200190000000000160435000002e30000013d0000000000b1004b0000000003160019000000010b000029000700000008001d000600000009001d00020000000a001d00010000000b001d000900000006001d0000000006b704360000001f00b0008c0000007f0bb0618f000000010b2002700000000101900039000000000a180436000000000109041a00000060018000390000000009210019000b00000003001d0000000302000029000000050010006c000a01970010019b000000800010043f00000000010500190000019704400197000000000301041a0000004101000039000000000331034f000000000303043b000001a40110009a00000024021003700000004400d0008c000000000021041b000000000223016f00000000030304330000000003930019000000f80220018f0000000302800210000000000121016f000000000005004b0000010c0000813d000000000051041b0000000005930019000000010430003900000000033100190000000503300270000000010320008a0000000509000029000001bd028001980000000908000029000000000002041b000000000223001900000005011002700000000201000029000000000301043b00000000020040190000000502200270000500000003001d000700000006001d000000200040008c000000000121013f00000001020020390000001f0040008c000000000107041a00000001076000390000000901000029000000000016041b0000000802000029000001b401100197000000000106041a00000000062100190000000702000029000700000001001d000800000005001d0000000a01000029000900000001001d00000000011504360000019701300197000600000004001d000000400450003900000060045000390000002002100039000000a0011000390000000501100210000001aa0050009c000000040010006c0000000b0010006b000b00010020003d000000000113019f000001b403300197000000000302041a0000000202600039000000000017041b00000001011001bf0000000101800210000b00000000001d0000000000870435000000000023043500000040038000390000000b0d0000290000000000ca04350000001f0db001900000000000ed004b000000000d3d043600000000f30f043c0000000100400190000000400c00043d000001bd02200197000001ab00b0009c000000240fe000390000000006000019000001b3040080410000000004000019000001970040009c000000000421034f0000000800d0006b000000000221034f000a00000002001d0009002400d00094000000000151019f00000000014101cf000000000141022f0000000304400210000000000151034f000000000026004b000000400170021000000194070080410000000000170435000000040000006b0000800502000039000001a8011001c700000024000004430000000400100443000001a501000041000300000001001d000001a70110009a000500000002001d0000002400d0008c0000000003010019ffffffffffffff005ad3d868f84e1a71490966e8b80679fe8b03daa05db815f01382323d6618527d545f7a3200000000ffffffffffffffa04e487b71000000004494013c0000000006f8402cecd1478f8da9a15fda86dacf0645dc4a32bb7d5e75922591bf2cec98ca785aecc4d25e9f98be717fb881e0b172501c37ef5e9e82f8ca6ea7cc31be85ffffffff000000008000000000000000ffffffffffffff7f6ffd6636d82de9889a4c72d26be0890232ecab72ec192c3f01a805f459381af6584f6b6000000000023a8d90e8508b8302500962caba6a1568e884a7374b41e01806aa1896bbf265ffffffffffffff9f000000200000000002000000000000000000004400000000c9d06ce9f10c1a9db459436ab7bff70929fcba5677c79037d6f21326ab749d570000002000000080ab882de59d99a32eff553aecb10793d015d089f94afb7896310ab089e4439a4cd260341d4805f30af30bb4b5053d4f8cd91132028e8195cd4ef1d2ad89edf8c4000000005666a5ea00000000514aab870000000022473d8c00000000de46a235000000009d6c76b800000000ff1575e100000000f9b80da100000000f9b80da0000000009d6c76b700000004000000008579befe000000000000008000000100000000020000000000000000ffffffe000000001ffffffe00000064a00000432000006480021042300000643002104210000063f0000613d0000000002050019000001c0011001c700000060013002100000062a0000413d0000002004400039000000000121043a000000000202003100000005024002700000000401000039000000000020044300000000050100190000001f01200039000000000041043500000000000504350000000005230019000006160000413d0000000008080433000000000865001900000000076300190000061d0000613d000000800310003900000060031000390000000052030434000000000065043500000060060000390000002005100039000006020000c13d000006020000213d0000000001520019000005df0000413d000000000061004b00000000031700190000000107000029000005ed0000613d0000000306000029000006080000613d000200000005001d000300000006001d000100000004001d000005e70000613d0000000004650436000005fc0000c13d0000001f0060008c0000007f0660618f000000010620027000030000000000020000000102000029000005bb0000613d000005b50000a13d000000000023004b000100000002001d0001000000000002000001b504000041000001b6040000410000006001600210000000000013043500000000050304330000057b0000613d0000019406600197000005690000c13d0000056d0000013d0000055b0000c13d0000022a0000013d000004840000413d000005600000613d0000053d0000613d000005170000413d0000051e0000613d000001bb02000041000004cd0000413d000004db0000613d000004d50000613d000001ff0000813d000001ba0080009c000003c80000013d000003ca0000013d000000010240021000000003024002100000046d0000013d00000000010504330000046c0000613d000004790000013d0000045e0000c13d000004740000613d000004680000a13d000004420000413d000004460000813d00000003050000290000001f024000390000000904000029000300000005001d000200000008001d000004460000413d000900000004001d000000200080008c0000001f0080008c0000007f0880618f00000001081002700000000054030434000005910000813d000003d80000013d000a01a7002000a2000000000010041b000003540000413d000000080060006c0000000000820435000000200220003900000020039000390000000003b7001900000000003e0435000000000353019f00000000034301cf000000000343022f00000000050e04330000000304d00210000000000345034f000003ab0000613d0000039a0000c13d000000000d070019000000000f05034f0000039e0000613d000000000e470019000001bd04b00198000000000531034f0000002003f0003900000044033000390000000003be00190000000007bc04360000000100500190000000010500403900000000050000390000000000c4004b00000000043c00190000003f033000390000001f03b00039000000000b03043b0000000003f1034f000000000504c019000001b30030009c000001b3050040410000000005000019000001b3033001970000004303e00039000000000eb40019000000000391034f0000002009400039000000000a580436000001970050009c000000000503043b000000000341034f0000002404b000390000006003800039000000600040008c000001b20040009c0000000904b000690000000a0b400029000000000361034f000001e00000013d000001b702000041000003540000c13d000800000065001d0000002406300039000000800040043f0000008003600039000000380000013d000002860000413d000005520000613d0000033f0000613d000003190000413d000003200000613d000001ae02000041000002cf0000413d000002dd0000613d000002d70000613d000000000442013f00000198010000410000012000100443000001000010044300000160001004430000014000000443000001a601000041064a06270000040f000001a50200004100000005044002100000000d0440008a000000000400041500000044030000390000800501000039000c00000000003d000d00000001001d00000000010004160000000001210049064a060a0000040f000a00000005001d0000000202200039064a05bd0000040f000b00000001001d064a05a10000040f000000000032004b000000000300041a000001bc04000041000004820000c13d000003470000a13d000001b10060009c000001b0063001970000003f03500039000000050540021000000004033000390000002303300039000001ab0030009c000a00000003001d000000040310037000000000030004160000019a011001c700000199020000410000027b0000c13d0000024b0000013d000000000030043f000000000403041a0000019e0040009c0000026a0000613d0000019d0040009c0000010c0000013d0000010f0000013d00000001025002100000000302500210000001b30000013d000001b20000613d000001bf0000013d000001a30000c13d000001ba0000613d000001ad0000a13d0000001f0050008c000001870000413d0000018b0000813d0000000308000029000000200050008c0000001f025000390000000905000029000300000008001d000200000004001d0000018b0000413d000900000005001d0000007f0440618f0000000104100270000001ab0050009c0000000085030434000000000040043f000000000104041a000005810000813d0000011d0000013d000a01a4002000a2000000000014041b000000960000413d000000080050006c00000020055000390000002007700039000001970020009c000000200290003900000000000204350000000002b6001900000000002e0435000000000242019f00000000023201cf000000000232022f0000010003300089000000000434022f00000000043401cf00000000040e04330000000303d00210000000000224034f000000ed0000613d000000dc0000c13d000000000d060019000000000f04034f000000e00000613d000000000e260019000001bd02b001980000002002f0003900000044022000390000000002be00190000000006bc043600000001040040390000000000c2004b00000000022c00190000003f022000390000001f02b00039000000000b02043b0000000002f1034f000000000604c019000001b30020009c000001b306004041000001b3022001970000004302e00039000000000eb20019000000000291034f0000002009200039000000000a480436000000000404043b0000002402b000390000006002800039000000600020008c000001b20020009c0000000902b000690000000a0b200029000000000251034f0000008007000039000800000054001d0000002405300039000000800020043f000000400050043f0000008005500039000001b10050009c000001b0055001970000003f054000390000000504200210000000040220003900000023022000390000000402100370000001a30040009c0000023d0000613d000001a20040009c000002050000613d000001a10040009c000001dc0000a13d000001970010009c000000a00100043d0000002000d0008c0000000005020433000000650000613d000000540000c13d0000000006860436000000007807043c000000a006000039000000580000613d000000a0025000390000019605d001980000001f04d0018f000000a00220003900000195022001970000001f02d00039000001af04000041000002840000c13d000001a00040009c000001e60000613d0000019f0040009c000001c80000213d0000019c0040009c0000006c0000a13d000b0000000d001d0000019b0040009c000000e004400270000000000401043b0000000400d0008c0000008002000039000000470000c13d000001940d3001970000006003300270000d000000000002030c0164030b030a000103090308006a03070013030603050304030303020301030002ff02fe02fd000d01630013002a0016000d0069003a006801620039001d009600670161016000150066015f00650095015e015d000b00040003000a015c015b0006000100640009015a02fc0029006701590063015801570038002100200037001c00080062003602fb0094002a0016000d02fa02f902f8006a02f702f602f502f402f3009302f202f1015602f0006102ef0155015402ee0092009100090090015301520151003502ed001302ec02eb02ea0010000f02e902e802e702e602e5000d01500013002a0016000d02e4001b014f00340007002802e3008f0033002802e2014e001b0034000202e102e002df02de000202dd02dc02db006002da02d9014d00070016008e02d802d7001b0034000702d602d502d4000702d30013005f008d000202d2006a02d1014c02d0014b000702cf02ce02cd001b0034000702cc02cb008f014a014902ca0016014802c902c802c7008c000d014702c602c50146000202c4014502c30145014402c202c1005e02c0003400020143005d006a02bf02be02bd008f000702bc014c02bb02ba02b902b802b701420141014002b6013f02b502b402b302b202b102b0001b02af02ae02ad02ac02ab02aa02a9013e02a8014e001b02a7013d000702a6013c013b013a02a502a402a3005c001a008e003200150066001f0002005b008b008a02a202a1013902a001380137008a0136005a001900140135013401330132005900580131005c0130029f029e012f001d029d0057012e00020089012d012c0019012b0056005500880019012a00870014012901280086012701260125001801240015001f0002012301220054002800590053000b00040003000a0008000e00060001000c0121003100090120011f011e011d00560085001e011c011b0055029c029b0002011a01190052029a029901180030011701160052005101150114005002980113029702960295004f000b00040003000a0008000e00060001000c029402930112029201110110010f004e010e0084010d004d0027001202910290010c002f004d028f028e028d004f000b00040003000a0008000e00060001000c010b010a00090109028c0108010701060105004c002700120104004b0103004a00540083028b00490102028a0101008a028900820288001002870048004701000286001e0285004c002700120049010200ff00fe0048004700fd00fc00fb00fa0284028302820281000d00f90013002a0016000d00f8001b006900090036028000830033027f00f7027e001a027d0046027c0018000400030081027b000f01500013027a002e000d027900f602780277000700600276008000330060027500f50045002d0002027402730272027102700026001100f400250024000f01630013002a0016000d0069003a0032001501620039001d00320011006700f7016000150066015f00650095015e015d000b00040003000a015c015b0006000100640009015a026f0029006701590063015801570038002100200037001c000800620036026e007f0001000c0010002c00f90013002a0016000d00f8001b00690009026d004400330096016100f3026c0033026b007e014f007d026a008b02690028026800430164005702670089007c00f200f102660028026500040003007b002100200042001e002c0264001a000d00950263026202610260025f025e025d025c025b001400f0025a002c00f00259025800410257003202560255002c00ef0040006800ee00ed001d007d0044001d00ec0053000b00040003000a0008000e00060001000c0009005f008d002300020058003100eb00ea002b00e9001400e800e7007a007900e600e500e4005e0078025401430051002900e3002e00e20050025300e100e000df00de0011000b00040003000a0008000e0006003f0001000c00dd003e0252003a001000230012003d003c003b00dc00430022002f007700db025100da007600d9003e0041007500da001000230012003d003c003b0074007300d8003900300072001f00020001005d002b00d700d60015007c00d500d40018008200d300d2006500d1000b00040003000a00d000cf0006000100640009001a003f000c005a0014002900ce00cd00cc025000cb00ca003500c9001900c8003500c7001a024f004000c600c5004b00c4004a00c3024e00c2007100c100c0002200bf00be00bd024d004e007000bc006f00040003007b006300bb00ba0042001e006e006d00b9001c00b800b7007f00b60001024c00b5000200b400b300b200b1024b024a024900b00248006002470246014d00070061024500460244024302420045002d000702410240023f0007023e0013005f008d0002023d00b0023c023b023a023900070238023702360045002d0007023502340080014a01490233002e023202310230022f0101000d0147022e022d01460002022c00af022b00af0144022a022902280227002d00020226005d008702250224022300800007022202210220021f021e021d021c014201410140021b013f021a0219021802170092009100f60090021602150214021302120071013e021100f50045014b013d00070210013c0022020f00ae020e020d005c001a008e00680066001f0002005b008b020c020b0139020a013801370136005a001900140135013401330132005900580131005c013002090068012f001d00960057012e00020089012d012c0019012b0056005500880019012a00870014012901280086012701260125001801240015001f0002012301220054002800590053000b00040003000a0008000e00060001000c0121003100090120011f011e011d00560085001e011c011b00550208002d0002011a011900520207020602050030011701160052005102040114005002030113020202010200004f000b00040003000a0008000e00060001000c01ff01fe0112011501110110010f004e010e0084010d004d0027001201fd01fc010c002f004d01fb011801fa004f000b00040003000a0008000e00060001000c010b010a0009010901f90108010701060105004c002700120104004b0103004a0054008301f8004900ad01f7006101f601f501f4001001f300480047010001f2001e01f1004c00270012004900ad00ff00fe0048004700fd00fc00fb00fa01f000ef00400032001500ee00ed001d007d0044001d00ec0053000b00040003000a0008000e00060001000c0009005f01ef002301ee0058003100eb00ea002b00e9001400e800e7007a007900e600e500e4005e007800ac0051002900e3002e00e2005001ed00e100e000df00de0011000b00040003000a0008000e0006003f0001000c00dd003e01ec003a001000230012003d003c003b00dc00430022002f007700db01eb00ab007600d9003e0041007500ab001000230012003d003c003b0074007300d8003900300072001f00020001005d002b00d700d60015007c00d500d40018008200d300d2006500d1000b00040003000a00d000cf0006000100640009001a003f000c005a0014002900ce00cd00cc01ea00cb00ca003500c9001900c8003500c7001a01e9004000c600c5004b00c4004a00c301e800c2007100c100c0002200bf00be00bd01e7004e007000bc006f00040003007b006300bb00ba0042001e006e006d00b9001c00b800b7007f00b6000101e600b5000200b400b300b200b101e501e40026001100aa00250024000f006c0026001100a900250024000f007e00a800a700a600a500a400a3009300a200a100a0009f01e301e2007e00a800a700a600a500a400a3009300a200a100a0009f01e101e0006101df0155015401de009200910009009001530152015101dd01dc002100200042001c000f0046005b00180004000300810038002100200037001c00080062003601db00940046005b00180004000300810038002100200037001c00080062003601da009401d900f301d801d701d60011000b00040003000a0008000e0006000101d501d400310009006f00170026001100aa00250024000f0010000f01d3007a007901d201d101d0005e007800ac01cf005701ce002e01cd01cc01cb01ca0011000b00040003000a0008000e0006000101c901c8008c01c7003a0010009e01c601c500430022002f007701c401c3009d00760086008c00410075009d0010009e0074007301c2003900300072001f01c1000101c0002b00f100170026001100a900250024000f0026001100f400250024000f0010000f01bf01be01bd0085001801bc01bb013b01ba001601b9014801b801b701b6013a00ae015601b501b401b300f2008801b201b1007000840017006c01b001af01ae01ad01ac01ab01aa004401a9006e006d01a80038002100200037001c01a701a60006000101a500090017006c01a4009c0017009b001701a3009c0017009b001701a2002c000f000000000000000000000000009a00000000000001a100000000000001a00000009a00050005019f0000019e0000019d00000000000000000000019c0000000000000000019b000000000000019a0000000000000199000000000000019800000000000001970000000000000196000000000000019500000000000001940000000000000193019201910190018f018e018d018c018b00000000018a00000189018801870186006b00000185000001840000018300000000000000000182000000000000000501810180017f017e006b000000990000017d000000000000017c017b017a017900980005000500970000000000000178009800050005000501770000000000000005017600000000017501740173017201710170016f016e016d000000000000016c0000000000000000000000990000000000000000016b016a0000000000000169016801670166000500050005009700050005000500050005000500050165006b0000000000000000000000000000000000000000", + "logIndex": 2, + "blockHash": "0xb6129f68307fd23fa42847ed69694b2b8f8107a6d87fcf97842b129a375c650f" + }, + { + "transactionIndex": 0, + "blockNumber": 3880027, + "transactionHash": "0x51dff6be8f5cee72d003304b7354411301985af347fa7964b596fbadc31f4925", + "address": "0x0000000000000000000000000000000000008004", + "topics": [ + "0xc94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e618287", + "0x010001c1e30aa763cc70e7764c49f96eecfb59fe1bf9bb30c975b6be70d490ea", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xb6129f68307fd23fa42847ed69694b2b8f8107a6d87fcf97842b129a375c650f" + }, + { + "transactionIndex": 0, + "blockNumber": 3880027, + "transactionHash": "0x51dff6be8f5cee72d003304b7354411301985af347fa7964b596fbadc31f4925", + "address": "0x0000000000000000000000000000000000008006", + "topics": [ + "0x290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e5", + "0x000000000000000000000000e8c6cf867cf962d289305ece9b139a4116674541", + "0x010001c1e30aa763cc70e7764c49f96eecfb59fe1bf9bb30c975b6be70d490ea", + "0x000000000000000000000000920bb18c4bd4d7bc41bf39933bcaa3d078641502" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xb6129f68307fd23fa42847ed69694b2b8f8107a6d87fcf97842b129a375c650f" + }, + { + "transactionIndex": 0, + "blockNumber": 3880027, + "transactionHash": "0x51dff6be8f5cee72d003304b7354411301985af347fa7964b596fbadc31f4925", + "address": "0x000000000000000000000000000000000000800A", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000008001", + "0x000000000000000000000000e8c6cf867cf962d289305ece9b139a4116674541" + ], + "data": "0x000000000000000000000000000000000000000000000000000910df94c3b080", + "logIndex": 5, + "blockHash": "0xb6129f68307fd23fa42847ed69694b2b8f8107a6d87fcf97842b129a375c650f" + } + ], + "blockNumber": 3880027, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": ["0xD07f543d47c3a8997D6079958308e981AC14CD01"], + "numDeployments": 1, + "solcInputHash": "0be793521835d17f112344b451092640", + "metadata": { + "llvm_options": [], + "optimizer_settings": { + "is_debug_logging_enabled": false, + "is_fallback_to_size_enabled": false, + "is_verify_each_enabled": false, + "level_back_end": "Aggressive", + "level_middle_end": "Aggressive", + "level_middle_end_size": "Zero" + }, + "solc_version": "0.8.25", + "solc_zkvm_edition": "1.0.1", + "source_metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.47b979f3\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"_acm\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"EmptyPermissions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"GrantPermissionsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"GrantPermissionsExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"RevokePermissionsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"RevokePermissionsExecuted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACM\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"internalType\":\"struct ACMCommandsAggregator.Permission[]\",\"name\":\"_permissions\",\"type\":\"tuple[]\"}],\"name\":\"addGrantPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"internalType\":\"struct ACMCommandsAggregator.Permission[]\",\"name\":\"_permissions\",\"type\":\"tuple[]\"}],\"name\":\"addRevokePermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"executeGrantPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"executeRevokePermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"grantPermissions\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"revokePermissions\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{},\"title\":\"ACMCommandsAggregator\",\"version\":1},\"userdoc\":{\"errors\":{\"ZeroAddressNotAllowed()\":[{\"notice\":\"Thrown if the supplied address is a zero address where it is not allowed\"}]},\"kind\":\"user\",\"methods\":{\"ACM()\":{\"notice\":\"Access control manager contract\"}},\"notice\":\"This contract is a helper to aggregate multiple grant and revoke permissions in batches and execute them in one go.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Utils/ACMCommandsAggregator.sol\":\"ACMCommandsAggregator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":false,\"deduplicate\":false,\"inliner\":false,\"jumpdestRemover\":false,\"orderLiterals\":false,\"peephole\":false,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOcmu\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"@venusprotocol/solidity-utilities/contracts/validators.sol\":{\"keccak256\":\"0xdb88e14d50dd21889ca3329d755673d022c47e8da005b6a545c7f69c2c4b7b86\",\"license\":\"BSD-3-Clause\",\"urls\":[\"bzz-raw://7fc4c2b30dabdce32229df72fd00fa49d5a813bea8a7717fe8481cc5896d4183\",\"dweb:/ipfs/QmZmxLnp3QSBahyRaUhezdVLPsTtXErghdLHpiGrkr19XJ\"]},\"contracts/Governance/IAccessControlManagerV8.sol\":{\"keccak256\":\"0xaa29b098440d0b3a131c5ecdf25ce548790c1b5ac7bf9b5c0264b6af6f7a1e0b\",\"license\":\"BSD-3-Clause\",\"urls\":[\"bzz-raw://8120bda3990193388d0cc5f551510ef1eab685387a58a88ab607b5149e51acde\",\"dweb:/ipfs/QmNSX9ai6GbN4wQukM29rFkcWDFhqStUTtKe6XtreTvRcN\"]},\"contracts/Utils/ACMCommandsAggregator.sol\":{\"keccak256\":\"0xe642b8f0e0fedc74d31196197bc7d78b43b44eab556c07ec74d6b75ccf8d0f8c\",\"license\":\"BSD-3-Clause\",\"urls\":[\"bzz-raw://aa9217a447b17f55de871cb7352abbbb73b29bf305d5abbb4975473ad5386e99\",\"dweb:/ipfs/QmccwR6cRfTLSQ9TpdnEtVa341Q8kP8KdR8nSxcuYinKWU\"]}},\"version\":1}", + "zk_version": "1.5.3" + }, + "bytecode": "0x000d00000000000200000000030100190000006003300270000001940d3001970000000100200190000000470000c13d0000008002000039000000400020043f0000000400d0008c0000006a0000413d000000000401043b000000e0044002700000019b0040009c000b0000000d001d0000006c0000a13d0000019c0040009c000001c80000213d0000019f0040009c000001e60000613d000001a00040009c0000006a0000c13d0000002400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000000401100370000000000201043b000000000100041a000500000002001d000000000021004b000005450000a13d000000000000043f0000000501000029000001a70110009a000300000001001d000000000101041a000400000001001d000001a50100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000001940010009c0000019401008041000000c001100210000001a8011001c70000800502000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000040000006b000002840000c13d000000400700043d00000005010000290000000000170435000001940070009c000001940700804100000040017002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001af04000041000002380000013d0000000002000416000000000002004b0000006a0000c13d0000001f02d000390000019502200197000000a002200039000000400020043f0000001f04d0018f0000019605d00198000000a002500039000000580000613d000000a006000039000000000701034f000000007807043c0000000006860436000000000026004b000000540000c13d000000000004004b000000650000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000002000d0008c0000006a0000413d000000a00100043d000001970010009c000001dc0000a13d00000000010000190000064c00010430000001a10040009c000002050000613d000001a20040009c0000023d0000613d000001a30040009c0000006a0000c13d0009002400d000940000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000000402100370000000000202043b000a00000002001d000001ab0020009c0000006a0000213d0000000a0200002900000023022000390000000000d2004b0000006a0000813d0000000a020000290000000402200039000000000221034f000000000202043b000001ab0020009c000001ff0000213d00000005042002100000003f05400039000001b005500197000001b10050009c000001ff0000213d0000008005500039000000400050043f000000800020043f0000000a030000290000002405300039000800000054001d0000000800d0006b0000006a0000213d000000000002004b000003510000613d0000008007000039000000000251034f000000000202043b000001ab0020009c0000006a0000213d0000000a0b2000290000000902b00069000001b20020009c0000006a0000213d000000600020008c0000006a0000413d000000400800043d000001aa0080009c000001ff0000213d0000006002800039000000400020043f0000002402b00039000000000421034f000000000404043b000001970040009c0000006a0000213d000000000a4804360000002009200039000000000291034f000000000202043b000001ab0020009c0000006a0000213d000000000eb200190000004302e000390000000000d2004b0000000004000019000001b304008041000001b302200197000000000002004b0000000006000019000001b306004041000001b30020009c000000000604c019000000000006004b0000006a0000c13d000000240fe000390000000002f1034f000000000b02043b000001ab00b0009c000001ff0000213d0000001f02b00039000001bd022001970000003f02200039000001bd02200197000000400c00043d00000000022c00190000000000c2004b00000000040000390000000104004039000001ab0020009c000001ff0000213d0000000100400190000001ff0000c13d000000400020043f0000000006bc04360000000002be001900000044022000390000000000d2004b0000006a0000213d0000002002f00039000000000421034f000001bd02b00198000000000e260019000000e00000613d000000000f04034f000000000d06001900000000f30f043c000000000d3d04360000000000ed004b000000dc0000c13d0000001f0db00190000000ed0000613d000000000224034f0000000303d0021000000000040e043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f00000000002e04350000000002b6001900000000000204350000000000ca04350000002002900039000000000221034f000000000202043b000001970020009c0000000b0d0000290000006a0000213d00000020077000390000004003800039000000000023043500000000008704350000002005500039000000080050006c000000960000413d000000800100043d000000000001004b000003510000613d0000000101000039000000000101041a000400000001001d000001ab0010009c000001ff0000213d000000040200002900000001012000390000000104000039000000000014041b000a01a4002000a2000b00000000001d0000011d0000013d000000010180021000000001011001bf0000000104000039000000000017041b0000000601000029000000000101043300000197011001970000000202600039000000000302041a000001b403300197000000000113019f000000000012041b0000000b02000029000b00010020003d000000800100043d0000000b0010006b000005810000813d000000000104041a000000040010006c000005450000a13d000000000040043f000000400500043d000001aa0050009c000001ff0000213d0000000b010000290000000501100210000000a0011000390000000001010433000000200210003900000000020204330000000003010433000000400110003900000000010104330000006004500039000000400040043f00000197011001970000004004500039000600000004001d000000000014043500000197013001970000000001150436000900000001001d00000000002104350000000a01000029000000000101041a000001ab0010009c000001ff0000213d000800000005001d000700000001001d00000001011000390000000a02000029000000000012041b000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000070200002900000003022000c9000000000101043b0000000006210019000000000106041a000001b401100197000000080200002900000000020204330000019702200197000000000121019f000000000016041b000000090100002900000000030104330000000085030434000001ab0050009c000001ff0000213d0000000107600039000000000107041a000000010010019000000001041002700000007f0440618f0000001f0040008c00000000020000390000000102002039000000000121013f00000001001001900000054c0000c13d000000200040008c000700000006001d000800000007001d000900000005001d000500000003001d0000018b0000413d000200000004001d000300000008001d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d00000009050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b00000002010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000000706000029000000080700002900000003080000290000018b0000813d000000000002041b0000000102200039000000000012004b000001870000413d0000001f0050008c000001ad0000a13d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d0000000908000029000001bd02800198000000000101043b0000000509000029000001ba0000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000706000029000000080700002900000000059300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000001a30000c13d000000000082004b0000010c0000813d000001bf0000013d000000000005004b0000000104000039000001b20000613d0000000001080433000001b30000013d00000000010000190000000302500210000001be0220027f000001be02200167000000000121016f0000000102500210000000000121019f0000010f0000013d000000200300003900000007060000290000000807000029000000000082004b0000010c0000813d0000000302800210000000f80220018f000001be0220027f000001be0220016700000000039300190000000003030433000000000223016f000000000021041b0000010c0000013d0000019d0040009c0000026a0000613d0000019e0040009c0000006a0000c13d0000004400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000002402100370000000000202043b0000000401100370000000000101043b0000000103000039000000000403041a000000000041004b0000006a0000813d000000000030043f000001a40110009a0000024b0000013d000000000001004b0000027b0000c13d000000400100043d00000199020000410000000000210435000001940010009c000001940100804100000040011002100000019a011001c70000064c000104300009002400d000940000006a0000413d0000000003000416000000000003004b0000006a0000c13d0000000403100370000000000303043b000a00000003001d000001ab0030009c0000006a0000213d0000000a0300002900000023033000390000000000d3004b0000006a0000813d0000000a030000290000000403300039000000000331034f000000000403043b000001ab0040009c000001ff0000213d00000005054002100000003f03500039000001b006300197000001b10060009c000003470000a13d000001b801000041000000000010043f0000004101000039000000040010043f000001b9010000410000064c000104300000002400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000000401100370000000000201043b0000000101000039000000000101041a000500000002001d000000000021004b000005450000a13d0000000101000039000000000010043f0000000501000029000001a40110009a000300000001001d000000000101041a000400000001001d000001a50100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000001940010009c0000019401008041000000c001100210000001a8011001c70000800502000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000040000006b000004820000c13d000000400700043d00000005010000290000000000170435000001940070009c000001940700804100000040017002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001bc04000041064a06400000040f00000001002001900000006a0000613d00000000010000190000064b0001042e0000004400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000002402100370000000000202043b0000000401100370000000000101043b000000000300041a000000000031004b0000006a0000813d000000000000043f000001a70110009a000000000301041a000000000032004b0000006a0000813d064a05a10000040f0000000002010019000a00000002001d000000000102041a000b00000001001d0000000101200039064a05bd0000040f0000000a020000290000000202200039000000000402041a0000000003010019000000400500043d000a00000005001d0000000b01000029000001970210019700000197044001970000000001050019064a060a0000040f0000000a020000290000000001210049000001940010009c00000194010080410000006001100210000001940020009c00000194020080410000004002200210000000000121019f0000064b0001042e0000000001000416000000000001004b0000006a0000c13d0000000001000412000d00000001001d000c00000000003d0000800501000039000000440300003900000000040004150000000d0440008a0000000504400210000001a502000041064a06270000040f0000019701100197000000800010043f000001a6010000410000064b0001042e000000800010043f00000140000004430000016000100443000000200100003900000100001004430000000101000039000001200010044300000198010000410000064b0001042e000a01970010019b0000000003000019000000000100041a000000050010006c0000000302000029000005450000a13d000000000102041a000000000031004b000005450000a13d000b00000003001d000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000000101043b000000400800043d000001aa0080009c0000000a05000029000001ff0000213d0000000b0200002900000003022000c900000000092100190000006001800039000000400010043f000000000109041a0000019701100197000000000a1804360000000101900039000000000201041a0000000103200190000000010b2002700000007f0bb0618f0000001f00b0008c00000000040000390000000104002039000000000442013f00000001004001900000054c0000c13d000000400700043d0000000006b70436000000000003004b000900000006001d000800000007001d000002d70000613d00010000000b001d00020000000a001d000600000009001d000700000008001d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f000000090600002900000001002001900000006a0000613d000000010b00002900000000000b004b000002dd0000613d000000000201043b00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000000003160019000000000402041a0000000000430435000000010220003900000020011000390000000000b1004b000002cf0000413d000002e30000013d000001bf01200197000000000016043500000000000b004b00000020010000390000000001006039000002e30000013d00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000003f01100039000001bd021001970000000001720019000000000021004b00000000020000390000000102004039000001ab0010009c000001ff0000213d0000000100200190000001ff0000c13d000000400010043f00000000007a04350000000201900039000000000101041a00000197021001970000004001800039000700000002001d00000000002104350000000001080433000600000001001d000001ac01000041000000000010044300000004005004430000000001000414000001940010009c0000019401008041000000c001100210000001ad011001c70000800202000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000000001004b00000009060000290000006a0000613d00000006010000290000019701100197000000400700043d000000240270003900000060030000390000000000320435000001ae0200004100000000002704350000000402700039000000000012043500000008010000290000000001010433000000640270003900000000001204350000008402700039000000000001004b000003200000613d000000000300001900000000042300190000000005360019000000000505043300000000005404350000002003300039000000000013004b000003190000413d0000000003120019000000000003043500000044037000390000000704000029000000000043043500000000030004140000000a04000029000000040040008c0000033f0000613d0000001f01100039000001bd0110019700000000017100490000000001210019000001940010009c00000194010080410000006001100210000001940070009c000001940200004100000000020740190000004002200210000000000121019f000001940030009c0000019403008041000000c002300210000000000112019f0000000002040019000900000007001d064a06400000040f00000009070000290000000100200190000005520000613d000001ab0070009c000001ff0000213d000000400070043f0000000b030000290000000103300039000000040030006c000002860000413d000000380000013d0000008003600039000000400030043f000000800040043f0000000a030000290000002406300039000800000065001d0000000800d0006b0000006a0000213d000000000004004b000003540000c13d000000400100043d000001b702000041000001e00000013d000000000361034f000000000403043b000001ab0040009c0000006a0000213d0000000a0b4000290000000904b00069000001b20040009c0000006a0000213d000000600040008c0000006a0000413d000000400800043d000001aa0080009c000001ff0000213d0000006003800039000000400030043f0000002404b00039000000000341034f000000000503043b000001970050009c0000006a0000213d000000000a5804360000002009400039000000000391034f000000000403043b000001ab0040009c0000006a0000213d000000000eb400190000004303e000390000000000d3004b0000000004000019000001b304008041000001b303300197000000000003004b0000000005000019000001b305004041000001b30030009c000000000504c019000000000005004b0000006a0000c13d000000240fe000390000000003f1034f000000000b03043b000001ab00b0009c000001ff0000213d0000001f03b00039000001bd033001970000003f03300039000001bd03300197000000400c00043d00000000043c00190000000000c4004b00000000050000390000000105004039000001ab0040009c000001ff0000213d0000000100500190000001ff0000c13d000000400040043f0000000007bc04360000000003be001900000044033000390000000000d3004b0000006a0000213d0000002003f00039000000000531034f000001bd04b00198000000000e4700190000039e0000613d000000000f05034f000000000d07001900000000f30f043c000000000d3d04360000000000ed004b0000039a0000c13d0000001f0db00190000003ab0000613d000000000345034f0000000304d0021000000000050e043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003e04350000000003b7001900000000000304350000000000ca04350000002003900039000000000331034f000000000403043b000001970040009c0000000b0d0000290000006a0000213d00000020022000390000004003800039000000000043043500000000008204350000002006600039000000080060006c000003540000413d000000800100043d000000000001004b000003510000613d000000000100041a000400000001001d000001ab0010009c000001ff0000213d00000004020000290000000101200039000000000010041b000a01a7002000a2000b00000000001d000003d80000013d000000010180021000000001011001bf000000000017041b0000000601000029000000000101043300000197011001970000000202600039000000000302041a000001b403300197000000000113019f000000000012041b0000000b02000029000b00010020003d000000800100043d0000000b0010006b000005910000813d000000000100041a000000040010006c000005450000a13d000000000000043f000000400500043d000001aa0050009c000001ff0000213d0000000b010000290000000501100210000000a0011000390000000001010433000000200210003900000000020204330000000003010433000000400110003900000000010104330000006004500039000000400040043f00000197011001970000004004500039000600000004001d000000000014043500000197013001970000000001150436000900000001001d00000000002104350000000a01000029000000000101041a000001ab0010009c000001ff0000213d000800000005001d000700000001001d00000001011000390000000a02000029000000000012041b000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000070200002900000003022000c9000000000101043b0000000006210019000000000106041a000001b401100197000000080200002900000000020204330000019702200197000000000121019f000000000016041b000000090100002900000000030104330000000054030434000001ab0040009c000001ff0000213d0000000107600039000000000107041a000000010010019000000001081002700000007f0880618f0000001f0080008c00000000020000390000000102002039000000000121013f00000001001001900000054c0000c13d000000200080008c000700000006001d000800000007001d000900000004001d000500000003001d000004460000413d000200000008001d000300000005001d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d00000009040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000002010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000000070600002900000008070000290000000305000029000004460000813d000000000002041b0000000102200039000000000012004b000004420000413d0000001f0040008c000004680000a13d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d0000000908000029000001bd02800198000000000101043b0000000509000029000004740000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000706000029000000080700002900000000059300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000045e0000c13d000000000082004b000003c80000813d000004790000013d000000000004004b0000046c0000613d00000000010504330000046d0000013d00000000010000190000000302400210000001be0220027f000001be02200167000000000121016f0000000102400210000000000121019f000003ca0000013d000000200300003900000007060000290000000807000029000000000082004b000003c80000813d0000000302800210000000f80220018f000001be0220027f000001be0220016700000000039300190000000003030433000000000223016f000000000021041b000003c80000013d000a01970010019b00000000030000190000000101000039000000000101041a000000050010006c0000000302000029000005450000a13d000000000102041a000000000031004b000005450000a13d000b00000003001d000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000000101043b000000400800043d000001ba0080009c0000000a05000029000001ff0000813d0000000b0200002900000003022000c900000000092100190000006001800039000000400010043f000000000109041a0000019701100197000000000a1804360000000101900039000000000201041a0000000103200190000000010b2002700000007f0bb0618f0000001f00b0008c00000000040000390000000104002039000000000043004b0000054c0000c13d000000400700043d0000000006b70436000000000003004b000900000006001d000800000007001d000004d50000613d00010000000b001d00020000000a001d000600000009001d000700000008001d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f000000090600002900000001002001900000006a0000613d000000010b00002900000000000b004b000004db0000613d000000000201043b00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000000003160019000000000402041a0000000000430435000000010220003900000020011000390000000000b1004b000004cd0000413d000004e10000013d000001bf01200197000000000016043500000000000b004b00000020010000390000000001006039000004e10000013d00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000003f01100039000001bd021001970000000001720019000000000021004b00000000020000390000000102004039000001ab0010009c000001ff0000213d0000000100200190000001ff0000c13d000000400010043f00000000007a04350000000201900039000000000101041a00000197021001970000004001800039000700000002001d00000000002104350000000001080433000600000001001d000001ac01000041000000000010044300000004005004430000000001000414000001940010009c0000019401008041000000c001100210000001ad011001c70000800202000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000000001004b00000009060000290000006a0000613d00000006010000290000019701100197000000400700043d000000240270003900000060030000390000000000320435000001bb0200004100000000002704350000000402700039000000000012043500000008010000290000000001010433000000640270003900000000001204350000008402700039000000000001004b0000051e0000613d000000000300001900000000042300190000000005360019000000000505043300000000005404350000002003300039000000000013004b000005170000413d0000000003120019000000000003043500000044037000390000000704000029000000000043043500000000030004140000000a04000029000000040040008c0000053d0000613d0000001f01100039000001bd0110019700000000017100490000000001210019000001940010009c00000194010080410000006001100210000001940070009c000001940200004100000000020740190000004002200210000000000121019f000001940030009c0000019403008041000000c002300210000000000112019f0000000002040019000900000007001d064a06400000040f00000009070000290000000100200190000005600000613d000001ab0070009c000001ff0000213d000000400070043f0000000b030000290000000103300039000000040030006c000004840000413d0000022a0000013d000001b801000041000000000010043f0000003201000039000000040010043f000001b9010000410000064c00010430000000000001042f000001b801000041000000000010043f0000002201000039000000040010043f000001b9010000410000064c00010430000000000201001900000060062002700000001f0460018f0000019605600198000000400200043d00000000035200190000056d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b0000055b0000c13d0000056d0000013d000000000201001900000060062002700000001f0460018f0000019605600198000000400200043d00000000035200190000056d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000005690000c13d0000019406600197000000000004004b0000057b0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001600210000001940020009c00000194020080410000004002200210000000000112019f0000064c00010430000000400100043d00000004020000290000000000210435000001940010009c000001940100804100000040011002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001b604000041000002380000013d000000400100043d00000004020000290000000000210435000001940010009c000001940100804100000040011002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001b504000041000002380000013d0001000000000002000000000301041a000100000002001d000000000023004b000005b50000a13d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f0000000100200190000005bb0000613d000000010200002900000003022000c9000000000101043b0000000001210019000000000001042d000001b801000041000000000010043f0000003201000039000000040010043f000001b9010000410000064c0001043000000000010000190000064c000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000005fc0000c13d000000400500043d0000000004650436000000000003004b000005e70000613d000100000004001d000300000006001d000200000005001d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f0000000100200190000006080000613d0000000306000029000000000006004b000005ed0000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000005df0000413d000005ef0000013d000001bf012001970000000000140435000000000006004b00000020010000390000000001006039000005ef0000013d000000000100001900000002050000290000003f01100039000001bd021001970000000001520019000000000021004b00000000020000390000000102004039000001ab0010009c000006020000213d0000000100200190000006020000c13d000000400010043f0000000001050019000000000001042d000001b801000041000000000010043f0000002201000039000000040010043f000001b9010000410000064c00010430000001b801000041000000000010043f0000004101000039000000040010043f000001b9010000410000064c0001043000000000010000190000064c00010430000000200510003900000060060000390000000000650435000001970220019700000000002104350000000052030434000000600310003900000000002304350000008003100039000000000002004b0000061d0000613d000000000600001900000000076300190000000008650019000000000808043300000000008704350000002006600039000000000026004b000006160000413d000000000523001900000000000504350000019704400197000000400110003900000000004104350000001f01200039000001bd011001970000000001130019000000000001042d000000000001042f00000000050100190000000000200443000000040100003900000005024002700000000002020031000000000121043a0000002004400039000000000031004b0000062a0000413d000001940030009c000001940300804100000060013002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001c0011001c70000000002050019064a06450000040f00000001002001900000063f0000613d000000000101043b000000000001042d000000000001042f00000643002104210000000102000039000000000001042d0000000002000019000000000001042d00000648002104230000000102000039000000000001042d0000000002000019000000000001042d0000064a000004320000064b0001042e0000064c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000002000000000000000000000000000000800000010000000000000000008579befe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000009d6c76b700000000000000000000000000000000000000000000000000000000f9b80da000000000000000000000000000000000000000000000000000000000f9b80da100000000000000000000000000000000000000000000000000000000ff1575e1000000000000000000000000000000000000000000000000000000009d6c76b800000000000000000000000000000000000000000000000000000000de46a2350000000000000000000000000000000000000000000000000000000022473d8c00000000000000000000000000000000000000000000000000000000514aab87000000000000000000000000000000000000000000000000000000005666a5ea4ef1d2ad89edf8c4d91132028e8195cdf30bb4b5053d4f8cd260341d4805f30a310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0000000000000000000000000000000000000020000000800000000000000000d6f21326ab749d5729fcba5677c79037b459436ab7bff709c9d06ce9f10c1a9d02000002000000000000000000000000000000440000000000000000000000000200000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f000000000000000000000000000000000000000000000000ffffffffffffffff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000584f6b600000000000000000000000000000000000000000000000000000000001a805f459381af632ecab72ec192c3f9a4c72d26be089026ffd6636d82de9887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000f8ca6ea7cc31be8572501c37ef5e9e8298be717fb881e0b1ca785aecc4d25e9f75922591bf2cec980645dc4a32bb7d5e8da9a15fda86dacf06f8402cecd1478f4494013c000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa0545f7a32000000000000000000000000000000000000000000000000000000001382323d6618527d8b03daa05db815f0490966e8b80679fe5ad3d868f84e1a71ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000200000200000000000000000000000000000000000000000000000000000000", + "deployedBytecode": "0x000d00000000000200000000030100190000006003300270000001940d3001970000000100200190000000470000c13d0000008002000039000000400020043f0000000400d0008c0000006a0000413d000000000401043b000000e0044002700000019b0040009c000b0000000d001d0000006c0000a13d0000019c0040009c000001c80000213d0000019f0040009c000001e60000613d000001a00040009c0000006a0000c13d0000002400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000000401100370000000000201043b000000000100041a000500000002001d000000000021004b000005450000a13d000000000000043f0000000501000029000001a70110009a000300000001001d000000000101041a000400000001001d000001a50100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000001940010009c0000019401008041000000c001100210000001a8011001c70000800502000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000040000006b000002840000c13d000000400700043d00000005010000290000000000170435000001940070009c000001940700804100000040017002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001af04000041000002380000013d0000000002000416000000000002004b0000006a0000c13d0000001f02d000390000019502200197000000a002200039000000400020043f0000001f04d0018f0000019605d00198000000a002500039000000580000613d000000a006000039000000000701034f000000007807043c0000000006860436000000000026004b000000540000c13d000000000004004b000000650000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000002000d0008c0000006a0000413d000000a00100043d000001970010009c000001dc0000a13d00000000010000190000064c00010430000001a10040009c000002050000613d000001a20040009c0000023d0000613d000001a30040009c0000006a0000c13d0009002400d000940000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000000402100370000000000202043b000a00000002001d000001ab0020009c0000006a0000213d0000000a0200002900000023022000390000000000d2004b0000006a0000813d0000000a020000290000000402200039000000000221034f000000000202043b000001ab0020009c000001ff0000213d00000005042002100000003f05400039000001b005500197000001b10050009c000001ff0000213d0000008005500039000000400050043f000000800020043f0000000a030000290000002405300039000800000054001d0000000800d0006b0000006a0000213d000000000002004b000003510000613d0000008007000039000000000251034f000000000202043b000001ab0020009c0000006a0000213d0000000a0b2000290000000902b00069000001b20020009c0000006a0000213d000000600020008c0000006a0000413d000000400800043d000001aa0080009c000001ff0000213d0000006002800039000000400020043f0000002402b00039000000000421034f000000000404043b000001970040009c0000006a0000213d000000000a4804360000002009200039000000000291034f000000000202043b000001ab0020009c0000006a0000213d000000000eb200190000004302e000390000000000d2004b0000000004000019000001b304008041000001b302200197000000000002004b0000000006000019000001b306004041000001b30020009c000000000604c019000000000006004b0000006a0000c13d000000240fe000390000000002f1034f000000000b02043b000001ab00b0009c000001ff0000213d0000001f02b00039000001bd022001970000003f02200039000001bd02200197000000400c00043d00000000022c00190000000000c2004b00000000040000390000000104004039000001ab0020009c000001ff0000213d0000000100400190000001ff0000c13d000000400020043f0000000006bc04360000000002be001900000044022000390000000000d2004b0000006a0000213d0000002002f00039000000000421034f000001bd02b00198000000000e260019000000e00000613d000000000f04034f000000000d06001900000000f30f043c000000000d3d04360000000000ed004b000000dc0000c13d0000001f0db00190000000ed0000613d000000000224034f0000000303d0021000000000040e043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f00000000002e04350000000002b6001900000000000204350000000000ca04350000002002900039000000000221034f000000000202043b000001970020009c0000000b0d0000290000006a0000213d00000020077000390000004003800039000000000023043500000000008704350000002005500039000000080050006c000000960000413d000000800100043d000000000001004b000003510000613d0000000101000039000000000101041a000400000001001d000001ab0010009c000001ff0000213d000000040200002900000001012000390000000104000039000000000014041b000a01a4002000a2000b00000000001d0000011d0000013d000000010180021000000001011001bf0000000104000039000000000017041b0000000601000029000000000101043300000197011001970000000202600039000000000302041a000001b403300197000000000113019f000000000012041b0000000b02000029000b00010020003d000000800100043d0000000b0010006b000005810000813d000000000104041a000000040010006c000005450000a13d000000000040043f000000400500043d000001aa0050009c000001ff0000213d0000000b010000290000000501100210000000a0011000390000000001010433000000200210003900000000020204330000000003010433000000400110003900000000010104330000006004500039000000400040043f00000197011001970000004004500039000600000004001d000000000014043500000197013001970000000001150436000900000001001d00000000002104350000000a01000029000000000101041a000001ab0010009c000001ff0000213d000800000005001d000700000001001d00000001011000390000000a02000029000000000012041b000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000070200002900000003022000c9000000000101043b0000000006210019000000000106041a000001b401100197000000080200002900000000020204330000019702200197000000000121019f000000000016041b000000090100002900000000030104330000000085030434000001ab0050009c000001ff0000213d0000000107600039000000000107041a000000010010019000000001041002700000007f0440618f0000001f0040008c00000000020000390000000102002039000000000121013f00000001001001900000054c0000c13d000000200040008c000700000006001d000800000007001d000900000005001d000500000003001d0000018b0000413d000200000004001d000300000008001d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d00000009050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b00000002010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000000706000029000000080700002900000003080000290000018b0000813d000000000002041b0000000102200039000000000012004b000001870000413d0000001f0050008c000001ad0000a13d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d0000000908000029000001bd02800198000000000101043b0000000509000029000001ba0000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000706000029000000080700002900000000059300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000001a30000c13d000000000082004b0000010c0000813d000001bf0000013d000000000005004b0000000104000039000001b20000613d0000000001080433000001b30000013d00000000010000190000000302500210000001be0220027f000001be02200167000000000121016f0000000102500210000000000121019f0000010f0000013d000000200300003900000007060000290000000807000029000000000082004b0000010c0000813d0000000302800210000000f80220018f000001be0220027f000001be0220016700000000039300190000000003030433000000000223016f000000000021041b0000010c0000013d0000019d0040009c0000026a0000613d0000019e0040009c0000006a0000c13d0000004400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000002402100370000000000202043b0000000401100370000000000101043b0000000103000039000000000403041a000000000041004b0000006a0000813d000000000030043f000001a40110009a0000024b0000013d000000000001004b0000027b0000c13d000000400100043d00000199020000410000000000210435000001940010009c000001940100804100000040011002100000019a011001c70000064c000104300009002400d000940000006a0000413d0000000003000416000000000003004b0000006a0000c13d0000000403100370000000000303043b000a00000003001d000001ab0030009c0000006a0000213d0000000a0300002900000023033000390000000000d3004b0000006a0000813d0000000a030000290000000403300039000000000331034f000000000403043b000001ab0040009c000001ff0000213d00000005054002100000003f03500039000001b006300197000001b10060009c000003470000a13d000001b801000041000000000010043f0000004101000039000000040010043f000001b9010000410000064c000104300000002400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000000401100370000000000201043b0000000101000039000000000101041a000500000002001d000000000021004b000005450000a13d0000000101000039000000000010043f0000000501000029000001a40110009a000300000001001d000000000101041a000400000001001d000001a50100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000001940010009c0000019401008041000000c001100210000001a8011001c70000800502000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000040000006b000004820000c13d000000400700043d00000005010000290000000000170435000001940070009c000001940700804100000040017002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001bc04000041064a06400000040f00000001002001900000006a0000613d00000000010000190000064b0001042e0000004400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000002402100370000000000202043b0000000401100370000000000101043b000000000300041a000000000031004b0000006a0000813d000000000000043f000001a70110009a000000000301041a000000000032004b0000006a0000813d064a05a10000040f0000000002010019000a00000002001d000000000102041a000b00000001001d0000000101200039064a05bd0000040f0000000a020000290000000202200039000000000402041a0000000003010019000000400500043d000a00000005001d0000000b01000029000001970210019700000197044001970000000001050019064a060a0000040f0000000a020000290000000001210049000001940010009c00000194010080410000006001100210000001940020009c00000194020080410000004002200210000000000121019f0000064b0001042e0000000001000416000000000001004b0000006a0000c13d0000000001000412000d00000001001d000c00000000003d0000800501000039000000440300003900000000040004150000000d0440008a0000000504400210000001a502000041064a06270000040f0000019701100197000000800010043f000001a6010000410000064b0001042e000000800010043f00000140000004430000016000100443000000200100003900000100001004430000000101000039000001200010044300000198010000410000064b0001042e000a01970010019b0000000003000019000000000100041a000000050010006c0000000302000029000005450000a13d000000000102041a000000000031004b000005450000a13d000b00000003001d000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000000101043b000000400800043d000001aa0080009c0000000a05000029000001ff0000213d0000000b0200002900000003022000c900000000092100190000006001800039000000400010043f000000000109041a0000019701100197000000000a1804360000000101900039000000000201041a0000000103200190000000010b2002700000007f0bb0618f0000001f00b0008c00000000040000390000000104002039000000000442013f00000001004001900000054c0000c13d000000400700043d0000000006b70436000000000003004b000900000006001d000800000007001d000002d70000613d00010000000b001d00020000000a001d000600000009001d000700000008001d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f000000090600002900000001002001900000006a0000613d000000010b00002900000000000b004b000002dd0000613d000000000201043b00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000000003160019000000000402041a0000000000430435000000010220003900000020011000390000000000b1004b000002cf0000413d000002e30000013d000001bf01200197000000000016043500000000000b004b00000020010000390000000001006039000002e30000013d00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000003f01100039000001bd021001970000000001720019000000000021004b00000000020000390000000102004039000001ab0010009c000001ff0000213d0000000100200190000001ff0000c13d000000400010043f00000000007a04350000000201900039000000000101041a00000197021001970000004001800039000700000002001d00000000002104350000000001080433000600000001001d000001ac01000041000000000010044300000004005004430000000001000414000001940010009c0000019401008041000000c001100210000001ad011001c70000800202000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000000001004b00000009060000290000006a0000613d00000006010000290000019701100197000000400700043d000000240270003900000060030000390000000000320435000001ae0200004100000000002704350000000402700039000000000012043500000008010000290000000001010433000000640270003900000000001204350000008402700039000000000001004b000003200000613d000000000300001900000000042300190000000005360019000000000505043300000000005404350000002003300039000000000013004b000003190000413d0000000003120019000000000003043500000044037000390000000704000029000000000043043500000000030004140000000a04000029000000040040008c0000033f0000613d0000001f01100039000001bd0110019700000000017100490000000001210019000001940010009c00000194010080410000006001100210000001940070009c000001940200004100000000020740190000004002200210000000000121019f000001940030009c0000019403008041000000c002300210000000000112019f0000000002040019000900000007001d064a06400000040f00000009070000290000000100200190000005520000613d000001ab0070009c000001ff0000213d000000400070043f0000000b030000290000000103300039000000040030006c000002860000413d000000380000013d0000008003600039000000400030043f000000800040043f0000000a030000290000002406300039000800000065001d0000000800d0006b0000006a0000213d000000000004004b000003540000c13d000000400100043d000001b702000041000001e00000013d000000000361034f000000000403043b000001ab0040009c0000006a0000213d0000000a0b4000290000000904b00069000001b20040009c0000006a0000213d000000600040008c0000006a0000413d000000400800043d000001aa0080009c000001ff0000213d0000006003800039000000400030043f0000002404b00039000000000341034f000000000503043b000001970050009c0000006a0000213d000000000a5804360000002009400039000000000391034f000000000403043b000001ab0040009c0000006a0000213d000000000eb400190000004303e000390000000000d3004b0000000004000019000001b304008041000001b303300197000000000003004b0000000005000019000001b305004041000001b30030009c000000000504c019000000000005004b0000006a0000c13d000000240fe000390000000003f1034f000000000b03043b000001ab00b0009c000001ff0000213d0000001f03b00039000001bd033001970000003f03300039000001bd03300197000000400c00043d00000000043c00190000000000c4004b00000000050000390000000105004039000001ab0040009c000001ff0000213d0000000100500190000001ff0000c13d000000400040043f0000000007bc04360000000003be001900000044033000390000000000d3004b0000006a0000213d0000002003f00039000000000531034f000001bd04b00198000000000e4700190000039e0000613d000000000f05034f000000000d07001900000000f30f043c000000000d3d04360000000000ed004b0000039a0000c13d0000001f0db00190000003ab0000613d000000000345034f0000000304d0021000000000050e043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003e04350000000003b7001900000000000304350000000000ca04350000002003900039000000000331034f000000000403043b000001970040009c0000000b0d0000290000006a0000213d00000020022000390000004003800039000000000043043500000000008204350000002006600039000000080060006c000003540000413d000000800100043d000000000001004b000003510000613d000000000100041a000400000001001d000001ab0010009c000001ff0000213d00000004020000290000000101200039000000000010041b000a01a7002000a2000b00000000001d000003d80000013d000000010180021000000001011001bf000000000017041b0000000601000029000000000101043300000197011001970000000202600039000000000302041a000001b403300197000000000113019f000000000012041b0000000b02000029000b00010020003d000000800100043d0000000b0010006b000005910000813d000000000100041a000000040010006c000005450000a13d000000000000043f000000400500043d000001aa0050009c000001ff0000213d0000000b010000290000000501100210000000a0011000390000000001010433000000200210003900000000020204330000000003010433000000400110003900000000010104330000006004500039000000400040043f00000197011001970000004004500039000600000004001d000000000014043500000197013001970000000001150436000900000001001d00000000002104350000000a01000029000000000101041a000001ab0010009c000001ff0000213d000800000005001d000700000001001d00000001011000390000000a02000029000000000012041b000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000070200002900000003022000c9000000000101043b0000000006210019000000000106041a000001b401100197000000080200002900000000020204330000019702200197000000000121019f000000000016041b000000090100002900000000030104330000000054030434000001ab0040009c000001ff0000213d0000000107600039000000000107041a000000010010019000000001081002700000007f0880618f0000001f0080008c00000000020000390000000102002039000000000121013f00000001001001900000054c0000c13d000000200080008c000700000006001d000800000007001d000900000004001d000500000003001d000004460000413d000200000008001d000300000005001d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d00000009040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000002010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000000070600002900000008070000290000000305000029000004460000813d000000000002041b0000000102200039000000000012004b000004420000413d0000001f0040008c000004680000a13d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d0000000908000029000001bd02800198000000000101043b0000000509000029000004740000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000706000029000000080700002900000000059300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000045e0000c13d000000000082004b000003c80000813d000004790000013d000000000004004b0000046c0000613d00000000010504330000046d0000013d00000000010000190000000302400210000001be0220027f000001be02200167000000000121016f0000000102400210000000000121019f000003ca0000013d000000200300003900000007060000290000000807000029000000000082004b000003c80000813d0000000302800210000000f80220018f000001be0220027f000001be0220016700000000039300190000000003030433000000000223016f000000000021041b000003c80000013d000a01970010019b00000000030000190000000101000039000000000101041a000000050010006c0000000302000029000005450000a13d000000000102041a000000000031004b000005450000a13d000b00000003001d000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000000101043b000000400800043d000001ba0080009c0000000a05000029000001ff0000813d0000000b0200002900000003022000c900000000092100190000006001800039000000400010043f000000000109041a0000019701100197000000000a1804360000000101900039000000000201041a0000000103200190000000010b2002700000007f0bb0618f0000001f00b0008c00000000040000390000000104002039000000000043004b0000054c0000c13d000000400700043d0000000006b70436000000000003004b000900000006001d000800000007001d000004d50000613d00010000000b001d00020000000a001d000600000009001d000700000008001d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f000000090600002900000001002001900000006a0000613d000000010b00002900000000000b004b000004db0000613d000000000201043b00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000000003160019000000000402041a0000000000430435000000010220003900000020011000390000000000b1004b000004cd0000413d000004e10000013d000001bf01200197000000000016043500000000000b004b00000020010000390000000001006039000004e10000013d00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000003f01100039000001bd021001970000000001720019000000000021004b00000000020000390000000102004039000001ab0010009c000001ff0000213d0000000100200190000001ff0000c13d000000400010043f00000000007a04350000000201900039000000000101041a00000197021001970000004001800039000700000002001d00000000002104350000000001080433000600000001001d000001ac01000041000000000010044300000004005004430000000001000414000001940010009c0000019401008041000000c001100210000001ad011001c70000800202000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000000001004b00000009060000290000006a0000613d00000006010000290000019701100197000000400700043d000000240270003900000060030000390000000000320435000001bb0200004100000000002704350000000402700039000000000012043500000008010000290000000001010433000000640270003900000000001204350000008402700039000000000001004b0000051e0000613d000000000300001900000000042300190000000005360019000000000505043300000000005404350000002003300039000000000013004b000005170000413d0000000003120019000000000003043500000044037000390000000704000029000000000043043500000000030004140000000a04000029000000040040008c0000053d0000613d0000001f01100039000001bd0110019700000000017100490000000001210019000001940010009c00000194010080410000006001100210000001940070009c000001940200004100000000020740190000004002200210000000000121019f000001940030009c0000019403008041000000c002300210000000000112019f0000000002040019000900000007001d064a06400000040f00000009070000290000000100200190000005600000613d000001ab0070009c000001ff0000213d000000400070043f0000000b030000290000000103300039000000040030006c000004840000413d0000022a0000013d000001b801000041000000000010043f0000003201000039000000040010043f000001b9010000410000064c00010430000000000001042f000001b801000041000000000010043f0000002201000039000000040010043f000001b9010000410000064c00010430000000000201001900000060062002700000001f0460018f0000019605600198000000400200043d00000000035200190000056d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b0000055b0000c13d0000056d0000013d000000000201001900000060062002700000001f0460018f0000019605600198000000400200043d00000000035200190000056d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000005690000c13d0000019406600197000000000004004b0000057b0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001600210000001940020009c00000194020080410000004002200210000000000112019f0000064c00010430000000400100043d00000004020000290000000000210435000001940010009c000001940100804100000040011002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001b604000041000002380000013d000000400100043d00000004020000290000000000210435000001940010009c000001940100804100000040011002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001b504000041000002380000013d0001000000000002000000000301041a000100000002001d000000000023004b000005b50000a13d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f0000000100200190000005bb0000613d000000010200002900000003022000c9000000000101043b0000000001210019000000000001042d000001b801000041000000000010043f0000003201000039000000040010043f000001b9010000410000064c0001043000000000010000190000064c000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000005fc0000c13d000000400500043d0000000004650436000000000003004b000005e70000613d000100000004001d000300000006001d000200000005001d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f0000000100200190000006080000613d0000000306000029000000000006004b000005ed0000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000005df0000413d000005ef0000013d000001bf012001970000000000140435000000000006004b00000020010000390000000001006039000005ef0000013d000000000100001900000002050000290000003f01100039000001bd021001970000000001520019000000000021004b00000000020000390000000102004039000001ab0010009c000006020000213d0000000100200190000006020000c13d000000400010043f0000000001050019000000000001042d000001b801000041000000000010043f0000002201000039000000040010043f000001b9010000410000064c00010430000001b801000041000000000010043f0000004101000039000000040010043f000001b9010000410000064c0001043000000000010000190000064c00010430000000200510003900000060060000390000000000650435000001970220019700000000002104350000000052030434000000600310003900000000002304350000008003100039000000000002004b0000061d0000613d000000000600001900000000076300190000000008650019000000000808043300000000008704350000002006600039000000000026004b000006160000413d000000000523001900000000000504350000019704400197000000400110003900000000004104350000001f01200039000001bd011001970000000001130019000000000001042d000000000001042f00000000050100190000000000200443000000040100003900000005024002700000000002020031000000000121043a0000002004400039000000000031004b0000062a0000413d000001940030009c000001940300804100000060013002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001c0011001c70000000002050019064a06450000040f00000001002001900000063f0000613d000000000101043b000000000001042d000000000001042f00000643002104210000000102000039000000000001042d0000000002000019000000000001042d00000648002104230000000102000039000000000001042d0000000002000019000000000001042d0000064a000004320000064b0001042e0000064c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000002000000000000000000000000000000800000010000000000000000008579befe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000009d6c76b700000000000000000000000000000000000000000000000000000000f9b80da000000000000000000000000000000000000000000000000000000000f9b80da100000000000000000000000000000000000000000000000000000000ff1575e1000000000000000000000000000000000000000000000000000000009d6c76b800000000000000000000000000000000000000000000000000000000de46a2350000000000000000000000000000000000000000000000000000000022473d8c00000000000000000000000000000000000000000000000000000000514aab87000000000000000000000000000000000000000000000000000000005666a5ea4ef1d2ad89edf8c4d91132028e8195cdf30bb4b5053d4f8cd260341d4805f30a310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0000000000000000000000000000000000000020000000800000000000000000d6f21326ab749d5729fcba5677c79037b459436ab7bff709c9d06ce9f10c1a9d02000002000000000000000000000000000000440000000000000000000000000200000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f000000000000000000000000000000000000000000000000ffffffffffffffff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000584f6b600000000000000000000000000000000000000000000000000000000001a805f459381af632ecab72ec192c3f9a4c72d26be089026ffd6636d82de9887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000f8ca6ea7cc31be8572501c37ef5e9e8298be717fb881e0b1ca785aecc4d25e9f75922591bf2cec980645dc4a32bb7d5e8da9a15fda86dacf06f8402cecd1478f4494013c000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa0545f7a32000000000000000000000000000000000000000000000000000000001382323d6618527d8b03daa05db815f0490966e8b80679fe5ad3d868f84e1a71ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000200000200000000000000000000000000000000000000000000000000000000", + "devdoc": { + "author": "Venus", + "kind": "dev", + "methods": {}, + "title": "ACMCommandsAggregator", + "version": 1 + }, + "userdoc": { + "errors": { + "ZeroAddressNotAllowed()": [ + { + "notice": "Thrown if the supplied address is a zero address where it is not allowed" + } + ] + }, + "kind": "user", + "methods": { + "ACM()": { + "notice": "Access control manager contract" + } + }, + "notice": "This contract is a helper to aggregate multiple grant and revoke permissions in batches and execute them in one go.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 724, + "contract": "contracts/Utils/ACMCommandsAggregator.sol:ACMCommandsAggregator", + "label": "grantPermissions", + "offset": 0, + "slot": "0", + "type": "t_array(t_array(t_struct(Permission)715_storage)dyn_storage)dyn_storage" + }, + { + "astId": 729, + "contract": "contracts/Utils/ACMCommandsAggregator.sol:ACMCommandsAggregator", + "label": "revokePermissions", + "offset": 0, + "slot": "1", + "type": "t_array(t_array(t_struct(Permission)715_storage)dyn_storage)dyn_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_array(t_struct(Permission)715_storage)dyn_storage)dyn_storage": { + "base": "t_array(t_struct(Permission)715_storage)dyn_storage", + "encoding": "dynamic_array", + "label": "struct ACMCommandsAggregator.Permission[][]", + "numberOfBytes": "32" + }, + "t_array(t_struct(Permission)715_storage)dyn_storage": { + "base": "t_struct(Permission)715_storage", + "encoding": "dynamic_array", + "label": "struct ACMCommandsAggregator.Permission[]", + "numberOfBytes": "32" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Permission)715_storage": { + "encoding": "inplace", + "label": "struct ACMCommandsAggregator.Permission", + "members": [ + { + "astId": 710, + "contract": "contracts/Utils/ACMCommandsAggregator.sol:ACMCommandsAggregator", + "label": "contractAddress", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 712, + "contract": "contracts/Utils/ACMCommandsAggregator.sol:ACMCommandsAggregator", + "label": "functionSig", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 714, + "contract": "contracts/Utils/ACMCommandsAggregator.sol:ACMCommandsAggregator", + "label": "account", + "offset": 0, + "slot": "2", + "type": "t_address" + } + ], + "numberOfBytes": "96" + } + } + }, + "factoryDeps": [ + "0x000d00000000000200000000030100190000006003300270000001940d3001970000000100200190000000470000c13d0000008002000039000000400020043f0000000400d0008c0000006a0000413d000000000401043b000000e0044002700000019b0040009c000b0000000d001d0000006c0000a13d0000019c0040009c000001c80000213d0000019f0040009c000001e60000613d000001a00040009c0000006a0000c13d0000002400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000000401100370000000000201043b000000000100041a000500000002001d000000000021004b000005450000a13d000000000000043f0000000501000029000001a70110009a000300000001001d000000000101041a000400000001001d000001a50100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000001940010009c0000019401008041000000c001100210000001a8011001c70000800502000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000040000006b000002840000c13d000000400700043d00000005010000290000000000170435000001940070009c000001940700804100000040017002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001af04000041000002380000013d0000000002000416000000000002004b0000006a0000c13d0000001f02d000390000019502200197000000a002200039000000400020043f0000001f04d0018f0000019605d00198000000a002500039000000580000613d000000a006000039000000000701034f000000007807043c0000000006860436000000000026004b000000540000c13d000000000004004b000000650000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000002000d0008c0000006a0000413d000000a00100043d000001970010009c000001dc0000a13d00000000010000190000064c00010430000001a10040009c000002050000613d000001a20040009c0000023d0000613d000001a30040009c0000006a0000c13d0009002400d000940000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000000402100370000000000202043b000a00000002001d000001ab0020009c0000006a0000213d0000000a0200002900000023022000390000000000d2004b0000006a0000813d0000000a020000290000000402200039000000000221034f000000000202043b000001ab0020009c000001ff0000213d00000005042002100000003f05400039000001b005500197000001b10050009c000001ff0000213d0000008005500039000000400050043f000000800020043f0000000a030000290000002405300039000800000054001d0000000800d0006b0000006a0000213d000000000002004b000003510000613d0000008007000039000000000251034f000000000202043b000001ab0020009c0000006a0000213d0000000a0b2000290000000902b00069000001b20020009c0000006a0000213d000000600020008c0000006a0000413d000000400800043d000001aa0080009c000001ff0000213d0000006002800039000000400020043f0000002402b00039000000000421034f000000000404043b000001970040009c0000006a0000213d000000000a4804360000002009200039000000000291034f000000000202043b000001ab0020009c0000006a0000213d000000000eb200190000004302e000390000000000d2004b0000000004000019000001b304008041000001b302200197000000000002004b0000000006000019000001b306004041000001b30020009c000000000604c019000000000006004b0000006a0000c13d000000240fe000390000000002f1034f000000000b02043b000001ab00b0009c000001ff0000213d0000001f02b00039000001bd022001970000003f02200039000001bd02200197000000400c00043d00000000022c00190000000000c2004b00000000040000390000000104004039000001ab0020009c000001ff0000213d0000000100400190000001ff0000c13d000000400020043f0000000006bc04360000000002be001900000044022000390000000000d2004b0000006a0000213d0000002002f00039000000000421034f000001bd02b00198000000000e260019000000e00000613d000000000f04034f000000000d06001900000000f30f043c000000000d3d04360000000000ed004b000000dc0000c13d0000001f0db00190000000ed0000613d000000000224034f0000000303d0021000000000040e043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f00000000002e04350000000002b6001900000000000204350000000000ca04350000002002900039000000000221034f000000000202043b000001970020009c0000000b0d0000290000006a0000213d00000020077000390000004003800039000000000023043500000000008704350000002005500039000000080050006c000000960000413d000000800100043d000000000001004b000003510000613d0000000101000039000000000101041a000400000001001d000001ab0010009c000001ff0000213d000000040200002900000001012000390000000104000039000000000014041b000a01a4002000a2000b00000000001d0000011d0000013d000000010180021000000001011001bf0000000104000039000000000017041b0000000601000029000000000101043300000197011001970000000202600039000000000302041a000001b403300197000000000113019f000000000012041b0000000b02000029000b00010020003d000000800100043d0000000b0010006b000005810000813d000000000104041a000000040010006c000005450000a13d000000000040043f000000400500043d000001aa0050009c000001ff0000213d0000000b010000290000000501100210000000a0011000390000000001010433000000200210003900000000020204330000000003010433000000400110003900000000010104330000006004500039000000400040043f00000197011001970000004004500039000600000004001d000000000014043500000197013001970000000001150436000900000001001d00000000002104350000000a01000029000000000101041a000001ab0010009c000001ff0000213d000800000005001d000700000001001d00000001011000390000000a02000029000000000012041b000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000070200002900000003022000c9000000000101043b0000000006210019000000000106041a000001b401100197000000080200002900000000020204330000019702200197000000000121019f000000000016041b000000090100002900000000030104330000000085030434000001ab0050009c000001ff0000213d0000000107600039000000000107041a000000010010019000000001041002700000007f0440618f0000001f0040008c00000000020000390000000102002039000000000121013f00000001001001900000054c0000c13d000000200040008c000700000006001d000800000007001d000900000005001d000500000003001d0000018b0000413d000200000004001d000300000008001d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d00000009050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b00000002010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000000706000029000000080700002900000003080000290000018b0000813d000000000002041b0000000102200039000000000012004b000001870000413d0000001f0050008c000001ad0000a13d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d0000000908000029000001bd02800198000000000101043b0000000509000029000001ba0000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000706000029000000080700002900000000059300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000001a30000c13d000000000082004b0000010c0000813d000001bf0000013d000000000005004b0000000104000039000001b20000613d0000000001080433000001b30000013d00000000010000190000000302500210000001be0220027f000001be02200167000000000121016f0000000102500210000000000121019f0000010f0000013d000000200300003900000007060000290000000807000029000000000082004b0000010c0000813d0000000302800210000000f80220018f000001be0220027f000001be0220016700000000039300190000000003030433000000000223016f000000000021041b0000010c0000013d0000019d0040009c0000026a0000613d0000019e0040009c0000006a0000c13d0000004400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000002402100370000000000202043b0000000401100370000000000101043b0000000103000039000000000403041a000000000041004b0000006a0000813d000000000030043f000001a40110009a0000024b0000013d000000000001004b0000027b0000c13d000000400100043d00000199020000410000000000210435000001940010009c000001940100804100000040011002100000019a011001c70000064c000104300009002400d000940000006a0000413d0000000003000416000000000003004b0000006a0000c13d0000000403100370000000000303043b000a00000003001d000001ab0030009c0000006a0000213d0000000a0300002900000023033000390000000000d3004b0000006a0000813d0000000a030000290000000403300039000000000331034f000000000403043b000001ab0040009c000001ff0000213d00000005054002100000003f03500039000001b006300197000001b10060009c000003470000a13d000001b801000041000000000010043f0000004101000039000000040010043f000001b9010000410000064c000104300000002400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000000401100370000000000201043b0000000101000039000000000101041a000500000002001d000000000021004b000005450000a13d0000000101000039000000000010043f0000000501000029000001a40110009a000300000001001d000000000101041a000400000001001d000001a50100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000001940010009c0000019401008041000000c001100210000001a8011001c70000800502000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000040000006b000004820000c13d000000400700043d00000005010000290000000000170435000001940070009c000001940700804100000040017002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001bc04000041064a06400000040f00000001002001900000006a0000613d00000000010000190000064b0001042e0000004400d0008c0000006a0000413d0000000002000416000000000002004b0000006a0000c13d0000002402100370000000000202043b0000000401100370000000000101043b000000000300041a000000000031004b0000006a0000813d000000000000043f000001a70110009a000000000301041a000000000032004b0000006a0000813d064a05a10000040f0000000002010019000a00000002001d000000000102041a000b00000001001d0000000101200039064a05bd0000040f0000000a020000290000000202200039000000000402041a0000000003010019000000400500043d000a00000005001d0000000b01000029000001970210019700000197044001970000000001050019064a060a0000040f0000000a020000290000000001210049000001940010009c00000194010080410000006001100210000001940020009c00000194020080410000004002200210000000000121019f0000064b0001042e0000000001000416000000000001004b0000006a0000c13d0000000001000412000d00000001001d000c00000000003d0000800501000039000000440300003900000000040004150000000d0440008a0000000504400210000001a502000041064a06270000040f0000019701100197000000800010043f000001a6010000410000064b0001042e000000800010043f00000140000004430000016000100443000000200100003900000100001004430000000101000039000001200010044300000198010000410000064b0001042e000a01970010019b0000000003000019000000000100041a000000050010006c0000000302000029000005450000a13d000000000102041a000000000031004b000005450000a13d000b00000003001d000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000000101043b000000400800043d000001aa0080009c0000000a05000029000001ff0000213d0000000b0200002900000003022000c900000000092100190000006001800039000000400010043f000000000109041a0000019701100197000000000a1804360000000101900039000000000201041a0000000103200190000000010b2002700000007f0bb0618f0000001f00b0008c00000000040000390000000104002039000000000442013f00000001004001900000054c0000c13d000000400700043d0000000006b70436000000000003004b000900000006001d000800000007001d000002d70000613d00010000000b001d00020000000a001d000600000009001d000700000008001d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f000000090600002900000001002001900000006a0000613d000000010b00002900000000000b004b000002dd0000613d000000000201043b00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000000003160019000000000402041a0000000000430435000000010220003900000020011000390000000000b1004b000002cf0000413d000002e30000013d000001bf01200197000000000016043500000000000b004b00000020010000390000000001006039000002e30000013d00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000003f01100039000001bd021001970000000001720019000000000021004b00000000020000390000000102004039000001ab0010009c000001ff0000213d0000000100200190000001ff0000c13d000000400010043f00000000007a04350000000201900039000000000101041a00000197021001970000004001800039000700000002001d00000000002104350000000001080433000600000001001d000001ac01000041000000000010044300000004005004430000000001000414000001940010009c0000019401008041000000c001100210000001ad011001c70000800202000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000000001004b00000009060000290000006a0000613d00000006010000290000019701100197000000400700043d000000240270003900000060030000390000000000320435000001ae0200004100000000002704350000000402700039000000000012043500000008010000290000000001010433000000640270003900000000001204350000008402700039000000000001004b000003200000613d000000000300001900000000042300190000000005360019000000000505043300000000005404350000002003300039000000000013004b000003190000413d0000000003120019000000000003043500000044037000390000000704000029000000000043043500000000030004140000000a04000029000000040040008c0000033f0000613d0000001f01100039000001bd0110019700000000017100490000000001210019000001940010009c00000194010080410000006001100210000001940070009c000001940200004100000000020740190000004002200210000000000121019f000001940030009c0000019403008041000000c002300210000000000112019f0000000002040019000900000007001d064a06400000040f00000009070000290000000100200190000005520000613d000001ab0070009c000001ff0000213d000000400070043f0000000b030000290000000103300039000000040030006c000002860000413d000000380000013d0000008003600039000000400030043f000000800040043f0000000a030000290000002406300039000800000065001d0000000800d0006b0000006a0000213d000000000004004b000003540000c13d000000400100043d000001b702000041000001e00000013d000000000361034f000000000403043b000001ab0040009c0000006a0000213d0000000a0b4000290000000904b00069000001b20040009c0000006a0000213d000000600040008c0000006a0000413d000000400800043d000001aa0080009c000001ff0000213d0000006003800039000000400030043f0000002404b00039000000000341034f000000000503043b000001970050009c0000006a0000213d000000000a5804360000002009400039000000000391034f000000000403043b000001ab0040009c0000006a0000213d000000000eb400190000004303e000390000000000d3004b0000000004000019000001b304008041000001b303300197000000000003004b0000000005000019000001b305004041000001b30030009c000000000504c019000000000005004b0000006a0000c13d000000240fe000390000000003f1034f000000000b03043b000001ab00b0009c000001ff0000213d0000001f03b00039000001bd033001970000003f03300039000001bd03300197000000400c00043d00000000043c00190000000000c4004b00000000050000390000000105004039000001ab0040009c000001ff0000213d0000000100500190000001ff0000c13d000000400040043f0000000007bc04360000000003be001900000044033000390000000000d3004b0000006a0000213d0000002003f00039000000000531034f000001bd04b00198000000000e4700190000039e0000613d000000000f05034f000000000d07001900000000f30f043c000000000d3d04360000000000ed004b0000039a0000c13d0000001f0db00190000003ab0000613d000000000345034f0000000304d0021000000000050e043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003e04350000000003b7001900000000000304350000000000ca04350000002003900039000000000331034f000000000403043b000001970040009c0000000b0d0000290000006a0000213d00000020022000390000004003800039000000000043043500000000008204350000002006600039000000080060006c000003540000413d000000800100043d000000000001004b000003510000613d000000000100041a000400000001001d000001ab0010009c000001ff0000213d00000004020000290000000101200039000000000010041b000a01a7002000a2000b00000000001d000003d80000013d000000010180021000000001011001bf000000000017041b0000000601000029000000000101043300000197011001970000000202600039000000000302041a000001b403300197000000000113019f000000000012041b0000000b02000029000b00010020003d000000800100043d0000000b0010006b000005910000813d000000000100041a000000040010006c000005450000a13d000000000000043f000000400500043d000001aa0050009c000001ff0000213d0000000b010000290000000501100210000000a0011000390000000001010433000000200210003900000000020204330000000003010433000000400110003900000000010104330000006004500039000000400040043f00000197011001970000004004500039000600000004001d000000000014043500000197013001970000000001150436000900000001001d00000000002104350000000a01000029000000000101041a000001ab0010009c000001ff0000213d000800000005001d000700000001001d00000001011000390000000a02000029000000000012041b000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000070200002900000003022000c9000000000101043b0000000006210019000000000106041a000001b401100197000000080200002900000000020204330000019702200197000000000121019f000000000016041b000000090100002900000000030104330000000054030434000001ab0040009c000001ff0000213d0000000107600039000000000107041a000000010010019000000001081002700000007f0880618f0000001f0080008c00000000020000390000000102002039000000000121013f00000001001001900000054c0000c13d000000200080008c000700000006001d000800000007001d000900000004001d000500000003001d000004460000413d000200000008001d000300000005001d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d00000009040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000002010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000000070600002900000008070000290000000305000029000004460000813d000000000002041b0000000102200039000000000012004b000004420000413d0000001f0040008c000004680000a13d000000000070043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d0000000908000029000001bd02800198000000000101043b0000000509000029000004740000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000706000029000000080700002900000000059300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000045e0000c13d000000000082004b000003c80000813d000004790000013d000000000004004b0000046c0000613d00000000010504330000046d0000013d00000000010000190000000302400210000001be0220027f000001be02200167000000000121016f0000000102400210000000000121019f000003ca0000013d000000200300003900000007060000290000000807000029000000000082004b000003c80000813d0000000302800210000000f80220018f000001be0220027f000001be0220016700000000039300190000000003030433000000000223016f000000000021041b000003c80000013d000a01970010019b00000000030000190000000101000039000000000101041a000000050010006c0000000302000029000005450000a13d000000000102041a000000000031004b000005450000a13d000b00000003001d000000000020043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f00000001002001900000006a0000613d000000000101043b000000400800043d000001ba0080009c0000000a05000029000001ff0000813d0000000b0200002900000003022000c900000000092100190000006001800039000000400010043f000000000109041a0000019701100197000000000a1804360000000101900039000000000201041a0000000103200190000000010b2002700000007f0bb0618f0000001f00b0008c00000000040000390000000104002039000000000043004b0000054c0000c13d000000400700043d0000000006b70436000000000003004b000900000006001d000800000007001d000004d50000613d00010000000b001d00020000000a001d000600000009001d000700000008001d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f000000090600002900000001002001900000006a0000613d000000010b00002900000000000b004b000004db0000613d000000000201043b00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000000003160019000000000402041a0000000000430435000000010220003900000020011000390000000000b1004b000004cd0000413d000004e10000013d000001bf01200197000000000016043500000000000b004b00000020010000390000000001006039000004e10000013d00000000010000190000000a05000029000000080700002900000007080000290000000609000029000000020a0000290000003f01100039000001bd021001970000000001720019000000000021004b00000000020000390000000102004039000001ab0010009c000001ff0000213d0000000100200190000001ff0000c13d000000400010043f00000000007a04350000000201900039000000000101041a00000197021001970000004001800039000700000002001d00000000002104350000000001080433000600000001001d000001ac01000041000000000010044300000004005004430000000001000414000001940010009c0000019401008041000000c001100210000001ad011001c70000800202000039064a06450000040f00000001002001900000054b0000613d000000000101043b000000000001004b00000009060000290000006a0000613d00000006010000290000019701100197000000400700043d000000240270003900000060030000390000000000320435000001bb0200004100000000002704350000000402700039000000000012043500000008010000290000000001010433000000640270003900000000001204350000008402700039000000000001004b0000051e0000613d000000000300001900000000042300190000000005360019000000000505043300000000005404350000002003300039000000000013004b000005170000413d0000000003120019000000000003043500000044037000390000000704000029000000000043043500000000030004140000000a04000029000000040040008c0000053d0000613d0000001f01100039000001bd0110019700000000017100490000000001210019000001940010009c00000194010080410000006001100210000001940070009c000001940200004100000000020740190000004002200210000000000121019f000001940030009c0000019403008041000000c002300210000000000112019f0000000002040019000900000007001d064a06400000040f00000009070000290000000100200190000005600000613d000001ab0070009c000001ff0000213d000000400070043f0000000b030000290000000103300039000000040030006c000004840000413d0000022a0000013d000001b801000041000000000010043f0000003201000039000000040010043f000001b9010000410000064c00010430000000000001042f000001b801000041000000000010043f0000002201000039000000040010043f000001b9010000410000064c00010430000000000201001900000060062002700000001f0460018f0000019605600198000000400200043d00000000035200190000056d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b0000055b0000c13d0000056d0000013d000000000201001900000060062002700000001f0460018f0000019605600198000000400200043d00000000035200190000056d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000005690000c13d0000019406600197000000000004004b0000057b0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001600210000001940020009c00000194020080410000004002200210000000000112019f0000064c00010430000000400100043d00000004020000290000000000210435000001940010009c000001940100804100000040011002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001b604000041000002380000013d000000400100043d00000004020000290000000000210435000001940010009c000001940100804100000040011002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001a9011001c70000800d020000390000000103000039000001b504000041000002380000013d0001000000000002000000000301041a000100000002001d000000000023004b000005b50000a13d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f0000000100200190000005bb0000613d000000010200002900000003022000c9000000000101043b0000000001210019000000000001042d000001b801000041000000000010043f0000003201000039000000040010043f000001b9010000410000064c0001043000000000010000190000064c000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000005fc0000c13d000000400500043d0000000004650436000000000003004b000005e70000613d000100000004001d000300000006001d000200000005001d000000000010043f0000000001000414000001940010009c0000019401008041000000c001100210000001a9011001c70000801002000039064a06450000040f0000000100200190000006080000613d0000000306000029000000000006004b000005ed0000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000005df0000413d000005ef0000013d000001bf012001970000000000140435000000000006004b00000020010000390000000001006039000005ef0000013d000000000100001900000002050000290000003f01100039000001bd021001970000000001520019000000000021004b00000000020000390000000102004039000001ab0010009c000006020000213d0000000100200190000006020000c13d000000400010043f0000000001050019000000000001042d000001b801000041000000000010043f0000002201000039000000040010043f000001b9010000410000064c00010430000001b801000041000000000010043f0000004101000039000000040010043f000001b9010000410000064c0001043000000000010000190000064c00010430000000200510003900000060060000390000000000650435000001970220019700000000002104350000000052030434000000600310003900000000002304350000008003100039000000000002004b0000061d0000613d000000000600001900000000076300190000000008650019000000000808043300000000008704350000002006600039000000000026004b000006160000413d000000000523001900000000000504350000019704400197000000400110003900000000004104350000001f01200039000001bd011001970000000001130019000000000001042d000000000001042f00000000050100190000000000200443000000040100003900000005024002700000000002020031000000000121043a0000002004400039000000000031004b0000062a0000413d000001940030009c000001940300804100000060013002100000000002000414000001940020009c0000019402008041000000c002200210000000000112019f000001c0011001c70000000002050019064a06450000040f00000001002001900000063f0000613d000000000101043b000000000001042d000000000001042f00000643002104210000000102000039000000000001042d0000000002000019000000000001042d00000648002104230000000102000039000000000001042d0000000002000019000000000001042d0000064a000004320000064b0001042e0000064c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000002000000000000000000000000000000800000010000000000000000008579befe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000009d6c76b700000000000000000000000000000000000000000000000000000000f9b80da000000000000000000000000000000000000000000000000000000000f9b80da100000000000000000000000000000000000000000000000000000000ff1575e1000000000000000000000000000000000000000000000000000000009d6c76b800000000000000000000000000000000000000000000000000000000de46a2350000000000000000000000000000000000000000000000000000000022473d8c00000000000000000000000000000000000000000000000000000000514aab87000000000000000000000000000000000000000000000000000000005666a5ea4ef1d2ad89edf8c4d91132028e8195cdf30bb4b5053d4f8cd260341d4805f30a310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0000000000000000000000000000000000000020000000800000000000000000d6f21326ab749d5729fcba5677c79037b459436ab7bff709c9d06ce9f10c1a9d02000002000000000000000000000000000000440000000000000000000000000200000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f000000000000000000000000000000000000000000000000ffffffffffffffff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000584f6b600000000000000000000000000000000000000000000000000000000001a805f459381af632ecab72ec192c3f9a4c72d26be089026ffd6636d82de9887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000f8ca6ea7cc31be8572501c37ef5e9e8298be717fb881e0b1ca785aecc4d25e9f75922591bf2cec980645dc4a32bb7d5e8da9a15fda86dacf06f8402cecd1478f4494013c000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa0545f7a32000000000000000000000000000000000000000000000000000000001382323d6618527d8b03daa05db815f0490966e8b80679fe5ad3d868f84e1a71ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000200000200000000000000000000000000000000000000000000000000000000" + ] +} diff --git a/deployments/zksyncsepolia/solcInputs/0be793521835d17f112344b451092640.json b/deployments/zksyncsepolia/solcInputs/0be793521835d17f112344b451092640.json new file mode 100644 index 00000000..4c26ab65 --- /dev/null +++ b/deployments/zksyncsepolia/solcInputs/0be793521835d17f112344b451092640.json @@ -0,0 +1,43 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts/access/IAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\n /**\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n *\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n * {RoleAdminChanged} not being emitted signaling this.\n *\n * _Available since v3.1._\n */\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n /**\n * @dev Emitted when `account` is granted `role`.\n *\n * `sender` is the account that originated the contract call, an admin role\n * bearer except when using {AccessControl-_setupRole}.\n */\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Emitted when `account` is revoked `role`.\n *\n * `sender` is the account that originated the contract call:\n * - if using `revokeRole`, it is the admin role bearer\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\n */\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been granted `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n */\n function renounceRole(bytes32 role, address account) external;\n}\n" + }, + "@venusprotocol/solidity-utilities/contracts/validators.sol": { + "content": "// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\n/// @notice Thrown if the supplied address is a zero address where it is not allowed\nerror ZeroAddressNotAllowed();\n\n/// @notice Thrown if the supplied value is 0 where it is not allowed\nerror ZeroValueNotAllowed();\n\n/// @notice Checks if the provided address is nonzero, reverts otherwise\n/// @param address_ Address to check\n/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address\nfunction ensureNonzeroAddress(address address_) pure {\n if (address_ == address(0)) {\n revert ZeroAddressNotAllowed();\n }\n}\n\n/// @notice Checks if the provided value is nonzero, reverts otherwise\n/// @param value_ Value to check\n/// @custom:error ZeroValueNotAllowed is thrown if the provided value is 0\nfunction ensureNonzeroValue(uint256 value_) pure {\n if (value_ == 0) {\n revert ZeroValueNotAllowed();\n }\n}\n" + }, + "contracts/Governance/IAccessControlManagerV8.sol": { + "content": "// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.8.25;\n\nimport \"@openzeppelin/contracts/access/IAccessControl.sol\";\n\n/**\n * @title IAccessControlManagerV8\n * @author Venus\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\n */\ninterface IAccessControlManagerV8 is IAccessControl {\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\n\n function revokeCallPermission(\n address contractAddress,\n string calldata functionSig,\n address accountToRevoke\n ) external;\n\n function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\n\n function hasPermission(\n address account,\n address contractAddress,\n string calldata functionSig\n ) external view returns (bool);\n}\n" + }, + "contracts/Governance/TimelockV8.sol": { + "content": "// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\nimport { ensureNonzeroAddress } from \"@venusprotocol/solidity-utilities/contracts/validators.sol\";\n\n/**\n * @title TimelockV8\n * @author Venus\n * @notice The Timelock contract using solidity V8.\n * This contract also differs from the original timelock because it has a virtual function to get minimum delays\n * and allow test deployments to override the value.\n */\ncontract TimelockV8 {\n /// @notice Required period to execute a proposal transaction\n uint256 private constant DEFAULT_GRACE_PERIOD = 14 days;\n\n /// @notice Minimum amount of time a proposal transaction must be queued\n uint256 private constant DEFAULT_MINIMUM_DELAY = 1 hours;\n\n /// @notice Maximum amount of time a proposal transaction must be queued\n uint256 private constant DEFAULT_MAXIMUM_DELAY = 30 days;\n\n /// @notice Timelock admin authorized to queue and execute transactions\n address public admin;\n\n /// @notice Account proposed as the next admin\n address public pendingAdmin;\n\n /// @notice Period for a proposal transaction to be queued\n uint256 public delay;\n\n /// @notice Mapping of queued transactions\n mapping(bytes32 => bool) public queuedTransactions;\n\n /// @notice Event emitted when a new admin is accepted\n event NewAdmin(address indexed oldAdmin, address indexed newAdmin);\n\n /// @notice Event emitted when a new admin is proposed\n event NewPendingAdmin(address indexed newPendingAdmin);\n\n /// @notice Event emitted when a new delay is proposed\n event NewDelay(uint256 indexed oldDelay, uint256 indexed newDelay);\n\n /// @notice Event emitted when a proposal transaction has been cancelled\n event CancelTransaction(\n bytes32 indexed txHash,\n address indexed target,\n uint256 value,\n string signature,\n bytes data,\n uint256 eta\n );\n\n /// @notice Event emitted when a proposal transaction has been executed\n event ExecuteTransaction(\n bytes32 indexed txHash,\n address indexed target,\n uint256 value,\n string signature,\n bytes data,\n uint256 eta\n );\n\n /// @notice Event emitted when a proposal transaction has been queued\n event QueueTransaction(\n bytes32 indexed txHash,\n address indexed target,\n uint256 value,\n string signature,\n bytes data,\n uint256 eta\n );\n\n constructor(address admin_, uint256 delay_) {\n require(delay_ >= MINIMUM_DELAY(), \"Timelock::constructor: Delay must exceed minimum delay.\");\n require(delay_ <= MAXIMUM_DELAY(), \"Timelock::setDelay: Delay must not exceed maximum delay.\");\n ensureNonzeroAddress(admin_);\n\n admin = admin_;\n delay = delay_;\n }\n\n fallback() external payable {}\n\n /**\n * @notice Setter for the transaction queue delay\n * @param delay_ The new delay period for the transaction queue\n * @custom:access Sender must be Timelock itself\n * @custom:event Emit NewDelay with old and new delay\n */\n function setDelay(uint256 delay_) public {\n require(msg.sender == address(this), \"Timelock::setDelay: Call must come from Timelock.\");\n require(delay_ >= MINIMUM_DELAY(), \"Timelock::setDelay: Delay must exceed minimum delay.\");\n require(delay_ <= MAXIMUM_DELAY(), \"Timelock::setDelay: Delay must not exceed maximum delay.\");\n emit NewDelay(delay, delay_);\n delay = delay_;\n }\n\n /**\n * @notice Return grace period\n * @return The duration of the grace period, specified as a uint256 value.\n */\n function GRACE_PERIOD() public view virtual returns (uint256) {\n return DEFAULT_GRACE_PERIOD;\n }\n\n /**\n * @notice Return required minimum delay\n * @return Minimum delay\n */\n function MINIMUM_DELAY() public view virtual returns (uint256) {\n return DEFAULT_MINIMUM_DELAY;\n }\n\n /**\n * @notice Return required maximum delay\n * @return Maximum delay\n */\n function MAXIMUM_DELAY() public view virtual returns (uint256) {\n return DEFAULT_MAXIMUM_DELAY;\n }\n\n /**\n * @notice Method for accepting a proposed admin\n * @custom:access Sender must be pending admin\n * @custom:event Emit NewAdmin with old and new admin\n */\n function acceptAdmin() public {\n require(msg.sender == pendingAdmin, \"Timelock::acceptAdmin: Call must come from pendingAdmin.\");\n emit NewAdmin(admin, msg.sender);\n admin = msg.sender;\n pendingAdmin = address(0);\n }\n\n /**\n * @notice Method to propose a new admin authorized to call timelock functions. This should be the Governor Contract\n * @param pendingAdmin_ Address of the proposed admin\n * @custom:access Sender must be Timelock contract itself or admin\n * @custom:event Emit NewPendingAdmin with new pending admin\n */\n function setPendingAdmin(address pendingAdmin_) public {\n require(\n msg.sender == address(this) || msg.sender == admin,\n \"Timelock::setPendingAdmin: Call must come from Timelock.\"\n );\n ensureNonzeroAddress(pendingAdmin_);\n pendingAdmin = pendingAdmin_;\n\n emit NewPendingAdmin(pendingAdmin);\n }\n\n /**\n * @notice Called for each action when queuing a proposal\n * @param target Address of the contract with the method to be called\n * @param value Native token amount sent with the transaction\n * @param signature Signature of the function to be called\n * @param data Arguments to be passed to the function when called\n * @param eta Timestamp after which the transaction can be executed\n * @return Hash of the queued transaction\n * @custom:access Sender must be admin\n * @custom:event Emit QueueTransaction\n */\n function queueTransaction(\n address target,\n uint256 value,\n string calldata signature,\n bytes calldata data,\n uint256 eta\n ) public returns (bytes32) {\n require(msg.sender == admin, \"Timelock::queueTransaction: Call must come from admin.\");\n require(\n eta >= getBlockTimestamp() + delay,\n \"Timelock::queueTransaction: Estimated execution block must satisfy delay.\"\n );\n\n bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));\n require(!queuedTransactions[txHash], \"Timelock::queueTransaction: transaction already queued.\");\n queuedTransactions[txHash] = true;\n\n emit QueueTransaction(txHash, target, value, signature, data, eta);\n return txHash;\n }\n\n /**\n * @notice Called to cancel a queued transaction\n * @param target Address of the contract with the method to be called\n * @param value Native token amount sent with the transaction\n * @param signature Signature of the function to be called\n * @param data Arguments to be passed to the function when called\n * @param eta Timestamp after which the transaction can be executed\n * @custom:access Sender must be admin\n * @custom:event Emit CancelTransaction\n */\n function cancelTransaction(\n address target,\n uint256 value,\n string calldata signature,\n bytes calldata data,\n uint256 eta\n ) public {\n require(msg.sender == admin, \"Timelock::cancelTransaction: Call must come from admin.\");\n\n bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));\n require(queuedTransactions[txHash], \"Timelock::cancelTransaction: transaction is not queued yet.\");\n delete (queuedTransactions[txHash]);\n\n emit CancelTransaction(txHash, target, value, signature, data, eta);\n }\n\n /**\n * @notice Called to execute a queued transaction\n * @param target Address of the contract with the method to be called\n * @param value Native token amount sent with the transaction\n * @param signature Signature of the function to be called\n * @param data Arguments to be passed to the function when called\n * @param eta Timestamp after which the transaction can be executed\n * @return Result of function call\n * @custom:access Sender must be admin\n * @custom:event Emit ExecuteTransaction\n */\n function executeTransaction(\n address target,\n uint256 value,\n string calldata signature,\n bytes calldata data,\n uint256 eta\n ) public returns (bytes memory) {\n require(msg.sender == admin, \"Timelock::executeTransaction: Call must come from admin.\");\n\n bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));\n require(queuedTransactions[txHash], \"Timelock::executeTransaction: Transaction hasn't been queued.\");\n require(getBlockTimestamp() >= eta, \"Timelock::executeTransaction: Transaction hasn't surpassed time lock.\");\n require(getBlockTimestamp() <= eta + GRACE_PERIOD(), \"Timelock::executeTransaction: Transaction is stale.\");\n\n delete (queuedTransactions[txHash]);\n\n bytes memory callData;\n\n if (bytes(signature).length == 0) {\n callData = data;\n } else {\n callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data);\n }\n\n // solium-disable-next-line security/no-call-value\n (bool success, bytes memory returnData) = target.call{ value: value }(callData);\n require(success, \"Timelock::executeTransaction: Transaction execution reverted.\");\n\n emit ExecuteTransaction(txHash, target, value, signature, data, eta);\n\n return returnData;\n }\n\n /**\n * @notice Returns the current block timestamp\n * @return The current block timestamp\n */\n function getBlockTimestamp() internal view returns (uint256) {\n // solium-disable-next-line security/no-block-members\n return block.timestamp;\n }\n}\n" + }, + "contracts/test/TestTimelockV8.sol": { + "content": "// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\nimport { TimelockV8 } from \"../Governance/TimelockV8.sol\";\n\ncontract TestTimelockV8 is TimelockV8 {\n constructor(address admin_, uint256 delay_) public TimelockV8(admin_, delay_) {}\n\n function GRACE_PERIOD() public view override returns (uint256) {\n return 1 hours;\n }\n\n function MINIMUM_DELAY() public view override returns (uint256) {\n return 1;\n }\n\n function MAXIMUM_DELAY() public view override returns (uint256) {\n return 1 hours;\n }\n}\n" + }, + "contracts/Utils/ACMCommandsAggregator.sol": { + "content": "// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.25;\n\nimport { IAccessControlManagerV8 } from \"../Governance/IAccessControlManagerV8.sol\";\nimport { ensureNonzeroAddress } from \"@venusprotocol/solidity-utilities/contracts/validators.sol\";\n\n/**\n * @title ACMCommandsAggregator\n * @author Venus\n * @notice This contract is a helper to aggregate multiple grant and revoke permissions in batches and execute them in one go.\n */\ncontract ACMCommandsAggregator {\n /*\n * @notice Struct to store permission details\n */\n struct Permission {\n /*\n * @notice Address of the contract\n */\n address contractAddress;\n /*\n * @notice Function signature\n */\n string functionSig;\n /*\n * @notice Address of the account\n */\n address account;\n }\n\n /**\n * @notice Access control manager contract\n */\n IAccessControlManagerV8 public immutable ACM;\n\n /*\n * @notice 2D array to store grant permissions in batches\n */\n Permission[][] public grantPermissions;\n\n /*\n * @notice 2D array to store revoke permissions in batches\n */\n Permission[][] public revokePermissions;\n\n /*\n * @notice Event emitted when grant permissions are added\n */\n event GrantPermissionsAdded(uint256 index);\n\n /*\n * @notice Event emitted when revoke permissions are added\n */\n event RevokePermissionsAdded(uint256 index);\n\n /*\n * @notice Event emitted when grant permissions are executed\n */\n event GrantPermissionsExecuted(uint256 index);\n\n /*\n * @notice Event emitted when revoke permissions are executed\n */\n event RevokePermissionsExecuted(uint256 index);\n\n /*\n * @notice Error to be thrown when permissions are empty\n */\n error EmptyPermissions();\n\n /*\n * @notice Constructor to set the access control manager\n * @param _acm Address of the access control manager\n */\n constructor(IAccessControlManagerV8 _acm) {\n ensureNonzeroAddress(address(_acm));\n ACM = _acm;\n }\n\n /*\n * @notice Function to add grant permissions\n * @param _permissions Array of permissions\n * @custom:event Emits GrantPermissionsAdded event\n */\n function addGrantPermissions(Permission[] memory _permissions) external {\n if (_permissions.length == 0) {\n revert EmptyPermissions();\n }\n\n uint256 index = grantPermissions.length;\n grantPermissions.push();\n\n for (uint256 i; i < _permissions.length; ++i) {\n grantPermissions[index].push(\n Permission(_permissions[i].contractAddress, _permissions[i].functionSig, _permissions[i].account)\n );\n }\n\n emit GrantPermissionsAdded(index);\n }\n\n /*\n * @notice Function to add revoke permissions\n * @param _permissions Array of permissions\n * @custom:event Emits RevokePermissionsAdded event\n */\n function addRevokePermissions(Permission[] memory _permissions) external {\n if (_permissions.length == 0) {\n revert EmptyPermissions();\n }\n\n uint256 index = revokePermissions.length;\n revokePermissions.push();\n\n for (uint256 i; i < _permissions.length; ++i) {\n revokePermissions[index].push(\n Permission(_permissions[i].contractAddress, _permissions[i].functionSig, _permissions[i].account)\n );\n }\n\n emit RevokePermissionsAdded(index);\n }\n\n /*\n * @notice Function to execute grant permissions\n * @param index Index of the permissions array\n * @custom:event Emits GrantPermissionsExecuted event\n */\n function executeGrantPermissions(uint256 index) external {\n uint256 length = grantPermissions[index].length;\n for (uint256 i; i < length; ++i) {\n Permission memory permission = grantPermissions[index][i];\n ACM.giveCallPermission(permission.contractAddress, permission.functionSig, permission.account);\n }\n\n emit GrantPermissionsExecuted(index);\n }\n\n /*\n * @notice Function to execute revoke permissions\n * @param index Index of the permissions array\n * @custom:event Emits RevokePermissionsExecuted event\n */\n function executeRevokePermissions(uint256 index) external {\n uint256 length = revokePermissions[index].length;\n for (uint256 i; i < length; ++i) {\n Permission memory permission = revokePermissions[index][i];\n ACM.revokeCallPermission(permission.contractAddress, permission.functionSig, permission.account);\n }\n\n emit RevokePermissionsExecuted(index);\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "mode": "3" + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": ["storageLayout", "abi", "evm.methodIdentifiers", "metadata", "devdoc", "userdoc"], + "": ["ast"] + } + }, + "metadata": { + "bytecodeHash": "none" + }, + "detectMissingLibraries": false, + "forceEVMLA": false, + "enableEraVMExtensions": false, + "libraries": {} + } +} From 93342e8c7cf4226d4e4a1a7b8a8a8795c0101e1f Mon Sep 17 00:00:00 2001 From: GitGuru7 Date: Mon, 7 Oct 2024 12:55:33 +0000 Subject: [PATCH 2/5] feat: updating deployment files --- deployments/zksyncsepolia.json | 245 +++++++++++++++++++++++ deployments/zksyncsepolia_addresses.json | 1 + 2 files changed, 246 insertions(+) diff --git a/deployments/zksyncsepolia.json b/deployments/zksyncsepolia.json index de4697fc..0d5338af 100644 --- a/deployments/zksyncsepolia.json +++ b/deployments/zksyncsepolia.json @@ -2,6 +2,251 @@ "name": "zksyncsepolia", "chainId": "300", "contracts": { + "ACMCommandsAggregator": { + "address": "0x920Bb18c4bd4D7bc41Bf39933BCAa3D078641502", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IAccessControlManagerV8", + "name": "_acm", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "EmptyPermissions", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddressNotAllowed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "GrantPermissionsAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "GrantPermissionsExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "RevokePermissionsAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "RevokePermissionsExecuted", + "type": "event" + }, + { + "inputs": [], + "name": "ACM", + "outputs": [ + { + "internalType": "contract IAccessControlManagerV8", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "functionSig", + "type": "string" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "internalType": "struct ACMCommandsAggregator.Permission[]", + "name": "_permissions", + "type": "tuple[]" + } + ], + "name": "addGrantPermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "functionSig", + "type": "string" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "internalType": "struct ACMCommandsAggregator.Permission[]", + "name": "_permissions", + "type": "tuple[]" + } + ], + "name": "addRevokePermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "executeGrantPermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "executeRevokePermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "grantPermissions", + "outputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "functionSig", + "type": "string" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "revokePermissions", + "outputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "functionSig", + "type": "string" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + }, "AccessControlManager": { "address": "0xD07f543d47c3a8997D6079958308e981AC14CD01", "abi": [ diff --git a/deployments/zksyncsepolia_addresses.json b/deployments/zksyncsepolia_addresses.json index db905209..97271014 100644 --- a/deployments/zksyncsepolia_addresses.json +++ b/deployments/zksyncsepolia_addresses.json @@ -2,6 +2,7 @@ "name": "zksyncsepolia", "chainId": "300", "addresses": { + "ACMCommandsAggregator": "0x920Bb18c4bd4D7bc41Bf39933BCAa3D078641502", "AccessControlManager": "0xD07f543d47c3a8997D6079958308e981AC14CD01", "CriticalTimelock": "0x0E6138bE0FA1915efC73670a20A10EFd720a6Cc8", "DefaultProxyAdmin": "0x18E44f588a4DcF2F7145d35A5C226e129040b6D3", From 5c3017dc527874f377257a021113b422285df4cf Mon Sep 17 00:00:00 2001 From: GitGuru7 <128375421+GitGuru7@users.noreply.github.com> Date: Mon, 28 Oct 2024 19:38:57 +0530 Subject: [PATCH 3/5] refactor: make initial configuration of mc governance generic --- ...s => 009-initial-configuration-multichain-governance.ts} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename deploy/{009-configure-zksync-governance.ts => 009-initial-configuration-multichain-governance.ts} (94%) diff --git a/deploy/009-configure-zksync-governance.ts b/deploy/009-initial-configuration-multichain-governance.ts similarity index 94% rename from deploy/009-configure-zksync-governance.ts rename to deploy/009-initial-configuration-multichain-governance.ts index 2dcc41b8..daf768d4 100644 --- a/deploy/009-configure-zksync-governance.ts +++ b/deploy/009-initial-configuration-multichain-governance.ts @@ -109,14 +109,14 @@ const func: DeployFunction = async function () { const receipt = await tx.wait(); const events = receipt.events?.filter(event => event.event === "GrantPermissionsAdded"); - console.log("Grant Permissions for ZKsync added with indexes: ", events?.[0].args?.index.toString()); + console.log(`Grant Permissions for ${network.name} added with indexes: `, events?.[0].args?.index.toString()); } catch (error) { console.error("Error adding grant permissions:", error); } }; -func.tags = ["zksync-permissions"]; +func.tags = ["multichain-governance-permissions"]; func.skip = async (hre: HardhatRuntimeEnvironment) => - hre.network.name != "zksyncsepolia" && hre.network.name != "zksyncmainnet"; + hre.network.name === "bsctetnet" || hre.network.name === "bscmainnet"; export default func; From 2b1948851ca6a8fa1b1e5fe6295763ceb82fe6f5 Mon Sep 17 00:00:00 2001 From: GitGuru7 <128375421+GitGuru7@users.noreply.github.com> Date: Mon, 28 Oct 2024 19:41:16 +0530 Subject: [PATCH 4/5] fix: typo --- deploy/009-initial-configuration-multichain-governance.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/009-initial-configuration-multichain-governance.ts b/deploy/009-initial-configuration-multichain-governance.ts index daf768d4..dbad7c2c 100644 --- a/deploy/009-initial-configuration-multichain-governance.ts +++ b/deploy/009-initial-configuration-multichain-governance.ts @@ -117,6 +117,6 @@ const func: DeployFunction = async function () { func.tags = ["multichain-governance-permissions"]; func.skip = async (hre: HardhatRuntimeEnvironment) => - hre.network.name === "bsctetnet" || hre.network.name === "bscmainnet"; + hre.network.name === "bsctestnet" || hre.network.name === "bscmainnet"; export default func; From c07ee707a416d704477b96b0f55c07d7594816c6 Mon Sep 17 00:00:00 2001 From: GitGuru7 <128375421+GitGuru7@users.noreply.github.com> Date: Tue, 5 Nov 2024 12:45:01 +0530 Subject: [PATCH 5/5] chore: yarn.lock updated --- yarn.lock | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2bd5d15b..79132c81 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3450,7 +3450,29 @@ __metadata: languageName: node linkType: hard -"@venusprotocol/governance-contracts@^2.0.0, @venusprotocol/governance-contracts@workspace:.": +"@venusprotocol/governance-contracts@npm:^1.4.0": + version: 1.4.0 + resolution: "@venusprotocol/governance-contracts@npm:1.4.0" + dependencies: + "@venusprotocol/solidity-utilities": ^1.1.0 + hardhat-deploy-ethers: ^0.3.0-beta.13 + module-alias: ^2.2.2 + checksum: 85c6b6a815edb0befa4c38e3652a58464827d390620210b99575c16960ee6505e95e7c2192ebc972da7ed758d3c62e150d32fbdd1f01acab1731f29b11d1884e + languageName: node + linkType: hard + +"@venusprotocol/governance-contracts@npm:^2.0.0": + version: 2.4.0 + resolution: "@venusprotocol/governance-contracts@npm:2.4.0" + dependencies: + "@venusprotocol/solidity-utilities": 2.0.0 + hardhat-deploy-ethers: ^0.3.0-beta.13 + module-alias: ^2.2.2 + checksum: 2a754a05a655bc7b24c33685f86c9bd616a6e7cba4b048315b11eca67a8c1e37c033f04e1b4394e7326251b6af49ab257275cef72727c8976ae16c7f2c2ff0e7 + languageName: node + linkType: hard + +"@venusprotocol/governance-contracts@workspace:.": version: 0.0.0-use.local resolution: "@venusprotocol/governance-contracts@workspace:." dependencies: @@ -3529,17 +3551,6 @@ __metadata: languageName: unknown linkType: soft -"@venusprotocol/governance-contracts@npm:^1.4.0": - version: 1.4.0 - resolution: "@venusprotocol/governance-contracts@npm:1.4.0" - dependencies: - "@venusprotocol/solidity-utilities": ^1.1.0 - hardhat-deploy-ethers: ^0.3.0-beta.13 - module-alias: ^2.2.2 - checksum: 85c6b6a815edb0befa4c38e3652a58464827d390620210b99575c16960ee6505e95e7c2192ebc972da7ed758d3c62e150d32fbdd1f01acab1731f29b11d1884e - languageName: node - linkType: hard - "@venusprotocol/protocol-reserve@npm:^1.4.0": version: 1.5.0 resolution: "@venusprotocol/protocol-reserve@npm:1.5.0"