{
    "dynamicInputs": [
        {
            "identifier": "Objective",
            "character": "sameLoop",
            "group" : "valuesToOptimize",
            "dataTypes": [
                "Float"
            ],
            "tags" : ["Objective", "Input"],
            "defaultDataType": "Float",
            "metaData": {
                "weight": {
                    "guiName": "Weight",
                    "guiPosition": "0",
                    "guiGroup": "Objective function",
                    "visibility": "shown",
                    "dataType": "float",
                    "defaultValue": "1",
                    "validation": "required"
                },
                "goal": {
                    "guiName": "Optimization target",
                    "guiPosition": "1",
                    "guiGroup": "Objective function",
                    "visibility": "shown",
                    "possibleValues": [
                        "Minimize",
                        "Maximize"
                    ],
                    "defaultValue": "Minimize",
                    "validation": "required"
                },
                "hasGradient": {
                    "guiName": "Has gradient",
                    "guiPosition": "0",
                    "guiGroup": "Gradient",
                    "visibility": "shown",
                    "dataType": "bool",
                    "defaultValue": "false"
                },
                "vectorSize": {
                    "guiName": "Dimension of vector",
                    "guiPosition": "0",
                    "guiGroup": "Vector",
                    "dataType": "int",
                    "visibility": "shown",
                    "endpointDataTypes": [
                        "Vector"
                    ],
                    "validation": "required"
                }
            }
        },
        {
            "identifier": "Constraint",
            "character": "sameLoop",
            "group" : "valuesToOptimize",
            "dataTypes": [
                "Float"
            ],
            "defaultDataType": "Float",
            "metaData": {
                "hasSingleBounds": {
                    "guiName": "Has unified bounds",
                    "guiPosition": "0",
                    "guiGroup": "Bounds",
                    "visibility": "shown",
                    "defaultValue": "true",
                    "dataType": "bool"
                },
                "lower": {
                    "guiName": "Lower bound",
                    "guiPosition": "1",
                    "guiGroup": "Bounds",
                    "visibility": "shown",
                    "defaultValue": "-1",
                    "dataType": "float",
                    "validation": "required",
                    "guiActivationFilter": {
                        "hasSingleBounds": [
                            "true"
                        ]
                    }
                },
                "upper": {
                    "guiName": "Upper bound",
                    "guiPosition": "2",
                    "guiGroup": "Bounds",
                    "visibility": "shown",
                    "dataType": "float",
                    "defaultValue": "1",
                    "validation": "required",
                    "guiActivationFilter": {
                        "hasSingleBounds": [
                            "true"
                        ]
                    }
                },
                "hasGradient": {
                    "guiName": "Has gradient",
                    "guiPosition": "0",
                    "guiGroup": "Gradient",
                    "visibility": "shown",
                    "dataType": "bool",
                    "defaultValue": "false"
                },
                "vectorSize": {
                    "guiName": "Dimension of vector",
                    "guiPosition": "0",
                    "guiGroup": "Vector",
                    "dataType": "int",
                    "visibility": "shown",
                    "endpointDataTypes": [
                        "Vector"
                    ],
                    "validation": "required"
                }
            }
        },
        {
            "identifier":"toForward",
            "character": "sameLoop",
            "group":"valuesToOptimize",
            "dataTypes":[
                "Boolean",
                "ShortText",
                "Integer",
                "Float",
                "FileReference", 
                "DirectoryReference",
                "SmallTable", 
                "Vector"
            ],
            "defaultDataType":"FileReference",
            "inputHandlingOptions":[
                "Single"
            ],
            "defaultInputHandling":"Single",
            "inputExecutionConstraintOptions":[
                "Required"
            ],
            "defaultInputExecutionConstraint":"Required"
        },
        {
            "identifier":"startToForward",
            "character": "outerLoop",
            "group":"valuesToOptimize",
            "dataTypes":[
                "Boolean",
                "ShortText",
                "Integer",
                "Float",
                "FileReference", 
                "DirectoryReference",
                "SmallTable", 
                "Vector"
            ],
            "defaultDataType":"FileReference",
            "inputHandlingOptions":[
                "Single",
                "Constant"
            ],
            "defaultInputHandling":"Single",
            "inputExecutionConstraintOptions":[
                "Required"
            ],
            "defaultInputExecutionConstraint":"Required",
            "readOnly": "true"
        },
        {
            "identifier": "startvalues",
            "character": "outerLoop",
            "group" : "startValues",
            "dataTypes": [
                "Float",
                "Vector"
            ],
             "inputHandlingOptions":[
                "Single",
                "Constant"
            ],
            "defaultDataType": "Float"
        },
         {
            "identifier": "stepvalues",
            "character": "outerLoop",
            "group" : "startValues",
            "dataTypes": [
                "Float",
                "Vector"
            ],
             "inputHandlingOptions":[
                "Single",
                "Constant"
            ],
            "defaultDataType": "Float"
            
        },
        {
            "identifier": "gradients",
            "character": "sameLoop",
             "group":"valuesToOptimize",
            "dataTypes": [
                "Float",
                "Vector",
                "Matrix"
            ],
            "defaultDataType": "Float"
            
        }
    ],
     "staticInputGroups":[
        {
            "name":"valuesToOptimize",
            "type":"And",
            "group":"startOrRunValues"
        },
        {
            "name":"startValues",
            "type":"And",
            "group":"startOrRunValues"
        },
         {
            "name":"startOrRunValues",
            "type": "Or",
            "group":"innerLoop"
        },
        {
            "name":"innerLoop",
            "type": "Or"
        }
    ]
}