(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ATJOBDIR) op:Equal rhs:{(DQ (/var/at/jobs))} spids:[85])]
      spids: [85]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CRONJOBDIR)
          op: Equal
          rhs: {(DQ (/var/cron/tabs))}
          spids: [90]
        )
      ]
      spids: [90]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:MAILSPOOL) op:Equal rhs:{(DQ (/var/mail))} spids:[95])]
      spids: [95]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:SIGKILL) op:Equal rhs:{(DQ (-KILL))} spids:[100])]
      spids: [100]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TEMPDIRS)
          op: Equal
          rhs: {(DQ ('/tmp /var/tmp'))}
          spids: [105]
        )
      ]
      spids: [105]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:THISCMD)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(/usr/bin/basename)} {($ VSub_Number '$0')})]
                  )
                left_token: <Left_Backtick '`'>
                spids: [111 115]
              )
            }
          spids: [110]
        )
      ]
      spids: [110]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:PWCMD)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name PWCMD>
                  suffix_op: 
                    (StringUnary
                      op_id: VTest_ColonHyphen
                      arg_word: {(Lit_Slash /) (usr) (Lit_Slash /) (sbin) (Lit_Slash /) (pw)}
                    )
                  spids: [119 128]
                )
              )
            }
          spids: [117]
        )
      ]
      spids: [117]
    )
    (FuncDef
      name: err
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(${ VSub_Name THISCMD) (Lit_Other ':')} {($ VSub_Star '$*')}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[150])]
            )
          ]
          spids: [145]
        )
      spids: [141 144]
    )
    (FuncDef
      name: verbose
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$vflag'))} {(Lit_Other ']')})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
              ]
            )
          ]
          spids: [176]
        )
      spids: [172 175]
    )
    (FuncDef
      name: rm_files
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:login)
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [237]
                    )
                  ]
                  spids: [237]
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:totalcount) op:Equal rhs:{(0)} spids:[246])]
              spids: [246]
            )
            (ForEach
              iter_name: _dir
              iter_words: [{(${ VSub_Name TEMPDIRS)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:filecount)
                          op: Equal
                          rhs: {(0)}
                          spids: [265]
                        )
                      ]
                      spids: [265]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(KW_Bang '!')} {(-d)} {($ VSub_Name '$_dir')} 
                                  {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(err)} {(DQ ($ VSub_Name '$_dir') (' is not a valid directory.'))})
                            (ControlFlow
                              token: <ControlFlow_Continue continue>
                            )
                          ]
                          spids: [16777215 282]
                        )
                      ]
                      spids: [16777215 296]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} 
                          {
                            (DQ ('Removing files owned by (') ($ VSub_Name '$login') (') in ') 
                              ($ VSub_Name '$_dir') (':')
                            )
                          }
                        )
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:filecount)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (SimpleCommand
                                            words: [
                                              {(find)}
                                              {(DQ ($ VSub_Name '$_dir'))}
                                              {(-user)}
                                              {(DQ ($ VSub_Name '$login'))}
                                              {(-delete)}
                                              {(-print)}
                                            ]
                                            redirects: [
                                              (Redir
                                                op_id: Redir_Great
                                                fd: 2
                                                arg_word: {(/dev/null)}
                                                spids: [320]
                                              )
                                            ]
                                          )
                                          (C {(wc)} {(-l)})
                                          (C {(sed)} {(SQ <'s/ *//'>)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [317 351]
                              )
                            }
                          spids: [316]
                        )
                      ]
                      spids: [316]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(DQ (' ') ($ VSub_Name '$filecount') (' removed.'))})
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:totalcount)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Plus
                                    left: (ArithWord w:{($ VSub_Name '$totalcount')})
                                    right: (ArithWord w:{($ VSub_Name '$filecount')})
                                  )
                                spids: [368 375]
                              )
                            }
                          spids: [367]
                        )
                      ]
                      spids: [367]
                    )
                  ]
                  spids: [262 378]
                )
              spids: [255 260]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (Pipeline children:[(C {(verbose)})] negated:T)
                (C {(Lit_Other '[')} {($ VSub_Name '$totalcount')} {(-ne)} {(0)} {(Lit_Other ']')})
                (C {(echo)} {(-n)} {(DQ (' files(') ($ VSub_Name '$totalcount') (')'))})
              ]
            )
          ]
          spids: [220]
        )
      spids: [216 219]
    )
    (FuncDef
      name: rm_mail
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:login)
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [445]
                    )
                  ]
                  spids: [445]
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} {(DQ ('Removing mail spool(s) for (') ($ VSub_Name '$login') ('):'))})
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-f)} 
                          {(${ VSub_Name MAILSPOOL) (/) ($ VSub_Name '$login')} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      ops: [Op_DAmp Op_DPipe]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} 
                          {(DQ (' ') (${ VSub_Name MAILSPOOL) (/) ($ VSub_Name '$login'))}
                        )
                        (C {(echo)} {(-n)} {(DQ (' mailspool'))})
                      ]
                    )
                    (C {(rm)} {(${ VSub_Name MAILSPOOL) (/) ($ VSub_Name '$login')})
                  ]
                  spids: [16777215 484]
                )
              ]
              spids: [16777215 525]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-f)} 
                          {(${ VSub_Name MAILSPOOL) (/.) (${ VSub_Name login) (.pop)} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      ops: [Op_DAmp Op_DPipe]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} 
                          {(DQ (' ') (${ VSub_Name MAILSPOOL) (/.) (${ VSub_Name login) (.pop))}
                        )
                        (C {(echo)} {(-n)} {(DQ (' pop3'))})
                      ]
                    )
                    (C {(rm)} {(${ VSub_Name MAILSPOOL) (/.) (${ VSub_Name login) (.pop)})
                  ]
                  spids: [16777215 546]
                )
              ]
              spids: [16777215 593]
            )
            (AndOr ops:[Op_DAmp] children:[(C {(verbose)}) (C {(echo)} {(SQ <.>)})])
          ]
          spids: [428]
        )
      spids: [424 427]
    )
    (FuncDef
      name: kill_procs
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:login)
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [639]
                    )
                  ]
                  spids: [639]
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} 
                  {(DQ ('Terminating all processes owned by (') ($ VSub_Name '$login') ('):'))}
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:killcount) op:Equal rhs:{(0)} spids:[663])]
              spids: [663]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:proclist)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (SimpleCommand
                                    words: [{(ps)} {(-U)} {($ VSub_Name '$login')}]
                                    redirects: [
                                      (Redir
                                        op_id: Redir_Great
                                        fd: 2
                                        arg_word: {(/dev/null)}
                                        spids: [671]
                                      )
                                    ]
                                  )
                                  (C {(grep)} {(-v)} {(SQ <'^\\ *PID'>)})
                                  (C {(awk)} {(SQ <'{print $1}'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [668 695]
                      )
                    }
                  spids: [667]
                )
              ]
              spids: [667]
            )
            (ForEach
              iter_name: _pid
              iter_words: [{($ VSub_Name '$proclist')}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (SimpleCommand
                      words: [{(kill)} {(${ VSub_Name SIGKILL)} {($ VSub_Name '$_pid')}]
                      redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[713])]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:killcount)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Plus
                                    left: (ArithWord w:{($ VSub_Name '$killcount')})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [724 731]
                              )
                            }
                          spids: [723]
                        )
                      ]
                      spids: [723]
                    )
                  ]
                  spids: [708 734]
                )
              spids: [703 706]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} 
                  {
                    (DQ (' ') (${ VSub_Name SIGKILL) (' signal sent to ') ($ VSub_Name '$killcount') 
                      (' processes.')
                    )
                  }
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (Pipeline children:[(C {(verbose)})] negated:T)
                (C {(Lit_Other '[')} {($ VSub_Name '$killcount')} {(-ne)} {(0)} {(Lit_Other ']')})
                (C {(echo)} {(-n)} {(DQ (' processes(') (${ VSub_Name killcount) (')'))})
              ]
            )
          ]
          spids: [622]
        )
      spids: [618 621]
    )
    (FuncDef
      name: rm_at_jobs
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:login)
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [817]
                    )
                  ]
                  spids: [817]
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:atjoblist)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (SimpleCommand
                                words: [
                                  {(find)}
                                  {(${ VSub_Name ATJOBDIR)}
                                  {(-maxdepth)}
                                  {(1)}
                                  {(-user)}
                                  {($ VSub_Name '$login')}
                                  {(-print)}
                                ]
                                redirects: [
                                  (Redir
                                    op_id: Redir_Great
                                    fd: 2
                                    arg_word: {(/dev/null)}
                                    spids: [830]
                                  )
                                ]
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [827 846]
                      )
                    }
                  spids: [826]
                )
              ]
              spids: [826]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:jobcount) op:Equal rhs:{(0)} spids:[849])]
              spids: [849]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} 
                  {(DQ ('Removing at(1) jobs owned by (') ($ VSub_Name '$login') ('):'))}
                )
              ]
            )
            (ForEach
              iter_name: _atjob
              iter_words: [{($ VSub_Name '$atjoblist')}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(rm)} {(-f)} {($ VSub_Name '$_atjob')})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:jobcount)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Plus
                                    left: (ArithWord w:{($ VSub_Name '$jobcount')})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [889 896]
                              )
                            }
                          spids: [888]
                        )
                      ]
                      spids: [888]
                    )
                  ]
                  spids: [878 899]
                )
              spids: [873 876]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(DQ (' ') ($ VSub_Name '$jobcount') (' removed.'))})
              ]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (Pipeline children:[(C {(verbose)})] negated:T)
                (C {(Lit_Other '[')} {($ VSub_Name '$jobcount')} {(-ne)} {(0)} {(Lit_Other ']')})
                (C {(echo)} {(-n)} {(DQ (' at(') ($ VSub_Name '$jobcount') (')'))})
              ]
            )
          ]
          spids: [800]
        )
      spids: [796 799]
    )
    (FuncDef
      name: rm_crontab
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:login)
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [976]
                    )
                  ]
                  spids: [976]
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} {(DQ ('Removing crontab for (') ($ VSub_Name '$login') ('):'))})
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-f)} 
                          {(${ VSub_Name CRONJOBDIR) (/) ($ VSub_Name '$login')} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      ops: [Op_DAmp Op_DPipe]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} 
                          {(DQ (' ') (${ VSub_Name CRONJOBDIR) (/) ($ VSub_Name '$login'))}
                        )
                        (C {(echo)} {(-n)} {(DQ (' crontab'))})
                      ]
                    )
                    (C {(rm)} {(-f)} {(${ VSub_Name CRONJOBDIR) (/) ($ VSub_Name '$login')})
                  ]
                  spids: [16777215 1015]
                )
              ]
              spids: [16777215 1057]
            )
            (AndOr ops:[Op_DAmp] children:[(C {(verbose)}) (C {(echo)} {(SQ <.>)})])
          ]
          spids: [959]
        )
      spids: [955 958]
    )
    (FuncDef
      name: rm_ipc
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp]
              children: [(C {(verbose)}) (C {(echo)} {(-n)} {(DQ ('Removing IPC mechanisms'))})]
            )
            (ForEach
              iter_name: i
              iter_words: [{(s)} {(m)} {(q)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (Pipeline
                      children: [
                        (C {(ipcs)} {(-) ($ VSub_Name '$i')})
                        (C {(awk)} {(-v)} {(Lit_VarLike 'i=') ($ VSub_Name '$i')} {(-v)} 
                          {(Lit_VarLike 'login=') ($ VSub_Number '$1')} {(SQ <'$1 == i && $5 == login { print $2 }'>)}
                        )
                        (C {(xargs)} {(-n)} {(1)} {(ipcrm)} {(-) ($ VSub_Name '$i')})
                      ]
                      negated: F
                    )
                  ]
                  spids: [1115 1157]
                )
              spids: [1107 1113]
            )
            (AndOr ops:[Op_DAmp] children:[(C {(verbose)}) (C {(echo)} {(SQ <.>)})])
          ]
          spids: [1086]
        )
      spids: [1082 1085]
    )
    (FuncDef
      name: rm_user
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:login)
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1221]
                    )
                  ]
                  spids: [1221]
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} {(DQ ('Removing user (') ($ VSub_Name '$login') (')'))})
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$pw_rswitch'))} {(Lit_Other ']')})
                (BraceGroup
                  children: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} {(DQ (' (including home directory)'))})
                      ]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (Pipeline children:[(C {(verbose)})] negated:T)
                        (C {(echo)} {(-n)} {(DQ (' home'))})
                      ]
                    )
                  ]
                  spids: [1257]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (Pipeline children:[(C {(verbose)})] negated:T)
                (C {(echo)} {(-n)} {(DQ (' passwd'))})
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [(C {(verbose)}) (C {(echo)} {(-n)} {(DQ (' from the system:'))})]
            )
            (C {(${ VSub_Name PWCMD)} {(userdel)} {(-n)} {($ VSub_Name '$login')} 
              {($ VSub_Name '$pw_rswitch')}
            )
            (AndOr
              ops: [Op_DAmp]
              children: [(C {(verbose)}) (C {(echo)} {(SQ <' Done.'>)})]
            )
          ]
          spids: [1204]
        )
      spids: [1200 1203]
    )
    (FuncDef
      name: prompt_yesno
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Number '$1'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:msg)
                      op: Equal
                      rhs: {(DQ ($ VSub_Number '$1'))}
                      spids: [1383]
                    )
                  ]
                  spids: [1383]
                )
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (While
              cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(-n)} {(DQ ($ VSub_Name '$msg'))})
                    (C {(read)} {(_ans)})
                    (Case
                      to_match: {($ VSub_Name '$_ans')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')}
                            {(Lit_Other '[') (Nn) (Lit_Other ']')}
                          ]
                          action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
                          spids: [1424 1434 1442 16777215]
                        )
                        (case_arm
                          pat_list: [
                            {(Lit_Other '[') (Yy) (Lit_Other ']') (Lit_Other '[') (Ee) (Lit_Other ']') 
                              (Lit_Other '[') (Ss) (Lit_Other ']')
                            }
                            {(Lit_Other '[') (Yy) (Lit_Other ']') (Lit_Other '[') (Ee) (Lit_Other ']')}
                            {(Lit_Other '[') (Yy) (Lit_Other ']')}
                          ]
                          action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                          spids: [1445 1465 1473 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          spids: [1476 1477 1480 16777215]
                        )
                      ]
                      spids: [1417 1421 1483]
                    )
                  ]
                  spids: [1400 1486]
                )
            )
          ]
          spids: [1364]
        )
      spids: [1360 1363]
    )
    (FuncDef
      name: show_usage
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ('usage: ') (${ VSub_Name THISCMD) (' [-yv] [-f file] [user ...]'))})
            (C {(echo)} {(DQ ('       if the -y switch is used, either the -f switch or'))})
            (C {(echo)} {(DQ ('       one or more user names must be given'))})
          ]
          spids: [1507]
        )
      spids: [1503 1506]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ffile) op:Equal rhs:{(EmptyPart)} spids:[1541])]
      spids: [1541]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:fflag) op:Equal rhs:{(EmptyPart)} spids:[1543])]
      spids: [1543]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:procowner) op:Equal rhs:{(EmptyPart)} spids:[1545])]
      spids: [1545]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:pw_rswitch) op:Equal rhs:{(EmptyPart)} spids:[1547])]
      spids: [1547]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:userlist) op:Equal rhs:{(EmptyPart)} spids:[1549])]
      spids: [1549]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:yflag) op:Equal rhs:{(EmptyPart)} spids:[1551])]
      spids: [1551]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:vflag) op:Equal rhs:{(EmptyPart)} spids:[1553])]
      spids: [1553]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:procowner)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(/usr/bin/id)} {(-u)})])
                left_token: <Left_Backtick '`'>
                spids: [1557 1561]
              )
            }
          spids: [1556]
        )
      ]
      spids: [1556]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$procowner'))} {(KW_Bang '!') (Lit_Other '=')} 
                  {(DQ (0))} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(err)} {(SQ <'you must be root (0) to use this utility.'>)})
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [16777215 1581]
        )
      ]
      spids: [16777215 1595]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:args)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (SimpleCommand
                        words: [{(getopt)} {(yvf) (Lit_Other ':')} {($ VSub_Star '$*')}]
                        redirects: [
                          (Redir
                            op_id: Redir_Great
                            fd: 2
                            arg_word: {(/dev/null)}
                            spids: [1602]
                          )
                        ]
                      )
                    ]
                  )
                left_token: <Left_Backtick '`'>
                spids: [1599 1609]
              )
            }
          spids: [1598]
        )
      ]
      spids: [1598]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_QMark '$?'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (0))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(show_usage)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})]
          spids: [16777215 1629]
        )
      ]
      spids: [16777215 1639]
    )
    (C {(set)} {(--)} {($ VSub_Name '$args')})
    (ForEach
      iter_name: _switch
      do_arg_iter: T
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {($ VSub_Name '$_switch')}
              arms: [
                (case_arm
                  pat_list: [{(-y)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:yflag) op:Equal rhs:{(1)} spids:[1667])]
                      spids: [1667]
                    )
                    (C {(shift)})
                  ]
                  spids: [1663 1664 1674 16777215]
                )
                (case_arm
                  pat_list: [{(-v)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:vflag) op:Equal rhs:{(1)} spids:[1681])]
                      spids: [1681]
                    )
                    (C {(shift)})
                  ]
                  spids: [1677 1678 1688 16777215]
                )
                (case_arm
                  pat_list: [{(-f)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:fflag) op:Equal rhs:{(1)} spids:[1695])]
                      spids: [1695]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ffile)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$2'))}
                          spids: [1699]
                        )
                      ]
                      spids: [1699]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [1691 1692 1711 16777215]
                )
                (case_arm
                  pat_list: [{(--)}]
                  action: [(C {(shift)}) (ControlFlow token:<ControlFlow_Break break>)]
                  spids: [1714 1715 1724 16777215]
                )
              ]
              spids: [1656 1660 1727]
            )
          ]
          spids: [1653 1729]
        )
      spids: [16777215 16777215]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {($ VSub_Name '$fflag')} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_insecure)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(find)} {($ VSub_Name '$ffile')} {(KW_Bang '!')} {(-user)} {(0)} {(-or)} 
                                {(-perm)} {(Lit_Other '+') (0022)}
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [1757 1774]
                      )
                    }
                  spids: [1756]
                )
              ]
              spids: [1756]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_insecure'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(err)} 
                      {
                        (DQ ('file (') ($ VSub_Name '$ffile') 
                          (') must be owned by and writeable only by root.')
                        )
                      }
                    )
                    (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
                  ]
                  spids: [16777215 1790]
                )
              ]
              spids: [16777215 1807]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-r)} {(DQ ($ VSub_Name '$ffile'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:userlist)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(cat)} {($ VSub_Name '$ffile')})
                                          (While
                                            cond: [
                                              (Sentence
                                                child: (C {(read)} {(_user)} {(_junk)})
                                                terminator: <Op_Semi ';'>
                                              )
                                            ]
                                            body: 
                                              (DoGroup
                                                children: [
                                                  (Case
                                                    to_match: {($ VSub_Name '$_user')}
                                                    arms: [
                                                      (case_arm
                                                        pat_list: [
                                                          {
                                                            (EscapedLiteralPart
                                                              token: <Lit_EscapedChar '\\#'>
                                                            ) (Lit_Other '*')
                                                          }
                                                          {(SQ )}
                                                        ]
                                                        spids: [1854 1859 1862 16777215]
                                                      )
                                                      (case_arm
                                                        pat_list: [{(Lit_Other '*')}]
                                                        action: [
                                                          (C {(echo)} {(-n)} 
                                                            {
                                                              (DQ ($ VSub_Name '$userlist') (' ') 
                                                                ($ VSub_Name '$_user')
                                                              )
                                                            }
                                                          )
                                                        ]
                                                        spids: [1865 1866 1880 16777215]
                                                      )
                                                    ]
                                                    spids: [1847 1851 1883]
                                                  )
                                                ]
                                                spids: [1844 1886]
                                              )
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [1827 1887]
                              )
                            }
                          spids: [1826]
                        )
                      ]
                      spids: [1826]
                    )
                  ]
                  spids: [16777215 1823]
                )
              ]
              spids: [16777215 1890]
            )
          ]
          spids: [16777215 1753]
        )
      ]
      else_action: [
        (While
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {($ VSub_Number '$1')} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          body: 
            (DoGroup
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:userlist)
                      op: Equal
                      rhs: {(DQ ($ VSub_Name '$userlist') (' ') ($ VSub_Number '$1'))}
                      spids: [1908]
                    )
                  ]
                  spids: [1908]
                )
                (C {(shift)})
              ]
              spids: [1905 1919]
            )
        )
      ]
      spids: [1892 1921]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(KW_Bang '!')} {(DQ ($ VSub_Name '$userlist'))} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(Lit_Other '[')} {($ VSub_Name '$fflag')} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(err)} 
                      {
                        (DQ ('(') ($ VSub_Name '$ffile') 
                          (') does not exist or does not contain any user names.')
                        )
                      }
                    )
                    (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
                  ]
                  spids: [16777215 1961]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(Lit_Other '[')} {($ VSub_Name '$yflag')} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(show_usage)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})]
                  spids: [1978 1987]
                )
              ]
              else_action: [
                (C {(echo)} {(-n)} {(DQ ('Please enter one or more usernames: '))})
                (C {(read)} {(userlist)})
              ]
              spids: [1998 2015]
            )
          ]
          spids: [16777215 1949]
        )
      ]
      spids: [16777215 2017]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:_user) op:Equal rhs:{(EmptyPart)} spids:[2020])]
      spids: [2020]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:_uid) op:Equal rhs:{(EmptyPart)} spids:[2022])]
      spids: [2022]
    )
    (ForEach
      iter_name: _user
      iter_words: [{($ VSub_Name '$userlist')}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:userrec)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (SimpleCommand
                                words: [{(pw)} {(usershow)} {(-n)} {($ VSub_Name '$_user')}]
                                redirects: [
                                  (Redir
                                    op_id: Redir_Great
                                    fd: 2
                                    arg_word: {(/dev/null)}
                                    spids: [2053]
                                  )
                                ]
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [2050 2061]
                      )
                    }
                  spids: [2049]
                )
              ]
              spids: [2049]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_QMark '$?'))} {(KW_Bang '!') (Lit_Other '=')} 
                          {(DQ (0))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(err)} 
                      {
                        (DQ ('user (') ($ VSub_Name '$_user') 
                          (') does not exist in the password database.')
                        )
                      }
                    )
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [16777215 2082]
                )
              ]
              spids: [16777215 2097]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_uid)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {($ VSub_Name '$userrec')})
                                  (C {(awk)} {(-F) (Lit_Other ':')} {(SQ <'{print $3}'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [2101 2116]
                      )
                    }
                  spids: [2100]
                )
              ]
              spids: [2100]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_uid'))} {(Lit_Other '=')} {(DQ (0))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(err)} 
                      {
                        (DQ ('user (') ($ VSub_Name '$_user') 
                          (') has uid 0. You may not remove this user.')
                        )
                      }
                    )
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [16777215 2136]
                )
              ]
              spids: [16777215 2151]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$yflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Matching password entry:'))})
                    (C {(echo)})
                    (C {(echo)} {($ VSub_Name '$userrec')})
                    (C {(echo)})
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (Pipeline
                                  children: [
                                    (C {(prompt_yesno)} 
                                      {(DQ ('Is this the entry you wish to remove? '))}
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [16777215 2213]
                        )
                      ]
                      spids: [16777215 2219]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_homedir)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(echo)} {($ VSub_Name '$userrec')})
                                          (C {(awk)} {(-F) (Lit_Other ':')} {(SQ <'{print $9}'>)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [2223 2238]
                              )
                            }
                          spids: [2222]
                        )
                      ]
                      spids: [2222]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(prompt_yesno)} 
                                  {
                                    (DQ ("Remove user's home directory (") ($ VSub_Name '$_homedir') 
                                      (')? ')
                                    )
                                  }
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:pw_rswitch)
                                  op: Equal
                                  rhs: {(DQ (-r))}
                                  spids: [2255]
                                )
                              ]
                              spids: [2255]
                            )
                          ]
                          spids: [16777215 2252]
                        )
                      ]
                      spids: [16777215 2261]
                    )
                  ]
                  spids: [16777215 2180]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:pw_rswitch)
                      op: Equal
                      rhs: {(DQ (-r))}
                      spids: [2267]
                    )
                  ]
                  spids: [2267]
                )
              ]
              spids: [2264 2273]
            )
            (SimpleCommand
              words: [{(${ VSub_Name PWCMD)} {(lock)} {($ VSub_Name '$_user')}]
              redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[2285])]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (Pipeline children:[(C {(verbose)})] negated:T)
                (C {(echo)} {(-n)} {(DQ ('Removing user (') ($ VSub_Name '$_user') ('):'))})
              ]
            )
            (C {(rm_crontab)} {($ VSub_Name '$_user')})
            (C {(rm_at_jobs)} {($ VSub_Name '$_user')})
            (C {(rm_ipc)} {($ VSub_Name '$_user')})
            (C {(kill_procs)} {($ VSub_Name '$_user')})
            (C {(rm_files)} {($ VSub_Name '$_user')})
            (C {(rm_mail)} {($ VSub_Name '$_user')})
            (C {(rm_user)} {($ VSub_Name '$_user')})
            (AndOr
              ops: [Op_DAmp]
              children: [(Pipeline children:[(C {(verbose)})] negated:T) (C {(echo)} {(DQ (.))})]
            )
          ]
          spids: [2034 2370]
        )
      spids: [2029 2032]
    )
  ]
)