(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:errors) op:Equal rhs:{(0)} spids:[13])]
      spids: [13]
    )
    (C {(source)} {(../1/library.sh)})
    (FuncDef
      name: validate
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:varname)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [32]
                )
              ]
              spids: [32]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:varvalue)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [37]
                )
              ]
              spids: [37]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(KW_Bang '!')} {(-z)} {($ VSub_Name '$varvalue')} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} 
                                  {
                                    (DQ 
                                      (BracedVarSub
                                        token: <VSub_Name varvalue>
                                        suffix_op: 
                                          (StringUnary
                                            op_id: VOp1_Percent
                                            arg_word: 
                                              {
                                                (BracedVarSub
                                                  token: <VSub_Name varvalue>
                                                  suffix_op: 
                                                    (StringUnary
                                                      op_id: VOp1_Pound
                                                      arg_word: {('?')}
                                                    )
                                                  spids: [68 72]
                                                )
                                              }
                                          )
                                        spids: [65 73]
                                      )
                                    )
                                  } {(Lit_Other '=')} {(DQ (/))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (C {(Lit_Other '[')} {(KW_Bang '!')} {(-x)} 
                                          {($ VSub_Name '$varvalue')} {(Lit_Other ']')}
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (C {(echo)} 
                                      {
                                        (DQ ('** ') ($ VSub_Name '$varname') (' set to ') 
                                          ($ VSub_Name '$varvalue') (', but I cannot find executable.')
                                        )
                                      }
                                    )
                                    (DParen
                                      child: 
                                        (UnaryAssign
                                          op_id: Node_PostDPlus
                                          child: (LhsName name:errors)
                                        )
                                    )
                                  ]
                                  spids: [-1 103]
                                )
                              ]
                              spids: [-1 126]
                            )
                          ]
                          spids: [-1 86]
                        )
                      ]
                      else_action: [
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (C {(in_path)} {($ VSub_Name '$varvalue')} {($ VSub_Name '$PATH')})
                                  terminator: <Op_Semi ';'>
                                )
                              ]
                              action: [
                                (C {(echo)} 
                                  {
                                    (DQ ('** ') ($ VSub_Name '$varname') (' set to ') 
                                      ($ VSub_Name '$varvalue') (', but I cannot find it in PATH.')
                                    )
                                  }
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:errors)
                                      op: Equal
                                      rhs: 
                                        {
                                          (ArithSubPart
                                            anode: 
                                              (ArithBinary
                                                op_id: Arith_Plus
                                                left: (ArithWord w:{($ VSub_Name '$errors')})
                                                right: (ArithWord w:{(Lit_Digits 1)})
                                              )
                                            spids: [158 167]
                                          )
                                        }
                                      spids: [157]
                                    )
                                  ]
                                  spids: [157]
                                )
                              ]
                              spids: [-1 142]
                            )
                          ]
                          spids: [-1 170]
                        )
                      ]
                      spids: [129 173]
                    )
                  ]
                  spids: [-1 57]
                )
              ]
              spids: [-1 177]
            )
          ]
          spids: [29]
        )
      spids: [25 28]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(KW_Bang '!')} {(-x)} 
                  {
                    (BracedVarSub
                      token: <VSub_Name SHELL>
                      suffix_op: 
                        (StringUnary
                          op_id: VTest_ColonQMark
                          arg_word: {(DQ ('Cannot proceed without SHELL being defined.'))}
                        )
                      spids: [197 203]
                    )
                  } {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} 
              {
                (DQ ('** SHELL set to ') ($ VSub_Name '$SHELL') 
                  (', but I cannot find that executable.')
                )
              }
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:errors)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: (ArithWord w:{($ VSub_Name '$errors')})
                            right: (ArithWord w:{(Lit_Digits 1)})
                          )
                        spids: [222 231]
                      )
                    }
                  spids: [221]
                )
              ]
              spids: [221]
            )
          ]
          spids: [-1 209]
        )
      ]
      spids: [-1 233]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (C {(Lit_Other '[')} {(KW_Bang '!')} {(-d)} 
              {
                (BracedVarSub
                  token: <VSub_Name HOME>
                  suffix_op: 
                    (StringUnary
                      op_id: VTest_ColonQMark
                      arg_word: {(DQ ('You need to have your HOME set to your home directory'))}
                    )
                  spids: [244 250]
                )
              } {(Lit_Other ']')}
            )
          ]
          action: [
            (C {(echo)} {(DQ ('** HOME set to ') ($ VSub_Name '$HOME') (", but it's not a directory."))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:errors)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: (ArithWord w:{($ VSub_Name '$errors')})
                            right: (ArithWord w:{(Lit_Digits 1)})
                          )
                        spids: [267 276]
                      )
                    }
                  spids: [266]
                )
              ]
              spids: [266]
            )
          ]
          spids: [-1 254]
        )
      ]
      spids: [-1 278]
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:oldIFS)
              op: Equal
              rhs: {($ VSub_Name '$IFS')}
              spids: [285]
            )
          ]
          spids: [285]
        )
      terminator: <Op_Semi ';'>
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:IFS) op:Equal rhs:{(DQ (':'))} spids:[289])]
      spids: [289]
    )
    (ForEach
      iter_name: directory
      iter_words: [{($ VSub_Name '$PATH')}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(KW_Bang '!')} {(-d)} {($ VSub_Name '$directory')} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {(DQ ('** PATH contains invalid directory ') ($ VSub_Name '$directory'))}
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:errors)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Plus
                                    left: (ArithWord w:{($ VSub_Name '$errors')})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [335 344]
                              )
                            }
                          spids: [334]
                        )
                      ]
                      spids: [334]
                    )
                  ]
                  spids: [-1 323]
                )
              ]
              spids: [-1 347]
            )
          ]
          spids: [306 349]
        )
      spids: [303 -1]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:IFS) op:Equal rhs:{($ VSub_Name '$oldIFS')} spids:[352])]
      spids: [352]
    )
    (C {(validate)} {(DQ (EDITOR))} {($ VSub_Name '$EDITOR')})
    (C {(validate)} {(DQ (MAILER))} {($ VSub_Name '$MAILER')})
    (C {(validate)} {(DQ (PAGER))} {($ VSub_Name '$PAGER')})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {($ VSub_Name '$errors')} {(-gt)} {(0)} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(echo)} {(DQ ('Errors encountered. Please notify sysadmin for help.'))})]
          spids: [-1 412]
        )
      ]
      else_action: [(C {(echo)} {(DQ ('Your environment checks out fine.'))})]
      spids: [421 430]
    )
    (C {(exit)} {(0)})
  ]
)