{
  "fileName": "CrowdloanFactory.sol",
  "contractName": "CrowdloanFactory",
  "source": "pragma solidity 0.5.11;\n\nimport \"zos-lib/contracts/Initializable.sol\";\nimport \"zos-lib/contracts/application/App.sol\";\nimport \"zos-lib/contracts/upgradeability/AdminUpgradeabilityProxy.sol\";\nimport \"openzeppelin-eth/contracts/token/ERC20/IERC20.sol\";\nimport \"openzeppelin-eth/contracts/token/ERC20/StandaloneERC20.sol\";\nimport \"../crowdloan/Crowdloan.sol\";\n\ncontract CrowdloanFactory is Initializable {\n    string constant ENABLE_CREDIT_PACKAGE = \"enable-credit\";\n    string constant TERMS_CONTRACT = \"TermsContract\";\n    string constant CROWDLOAN = \"Crowdloan\";\n    string constant REPAYMENT_ROUTER = \"RepaymentManager\";\n\n    App public app;\n\n    event LoanCreated(\n        address indexed borrower,\n        uint256 indexed principalRequested,\n        uint256 repaymentCap,\n        address crowdloan,\n        string loanMetadataUrl,\n        address contractAdmin\n    );\n\n    function initialize(address _appContractAddress) public initializer {\n        app = App(_appContractAddress);\n    }\n\n    function _createCrowdloan(bytes memory _data, address admin) internal returns (address proxy) {\n        return address(app.create(ENABLE_CREDIT_PACKAGE, CROWDLOAN, admin, _data));\n    }\n\n    function deploy(\n        address borrower,\n        IERC20 principalToken,\n        uint256 principalRequested,\n        uint256 repaymentCap,\n        uint256 crowdfundLength,\n        string calldata loanMetadataUrl,\n        address contractAdmin\n    ) external {\n        address crowdloan = _createCrowdloan(\"\", contractAdmin);\n\n        Crowdloan(crowdloan).initialize(\n            borrower,\n            principalToken,\n            principalRequested,\n            repaymentCap,\n            crowdfundLength,\n            loanMetadataUrl\n        );\n\n        emit LoanCreated(\n            borrower,\n            principalRequested,\n            repaymentCap,\n            crowdloan,\n            loanMetadataUrl,\n            contractAdmin\n        );\n    }\n}\n",
  "sourcePath": "contracts/factory/CrowdloanFactory.sol",
  "sourceMap": "358:1577:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;358:1577:1;;;;;;;;;;",
  "deployedSourceMap": "358:1577:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;358:1577:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;627:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;876:115;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;876:115:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;1188:745;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1188:745:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1188:745:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1188:745:1;;;;;;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;1188:745:1;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;627:14;;;;;;;;;;;;;:::o;876:115::-;1024:12:18;;;;;;;;;;;:31;;;;1040:15;:13;:15;;:::i;:::-;1024:31;:47;;;;1060:11;;;;;;;;;;;1059:12;1024:47;1016:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;;;;;;1151:13;1129:35;;1174:14;1170:80;;;1213:4;1198:12;;:19;;;;;;;;;;;;;;;;;;1239:4;1225:11;;:18;;;;;;;;;;;;;;;;;;1170:80;964:19:1;954:3;;:30;;;;;;;;;;;;;;;;;;1256:1:18;1268:14;1264:55;;;1307:5;1292:12;;:20;;;;;;;;;;;;;;;;;;1264:55;876:115:1;;;:::o;1188:745::-;1457:17;1477:35;;;;;;;;;;;;;;;1498:13;1477:16;:35;;:::i;:::-;1457:55;;1533:9;1523:31;;;1568:8;1590:14;1618:18;1650:12;1676:15;1705;;1523:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1523:207:1;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1523:207:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1523:207:1;;;;1793:18;1771:8;1746:180;;;1825:12;1851:9;1874:15;;1903:13;1746:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1746:180:1;;;;;;;;;;;;;;;;;1188:745;;;;;;;;;;:::o;1409:467:18:-;1456:4;1797:10;1842:7;1830:20;1824:26;;1870:1;1864:2;:7;1857:14;;;;;1409:467;;;:::o;997:185:1:-;1076:13;1116:3;;;;;;;;;;;:10;;;1127:21;;;;;;;;;;;;;;;;;;;1150:9;;;;;;;;;;;;;;;;;;;1161:5;1168;1116:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;1116:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;1116:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;8:100;52:2;49:1;45:10;40:15;;8:100;;;12:14;1116:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1116:58:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1116:58:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1116:58:1;;;;;;;;;;;;;;;;1101:74;;;;997:185;;;;;:::o",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "app",
      "outputs": [
        {
          "internalType": "contract App",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_appContractAddress",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "principalToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "principalRequested",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "repaymentCap",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "crowdfundLength",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "loanMetadataUrl",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "contractAdmin",
          "type": "address"
        }
      ],
      "name": "deploy",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "principalRequested",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repaymentCap",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "crowdloan",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "loanMetadataUrl",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "contractAdmin",
          "type": "address"
        }
      ],
      "name": "LoanCreated",
      "type": "event"
    }
  ],
  "ast": {
    "absolutePath": "contracts/factory/CrowdloanFactory.sol",
    "exportedSymbols": {
      "CrowdloanFactory": [
        557
      ]
    },
    "id": 558,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 440,
        "literals": [
          "solidity",
          "0.5",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "zos-lib/contracts/Initializable.sol",
        "file": "zos-lib/contracts/Initializable.sol",
        "id": 441,
        "nodeType": "ImportDirective",
        "scope": 558,
        "sourceUnit": 2629,
        "src": "25:45:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "zos-lib/contracts/application/App.sol",
        "file": "zos-lib/contracts/application/App.sol",
        "id": 442,
        "nodeType": "ImportDirective",
        "scope": 558,
        "sourceUnit": 2886,
        "src": "71:47:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "zos-lib/contracts/upgradeability/AdminUpgradeabilityProxy.sol",
        "file": "zos-lib/contracts/upgradeability/AdminUpgradeabilityProxy.sol",
        "id": 443,
        "nodeType": "ImportDirective",
        "scope": 558,
        "sourceUnit": 3380,
        "src": "119:71:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/token/ERC20/IERC20.sol",
        "file": "openzeppelin-eth/contracts/token/ERC20/IERC20.sol",
        "id": 444,
        "nodeType": "ImportDirective",
        "scope": 558,
        "sourceUnit": 2124,
        "src": "191:59:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-eth/contracts/token/ERC20/StandaloneERC20.sol",
        "file": "openzeppelin-eth/contracts/token/ERC20/StandaloneERC20.sol",
        "id": 445,
        "nodeType": "ImportDirective",
        "scope": 558,
        "sourceUnit": 2547,
        "src": "251:68:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/crowdloan/Crowdloan.sol",
        "file": "../crowdloan/Crowdloan.sol",
        "id": 446,
        "nodeType": "ImportDirective",
        "scope": 558,
        "sourceUnit": 439,
        "src": "320:36:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 447,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2628,
              "src": "387:13:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$2628",
                "typeString": "contract Initializable"
              }
            },
            "id": 448,
            "nodeType": "InheritanceSpecifier",
            "src": "387:13:1"
          }
        ],
        "contractDependencies": [
          2628
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 557,
        "linearizedBaseContracts": [
          557,
          2628
        ],
        "name": "CrowdloanFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 451,
            "name": "ENABLE_CREDIT_PACKAGE",
            "nodeType": "VariableDeclaration",
            "scope": 557,
            "src": "407:55:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 449,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "407:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "656e61626c652d637265646974",
              "id": 450,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "447:15:1",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_1cb1f859e76d875346c49a194de6febccf8fcc5a9a37663ccb0f1eccddf3ed01",
                "typeString": "literal_string \"enable-credit\""
              },
              "value": "enable-credit"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 454,
            "name": "TERMS_CONTRACT",
            "nodeType": "VariableDeclaration",
            "scope": 557,
            "src": "468:48:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 452,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "468:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5465726d73436f6e7472616374",
              "id": 453,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "501:15:1",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ca6e7e198e96c5d20d1a6e30b1a1071c78936a498b653c037328956c1551af23",
                "typeString": "literal_string \"TermsContract\""
              },
              "value": "TermsContract"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 457,
            "name": "CROWDLOAN",
            "nodeType": "VariableDeclaration",
            "scope": 557,
            "src": "522:39:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 455,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "522:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "43726f77646c6f616e",
              "id": 456,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "550:11:1",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d27179d400327cfde9fc77d3814898879b54b1057e7b52f45c3505121eb622ab",
                "typeString": "literal_string \"Crowdloan\""
              },
              "value": "Crowdloan"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 460,
            "name": "REPAYMENT_ROUTER",
            "nodeType": "VariableDeclaration",
            "scope": 557,
            "src": "567:53:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 458,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "567:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "52657061796d656e744d616e61676572",
              "id": 459,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "602:18:1",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_1fd41912b6a832455d513edb2fc342ed84cb954c3fcd68fcb11830e86a978d5e",
                "typeString": "literal_string \"RepaymentManager\""
              },
              "value": "RepaymentManager"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 462,
            "name": "app",
            "nodeType": "VariableDeclaration",
            "scope": 557,
            "src": "627:14:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_App_$2885",
              "typeString": "contract App"
            },
            "typeName": {
              "contractScope": null,
              "id": 461,
              "name": "App",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2885,
              "src": "627:3:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_App_$2885",
                "typeString": "contract App"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 476,
            "name": "LoanCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 464,
                  "indexed": true,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 476,
                  "src": "675:24:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 463,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "675:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 466,
                  "indexed": true,
                  "name": "principalRequested",
                  "nodeType": "VariableDeclaration",
                  "scope": 476,
                  "src": "709:34:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 465,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "709:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 468,
                  "indexed": false,
                  "name": "repaymentCap",
                  "nodeType": "VariableDeclaration",
                  "scope": 476,
                  "src": "753:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 467,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "753:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 470,
                  "indexed": false,
                  "name": "crowdloan",
                  "nodeType": "VariableDeclaration",
                  "scope": 476,
                  "src": "783:17:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 469,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "783:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 472,
                  "indexed": false,
                  "name": "loanMetadataUrl",
                  "nodeType": "VariableDeclaration",
                  "scope": 476,
                  "src": "810:22:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 471,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "810:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 474,
                  "indexed": false,
                  "name": "contractAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 476,
                  "src": "842:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 473,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "842:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "665:204:1"
            },
            "src": "648:222:1"
          },
          {
            "body": {
              "id": 489,
              "nodeType": "Block",
              "src": "944:47:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 483,
                      "name": "app",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 462,
                      "src": "954:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_App_$2885",
                        "typeString": "contract App"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 485,
                          "name": "_appContractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 478,
                          "src": "964:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 484,
                        "name": "App",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2885,
                        "src": "960:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_App_$2885_$",
                          "typeString": "type(contract App)"
                        }
                      },
                      "id": 486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "960:24:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_App_$2885",
                        "typeString": "contract App"
                      }
                    },
                    "src": "954:30:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_App_$2885",
                      "typeString": "contract App"
                    }
                  },
                  "id": 488,
                  "nodeType": "ExpressionStatement",
                  "src": "954:30:1"
                }
              ]
            },
            "documentation": null,
            "id": 490,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 481,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 480,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2609,
                  "src": "932:11:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "932:11:1"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 478,
                  "name": "_appContractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 490,
                  "src": "896:27:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 477,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "896:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "895:29:1"
            },
            "returnParameters": {
              "id": 482,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "944:0:1"
            },
            "scope": 557,
            "src": "876:115:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 509,
              "nodeType": "Block",
              "src": "1091:91:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 502,
                            "name": "ENABLE_CREDIT_PACKAGE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 451,
                            "src": "1127:21:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 503,
                            "name": "CROWDLOAN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 457,
                            "src": "1150:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 504,
                            "name": "admin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 494,
                            "src": "1161:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 505,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 492,
                            "src": "1168:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            },
                            {
                              "typeIdentifier": "t_string_memory",
                              "typeString": "string memory"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 500,
                            "name": "app",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 462,
                            "src": "1116:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_App_$2885",
                              "typeString": "contract App"
                            }
                          },
                          "id": 501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "create",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2884,
                          "src": "1116:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_payable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_AdminUpgradeabilityProxy_$3379_$",
                            "typeString": "function (string memory,string memory,address,bytes memory) payable external returns (contract AdminUpgradeabilityProxy)"
                          }
                        },
                        "id": 506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1116:58:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_AdminUpgradeabilityProxy_$3379",
                          "typeString": "contract AdminUpgradeabilityProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_AdminUpgradeabilityProxy_$3379",
                          "typeString": "contract AdminUpgradeabilityProxy"
                        }
                      ],
                      "id": 499,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1108:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1108:67:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 498,
                  "id": 508,
                  "nodeType": "Return",
                  "src": "1101:74:1"
                }
              ]
            },
            "documentation": null,
            "id": 510,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_createCrowdloan",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 492,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 510,
                  "src": "1023:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 491,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1023:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 494,
                  "name": "admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 510,
                  "src": "1043:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 493,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1043:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1022:35:1"
            },
            "returnParameters": {
              "id": 498,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 497,
                  "name": "proxy",
                  "nodeType": "VariableDeclaration",
                  "scope": 510,
                  "src": "1076:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 496,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1075:15:1"
            },
            "scope": 557,
            "src": "997:185:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 555,
              "nodeType": "Block",
              "src": "1447:486:1",
              "statements": [
                {
                  "assignments": [
                    528
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 528,
                      "name": "crowdloan",
                      "nodeType": "VariableDeclaration",
                      "scope": 555,
                      "src": "1457:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 527,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1457:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 533,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "",
                        "id": 530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1494:2:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      },
                      {
                        "argumentTypes": null,
                        "id": 531,
                        "name": "contractAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 524,
                        "src": "1498:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 529,
                      "name": "_createCrowdloan",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 510,
                      "src": "1477:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_address_$returns$_t_address_$",
                        "typeString": "function (bytes memory,address) returns (address)"
                      }
                    },
                    "id": 532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1477:35:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1457:55:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 538,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 512,
                        "src": "1568:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 539,
                        "name": "principalToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 514,
                        "src": "1590:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$2123",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 540,
                        "name": "principalRequested",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 516,
                        "src": "1618:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 541,
                        "name": "repaymentCap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "1650:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 542,
                        "name": "crowdfundLength",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 520,
                        "src": "1676:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 543,
                        "name": "loanMetadataUrl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 522,
                        "src": "1705:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$2123",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 535,
                            "name": "crowdloan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 528,
                            "src": "1533:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 534,
                          "name": "Crowdloan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 438,
                          "src": "1523:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Crowdloan_$438_$",
                            "typeString": "type(contract Crowdloan)"
                          }
                        },
                        "id": 536,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1523:20:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Crowdloan_$438",
                          "typeString": "contract Crowdloan"
                        }
                      },
                      "id": 537,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 113,
                      "src": "1523:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_contract$_IERC20_$2123_$_t_uint256_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,contract IERC20,uint256,uint256,uint256,string memory) external"
                      }
                    },
                    "id": 544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1523:207:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 545,
                  "nodeType": "ExpressionStatement",
                  "src": "1523:207:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 547,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 512,
                        "src": "1771:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 548,
                        "name": "principalRequested",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 516,
                        "src": "1793:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 549,
                        "name": "repaymentCap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 518,
                        "src": "1825:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 550,
                        "name": "crowdloan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 528,
                        "src": "1851:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 551,
                        "name": "loanMetadataUrl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 522,
                        "src": "1874:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 552,
                        "name": "contractAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 524,
                        "src": "1903:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 546,
                      "name": "LoanCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 476,
                      "src": "1746:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (address,uint256,uint256,address,string memory,address)"
                      }
                    },
                    "id": 553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1746:180:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 554,
                  "nodeType": "EmitStatement",
                  "src": "1741:185:1"
                }
              ]
            },
            "documentation": null,
            "id": 556,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 512,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 556,
                  "src": "1213:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 511,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1213:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 514,
                  "name": "principalToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 556,
                  "src": "1239:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$2123",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 513,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2123,
                    "src": "1239:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$2123",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 516,
                  "name": "principalRequested",
                  "nodeType": "VariableDeclaration",
                  "scope": 556,
                  "src": "1270:26:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1270:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 518,
                  "name": "repaymentCap",
                  "nodeType": "VariableDeclaration",
                  "scope": 556,
                  "src": "1306:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 517,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1306:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 520,
                  "name": "crowdfundLength",
                  "nodeType": "VariableDeclaration",
                  "scope": 556,
                  "src": "1336:23:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1336:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 522,
                  "name": "loanMetadataUrl",
                  "nodeType": "VariableDeclaration",
                  "scope": 556,
                  "src": "1369:31:1",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 521,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1369:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 524,
                  "name": "contractAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 556,
                  "src": "1410:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 523,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1410:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1203:234:1"
            },
            "returnParameters": {
              "id": 526,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1447:0:1"
            },
            "scope": 557,
            "src": "1188:745:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 558,
        "src": "358:1577:1"
      }
    ],
    "src": "0:1936:1"
  },
  "bytecode": "0x60806040523480156100115760006000fd5b50610017565b6108a6806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100465760003560e01c8063b76564bd1461004c578063c4d66de814610096578063c84a59a4146100db57610046565b60006000fd5b6100546101d8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100d9600480360360208110156100ad5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101fe565b005b6101d6600480360360e08110156100f25760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561016e5760006000fd5b8201836020820111156101815760006000fd5b803590602001918460018302840111640100000000831117156101a45760006000fd5b90919293909091929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061034d565b005b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060019054906101000a900460ff1680610223575061022261058363ffffffff16565b5b8061023b5750600060009054906101000a900460ff16155b1515610292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610844602e913960400191505060405180910390fd5b6000600060019054906101000a900460ff1615905080156102e4576001600060016101000a81548160ff0219169083151502179055506001600060006101000a81548160ff0219169083151502179055505b81603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8015610348576000600060016101000a81548160ff0219169083151502179055505b505b50565b6000610371604051806020016040528060008152602001508361059b63ffffffff16565b90508073ffffffffffffffffffffffffffffffffffffffff1663b90a762a8a8a8a8a8a8a8a6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b1580156104735760006000fd5b505af1158015610488573d600060003e3d6000fd5b50505050868973ffffffffffffffffffffffffffffffffffffffff167f5c6b209f93f6f9f627e54f76787620404889e45c523c5dec33176a2ba0a000898884888888604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a3505b5050505050505050565b60006000303b90506000811491505061059856505b90565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cd3e318a6040518060400160405280600d81526020017f656e61626c652d637265646974000000000000000000000000000000000000008152602001506040518060400160405280600981526020017f43726f77646c6f616e000000000000000000000000000000000000000000000081526020015085876040518563ffffffff1660e01b81526004018080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001848103845288818151815260200191508051906020019080838360005b838110156106d95780820151818401525b6020810190506106bd565b50505050905090810190601f1680156107065780820380516001836020036101000a031916815260200191505b50848103835287818151815260200191508051906020019080838360005b838110156107405780820151818401525b602081019050610724565b50505050905090810190601f16801561076d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b838110156107a75780820151818401525b60208101905061078b565b50505050905090810190601f1680156107d45780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1580156107f95760006000fd5b505af115801561080e573d600060003e3d6000fd5b505050506040513d60208110156108255760006000fd5b8101908080519060200190929190505050905061083d565b9291505056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a265627a7a72315820a0c481f61dc51c77ab6efa63246dbc964f4c29583fadde7cee82aa8f4b21659c64736f6c634300050b0032",
  "deployedBytecode": "0x60806040523480156100115760006000fd5b50600436106100465760003560e01c8063b76564bd1461004c578063c4d66de814610096578063c84a59a4146100db57610046565b60006000fd5b6100546101d8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100d9600480360360208110156100ad5760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101fe565b005b6101d6600480360360e08110156100f25760006000fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561016e5760006000fd5b8201836020820111156101815760006000fd5b803590602001918460018302840111640100000000831117156101a45760006000fd5b90919293909091929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061034d565b005b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060019054906101000a900460ff1680610223575061022261058363ffffffff16565b5b8061023b5750600060009054906101000a900460ff16155b1515610292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610844602e913960400191505060405180910390fd5b6000600060019054906101000a900460ff1615905080156102e4576001600060016101000a81548160ff0219169083151502179055506001600060006101000a81548160ff0219169083151502179055505b81603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8015610348576000600060016101000a81548160ff0219169083151502179055505b505b50565b6000610371604051806020016040528060008152602001508361059b63ffffffff16565b90508073ffffffffffffffffffffffffffffffffffffffff1663b90a762a8a8a8a8a8a8a8a6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b1580156104735760006000fd5b505af1158015610488573d600060003e3d6000fd5b50505050868973ffffffffffffffffffffffffffffffffffffffff167f5c6b209f93f6f9f627e54f76787620404889e45c523c5dec33176a2ba0a000898884888888604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a3505b5050505050505050565b60006000303b90506000811491505061059856505b90565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cd3e318a6040518060400160405280600d81526020017f656e61626c652d637265646974000000000000000000000000000000000000008152602001506040518060400160405280600981526020017f43726f77646c6f616e000000000000000000000000000000000000000000000081526020015085876040518563ffffffff1660e01b81526004018080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001848103845288818151815260200191508051906020019080838360005b838110156106d95780820151818401525b6020810190506106bd565b50505050905090810190601f1680156107065780820380516001836020036101000a031916815260200191505b50848103835287818151815260200191508051906020019080838360005b838110156107405780820151818401525b602081019050610724565b50505050905090810190601f16801561076d5780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b838110156107a75780820151818401525b60208101905061078b565b50505050905090810190601f1680156107d45780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1580156107f95760006000fd5b505af115801561080e573d600060003e3d6000fd5b505050506040513d60208110156108255760006000fd5b8101908080519060200190929190505050905061083d565b9291505056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a265627a7a72315820a0c481f61dc51c77ab6efa63246dbc964f4c29583fadde7cee82aa8f4b21659c64736f6c634300050b0032",
  "compiler": {
    "name": "solc",
    "version": "0.5.11+commit.c082d0b4.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  },
  "networks": {
    "42": {
      "links": {},
      "events": {},
      "address": "0xa1E3b1B0bE47F3067AA0d96394517e1d8E9A2745",
      "updated_at": 1568795058459
    }
  }
}