(CommandList
  children: [
    (FuncDef
      name: err
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$quietflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {(${ VSub_Name THISCMD) (Lit_Other ':')}
                        {(ERROR) (Lit_Other ':')}
                        {($ VSub_Star '$*')}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[119])]
                    )
                  ]
                  spids: [16777215 114]
                )
              ]
              spids: [16777215 133]
            )
          ]
          spids: [98]
        )
      spids: [94 97]
    )
    (FuncDef
      name: info
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$quietflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(${ VSub_Name THISCMD) (Lit_Other ':')} {(INFO) (Lit_Other ':')} 
                      {($ VSub_Star '$*')}
                    )
                  ]
                  spids: [16777215 167]
                )
              ]
              spids: [16777215 183]
            )
          ]
          spids: [151]
        )
      spids: [147 150]
    )
    (FuncDef
      name: get_nextuid
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_uid)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [214]
                )
              ]
              spids: [214]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_nextuid)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [218]
                )
              ]
              spids: [218]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_uid'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_nextuid)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (Pipeline
                                          children: [
                                            (C {(${ VSub_Name PWCMD)} {(usernext)})
                                            (C {(cut)} {(-f1)} {(-d) (Lit_Other ':')})
                                          ]
                                          negated: F
                                        )
                                      ]
                                    )
                                  left_token: <Left_Backtick '`'>
                                  spids: [240 255]
                                )
                              )
                            }
                          spids: [238]
                        )
                      ]
                      spids: [238]
                    )
                  ]
                  spids: [16777215 235]
                )
              ]
              else_action: [
                (While
                  cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
                  body: 
                    (DoGroup
                      children: [
                        (SimpleCommand
                          words: [{(${ VSub_Name PWCMD)} {(usershow)} {($ VSub_Name '$_uid')}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(/dev/null)}
                              spids: [279]
                            )
                            (Redir
                              op_id: Redir_GreatAnd
                              fd: 2
                              arg_word: {(1)}
                              spids: [283]
                            )
                          ]
                        )
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (C {(Lit_Other '[')} {(KW_Bang '!')} {(DQ ($ VSub_QMark '$?'))} 
                                      {(-eq)} {(0)} {(Lit_Other ']')}
                                    )
                                  terminator: <Op_Semi ';'>
                                )
                              ]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:_nextuid)
                                      op: Equal
                                      rhs: {($ VSub_Name '$_uid')}
                                      spids: [307]
                                    )
                                  ]
                                  spids: [307]
                                )
                                (ControlFlow
                                  token: <ControlFlow_Break break>
                                )
                              ]
                              spids: [16777215 304]
                            )
                          ]
                          spids: [16777215 314]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:_uid)
                              op: Equal
                              rhs: 
                                {
                                  (ArithSubPart
                                    anode: 
                                      (ArithBinary
                                        op_id: Arith_Plus
                                        left: (ArithWord w:{($ VSub_Name '$_uid')})
                                        right: (ArithWord w:{(Lit_Digits 1)})
                                      )
                                    spids: [318 325]
                                  )
                                }
                              spids: [317]
                            )
                          ]
                          spids: [317]
                        )
                      ]
                      spids: [268 328]
                    )
                )
              ]
              spids: [259 331]
            )
            (C {(echo)} {($ VSub_Name '$_nextuid')})
          ]
          spids: [211]
        )
      spids: [206 210]
    )
    (FuncDef
      name: show_usage
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ('usage: ') (${ VSub_Name THISCMD) (' [options]'))})
            (C {(echo)} {(DQ ('  options may include:'))})
            (C {(echo)} {(DQ ('  -C\t\tsave to the configuration file only'))})
            (C {(echo)} {(DQ ('  -D\t\tdo not attempt to create the home directory'))})
            (C {(echo)} {(DQ ('  -E\t\tdisable this account after creation'))})
            (C {(echo)} {(DQ ('  -G\t\tadditional groups to add accounts to'))})
            (C {(echo)} {(DQ ('  -L\t\tlogin class of the user'))})
            (C {(echo)} {(DQ ('  -M\t\tfile permission for home directory'))})
            (C {(echo)} {(DQ ('  -N\t\tdo not read configuration file'))})
            (C {(echo)} {(DQ ('  -S\t\ta nonexistent shell is not an error'))})
            (C {(echo)} {(DQ ('  -d\t\thome directory'))})
            (C {(echo)} {(DQ ('  -f\t\tfile from which input will be received'))})
            (C {(echo)} {(DQ ('  -g\t\tdefault login group'))})
            (C {(echo)} {(DQ ('  -h\t\tdisplay this usage message'))})
            (C {(echo)} {(DQ ('  -k\t\tpath to skeleton home directory'))})
            (C {(echo)} {(DQ ('  -m\t\tuser welcome message file'))})
            (C {(echo)} {(DQ ('  -q\t\tabsolute minimal user feedback'))})
            (C {(echo)} {(DQ ('  -s\t\tshell'))})
            (C {(echo)} {(DQ ('  -u\t\tuid to start at'))})
            (C {(echo)} {(DQ ('  -w\t\tpassword type: no, none, yes or random'))})
          ]
          spids: [354]
        )
      spids: [350 353]
    )
    (FuncDef
      name: valid_shells
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_prefix) op:Equal rhs:{(EmptyPart)} spids:[522])]
              spids: [522]
            )
            (Pipeline
              children: [
                (C {(cat)} {(${ VSub_Name ETCSHELLS)})
                (While
                  cond: [(Sentence child:(C {(read)} {(_path)} {(_junk)}) terminator:<Op_Semi ';'>)]
                  body: 
                    (DoGroup
                      children: [
                        (Case
                          to_match: {($ VSub_Name '$_path')}
                          arms: [
                            (case_arm
                              pat_list: [
                                {(EscapedLiteralPart token:<Lit_EscapedChar '\\#'>) (Lit_Other '*')}
                                {(SQ )}
                              ]
                              spids: [554 559 562 16777215]
                            )
                            (case_arm
                              pat_list: [{(Lit_Other '*')}]
                              action: [
                                (C {(echo)} {(-n)} 
                                  {
                                    (DQ (${ VSub_Name _prefix) 
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [(C {(basename)} {($ VSub_Name '$_path')})]
                                          )
                                        left_token: <Left_Backtick '`'>
                                        spids: [577 581]
                                      )
                                    )
                                  }
                                )
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:_prefix)
                                      op: Equal
                                      rhs: {(SQ <' '>)}
                                      spids: [585]
                                    )
                                  ]
                                  spids: [585]
                                )
                              ]
                              spids: [565 566 591 16777215]
                            )
                          ]
                          spids: [547 551 594]
                        )
                      ]
                      spids: [544 597]
                    )
                )
              ]
              negated: F
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-x)} {(DQ (${ VSub_Name NOLOGIN_PATH))} {(Lit_Other ']')})
                (C {(echo)} {(-n)} {(DQ (' ') (${ VSub_Name NOLOGIN))})
              ]
            )
          ]
          spids: [519]
        )
      spids: [515 518]
    )
    (FuncDef
      name: fullpath_from_shell
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_shell)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [655]
                )
              ]
              spids: [655]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_shell'))} {(Lit_Other ']')})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_shell'))} {(Lit_Other '=')} 
                          {(DQ (${ VSub_Name NOLOGIN))} {(-o)} {(DQ ($ VSub_Name '$_shell'))} {(Lit_Other '=')} {(DQ (${ VSub_Name NOLOGIN_PATH))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(${ VSub_Name NOLOGIN_PATH)})
                    (Sentence
                      child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  spids: [16777215 732]
                )
              ]
              spids: [16777215 748]
            )
            (Pipeline
              children: [
                (C {(cat)} {(${ VSub_Name ETCSHELLS)})
                (While
                  cond: [(Sentence child:(C {(read)} {(_path)} {(_junk)}) terminator:<Op_Semi ';'>)]
                  body: 
                    (DoGroup
                      children: [
                        (Case
                          to_match: {(DQ ($ VSub_Name '$_path'))}
                          arms: [
                            (case_arm
                              pat_list: [
                                {(EscapedLiteralPart token:<Lit_EscapedChar '\\#'>) (Lit_Other '*')}
                                {(SQ )}
                              ]
                              spids: [783 788 791 16777215]
                            )
                            (case_arm
                              pat_list: [{(Lit_Other '*')}]
                              action: [
                                (If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (Sentence
                                          child: 
                                            (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_path'))} 
                                              {(Lit_Other '=')} {(DQ ($ VSub_Name '$_shell'))} {(-o)} 
                                              {
                                                (DQ 
                                                  (CommandSubPart
                                                    command_list: 
                                                      (CommandList
                                                        children: [
                                                          (C {(basename)} {($ VSub_Name '$_path')})
                                                        ]
                                                      )
                                                    left_token: <Left_Backtick '`'>
                                                    spids: [817 821]
                                                  )
                                                )
                                              } {(Lit_Other '=')} {(DQ ($ VSub_Name '$_shell'))} {(Lit_Other ']')}
                                            )
                                          terminator: <Op_Semi ';'>
                                        )
                                      ]
                                      action: [
                                        (C {(echo)} {($ VSub_Name '$_path')})
                                        (ControlFlow
                                          token: <ControlFlow_Return return>
                                          arg_word: {(0)}
                                        )
                                      ]
                                      spids: [16777215 833]
                                    )
                                  ]
                                  spids: [16777215 846]
                                )
                              ]
                              spids: [794 795 849 16777215]
                            )
                          ]
                          spids: [774 780 852]
                        )
                      ]
                      spids: [771 855]
                    )
                )
              ]
              negated: F
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [652]
        )
      spids: [648 651]
    )
    (FuncDef
      name: shell_exists
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_sh)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [894]
                )
              ]
              spids: [894]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_shellchk)
                  op: Equal
                  rhs: 
                    {
                      (DQ (${ VSub_Name GREPCMD) (" '^") ($ VSub_Name '$_sh') (Lit_Other '$') ("' ") 
                        (${ VSub_Name ETCSHELLS) (' > /dev/null 2>&1')
                      )
                    }
                  spids: [900]
                )
              ]
              spids: [900]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [(C {(eval)} {($ VSub_Name '$_shellchk')})]
                          negated: T
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_sh'))} 
                                  {(KW_Bang '!') (Lit_Other '=')} {(DQ (${ VSub_Name NOLOGIN_PATH))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(err)} 
                              {
                                (DQ ('Invalid shell (') ($ VSub_Name '$_sh') (') for user ') 
                                  ($ VSub_Name '$username') (.)
                                )
                              }
                            )
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(1)}
                            )
                          ]
                          spids: [16777215 953]
                        )
                      ]
                      spids: [16777215 972]
                    )
                  ]
                  spids: [16777215 926]
                )
              ]
              spids: [16777215 975]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (Pipeline
                  children: [(C {(Lit_Other '[')} {(-x)} {(DQ ($ VSub_Name '$_sh'))} {(Lit_Other ']')})]
                  negated: T
                )
                (C {(info)} 
                  {
                    (DQ ('The shell (') ($ VSub_Name '$_sh') (') does not exist or is not executable.'))
                  }
                )
              ]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [891]
        )
      spids: [887 890]
    )
    (FuncDef
      name: save_config
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ('# Configuration file for adduser(8).'))}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1038]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('# NOTE: only *some* variables are saved.'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1051]
                )
              ]
            )
            (SimpleCommand
              words: [
                {(echo)}
                {
                  (DQ ('# Last Modified on ') 
                    (CommandSubPart
                      command_list: (CommandList children:[(C {(${ VSub_Name DATECMD)})])
                      left_token: <Left_Backtick '`'>
                      spids: [1062 1066]
                    ) (.)
                  )
                }
              ]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1070]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(SQ )}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1082]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('defaultHomePerm=') ($ VSub_Name '$uhomeperm'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1096]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('defaultLgroup=') ($ VSub_Name '$ulogingroup'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1110]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('defaultclass=') ($ VSub_Name '$uclass'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1124]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('defaultgroups=') ($ VSub_Name '$ugroups'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1138]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('passwdtype=') ($ VSub_Name '$passwdtype'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1152]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('homeprefix=') ($ VSub_Name '$homeprefix'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1166]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('defaultshell=') ($ VSub_Name '$ushell'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1180]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('udotdir=') ($ VSub_Name '$udotdir'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1194]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('msgfile=') ($ VSub_Name '$msgfile'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1208]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('disableflag=') ($ VSub_Name '$disableflag'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1222]
                )
              ]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ('uidstart=') ($ VSub_Name '$uidstart'))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {(${ VSub_Name ADDUSERCONF)}
                  spids: [1236]
                )
              ]
            )
          ]
          spids: [1029]
        )
      spids: [1025 1028]
    )
    (FuncDef
      name: add_user
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(save_config)}) (ControlFlow token:<ControlFlow_Return return>)]
                  spids: [16777215 1286]
                )
              ]
              spids: [16777215 1295]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_uid) op:Equal rhs:{(EmptyPart)} spids:[1299])]
              spids: [1299]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_name) op:Equal rhs:{(EmptyPart)} spids:[1302])]
              spids: [1302]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_comment)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [1305]
                )
              ]
              spids: [1305]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_gecos) op:Equal rhs:{(EmptyPart)} spids:[1308])]
              spids: [1308]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_home) op:Equal rhs:{(EmptyPart)} spids:[1311])]
              spids: [1311]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_group) op:Equal rhs:{(EmptyPart)} spids:[1314])]
              spids: [1314]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_grouplist)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [1317]
                )
              ]
              spids: [1317]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_shell) op:Equal rhs:{(EmptyPart)} spids:[1320])]
              spids: [1320]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_class) op:Equal rhs:{(EmptyPart)} spids:[1323])]
              spids: [1323]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_dotdir)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [1326]
                )
              ]
              spids: [1326]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_expire)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [1329]
                )
              ]
              spids: [1329]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_pwexpire)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [1332]
                )
              ]
              spids: [1332]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_passwd)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [1335]
                )
              ]
              spids: [1335]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_upasswd)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [1338]
                )
              ]
              spids: [1338]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_passwdmethod)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [1341]
                )
              ]
              spids: [1341]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_name)
                  op: Equal
                  rhs: {(DQ ("-n '") ($ VSub_Name '$username') ("'"))}
                  spids: [1345]
                )
              ]
              spids: [1345]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uuid'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_uid)
                      op: Equal
                      rhs: {(SQ <'-u "$uuid"'>)}
                      spids: [1365]
                    )
                  ]
                  spids: [1365]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ulogingroup'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_group)
                      op: Equal
                      rhs: {(SQ <'-g "$ulogingroup"'>)}
                      spids: [1383]
                    )
                  ]
                  spids: [1383]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ugroups'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_grouplist)
                      op: Equal
                      rhs: {(SQ <'-G "$ugroups"'>)}
                      spids: [1401]
                    )
                  ]
                  spids: [1401]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ushell'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_shell)
                      op: Equal
                      rhs: {(SQ <'-s "$ushell"'>)}
                      spids: [1419]
                    )
                  ]
                  spids: [1419]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uclass'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_class)
                      op: Equal
                      rhs: {(SQ <'-L "$uclass"'>)}
                      spids: [1437]
                    )
                  ]
                  spids: [1437]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ugecos'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_comment)
                      op: Equal
                      rhs: {(SQ <'-c "$ugecos"'>)}
                      spids: [1455]
                    )
                  ]
                  spids: [1455]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$udotdir'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_dotdir)
                      op: Equal
                      rhs: {(SQ <'-k "$udotdir"'>)}
                      spids: [1473]
                    )
                  ]
                  spids: [1473]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uexpire'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_expire)
                      op: Equal
                      rhs: {(SQ <'-e "$uexpire"'>)}
                      spids: [1491]
                    )
                  ]
                  spids: [1491]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$upwexpire'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_pwexpire)
                      op: Equal
                      rhs: {(SQ <'-p "$upwexpire"'>)}
                      spids: [1509]
                    )
                  ]
                  spids: [1509]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$Dflag'))} {(-a)} {(-n)} 
                          {(DQ ($ VSub_Name '$uhome'))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$uhome'))} {(Lit_Other '=')} 
                                  {(DQ ($ VSub_Name '$NOHOME'))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:_home)
                                  op: Equal
                                  rhs: {(SQ <'-d "$uhome"'>)}
                                  spids: [1567]
                                )
                              ]
                              spids: [1567]
                            )
                          ]
                          spids: [16777215 1564]
                        )
                      ]
                      else_action: [
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uhomeperm'))} 
                                      {(Lit_Other ']')}
                                    )
                                  terminator: <Op_Semi ';'>
                                )
                              ]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:_home)
                                      op: Equal
                                      rhs: {(SQ <'-m -d "$uhome" -M "$uhomeperm"'>)}
                                      spids: [1596]
                                    )
                                  ]
                                  spids: [1596]
                                )
                              ]
                              spids: [16777215 1593]
                            )
                          ]
                          else_action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:_home)
                                  op: Equal
                                  rhs: {(SQ <'-m -d "$uhome"'>)}
                                  spids: [1605]
                                )
                              ]
                              spids: [1605]
                            )
                          ]
                          spids: [1602 1611]
                        )
                      ]
                      spids: [1573 1614]
                    )
                  ]
                  spids: [16777215 1536]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$Dflag'))} {(-a)} {(-n)} 
                          {(DQ ($ VSub_Name '$uhome'))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_home)
                          op: Equal
                          rhs: {(SQ <'-d "$uhome"'>)}
                          spids: [1641]
                        )
                      ]
                      spids: [1641]
                    )
                  ]
                  spids: [1617 1638]
                )
              ]
              spids: [16777215 1647]
            )
            (Case
              to_match: {($ VSub_Name '$passwdtype')}
              arms: [
                (case_arm
                  pat_list: [{(no)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_passwdmethod)
                          op: Equal
                          rhs: {(DQ ('-w no'))}
                          spids: [1661]
                        )
                      ]
                      spids: [1661]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_passwd)
                          op: Equal
                          rhs: {(DQ ('-h -'))}
                          spids: [1667]
                        )
                      ]
                      spids: [1667]
                    )
                  ]
                  spids: [1657 1658 1673 16777215]
                )
                (case_arm
                  pat_list: [{(yes)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_passwdmethod)
                          op: Equal
                          rhs: {(DQ ('-w yes'))}
                          spids: [1704]
                        )
                      ]
                      spids: [1704]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_passwd)
                          op: Equal
                          rhs: {(DQ ('-h 0'))}
                          spids: [1710]
                        )
                      ]
                      spids: [1710]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_upasswd)
                          op: Equal
                          rhs: {(SQ <'echo "$upass" |'>)}
                          spids: [1716]
                        )
                      ]
                      spids: [1716]
                    )
                  ]
                  spids: [1676 1677 1722 16777215]
                )
                (case_arm
                  pat_list: [{(none)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_passwdmethod)
                          op: Equal
                          rhs: {(DQ ('-w none'))}
                          spids: [1729]
                        )
                      ]
                      spids: [1729]
                    )
                  ]
                  spids: [1725 1726 1735 16777215]
                )
                (case_arm
                  pat_list: [{(random)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_passwdmethod)
                          op: Equal
                          rhs: {(DQ ('-w random'))}
                          spids: [1742]
                        )
                      ]
                      spids: [1742]
                    )
                  ]
                  spids: [1738 1739 1748 16777215]
                )
              ]
              spids: [1650 1654 1751]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_pwcmd)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$_upasswd') (' ') (${ VSub_Name PWCMD) (' useradd ') 
                        ($ VSub_Name '$_uid') (' ') ($ VSub_Name '$_name') (' ') ($ VSub_Name '$_group') (' ') ($ VSub_Name '$_grouplist') (' ') 
                        ($ VSub_Name '$_comment')
                      )
                    }
                  spids: [1755]
                )
              ]
              spids: [1755]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_pwcmd)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$_pwcmd') (' ') ($ VSub_Name '$_shell') (' ') 
                        ($ VSub_Name '$_class') (' ') ($ VSub_Name '$_home') (' ') ($ VSub_Name '$_dotdir') (' ') ($ VSub_Name '$_passwdmethod') (' ') 
                        ($ VSub_Name '$_passwd')
                      )
                    }
                  spids: [1775]
                )
              ]
              spids: [1775]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_pwcmd)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$_pwcmd') (' ') ($ VSub_Name '$_expire') (' ') 
                        ($ VSub_Name '$_pwexpire')
                      )
                    }
                  spids: [1793]
                )
              ]
              spids: [1793]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:_output)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [(C {(eval)} {($ VSub_Name '$_pwcmd')})]
                                          )
                                        left_token: <Left_Backtick '`'>
                                        spids: [1809 1813]
                                      )
                                    }
                                  spids: [1808]
                                )
                              ]
                              spids: [1808]
                            )
                          ]
                          negated: T
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(err)} 
                      {(DQ ('There was an error adding user (') ($ VSub_Name '$username') (').'))}
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [16777215 1817]
                )
              ]
              else_action: [
                (C {(info)} 
                  {
                    (DQ ('Successfully added (') ($ VSub_Name '$username') (') to the user database.'))
                  }
                )
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: 
                            (C {(Lit_Other '[')} {(DQ (random))} {(Lit_Other '=')} 
                              {(DQ ($ VSub_Name '$passwdtype'))} {(Lit_Other ']')}
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:randompass)
                              op: Equal
                              rhs: {(DQ ($ VSub_Name '$_output'))}
                              spids: [1866]
                            )
                          ]
                          spids: [1866]
                        )
                        (C {(info)} 
                          {
                            (DQ ('Password for (') ($ VSub_Name '$username') (') is: ') 
                              ($ VSub_Name '$randompass')
                            )
                          }
                        )
                      ]
                      spids: [16777215 1863]
                    )
                  ]
                  spids: [16777215 1882]
                )
              ]
              spids: [1834 1885]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$disableflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: (C {(${ VSub_Name PWCMD)} {(lock)} {($ VSub_Name '$username')})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(info)} {(DQ ('Account (') ($ VSub_Name '$username') (') is locked.'))})
                          ]
                          spids: [16777215 1917]
                        )
                      ]
                      else_action: [
                        (C {(info)} 
                          {(DQ ('Account (') ($ VSub_Name '$username') (') could NOT be locked.'))}
                        )
                      ]
                      spids: [1929 1941]
                    )
                  ]
                  spids: [16777215 1902]
                )
              ]
              spids: [16777215 1944]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_line) op:Equal rhs:{(EmptyPart)} spids:[1948])]
              spids: [1948]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_owner) op:Equal rhs:{(EmptyPart)} spids:[1951])]
              spids: [1951]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_perms) op:Equal rhs:{(EmptyPart)} spids:[1954])]
              spids: [1954]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$msgflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(-r)} {(DQ ($ VSub_Name '$msgfile'))} {(Lit_Other ']')})
                        (BraceGroup
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:_dir)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (CommandSubPart
                                          command_list: 
                                            (CommandList
                                              children: [(C {(dirname)} {($ VSub_Name '$msgfile')})]
                                            )
                                          left_token: <Left_Backtick '`'>
                                          spids: [2010 2014]
                                        )
                                      )
                                    }
                                  spids: [2008]
                                )
                              ]
                              spids: [2008]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:_file)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (CommandSubPart
                                          command_list: 
                                            (CommandList
                                              children: [(C {(basename)} {($ VSub_Name '$msgfile')})]
                                            )
                                          left_token: <Left_Backtick '`'>
                                          spids: [2020 2024]
                                        )
                                      )
                                    }
                                  spids: [2018]
                                )
                              ]
                              spids: [2018]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:_perms)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [
                                              (C {(/usr/bin/find)} {($ VSub_Name '$_dir')} {(-name)} 
                                                {($ VSub_Name '$_file')} {(-perm)} {(Lit_Other '+') (07022)} {(-prune)}
                                              )
                                            ]
                                          )
                                        left_token: <Left_Backtick '`'>
                                        spids: [2029 2044]
                                      )
                                    }
                                  spids: [2028]
                                )
                              ]
                              spids: [2028]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:_owner)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [
                                              (C {(/usr/bin/find)} {($ VSub_Name '$_dir')} {(-name)} 
                                                {($ VSub_Name '$_file')} {(-user)} {(0)} {(-prune)}
                                              )
                                            ]
                                          )
                                        left_token: <Left_Backtick '`'>
                                        spids: [2048 2062]
                                      )
                                    }
                                  spids: [2047]
                                )
                              ]
                              spids: [2047]
                            )
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_owner'))} {(-o)} 
                                          {(-n)} {(DQ ($ VSub_Name '$_perms'))} {(Lit_Other ']')}
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (C {(err)} 
                                      {
                                        (DQ ('The message file (') ($ VSub_Name '$msgfile') 
                                          (') may be writeable only by root.')
                                        )
                                      }
                                    )
                                    (ControlFlow
                                      token: <ControlFlow_Return return>
                                      arg_word: {(1)}
                                    )
                                  ]
                                  spids: [16777215 2086]
                                )
                              ]
                              spids: [16777215 2103]
                            )
                            (Pipeline
                              children: [
                                (C {(cat)} {(DQ ($ VSub_Name '$msgfile'))})
                                (While
                                  cond: [
                                    (Sentence
                                      child: (C {(read)} {(_line)})
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  body: 
                                    (DoGroup
                                      children: [(C {(eval)} {(echo)} {(DQ ($ VSub_Name '$_line'))})]
                                      spids: [2123 2135]
                                    )
                                )
                                (C {(${ VSub_Name MAILCMD)} {(-s) (DQ (Welcome))} 
                                  {(${ VSub_Name username)}
                                )
                              ]
                              negated: F
                            )
                            (C {(info)} 
                              {(DQ ('Sent welcome message to (') ($ VSub_Name '$username') (').'))}
                            )
                          ]
                          spids: [1985]
                        )
                      ]
                    )
                  ]
                  spids: [16777215 1970]
                )
              ]
              spids: [16777215 2165]
            )
          ]
          spids: [1261]
        )
      spids: [1257 1260]
    )
    (FuncDef
      name: get_user
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2198])]
              spids: [2198]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (While
              cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} 
                                  {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(C {(echo)} {(-n)} {(DQ ('Username: '))}) (C {(read)} {(_input)})]
                          spids: [16777215 2244]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:_input)
                              op: Equal
                              rhs: 
                                {
                                  (DQ 
                                    (CommandSubPart
                                      command_list: 
                                        (CommandList
                                          children: [
                                            (Pipeline
                                              children: [
                                                (C {(echo)} {(DQ ($ VSub_Name '$fileline'))})
                                                (C {(cut)} {(-f1)} {(-d) (Lit_Other ':')})
                                              ]
                                              negated: F
                                            )
                                          ]
                                        )
                                      left_token: <Left_Backtick '`'>
                                      spids: [2266 2281]
                                    )
                                  )
                                }
                              spids: [2264]
                            )
                          ]
                          spids: [2264]
                        )
                      ]
                      spids: [2261 2285]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_input'))} 
                                  {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(err)} {(DQ ('You must enter a username!'))})
                            (AndOr
                              ops: [Op_DAmp]
                              children: [
                                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} 
                                  {(Lit_Other ']')}
                                )
                                (ControlFlow
                                  token: <ControlFlow_Continue continue>
                                )
                              ]
                            )
                          ]
                          spids: [16777215 2318]
                        )
                      ]
                      spids: [16777215 2343]
                    )
                    (SimpleCommand
                      words: [{(${ VSub_Name PWCMD)} {(usershow)} {($ VSub_Name '$_input')}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(/dev/null)}
                          spids: [2354]
                        )
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: 2
                          arg_word: {(1)}
                          spids: [2358]
                        )
                      ]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ ($ VSub_QMark '$?'))} {(-eq)} {(0)} 
                                  {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(err)} {(DQ ('User exists!'))})
                            (AndOr
                              ops: [Op_DAmp]
                              children: [
                                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} 
                                  {(Lit_Other ']')}
                                )
                                (ControlFlow
                                  token: <ControlFlow_Continue continue>
                                )
                              ]
                            )
                          ]
                          spids: [16777215 2377]
                        )
                      ]
                      spids: [16777215 2402]
                    )
                    (ControlFlow token:<ControlFlow_Break break>)
                  ]
                  spids: [2228 2408]
                )
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:username)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$_input'))}
                  spids: [2411]
                )
              ]
              spids: [2411]
            )
          ]
          spids: [2195]
        )
      spids: [2191 2194]
    )
    (FuncDef
      name: get_gecos
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2438])]
              spids: [2438]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                (ControlFlow token:<ControlFlow_Return return>)
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(-n)} {(DQ ('Full name: '))}) (C {(read)} {(_input)})]
                  spids: [16777215 2475]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_input)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(echo)} {(DQ ($ VSub_Name '$fileline'))})
                                        (C {(cut)} {(-f7)} {(-d) (Lit_Other ':')})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                              left_token: <Left_Backtick '`'>
                              spids: [2497 2512]
                            )
                          )
                        }
                      spids: [2495]
                    )
                  ]
                  spids: [2495]
                )
              ]
              spids: [2492 2516]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ugecos)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$_input'))}
                  spids: [2519]
                )
              ]
              spids: [2519]
            )
          ]
          spids: [2435]
        )
      spids: [2431 2434]
    )
    (FuncDef
      name: get_shell
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2549])]
              spids: [2549]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_fullpath)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [2552]
                )
              ]
              spids: [2552]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ushell)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$defaultshell'))}
                  spids: [2555]
                )
              ]
              spids: [2555]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$Sflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (Pipeline
                                  children: [(C {(shell_exists)} {($ VSub_Name '$ushell')})]
                                  negated: T
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(info)} {(DQ ('Using default shell ') (${ VSub_Name defaultshell) (.))})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:ushell)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name '$defaultshell'))}
                                  spids: [2606]
                                )
                              ]
                              spids: [2606]
                            )
                          ]
                          spids: [16777215 2592]
                        )
                      ]
                      spids: [16777215 2612]
                    )
                  ]
                  spids: [16777215 2579]
                )
              ]
              spids: [16777215 2615]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Shell (') ($ VSub_Name '$shells') (') [') 
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(basename)} {($ VSub_Name '$ushell')})]
                              )
                            left_token: <Left_Backtick '`'>
                            spids: [2643 2647]
                          ) (']: ')
                        )
                      }
                    )
                    (C {(read)} {(_input)})
                  ]
                  spids: [16777215 2632]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_input)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(echo)} {(DQ ($ VSub_Name '$fileline'))})
                                        (C {(cut)} {(-f9)} {(-d) (Lit_Other ':')})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                              left_token: <Left_Backtick '`'>
                              spids: [2662 2677]
                            )
                          )
                        }
                      spids: [2660]
                    )
                  ]
                  spids: [2660]
                )
              ]
              spids: [2657 2681]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$Sflag'))} 
                                  {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:ushell)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name '$_input'))}
                                  spids: [2716]
                                )
                              ]
                              spids: [2716]
                            )
                          ]
                          spids: [16777215 2713]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:_fullpath)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (C {(fullpath_from_shell)} {($ VSub_Name '$_input')})
                                        ]
                                      )
                                    left_token: <Left_Backtick '`'>
                                    spids: [2726 2730]
                                  )
                                }
                              spids: [2725]
                            )
                          ]
                          spids: [2725]
                        )
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_fullpath'))} 
                                      {(Lit_Other ']')}
                                    )
                                  terminator: <Op_Semi ';'>
                                )
                              ]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:ushell)
                                      op: Equal
                                      rhs: {(DQ ($ VSub_Name '$_fullpath'))}
                                      spids: [2749]
                                    )
                                  ]
                                  spids: [2749]
                                )
                              ]
                              spids: [16777215 2746]
                            )
                          ]
                          else_action: [
                            (C {(err)} 
                              {
                                (DQ ('Invalid shell (') ($ VSub_Name '$_input') (') for user ') 
                                  ($ VSub_Name '$username') (.)
                                )
                              }
                            )
                            (C {(info)} {(DQ ('Using default shell ') (${ VSub_Name defaultshell) (.))})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:ushell)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name '$defaultshell'))}
                                  spids: [2780]
                                )
                              ]
                              spids: [2780]
                            )
                          ]
                          spids: [2755 2786]
                        )
                      ]
                      spids: [2722 2789]
                    )
                  ]
                  spids: [16777215 2697]
                )
              ]
              spids: [16777215 2792]
            )
          ]
          spids: [2546]
        )
      spids: [2542 2545]
    )
    (FuncDef
      name: get_homedir
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2816])]
              spids: [2816]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Home directory [') (${ VSub_Name homeprefix) (/) (${ VSub_Name username) 
                          (']: ')
                        )
                      }
                    )
                    (C {(read)} {(_input)})
                  ]
                  spids: [16777215 2832]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_input)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(echo)} {(DQ ($ VSub_Name '$fileline'))})
                                        (C {(cut)} {(-f8)} {(-d) (Lit_Other ':')})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                              left_token: <Left_Backtick '`'>
                              spids: [2862 2877]
                            )
                          )
                        }
                      spids: [2860]
                    )
                  ]
                  spids: [2860]
                )
              ]
              spids: [2857 2881]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:uhome)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$_input'))}
                          spids: [2901]
                        )
                      ]
                      spids: [2901]
                    )
                    (AndOr
                      ops: [Op_DAmp Op_DPipe]
                      children: [
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:homeprefix)
                              op: Equal
                              rhs: 
                                {
                                  (DQ 
                                    (CommandSubPart
                                      command_list: 
                                        (CommandList
                                          children: [(C {(dirname)} {($ VSub_Name '$uhome')})]
                                        )
                                      left_token: <Left_Backtick '`'>
                                      spids: [2937 2941]
                                    )
                                  )
                                }
                              spids: [2935]
                            )
                          ]
                          spids: [2935]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:homeprefix)
                              op: Equal
                              rhs: {(DQ ($ VSub_Name '$uhome'))}
                              spids: [2946]
                            )
                          ]
                          spids: [2946]
                        )
                      ]
                    )
                  ]
                  spids: [16777215 2898]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:uhome)
                      op: Equal
                      rhs: {(DQ (${ VSub_Name homeprefix) (/) (${ VSub_Name username))}
                      spids: [2955]
                    )
                  ]
                  spids: [2955]
                )
              ]
              spids: [2952 2967]
            )
          ]
          spids: [2813]
        )
      spids: [2809 2812]
    )
    (FuncDef
      name: get_homeperm
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:uhomeperm)
                  op: Equal
                  rhs: {($ VSub_Name '$defaultHomePerm')}
                  spids: [2988]
                )
              ]
              spids: [2988]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2992])]
              spids: [2992]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_prompt)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [2995]
                )
              ]
              spids: [2995]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uhomeperm'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_prompt)
                          op: Equal
                          rhs: {(DQ ('Home directory permissions [') (${ VSub_Name uhomeperm) (']: '))}
                          spids: [3015]
                        )
                      ]
                      spids: [3015]
                    )
                  ]
                  spids: [16777215 3012]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_prompt)
                      op: Equal
                      rhs: {(DQ ('Home directory permissions (Leave empty for default): '))}
                      spids: [3028]
                    )
                  ]
                  spids: [3028]
                )
              ]
              spids: [3025 3034]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(-n)} {(DQ ($ VSub_Name '$_prompt'))}) (C {(read)} {(_input)})]
                  spids: [16777215 3050]
                )
              ]
              spids: [16777215 3067]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:uhomeperm)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$_input'))}
                          spids: [3087]
                        )
                      ]
                      spids: [3087]
                    )
                  ]
                  spids: [16777215 3084]
                )
              ]
              spids: [16777215 3093]
            )
          ]
          spids: [2985]
        )
      spids: [2981 2984]
    )
    (FuncDef
      name: get_uid
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:uuid)
                  op: Equal
                  rhs: {(${ VSub_Name uidstart)}
                  spids: [3117]
                )
              ]
              spids: [3117]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[3123])]
              spids: [3123]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_prompt)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [3126]
                )
              ]
              spids: [3126]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uuid'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:uuid)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(get_nextuid)} {($ VSub_Name '$uuid')})]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [3147 3151]
                              )
                            }
                          spids: [3146]
                        )
                      ]
                      spids: [3146]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_prompt)
                          op: Equal
                          rhs: {(DQ ('Uid [') ($ VSub_Name '$uuid') (']: '))}
                          spids: [3154]
                        )
                      ]
                      spids: [3154]
                    )
                  ]
                  spids: [16777215 3143]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_prompt)
                      op: Equal
                      rhs: {(DQ ('Uid (Leave empty for default): '))}
                      spids: [3165]
                    )
                  ]
                  spids: [3165]
                )
              ]
              spids: [3162 3171]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(-n)} {(DQ ($ VSub_Name '$_prompt'))}) (C {(read)} {(_input)})]
                  spids: [16777215 3187]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_input)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(echo)} {(DQ ($ VSub_Name '$fileline'))})
                                        (C {(cut)} {(-f2)} {(-d) (Lit_Other ':')})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                              left_token: <Left_Backtick '`'>
                              spids: [3209 3224]
                            )
                          )
                        }
                      spids: [3207]
                    )
                  ]
                  spids: [3207]
                )
              ]
              spids: [3204 3228]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:uuid)
                      op: Equal
                      rhs: {($ VSub_Name '$_input')}
                      spids: [3244]
                    )
                  ]
                  spids: [3244]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:uuid)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(get_nextuid)} {($ VSub_Name '$uuid')})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [3249 3253]
                      )
                    }
                  spids: [3248]
                )
              ]
              spids: [3248]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:uidstart)
                  op: Equal
                  rhs: {($ VSub_Name '$uuid')}
                  spids: [3256]
                )
              ]
              spids: [3256]
            )
          ]
          spids: [3114]
        )
      spids: [3110 3113]
    )
    (FuncDef
      name: get_class
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:uclass)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$defaultclass'))}
                  spids: [3278]
                )
              ]
              spids: [3278]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[3284])]
              spids: [3284]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_class)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name uclass>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (default))})
                        spids: [3288 3294]
                      )
                    }
                  spids: [3287]
                )
              ]
              spids: [3287]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} {(DQ ('Login class [') ($ VSub_Name '$_class') (']: '))})
                    (C {(read)} {(_input)})
                  ]
                  spids: [16777215 3311]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_input)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(echo)} {(DQ ($ VSub_Name '$fileline'))})
                                        (C {(cut)} {(-f4)} {(-d) (Lit_Other ':')})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                              left_token: <Left_Backtick '`'>
                              spids: [3335 3350]
                            )
                          )
                        }
                      spids: [3333]
                    )
                  ]
                  spids: [3333]
                )
              ]
              spids: [3330 3354]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:uclass)
                      op: Equal
                      rhs: {(DQ ($ VSub_Name '$_input'))}
                      spids: [3370]
                    )
                  ]
                  spids: [3370]
                )
              ]
            )
          ]
          spids: [3275]
        )
      spids: [3271 3274]
    )
    (FuncDef
      name: get_logingroup
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ulogingroup)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$defaultLgroup'))}
                  spids: [3406]
                )
              ]
              spids: [3406]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[3412])]
              spids: [3412]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Login group [') 
                          (BracedVarSub
                            token: <VSub_Name ulogingroup>
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonHyphen
                                arg_word: {($ VSub_Name '$username')}
                              )
                            spids: [3438 3442]
                          ) (']: ')
                        )
                      }
                    )
                    (C {(read)} {(_input)})
                  ]
                  spids: [16777215 3429]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:_input)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(echo)} {(DQ ($ VSub_Name '$fileline'))})
                                        (C {(cut)} {(-f3)} {(-d) (Lit_Other ':')})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                              left_token: <Left_Backtick '`'>
                              spids: [3457 3472]
                            )
                          )
                        }
                      spids: [3455]
                    )
                  ]
                  spids: [3455]
                )
              ]
              spids: [3452 3476]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:ulogingroup)
                      op: Equal
                      rhs: {(DQ ($ VSub_Name '$_input'))}
                      spids: [3496]
                    )
                  ]
                  spids: [3496]
                )
              ]
            )
          ]
          spids: [3403]
        )
      spids: [3399 3402]
    )
    (FuncDef
      name: get_groups
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ugroups)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$defaultgroups'))}
                  spids: [3523]
                )
              ]
              spids: [3523]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[3529])]
              spids: [3529]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_group)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name ulogingroup>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(DQ (${ VSub_Name username))}
                          )
                        spids: [3533 3541]
                      )
                    }
                  spids: [3532]
                )
              ]
              spids: [3532]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                        (C {(echo)} {(-n)} 
                          {
                            (DQ ('Login group is ') ($ VSub_Name '$_group') ('. Invite ') 
                              ($ VSub_Name '$username')
                            )
                          }
                        )
                      ]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                        (C {(echo)} {(-n)} 
                          {(DQ (' into other groups? [') ($ VSub_Name '$ugroups') (']: '))}
                        )
                      ]
                    )
                  ]
                  spids: [16777215 3558]
                )
              ]
              else_action: [
                (AndOr
                  ops: [Op_DAmp]
                  children: [
                    (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
                    (C {(echo)} {(-n)} 
                      {(DQ ('Enter additional groups [') ($ VSub_Name '$ugroups') (']: '))}
                    )
                  ]
                )
              ]
              spids: [3608 3634]
            )
            (C {(read)} {(_input)})
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:ugroups)
                      op: Equal
                      rhs: {(DQ ($ VSub_Name '$_input'))}
                      spids: [3655]
                    )
                  ]
                  spids: [3655]
                )
              ]
            )
          ]
          spids: [3520]
        )
      spids: [3516 3519]
    )
    (FuncDef
      name: get_expire_dates
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:upwexpire)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(echo)} {(DQ ($ VSub_Name '$fileline'))})
                                    (C {(cut)} {(-f5)} {(-d) (Lit_Other ':')})
                                  ]
                                  negated: F
                                )
                              ]
                            )
                          left_token: <Left_Backtick '`'>
                          spids: [3684 3699]
                        )
                      )
                    }
                  spids: [3682]
                )
              ]
              spids: [3682]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:uexpire)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(echo)} {(DQ ($ VSub_Name '$fileline'))})
                                    (C {(cut)} {(-f6)} {(-d) (Lit_Other ':')})
                                  ]
                                  negated: F
                                )
                              ]
                            )
                          left_token: <Left_Backtick '`'>
                          spids: [3705 3720]
                        )
                      )
                    }
                  spids: [3703]
                )
              ]
              spids: [3703]
            )
          ]
          spids: [3679]
        )
      spids: [3675 3678]
    )
    (FuncDef
      name: get_password
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$savedpwtype'))} {(Lit_Other ']')})
                (BraceGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:passwdtype)
                          op: Equal
                          rhs: {($ VSub_Name '$savedpwtype')}
                          spids: [3784]
                        )
                      ]
                      spids: [3784]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:savedpwtype)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [3788]
                        )
                      ]
                      spids: [3788]
                    )
                  ]
                  spids: [3781]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:upass)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name fileline>
                        suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('*:*:*:*:*:*:*:*:*:')})
                        spids: [3800 3804]
                      )
                    }
                  spids: [3799]
                )
              ]
              spids: [3799]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$upass'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Case
                      to_match: {($ VSub_Name '$passwdtype')}
                      arms: [
                        (case_arm
                          pat_list: [{(yes)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:passwdtype)
                                  op: Equal
                                  rhs: {(none)}
                                  spids: [3839]
                                )
                              ]
                              spids: [3839]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:savedpwtype)
                                  op: Equal
                                  rhs: {(yes)}
                                  spids: [3843]
                                )
                              ]
                              spids: [3843]
                            )
                          ]
                          spids: [3831 3832 3847 16777215]
                        )
                      ]
                      spids: [3824 3828 3850]
                    )
                  ]
                  spids: [16777215 3821]
                )
              ]
              else_action: [
                (Case
                  to_match: {($ VSub_Name '$passwdtype')}
                  arms: [
                    (case_arm
                      pat_list: [{(random)}]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:passwdtype)
                              op: Equal
                              rhs: {(yes)}
                              spids: [3867]
                            )
                          ]
                          spids: [3867]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:savedpwtype)
                              op: Equal
                              rhs: {(random)}
                              spids: [3871]
                            )
                          ]
                          spids: [3871]
                        )
                      ]
                      spids: [3863 3864 3875 16777215]
                    )
                  ]
                  spids: [3856 3860 3878]
                )
              ]
              spids: [3853 3881]
            )
          ]
          spids: [3754]
        )
      spids: [3750 3753]
    )
    (FuncDef
      name: input_from_file
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_field) op:Equal rhs:{(EmptyPart)} spids:[3905])]
              spids: [3905]
            )
            (While
              cond: [(Sentence child:(C {(read)} {(-r)} {(fileline)}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (Case
                      to_match: {(DQ ($ VSub_Name '$fileline'))}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(EscapedLiteralPart token:<Lit_EscapedChar '\\#'>) (Lit_Other '*')}
                            {(SQ )}
                          ]
                          spids: [3931 3936 3939 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [
                            (AndOr
                              ops: [Op_DPipe]
                              children: [
                                (C {(get_user)})
                                (ControlFlow
                                  token: <ControlFlow_Continue continue>
                                )
                              ]
                            )
                            (C {(get_gecos)})
                            (C {(get_uid)})
                            (C {(get_logingroup)})
                            (C {(get_class)})
                            (C {(get_shell)})
                            (C {(get_homedir)})
                            (C {(get_homeperm)})
                            (C {(get_password)})
                            (C {(get_expire_dates)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:ugroups)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name '$defaultgroups'))}
                                  spids: [3980]
                                )
                              ]
                              spids: [3980]
                            )
                            (C {(add_user)})
                          ]
                          spids: [3942 3943 3990 16777215]
                        )
                      ]
                      spids: [3922 3928 3993]
                    )
                  ]
                  spids: [3919 3996]
                )
            )
          ]
          spids: [3902]
        )
      spids: [3898 3901]
    )
    (FuncDef
      name: input_interactive
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_disable)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [4020]
                )
              ]
              spids: [4020]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_pass) op:Equal rhs:{(EmptyPart)} spids:[4023])]
              spids: [4023]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_passconfirm)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [4026]
                )
              ]
              spids: [4026]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_random) op:Equal rhs:{(DQ (no))} spids:[4029])]
              spids: [4029]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_emptypass)
                  op: Equal
                  rhs: {(DQ (no))}
                  spids: [4035]
                )
              ]
              spids: [4035]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_usepass)
                  op: Equal
                  rhs: {(DQ (yes))}
                  spids: [4041]
                )
              ]
              spids: [4041]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_logingroup_ok)
                  op: Equal
                  rhs: {(DQ (no))}
                  spids: [4047]
                )
              ]
              spids: [4047]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_groups_ok)
                  op: Equal
                  rhs: {(DQ (no))}
                  spids: [4053]
                )
              ]
              spids: [4053]
            )
            (Case
              to_match: {($ VSub_Name '$passwdtype')}
              arms: [
                (case_arm
                  pat_list: [{(none)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_emptypass)
                          op: Equal
                          rhs: {(DQ (yes))}
                          spids: [4070]
                        )
                      ]
                      spids: [4070]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_usepass)
                          op: Equal
                          rhs: {(DQ (yes))}
                          spids: [4076]
                        )
                      ]
                      spids: [4076]
                    )
                  ]
                  spids: [4066 4067 4082 16777215]
                )
                (case_arm
                  pat_list: [{(no)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_usepass)
                          op: Equal
                          rhs: {(DQ (no))}
                          spids: [4089]
                        )
                      ]
                      spids: [4089]
                    )
                  ]
                  spids: [4085 4086 4095 16777215]
                )
                (case_arm
                  pat_list: [{(random)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_random)
                          op: Equal
                          rhs: {(DQ (yes))}
                          spids: [4102]
                        )
                      ]
                      spids: [4102]
                    )
                  ]
                  spids: [4098 4099 4108 16777215]
                )
              ]
              spids: [4059 4063 4111]
            )
            (C {(get_user)})
            (C {(get_gecos)})
            (C {(get_uid)})
            (Until
              cond: [
                (Sentence
                  child: 
                    (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_logingroup_ok'))} {(Lit_Other '=')} {(yes)} 
                      {(Lit_Other ']')}
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (C {(get_logingroup)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_logingroup_ok)
                          op: Equal
                          rhs: {(yes)}
                          spids: [4154]
                        )
                      ]
                      spids: [4154]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ulogingroup'))} {(-a)} 
                                  {(DQ ($ VSub_Name '$username'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$ulogingroup'))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (Pipeline
                                          children: [
                                            (SimpleCommand
                                              words: [
                                                {(${ VSub_Name PWCMD)}
                                                {(show)}
                                                {(group)}
                                                {($ VSub_Name '$ulogingroup')}
                                              ]
                                              redirects: [
                                                (Redir
                                                  op_id: Redir_Great
                                                  fd: 16777215
                                                  arg_word: {(/dev/null)}
                                                  spids: [4201]
                                                )
                                                (Redir
                                                  op_id: Redir_GreatAnd
                                                  fd: 2
                                                  arg_word: {(1)}
                                                  spids: [4205]
                                                )
                                              ]
                                            )
                                          ]
                                          negated: T
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (C {(echo)} 
                                      {
                                        (DQ ('Group ') ($ VSub_Name '$ulogingroup') 
                                          (' does not exist!')
                                        )
                                      }
                                    )
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:_logingroup_ok)
                                          op: Equal
                                          rhs: {(no)}
                                          spids: [4221]
                                        )
                                      ]
                                      spids: [4221]
                                    )
                                  ]
                                  spids: [16777215 4209]
                                )
                              ]
                              spids: [16777215 4225]
                            )
                          ]
                          spids: [16777215 4184]
                        )
                      ]
                      spids: [16777215 4228]
                    )
                  ]
                  spids: [4148 4231]
                )
            )
            (Until
              cond: [
                (Sentence
                  child: 
                    (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_groups_ok'))} {(Lit_Other '=')} {(yes)} 
                      {(Lit_Other ']')}
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (C {(get_groups)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_groups_ok)
                          op: Equal
                          rhs: {(yes)}
                          spids: [4255]
                        )
                      ]
                      spids: [4255]
                    )
                    (ForEach
                      iter_name: i
                      iter_words: [{($ VSub_Name '$ugroups')}]
                      do_arg_iter: F
                      body: 
                        (DoGroup
                          children: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$username'))} 
                                          {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$i'))} {(Lit_Other ']')}
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (If
                                      arms: [
                                        (if_arm
                                          cond: [
                                            (Sentence
                                              child: 
                                                (Pipeline
                                                  children: [
                                                    (SimpleCommand
                                                      words: [
                                                        {(${ VSub_Name PWCMD)}
                                                        {(show)}
                                                        {(group)}
                                                        {($ VSub_Name '$i')}
                                                      ]
                                                      redirects: [
                                                        (Redir
                                                          op_id: Redir_Great
                                                          fd: 16777215
                                                          arg_word: {(/dev/null)}
                                                          spids: [4306]
                                                        )
                                                        (Redir
                                                          op_id: Redir_GreatAnd
                                                          fd: 2
                                                          arg_word: {(1)}
                                                          spids: [4310]
                                                        )
                                                      ]
                                                    )
                                                  ]
                                                  negated: T
                                                )
                                              terminator: <Op_Semi ';'>
                                            )
                                          ]
                                          action: [
                                            (C {(echo)} 
                                              {
                                                (DQ ('Group ') ($ VSub_Name '$i') (' does not exist!'))
                                              }
                                            )
                                            (Assignment
                                              keyword: Assign_None
                                              pairs: [
                                                (assign_pair
                                                  lhs: (LhsName name:_groups_ok)
                                                  op: Equal
                                                  rhs: {(no)}
                                                  spids: [4326]
                                                )
                                              ]
                                              spids: [4326]
                                            )
                                          ]
                                          spids: [16777215 4314]
                                        )
                                      ]
                                      spids: [16777215 4330]
                                    )
                                  ]
                                  spids: [16777215 4289]
                                )
                              ]
                              spids: [16777215 4333]
                            )
                          ]
                          spids: [4268 4336]
                        )
                      spids: [4264 4266]
                    )
                  ]
                  spids: [4249 4339]
                )
            )
            (C {(get_class)})
            (C {(get_shell)})
            (C {(get_homedir)})
            (C {(get_homeperm)})
            (While
              cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Use password-based authentication? [') ($ VSub_Name '$_usepass') (']: '))
                      }
                    )
                    (C {(read)} {(_input)})
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')})
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:_input)
                              op: Equal
                              rhs: {($ VSub_Name '$_usepass')}
                              spids: [4393]
                            )
                          ]
                          spids: [4393]
                        )
                      ]
                    )
                    (Case
                      to_match: {($ VSub_Name '$_input')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')}
                            {(Lit_Other '[') (Nn) (Lit_Other ']')}
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:passwdtype)
                                  op: Equal
                                  rhs: {(DQ (no))}
                                  spids: [4417]
                                )
                              ]
                              spids: [4417]
                            )
                          ]
                          spids: [4404 4414 4423 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: [
                            (While
                              cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
                              body: 
                                (DoGroup
                                  children: [
                                    (C {(echo)} {(-n)} 
                                      {
                                        (DQ ('Use an empty password? (yes/no) [') 
                                          ($ VSub_Name '$_emptypass') (']: ')
                                        )
                                      }
                                    )
                                    (C {(read)} {(_input)})
                                    (AndOr
                                      ops: [Op_DAmp]
                                      children: [
                                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} 
                                          {(Lit_Other ']')}
                                        )
                                        (Assignment
                                          keyword: Assign_None
                                          pairs: [
                                            (assign_pair
                                              lhs: (LhsName name:_emptypass)
                                              op: Equal
                                              rhs: {($ VSub_Name '$_input')}
                                              spids: [4486]
                                            )
                                          ]
                                          spids: [4486]
                                        )
                                      ]
                                    )
                                    (Case
                                      to_match: {($ VSub_Name '$_emptypass')}
                                      arms: [
                                        (case_arm
                                          pat_list: [
                                            {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) 
                                              (Lit_Other ']')
                                            }
                                            {(Lit_Other '[') (Nn) (Lit_Other ']')}
                                          ]
                                          action: [
                                            (C {(echo)} {(-n)} 
                                              {
                                                (DQ ('Use a random password? (yes/no) [') 
                                                  ($ VSub_Name '$_random') (']: ')
                                                )
                                              }
                                            )
                                            (C {(read)} {(_input)})
                                            (AndOr
                                              ops: [Op_DAmp]
                                              children: [
                                                (C {(Lit_Other '[')} {(-n)} 
                                                  {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}
                                                )
                                                (Assignment
                                                  keyword: Assign_None
                                                  pairs: [
                                                    (assign_pair
                                                      lhs: (LhsName name:_random)
                                                      op: Equal
                                                      rhs: {(DQ ($ VSub_Name '$_input'))}
                                                      spids: [4538]
                                                    )
                                                  ]
                                                  spids: [4538]
                                                )
                                              ]
                                            )
                                            (Case
                                              to_match: {($ VSub_Name '$_random')}
                                              arms: [
                                                (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: [
                                                    (Assignment
                                                      keyword: Assign_None
                                                      pairs: [
                                                        (assign_pair
                                                          lhs: (LhsName name:passwdtype)
                                                          op: Equal
                                                          rhs: {(DQ (random))}
                                                          spids: [4574]
                                                        )
                                                      ]
                                                      spids: [4574]
                                                    )
                                                    (ControlFlow
                                                      token: <ControlFlow_Break break>
                                                    )
                                                  ]
                                                  spids: [4551 4571 4583 16777215]
                                                )
                                              ]
                                              spids: [4544 4548 4586]
                                            )
                                            (Assignment
                                              keyword: Assign_None
                                              pairs: [
                                                (assign_pair
                                                  lhs: (LhsName name:passwdtype)
                                                  op: Equal
                                                  rhs: {(DQ (yes))}
                                                  spids: [4589]
                                                )
                                              ]
                                              spids: [4589]
                                            )
                                            (AndOr
                                              ops: [Op_DAmp]
                                              children: [
                                                (C {(Lit_Other '[')} {(-n)} 
                                                  {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}
                                                )
                                                (ControlFlow
                                                  token: <ControlFlow_Break break>
                                                )
                                              ]
                                            )
                                            (C {(trap)} {(SQ <'stty echo; exit'>)} {(0)} {(1)} {(2)} {(3)} 
                                              {(15)}
                                            )
                                            (C {(stty)} {(-echo)})
                                            (C {(echo)} {(-n)} {(DQ ('Enter password: '))})
                                            (C {(read)} {(-r)} {(upass)})
                                            (C {(echo) (SQ )})
                                            (C {(echo)} {(-n)} {(DQ ('Enter password again: '))})
                                            (C {(read)} {(-r)} {(_passconfirm)})
                                            (C {(echo)} {(SQ )})
                                            (C {(stty)} {(echo)})
                                            (AndOr
                                              ops: [Op_DAmp]
                                              children: [
                                                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$upass'))} 
                                                  {(-a)} {(-z)} {(DQ ($ VSub_Name '$_passconfirm'))} {(Lit_Other ']')}
                                                )
                                                (ControlFlow
                                                  token: <ControlFlow_Continue continue>
                                                )
                                              ]
                                            )
                                          ]
                                          spids: [4497 4507 4713 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: [
                                            (Assignment
                                              keyword: Assign_None
                                              pairs: [
                                                (assign_pair
                                                  lhs: (LhsName name:passwdtype)
                                                  op: Equal
                                                  rhs: {(DQ (none))}
                                                  spids: [4739]
                                                )
                                              ]
                                              spids: [4739]
                                            )
                                            (Sentence
                                              child: (ControlFlow token:<ControlFlow_Break break>)
                                              terminator: <Op_Semi ';'>
                                            )
                                          ]
                                          spids: [4716 4736 4749 16777215]
                                        )
                                        (case_arm
                                          pat_list: [{(Lit_Other '*')}]
                                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                                          spids: [4752 4753 4763 16777215]
                                        )
                                      ]
                                      spids: [4490 4494 4766]
                                    )
                                    (If
                                      arms: [
                                        (if_arm
                                          cond: [
                                            (Sentence
                                              child: 
                                                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$upass'))} 
                                                  {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$_passconfirm'))} {(Lit_Other ']')}
                                                )
                                              terminator: <Op_Semi ';'>
                                            )
                                          ]
                                          action: [
                                            (C {(echo)} {(DQ ('Passwords did not match!'))})
                                            (ControlFlow
                                              token: <ControlFlow_Continue continue>
                                            )
                                          ]
                                          spids: [16777215 4787]
                                        )
                                      ]
                                      spids: [16777215 4800]
                                    )
                                    (ControlFlow
                                      token: <ControlFlow_Break break>
                                    )
                                  ]
                                  spids: [4455 4806]
                                )
                            )
                          ]
                          spids: [4426 4446 4809 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [4812 4813 4823 16777215]
                        )
                      ]
                      spids: [4397 4401 4826]
                    )
                    (Sentence
                      child: (ControlFlow token:<ControlFlow_Break break>)
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  spids: [4362 4833]
                )
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_disable)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name disableflag>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (no))})
                        spids: [4837 4843]
                      )
                    }
                  spids: [4836]
                )
              ]
              spids: [4836]
            )
            (While
              cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Lock out the account after creation? [') ($ VSub_Name '$_disable') 
                          (']: ')
                        )
                      }
                    )
                    (C {(read)} {(_input)})
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')})
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:_input)
                              op: Equal
                              rhs: {($ VSub_Name '$_disable')}
                              spids: [4883]
                            )
                          ]
                          spids: [4883]
                        )
                      ]
                    )
                    (Case
                      to_match: {($ VSub_Name '$_input')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')}
                            {(Lit_Other '[') (Nn) (Lit_Other ']')}
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:disableflag)
                                  op: Equal
                                  rhs: {(EmptyPart)}
                                  spids: [4907]
                                )
                              ]
                              spids: [4907]
                            )
                          ]
                          spids: [4894 4904 4910 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: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:disableflag)
                                  op: Equal
                                  rhs: {(yes)}
                                  spids: [4936]
                                )
                              ]
                              spids: [4936]
                            )
                          ]
                          spids: [4913 4933 4940 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [4943 4944 4954 16777215]
                        )
                      ]
                      spids: [4887 4891 4957]
                    )
                    (ControlFlow token:<ControlFlow_Break break>)
                  ]
                  spids: [4852 4963]
                )
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_disable)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name disableflag>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (no))})
                        spids: [4981 4987]
                      )
                    }
                  spids: [4980]
                )
              ]
              spids: [4980]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(Username)} 
                  {($ VSub_Name '$username')}
                )
              ]
            )
            (Case
              to_match: {($ VSub_Name '$passwdtype')}
              arms: [
                (case_arm
                  pat_list: [{(yes)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_pass)
                          op: Equal
                          rhs: {(SQ <'*****'>)}
                          spids: [5026]
                        )
                      ]
                      spids: [5026]
                    )
                  ]
                  spids: [5022 5023 5032 16777215]
                )
                (case_arm
                  pat_list: [{(no)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_pass)
                          op: Equal
                          rhs: {(SQ <'<disabled>'>)}
                          spids: [5039]
                        )
                      ]
                      spids: [5039]
                    )
                  ]
                  spids: [5035 5036 5045 16777215]
                )
                (case_arm
                  pat_list: [{(none)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_pass)
                          op: Equal
                          rhs: {(SQ <'<blank>'>)}
                          spids: [5052]
                        )
                      ]
                      spids: [5052]
                    )
                  ]
                  spids: [5048 5049 5058 16777215]
                )
                (case_arm
                  pat_list: [{(random)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:_pass)
                          op: Equal
                          rhs: {(SQ <'<random>'>)}
                          spids: [5065]
                        )
                      ]
                      spids: [5065]
                    )
                  ]
                  spids: [5061 5062 5071 16777215]
                )
              ]
              spids: [5015 5019 5074]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Password))} 
                  {(DQ ($ VSub_Name '$_pass'))}
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ ('Pass Type'))} 
                  {(DQ ($ VSub_Name '$passwdtype'))}
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ ('Full Name'))} 
                  {(DQ ($ VSub_Name '$ugecos'))}
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')})
                (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Uid))} 
                  {(DQ ($ VSub_Name '$uuid'))}
                )
              ]
            )
            (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Class))} 
              {(DQ ($ VSub_Name '$uclass'))}
            )
            (C {(printf)} {(DQ ('%-10s : %s %s') (Lit_Other '\\') (n))} {(DQ (Groups))} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name ulogingroup>
                    suffix_op: 
                      (StringUnary
                        op_id: VTest_ColonHyphen
                        arg_word: {($ VSub_Name '$username')}
                      )
                    spids: [5223 5227]
                  )
                )
              } {(DQ ($ VSub_Name '$ugroups'))}
            )
            (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Home))} 
              {(DQ ($ VSub_Name '$uhome'))}
            )
            (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ ('Home Mode'))} 
              {(DQ ($ VSub_Name '$uhomeperm'))}
            )
            (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Shell))} 
              {(DQ ($ VSub_Name '$ushell'))}
            )
            (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Locked))} 
              {(DQ ($ VSub_Name '$_disable'))}
            )
            (While
              cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(-n)} {(DQ ('OK? (yes/no): '))})
                    (C {(read)} {(_input)})
                    (Case
                      to_match: {($ VSub_Name '$_input')}
                      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: [5333 5343 5351 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: [(C {(add_user)})]
                          spids: [5354 5374 5380 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [5383 5384 5390 16777215]
                        )
                      ]
                      spids: [5326 5330 5393]
                    )
                    (ControlFlow token:<ControlFlow_Break break>)
                  ]
                  spids: [5309 5399]
                )
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [4017]
        )
      spids: [4013 4016]
    )
    (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: [5414 5418]
              )
            }
          spids: [5413]
        )
      ]
      spids: [5413]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:DEFAULTSHELL) op:Equal rhs:{(/bin/sh)} spids:[5420])]
      spids: [5420]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ADDUSERCONF)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name ADDUSERCONF>
                  suffix_op: 
                    (StringUnary
                      op_id: VTest_ColonHyphen
                      arg_word: {(Lit_Slash /) (etc) (Lit_Slash /) (adduser.conf)}
                    )
                  spids: [5425 5432]
                )
              )
            }
          spids: [5423]
        )
      ]
      spids: [5423]
    )
    (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: [5437 5446]
                )
              )
            }
          spids: [5435]
        )
      ]
      spids: [5435]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:MAILCMD)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name MAILCMD>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(mail)})
                  spids: [5451 5455]
                )
              )
            }
          spids: [5449]
        )
      ]
      spids: [5449]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ETCSHELLS)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name ETCSHELLS>
                  suffix_op: 
                    (StringUnary
                      op_id: VTest_ColonHyphen
                      arg_word: {(Lit_Slash /) (etc) (Lit_Slash /) (shells)}
                    )
                  spids: [5460 5467]
                )
              )
            }
          spids: [5458]
        )
      ]
      spids: [5458]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:NOHOME) op:Equal rhs:{(DQ (/nonexistent))} spids:[5470])]
      spids: [5470]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:NOLOGIN) op:Equal rhs:{(DQ (nologin))} spids:[5475])]
      spids: [5475]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:NOLOGIN_PATH)
          op: Equal
          rhs: {(DQ (/usr/sbin/nologin))}
          spids: [5480]
        )
      ]
      spids: [5480]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:GREPCMD)
          op: Equal
          rhs: {(DQ (/usr/bin/grep))}
          spids: [5485]
        )
      ]
      spids: [5485]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:DATECMD) op:Equal rhs:{(DQ (/bin/date))} spids:[5490])]
      spids: [5490]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:username) op:Equal rhs:{(EmptyPart)} spids:[5502])]
      spids: [5502]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:uuid) op:Equal rhs:{(EmptyPart)} spids:[5504])]
      spids: [5504]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:uidstart) op:Equal rhs:{(EmptyPart)} spids:[5506])]
      spids: [5506]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ugecos) op:Equal rhs:{(EmptyPart)} spids:[5508])]
      spids: [5508]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ulogingroup) op:Equal rhs:{(EmptyPart)} spids:[5510])]
      spids: [5510]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:uclass) op:Equal rhs:{(EmptyPart)} spids:[5512])]
      spids: [5512]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:uhome) op:Equal rhs:{(EmptyPart)} spids:[5514])]
      spids: [5514]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:uhomeperm) op:Equal rhs:{(EmptyPart)} spids:[5516])]
      spids: [5516]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:upass) op:Equal rhs:{(EmptyPart)} spids:[5518])]
      spids: [5518]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ushell) op:Equal rhs:{(EmptyPart)} spids:[5520])]
      spids: [5520]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:udotdir) op:Equal rhs:{(/usr/share/skel)} spids:[5522])]
      spids: [5522]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ugroups) op:Equal rhs:{(EmptyPart)} spids:[5525])]
      spids: [5525]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:uexpire) op:Equal rhs:{(EmptyPart)} spids:[5527])]
      spids: [5527]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:upwexpire) op:Equal rhs:{(EmptyPart)} spids:[5529])]
      spids: [5529]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:shells)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(valid_shells)})])
                  left_token: <Left_Backtick '`'>
                  spids: [5533 5535]
                )
              )
            }
          spids: [5531]
        )
      ]
      spids: [5531]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:passwdtype) op:Equal rhs:{(DQ (yes))} spids:[5538])]
      spids: [5538]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:msgfile) op:Equal rhs:{(/etc/adduser.msg)} spids:[5543])]
      spids: [5543]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:msgflag) op:Equal rhs:{(EmptyPart)} spids:[5546])]
      spids: [5546]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:quietflag) op:Equal rhs:{(EmptyPart)} spids:[5548])]
      spids: [5548]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:configflag) op:Equal rhs:{(EmptyPart)} spids:[5550])]
      spids: [5550]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:fflag) op:Equal rhs:{(EmptyPart)} spids:[5552])]
      spids: [5552]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:infile) op:Equal rhs:{(EmptyPart)} spids:[5554])]
      spids: [5554]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:disableflag) op:Equal rhs:{(EmptyPart)} spids:[5556])]
      spids: [5556]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:Dflag) op:Equal rhs:{(EmptyPart)} spids:[5558])]
      spids: [5558]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:Sflag) op:Equal rhs:{(EmptyPart)} spids:[5560])]
      spids: [5560]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:readconfig) op:Equal rhs:{(DQ (yes))} spids:[5562])]
      spids: [5562]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:homeprefix) op:Equal rhs:{(DQ (/home))} spids:[5567])]
      spids: [5567]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:randompass) op:Equal rhs:{(EmptyPart)} spids:[5572])]
      spids: [5572]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:fileline) op:Equal rhs:{(EmptyPart)} spids:[5574])]
      spids: [5574]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:savedpwtype) op:Equal rhs:{(EmptyPart)} spids:[5576])]
      spids: [5576]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:defaultclass) op:Equal rhs:{(EmptyPart)} spids:[5578])]
      spids: [5578]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:defaultLgroup) op:Equal rhs:{(EmptyPart)} spids:[5580])]
      spids: [5580]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:defaultgroups) op:Equal rhs:{(EmptyPart)} spids:[5582])]
      spids: [5582]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:defaultshell)
          op: Equal
          rhs: {(DQ (${ VSub_Name DEFAULTSHELL))}
          spids: [5584]
        )
      ]
      spids: [5584]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:defaultHomePerm)
          op: Equal
          rhs: {(EmptyPart)}
          spids: [5591]
        )
      ]
      spids: [5591]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:procowner)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name procowner>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: 
                      {
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(/usr/bin/id)} {(-u)})])
                          left_token: <Left_Backtick '`'>
                          spids: [5610 5614]
                        )
                      }
                  )
                spids: [5607 5615]
              )
            }
          spids: [5606]
        )
      ]
      spids: [5606]
    )
    (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 the super-user (uid 0) to use this utility.'>)})
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [16777215 5635]
        )
      ]
      spids: [16777215 5649]
    )
    (ForEach
      iter_name: _i
      iter_words: [{($ VSub_Star '$*')}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_i'))} {(Lit_Other '=')} {(DQ (-N))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:readconfig)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [5703]
                        )
                      ]
                      spids: [5703]
                    )
                    (Sentence
                      child: (ControlFlow token:<ControlFlow_Break break>)
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  spids: [16777215 5700]
                )
              ]
              spids: [16777215 5710]
            )
          ]
          spids: [5680 5712]
        )
      spids: [5675 5678]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$readconfig'))} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Subshell
                          child: 
                            (SimpleCommand
                              words: [{(.)} {(${ VSub_Name ADDUSERCONF)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [5748]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [5752]
                                )
                              ]
                            )
                          spids: [5740 5755]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(-r)} {(${ VSub_Name ADDUSERCONF)} {(Lit_Other ']')})
                        (SimpleCommand
                          words: [{(.)} {(${ VSub_Name ADDUSERCONF)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(/dev/null)}
                              spids: [5779]
                            )
                            (Redir
                              op_id: Redir_GreatAnd
                              fd: 2
                              arg_word: {(1)}
                              spids: [5783]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [16777215 5758]
                )
              ]
              spids: [16777215 5787]
            )
          ]
          spids: [16777215 5727]
        )
      ]
      spids: [16777215 5789]
    )
    (ForEach
      iter_name: _switch
      do_arg_iter: T
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {($ VSub_Name '$_switch')}
              arms: [
                (case_arm
                  pat_list: [{(-L)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:defaultclass)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$2'))}
                          spids: [5819]
                        )
                      ]
                      spids: [5819]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [5815 5816 5831 16777215]
                )
                (case_arm
                  pat_list: [{(-C)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:configflag)
                          op: Equal
                          rhs: {(yes)}
                          spids: [5838]
                        )
                      ]
                      spids: [5838]
                    )
                    (C {(shift)})
                  ]
                  spids: [5834 5835 5845 16777215]
                )
                (case_arm
                  pat_list: [{(-D)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:Dflag)
                          op: Equal
                          rhs: {(yes)}
                          spids: [5852]
                        )
                      ]
                      spids: [5852]
                    )
                    (C {(shift)})
                  ]
                  spids: [5848 5849 5859 16777215]
                )
                (case_arm
                  pat_list: [{(-E)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:disableflag)
                          op: Equal
                          rhs: {(yes)}
                          spids: [5866]
                        )
                      ]
                      spids: [5866]
                    )
                    (C {(shift)})
                  ]
                  spids: [5862 5863 5873 16777215]
                )
                (case_arm
                  pat_list: [{(-k)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:udotdir)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$2'))}
                          spids: [5880]
                        )
                      ]
                      spids: [5880]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [5876 5877 5892 16777215]
                )
                (case_arm
                  pat_list: [{(-f)}]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$2'))} {(KW_Bang '!') (Lit_Other '=')} 
                          {(DQ (-))} {(Lit_Other ']')}
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:infile)
                              op: Equal
                              rhs: {(DQ ($ VSub_Number '$2'))}
                              spids: [5916]
                            )
                          ]
                          spids: [5916]
                        )
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:fflag)
                          op: Equal
                          rhs: {(yes)}
                          spids: [5922]
                        )
                      ]
                      spids: [5922]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [5895 5896 5932 16777215]
                )
                (case_arm
                  pat_list: [{(-g)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:defaultLgroup)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$2'))}
                          spids: [5939]
                        )
                      ]
                      spids: [5939]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [5935 5936 5951 16777215]
                )
                (case_arm
                  pat_list: [{(-G)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:defaultgroups)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$2'))}
                          spids: [5958]
                        )
                      ]
                      spids: [5958]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [5954 5955 5970 16777215]
                )
                (case_arm
                  pat_list: [{(-h)}]
                  action: [(C {(show_usage)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)})]
                  spids: [5973 5974 5985 16777215]
                )
                (case_arm
                  pat_list: [{(-d)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:homeprefix)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$2'))}
                          spids: [5992]
                        )
                      ]
                      spids: [5992]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [5988 5989 6004 16777215]
                )
                (case_arm
                  pat_list: [{(-m)}]
                  action: [
                    (Case
                      to_match: {(DQ ($ VSub_Number '$2'))}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')}
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:msgflag)
                                  op: Equal
                                  rhs: {(EmptyPart)}
                                  spids: [6029]
                                )
                              ]
                              spids: [6029]
                            )
                          ]
                          spids: [6020 6026 6032 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:msgflag)
                                  op: Equal
                                  rhs: {(yes)}
                                  spids: [6039]
                                )
                              ]
                              spids: [6039]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:msgfile)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Number '$2'))}
                                  spids: [6043]
                                )
                              ]
                              spids: [6043]
                            )
                          ]
                          spids: [6035 6036 6049 16777215]
                        )
                      ]
                      spids: [6011 6017 6052]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [6007 6008 6061 16777215]
                )
                (case_arm
                  pat_list: [{(-M)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:defaultHomePerm)
                          op: Equal
                          rhs: {($ VSub_Number '$2')}
                          spids: [6068]
                        )
                      ]
                      spids: [6068]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [6064 6065 6078 16777215]
                )
                (case_arm
                  pat_list: [{(-N)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:readconfig)
                          op: Equal
                          rhs: {(EmptyPart)}
                          spids: [6085]
                        )
                      ]
                      spids: [6085]
                    )
                    (C {(shift)})
                  ]
                  spids: [6081 6082 6091 16777215]
                )
                (case_arm
                  pat_list: [{(-w)}]
                  action: [
                    (Case
                      to_match: {(DQ ($ VSub_Number '$2'))}
                      arms: [
                        (case_arm
                          pat_list: [{(no)} {(none)} {(random)} {(yes)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:passwdtype)
                                  op: Equal
                                  rhs: {($ VSub_Number '$2')}
                                  spids: [6117]
                                )
                              ]
                              spids: [6117]
                            )
                          ]
                          spids: [6107 6114 6121 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [
                            (C {(show_usage)})
                            (ControlFlow
                              token: <ControlFlow_Exit exit>
                              arg_word: {(1)}
                            )
                          ]
                          spids: [6124 6125 6136 16777215]
                        )
                      ]
                      spids: [6098 6104 6139]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [6094 6095 6148 16777215]
                )
                (case_arm
                  pat_list: [{(-q)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:quietflag)
                          op: Equal
                          rhs: {(yes)}
                          spids: [6155]
                        )
                      ]
                      spids: [6155]
                    )
                    (C {(shift)})
                  ]
                  spids: [6151 6152 6162 16777215]
                )
                (case_arm
                  pat_list: [{(-s)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:defaultshell)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(fullpath_from_shell)} {($ VSub_Number '$2')})]
                                    )
                                  left_token: <Left_Backtick '`'>
                                  spids: [6171 6175]
                                )
                              )
                            }
                          spids: [6169]
                        )
                      ]
                      spids: [6169]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [6165 6166 6185 16777215]
                )
                (case_arm
                  pat_list: [{(-S)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:Sflag)
                          op: Equal
                          rhs: {(yes)}
                          spids: [6192]
                        )
                      ]
                      spids: [6192]
                    )
                    (C {(shift)})
                  ]
                  spids: [6188 6189 6199 16777215]
                )
                (case_arm
                  pat_list: [{(-u)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:uidstart)
                          op: Equal
                          rhs: {($ VSub_Number '$2')}
                          spids: [6206]
                        )
                      ]
                      spids: [6206]
                    )
                    (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
                    (C {(shift)})
                  ]
                  spids: [6202 6203 6216 16777215]
                )
              ]
              spids: [5808 5812 6219]
            )
          ]
          spids: [5805 6221]
        )
      spids: [16777215 16777215]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$infile'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(input_from_file)})]
                  spids: [16777215 6262]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$infile'))} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-r)} {(DQ ($ VSub_Name '$infile'))} 
                                  {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (SimpleCommand
                              words: [{(input_from_file)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Less
                                  fd: 16777215
                                  arg_word: {($ VSub_Name '$infile')}
                                  spids: [6302]
                                )
                              ]
                            )
                          ]
                          spids: [16777215 6297]
                        )
                      ]
                      else_action: [
                        (C {(err)} 
                          {
                            (DQ ('File (') ($ VSub_Name '$infile') 
                              (') is unreadable or does not exist.')
                            )
                          }
                        )
                      ]
                      spids: [6307 6319]
                    )
                  ]
                  spids: [6268 6281]
                )
              ]
              spids: [16777215 6322]
            )
          ]
          spids: [16777215 6246]
        )
      ]
      else_action: [
        (C {(input_interactive)})
        (While
          cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
          body: 
            (DoGroup
              children: [
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: 
                            (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} 
                              {(Lit_Other ']')}
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [(C {(echo)} {(-n)} {(DQ ('Add another user? (yes/no): '))})]
                      spids: [16777215 6352]
                    )
                  ]
                  else_action: [
                    (C {(echo)} {(-n)} {(DQ ('Re-edit the default configuration? (yes/no): '))})
                  ]
                  spids: [6364 6376]
                )
                (C {(read)} {(_input)})
                (Case
                  to_match: {($ VSub_Name '$_input')}
                  arms: [
                    (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: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:uidstart)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [(C {(get_nextuid)} {($ VSub_Name '$uidstart')})]
                                      )
                                    left_token: <Left_Backtick '`'>
                                    spids: [6415 6419]
                                  )
                                }
                              spids: [6414]
                            )
                          ]
                          spids: [6414]
                        )
                        (C {(input_interactive)})
                        (ControlFlow token:<ControlFlow_Continue continue>)
                      ]
                      spids: [6391 6411 6428 16777215]
                    )
                    (case_arm
                      pat_list: [
                        {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')}
                        {(Lit_Other '[') (Nn) (Lit_Other ']')}
                      ]
                      action: [(C {(echo)} {(DQ ('Goodbye!'))})]
                      spids: [6431 6441 6451 16777215]
                    )
                    (case_arm
                      pat_list: [{(Lit_Other '*')}]
                      action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                      spids: [6454 6455 6461 16777215]
                    )
                  ]
                  spids: [6384 6388 6464]
                )
                (ControlFlow token:<ControlFlow_Break break>)
              ]
              spids: [6336 6470]
            )
        )
      ]
      spids: [6324 6472]
    )
  ]
)