```json
{
  "sym_variables": [
    ("x0", "pansies"),
    ("x1", "verbenas"),
    ("x2", "potato vines"),
    ("x3", "aloe vera")
  ],
  "objective_function": "8*x0**2 + 2*x0*x1 + 2*x0*x2 + x0*x3 + 8*x1**2 + 4*x1*x2 + 8*x1*x3 + 2*x2**2 + x2*x3 + 6*x3**2 + 4*x0 + 2*x1 + 4*x2 + 2*x3",
  "constraints": [
    "5*x0 + 11*x1 + 10*x2 + 6*x3 <= 73",
    "2*x0 + 9*x1 + 9*x2 + 7*x3 <= 73",
    "3*x0 + 9*x1 + x2 + 11*x3 <= 200",
    "2*x0 + 9*x2 >= 17*144",
    "9*x1 + 9*x2 >= 17*144",
    "2*x0 + 9*x2 + 7*x3 >= 16*144",
    "2*x0 + 9*x1 + 7*x3 >= 16*144",
    "2**2*x0**2 + 9**2*x2**2 + 7**2*x3**2 >= 10*144",
    "2*x0 + 9*x1 + 7*x3 >= 10*144",
    "3*x0 + x2 >= 22",
    "3*x0 + 9*x1 + x2 >= 35",
    "6*x0 - 4*x1 + x2 >= 0",
    "10*x2 + 6*x3 <= 28",
    "5**2*x0**2 + 11**2*x1**2 <= 37",
    "5*x0 + 11*x1 + 10*x2 + 6*x3 <= 37",
    "9**2*x1**2 + 7**2*x3**2 <= 23*144",
    "9*x2 + 7*x3 <= 28*144",
    "2*x0 + 9*x1 + 7*x3 <= 42*144",
    "9**2*x1**2 + 9**2*x2**2 + 7**2*x3**2 <= 46*144",
    "2**2*x0**2 + 9**2*x1**2 + 9**2*x2**2 <= 54*144",
    "2*x0 + 9*x1 + 9*x2 + 7*x3 <= 54*144",
    "9**2*x1**2 + x2**2 <= 86",
    "x2 + 11*x3 <= 60",
    "3*x0 + x2 <= 65",
    "3**2*x0**2 + 9**2*x1**2 + 11**2*x3**2 <= 51",
    "9*x1 + x2 + 11*x3 <= 59",
    "3*x0 + 9*x1 + x2 <= 67",
    "3*x0 + 9*x1 + x2 + 11*x3 <= 67"
  ]
}
```

```python
import gurobipy as gp
from gurobipy import GRB

# Create a new model
m = gp.Model("plant_optimization")

# Create variables
pansies = m.addVar(vtype=GRB.INTEGER, name="pansies")
verbenas = m.addVar(vtype=GRB.INTEGER, name="verbenas")
potato_vines = m.addVar(vtype=GRB.INTEGER, name="potato_vines")
aloe_vera = m.addVar(vtype=GRB.INTEGER, name="aloe_vera")

# Set objective function
m.setObjective(8*pansies**2 + 2*pansies*verbenas + 2*pansies*potato_vines + pansies*aloe_vera + 8*verbenas**2 + 4*verbenas*potato_vines + 8*verbenas*aloe_vera + 2*potato_vines**2 + potato_vines*aloe_vera + 6*aloe_vera**2 + 4*pansies + 2*verbenas + 4*potato_vines + 2*aloe_vera, GRB.MAXIMIZE)

# Add constraints
m.addConstr(5*pansies + 11*verbenas + 10*potato_vines + 6*aloe_vera <= 73)
m.addConstr(2*pansies + 9*verbenas + 9*potato_vines + 7*aloe_vera <= 73)
m.addConstr(3*pansies + 9*verbenas + potato_vines + 11*aloe_vera <= 200)
m.addConstr(2*pansies + 9*potato_vines >= 17*144)
m.addConstr(9*verbenas + 9*potato_vines >= 17*144)
m.addConstr(2*pansies + 9*potato_vines + 7*aloe_vera >= 16*144)
m.addConstr(2*pansies + 9*verbenas + 7*aloe_vera >= 16*144)
m.addConstr(2**2*pansies**2 + 9**2*potato_vines**2 + 7**2*aloe_vera**2 >= 10*144)
m.addConstr(2*pansies + 9*verbenas + 7*aloe_vera >= 10*144)
m.addConstr(3*pansies + potato_vines >= 22)
m.addConstr(3*pansies + 9*verbenas + potato_vines >= 35)
m.addConstr(6*pansies - 4*verbenas + potato_vines >= 0)
m.addConstr(10*potato_vines + 6*aloe_vera <= 28)
m.addConstr(5**2*pansies**2 + 11**2*verbenas**2 <= 37)
m.addConstr(5*pansies + 11*verbenas + 10*potato_vines + 6*aloe_vera <= 37)
m.addConstr(9**2*verbenas**2 + 7**2*aloe_vera**2 <= 23*144)
m.addConstr(9*potato_vines + 7*aloe_vera <= 28*144)
m.addConstr(2*pansies + 9*verbenas + 7*aloe_vera <= 42*144)
m.addConstr(9**2*verbenas**2 + 9**2*potato_vines**2 + 7**2*aloe_vera**2 <= 46*144)
m.addConstr(2**2*pansies**2 + 9**2*verbenas**2 + 9**2*potato_vines**2 <= 54*144)
m.addConstr(2*pansies + 9*verbenas + 9*potato_vines + 7*aloe_vera <= 54*144)
m.addConstr(9**2*verbenas**2 + potato_vines**2 <= 86)
m.addConstr(potato_vines + 11*aloe_vera <= 60)
m.addConstr(3*pansies + potato_vines <= 65)
m.addConstr(3**2*pansies**2 + 9**2*verbenas**2 + 11**2*aloe_vera**2 <= 51)
m.addConstr(9*verbenas + potato_vines + 11*aloe_vera <= 59)
m.addConstr(3*pansies + 9*verbenas + potato_vines <= 67)
m.addConstr(3*pansies + 9*verbenas + potato_vines + 11*aloe_vera <= 67)


# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print("Optimization ended with status %d" % m.status)

```