{"contractName":"CreateAndAddModules","abi":[{"constant":false,"inputs":[{"internalType":"contract Module","name":"module","type":"address"}],"name":"enableModule","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"proxyFactory","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createAndAddModules","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b5061029f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806360df7f581461003b578063610b592514610116575b600080fd5b6101146004803603604081101561005157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561008e57600080fd5b8201836020820111156100a057600080fd5b803590602001918460018302840111640100000000831117156100c257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061015a565b005b6101586004803603602081101561012c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610265565b005b600081519050600080600090505b8281101561025e5780840160200151818501604001604051600060208285858c5af4141561019557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8151169450602080601f85010402602001840193505050503073ffffffffffffffffffffffffffffffffffffffff1663610b5925836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561024157600080fd5b505af1158015610255573d6000803e3d6000fd5b50505050610168565b5050505050565b600080fdfea265627a7a72315820e6f479a80b49751f8ff3aa090cda77d1c85a54e3e5b0aaf63eb36a9815ecfc6864736f6c634300050e0032","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c806360df7f581461003b578063610b592514610116575b600080fd5b6101146004803603604081101561005157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561008e57600080fd5b8201836020820111156100a057600080fd5b803590602001918460018302840111640100000000831117156100c257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061015a565b005b6101586004803603602081101561012c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610265565b005b600081519050600080600090505b8281101561025e5780840160200151818501604001604051600060208285858c5af4141561019557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8151169450602080601f85010402602001840193505050503073ffffffffffffffffffffffffffffffffffffffff1663610b5925836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561024157600080fd5b505af1158015610255573d6000803e3d6000fd5b50505050610168565b5050505050565b600080fdfea265627a7a72315820e6f479a80b49751f8ff3aa090cda77d1c85a54e3e5b0aaf63eb36a9815ecfc6864736f6c634300050e0032","sourceMap":"258:1464:19:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:1464:19;;;;;;;","deployedSourceMap":"258:1464:19:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:1464:19;;;;;;;;;;;;;;;;;;;;;;;;828:892;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;828:892:19;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;828:892:19;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;828:892:19;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;828:892:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;828:892:19;;;;;;;;;;;;;;;:::i;:::-;;418:81;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;418:81:19;;;;;;;;;;;;;;;;;;;:::i;:::-;;828:892;927:14;944:4;:11;927:28;;965:13;988:9;1000:1;988:13;;1011:703;1022:6;1018:1;:10;1011:703;;;1190:1;1184:4;1180:12;1174:4;1170:23;1164:30;1250:1;1244:4;1240:12;1234:4;1230:23;1291:4;1285:11;1398:1;1391:4;1383:6;1364:17;1351:11;1337:12;1332:3;1319:77;1316:84;1313:2;;;1413:1;1410;1403:12;1313:2;1463:42;1454:6;1448:13;1444:62;1434:72;;1644:4;1637;1630;1611:17;1607:28;1603:39;1599:50;1593:4;1589:61;1586:1;1582:69;1577:74;;1121:544;;;1678:4;:17;;;1696:6;1678:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1678:25:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1678:25:19;;;;1011:703;;;828:892;;;;;:::o;418:81::-;484:8;;","source":"pragma solidity >=0.5.0 <0.7.0;\nimport \"../base/Module.sol\";\n\n\n/// @title Create and Add Modules - Allows to create and add multiple module in one transaction.\n/// @author Stefan George - <stefan@gnosis.pm>\n/// @author Richard Meissner - <richard@gnosis.pm>\ncontract CreateAndAddModules {\n\n    /// @dev Function required to compile contract. Gnosis Safe function is called instead.\n    /// @param module Not used.\n    function enableModule(Module module)\n        public\n    {\n        revert();\n    }\n\n    /// @dev Allows to create and add multiple module in one transaction.\n    /// @param proxyFactory Module proxy factory contract.\n    /// @param data Modules constructor payload. This is the data for each proxy factory call concatinated. (e.g. <byte_array_len_1><byte_array_data_1><byte_array_len_2><byte_array_data_2>)\n    function createAndAddModules(address proxyFactory, bytes memory data)\n        public\n    {\n        uint256 length = data.length;\n        Module module;\n        uint256 i = 0;\n        while (i < length) {\n            // solium-disable-next-line security/no-inline-assembly\n            assembly {\n                let createBytesLength := mload(add(0x20, add(data, i)))\n                let createBytes := add(0x40, add(data, i))\n\n                let output := mload(0x40)\n                if eq(delegatecall(gas, proxyFactory, createBytes, createBytesLength, output, 0x20), 0) { revert(0, 0) }\n                module := and(mload(output), 0xffffffffffffffffffffffffffffffffffffffff)\n\n                // Data is always padded to 32 bytes\n                i := add(i, add(0x20, mul(div(add(createBytesLength, 0x1f), 0x20), 0x20)))\n            }\n            this.enableModule(module);\n        }\n    }\n}\n","compiler":{"name":"solc","version":"0.5.14+commit.01f1aaa4.Emscripten.clang"},"networks":{"1":{"links":{},"events":{},"address":"0xF61A721642B0c0C8b334bA3763BA1326F53798C0","updated_at":1668154855236},"4":{"links":{},"events":{},"address":"0xF61A721642B0c0C8b334bA3763BA1326F53798C0","updated_at":1668154855271},"5":{"links":{},"events":{},"address":"0xF61A721642B0c0C8b334bA3763BA1326F53798C0","updated_at":1668154855330},"42":{"links":{},"events":{},"address":"0xF61A721642B0c0C8b334bA3763BA1326F53798C0","updated_at":1668154855301},"100":{"links":{},"events":{},"address":"0xF61A721642B0c0C8b334bA3763BA1326F53798C0","updated_at":1668154855359}},"schemaVersion":"2.0.3","updatedAt":"2022-11-11T08:20:54.743Z"}