(CommandList
  children: [
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_LIB"))}))
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:BALLS_LIB) op:Equal rhs:{(.)} spids:[15])]
          spids: [15]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_CONF"))}))
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:BALLS_CONF) op:Equal rhs:{(./config.sh)} spids:[31])]
          spids: [31]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_ROOT"))}))
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:BALLS_ROOT)
              op: Equal
              rhs: 
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {(readlink)} {(-f)} 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(dirname)} {($ VSub_Name "$BALLS_CONF")})]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [53 57]
                                ) (/../)
                              )
                            }
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [47 60]
                  )
                }
              spids: [46]
            )
          ]
          spids: [46]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_LIB"))}))
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:BALLS_LIB)
              op: Equal
              rhs: 
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(dirname)} {($ VSub_Number "$0")})])
                    left_token: <Left_CommandSub "$(">
                    spids: [75 79]
                  )
                }
              spids: [74]
            )
          ]
          spids: [74]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_TMP"))}))
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:BALLS_TMP) op:Equal rhs:{(/tmp/balls)} spids:[94])]
          spids: [94]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_d child:{(DQ ($ VSub_Name "$BALLS_TMP"))}))
        (C {(mkdir)} {(DQ ($ VSub_Name "$BALLS_TMP"))})
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_PORT"))}))
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:BALLS_PORT) op:Equal rhs:{(3000)} spids:[128])]
          spids: [128]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_VIEWS"))}))
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:BALLS_VIEWS)
              op: Equal
              rhs: {($ VSub_Name "$BALLS_ROOT") (/views)}
              spids: [144]
            )
          ]
          spids: [144]
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$BALLS_ACTIONS"))}))
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:BALLS_ACTIONS)
              op: Equal
              rhs: {($ VSub_Name "$BALLS_ROOT") (/actions)}
              spids: [160]
            )
          ]
          spids: [160]
        )
      ]
      op_id: Op_DAmp
    )
    (C {(.)} {($ VSub_Name "$BALLS_LIB") (/util.sh)})
    (C {(.)} {($ VSub_Name "$BALLS_LIB") (/http.sh)})
    (C {(.)} {($ VSub_Name "$BALLS_LIB") (/router.sh)})
    (C {(.)} {($ VSub_Name "$BALLS_LIB") (/server.sh)})
    (C {(.)} {($ VSub_Name "$BALLS_LIB") (/view.sh)})
    (C {(.)} {($ VSub_Name "$BALLS_LIB") (/model.sh)})
  ]
)