(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PATH)
          op: assign_op.Equal
          rhs: {<'/sbin'> <Id.Lit_Colon ':'> <'/bin'> <Id.Lit_Colon ':'> <'/usr/bin'>}
          spids: [43]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FSCK_LOGFILE)
          op: assign_op.Equal
          rhs: {<'/var/log/fsck/checkroot'>}
          spids: [50]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$FSCKFIX'))} {<Id.Lit_RBracket ']'>})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:FSCKFIX)
              op: assign_op.Equal
              rhs: {<no>}
              spids: [63]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$SULOGIN'))} {<Id.Lit_RBracket ']'>})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:SULOGIN)
              op: assign_op.Equal
              rhs: {<no>}
              spids: [76]
            )
          ]
        )
      ]
    )
    (C {<.>} {<'/lib/init/vars.sh'>})
    (C {<.>} {<'/lib/lsb/init-functions'>})
    (C {<.>} {<'/lib/init/mount-functions.sh'>})
    (command.ShFunction
      name: do_start
      body: 
        (BraceGroup
          children: [
            (C {<trap>} {(DQ )} {<INT>})
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$SULOGIN'))} 
                  {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                )
                (C {<sulogin>} {<-t>} {<30>} {($ Id.VSub_DollarName '$CONSOLE')})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:KERNEL)
                  op: assign_op.Equal
                  rhs: 
                    {(DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<uname>} {<-s>})))}
                  spids: [158]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MACHINE)
                  op: assign_op.Equal
                  rhs: 
                    {(DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<uname>} {<-m>})))}
                  spids: [168]
                )
              ]
            )
            (C {<read_fstab>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ENABLE_SWAP)
                  op: assign_op.Equal
                  rhs: {<no>}
                  spids: [199]
                )
              ]
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$KERNEL'))}
              arms: [
                (case_arm
                  pat_list: [{<Linux>}]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$NOSWAP'))} 
                              {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                            )
                          ]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} 
                                  {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>}
                                )
                                (C {<log_warning_msg>} 
                                  {(DQ <'Not activating swap as requested via bootoption noswap.'>)}
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ENABLE_SWAP)
                                  op: assign_op.Equal
                                  rhs: {<no>}
                                  spids: [255]
                                )
                              ]
                            )
                          ]
                          spids: [216 231]
                        )
                      ]
                      else_action: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$swap_on_lv'))} 
                                  {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                                )
                              ]
                              action: [
                                (command.AndOr
                                  ops: [Id.Op_DPipe]
                                  children: [
                                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} 
                                      {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>}
                                    )
                                    (C {<log_warning_msg>} 
                                      {(DQ <'Not activating swap on logical volume.'>)}
                                    )
                                  ]
                                )
                              ]
                              spids: [262 277]
                            )
                            (if_arm
                              cond: [
                                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$swap_on_file'))} 
                                  {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                                )
                              ]
                              action: [
                                (command.AndOr
                                  ops: [Id.Op_DPipe]
                                  children: [
                                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} 
                                      {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>}
                                    )
                                    (C {<log_warning_msg>} {(DQ <'Not activating swap on swapfile.'>)})
                                  ]
                                )
                              ]
                              spids: [301 316]
                            )
                          ]
                          else_action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ENABLE_SWAP)
                                  op: assign_op.Equal
                                  rhs: {<yes>}
                                  spids: [343]
                                )
                              ]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [212 213 353 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ENABLE_SWAP)
                          op: assign_op.Equal
                          rhs: {<yes>}
                          spids: [360]
                        )
                      ]
                    )
                  ]
                  spids: [356 357 364 -1]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$ENABLE_SWAP'))} 
                      {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} 
                              {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>}
                            )
                          ]
                          action: [
                            (C {<log_action_begin_msg>} {(DQ <'Activating swap'>)})
                            (command.Simple
                              words: [{<swapon>} {<-a>} {<-e>}]
                              redirects: [
                                (redir
                                  op: <Id.Redir_Great '>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<'/dev/null'>}
                                )
                                (redir
                                  op: <Id.Redir_GreatAnd '2>&'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {<1>}
                                )
                              ]
                              do_fork: T
                            )
                            (C {<log_action_end_msg>} {($ Id.VSub_QMark '$?')})
                          ]
                          spids: [388 403]
                        )
                      ]
                      else_action: [
                        (C {<log_daemon_msg>} {(DQ <'Activating swap'>)})
                        (C {<swapon>} {<-a>} {<-v>})
                        (C {<log_end_msg>} {($ Id.VSub_QMark '$?')})
                      ]
                    )
                  ]
                  spids: [370 385]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:KERNEL)
                  op: assign_op.Equal
                  rhs: {(DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<uname>})))}
                  spids: [492]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$rootcheck'))} 
                          {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                        )
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$KERNEL'))} 
                          {<Id.Lit_Equals '='>} {<Linux>} {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ddev)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<mountpoint>} {<-qx>} {($ Id.VSub_DollarName '$rootdev')})
                                )
                              )
                            }
                          spids: [532]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:rdev)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<mountpoint>} {<-d>} {<'/'>})
                                )
                              )
                            }
                          spids: [544]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$ddev'))} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$rdev'))} {<Id.Lit_RBracket ']'>}
                                )
                                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$ddev'))} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <'4:0'>)} {<Id.Lit_RBracket ']'>}
                                )
                              ]
                            )
                          ]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (C {<Id.Lit_LBracket '['>} 
                                      {
                                        (DQ 
                                          (command_sub
                                            left_token: <Id.Left_DollarParen '$('>
                                            child: (C {<mountpoint>} {<-qx>} {<'/dev/root'>})
                                          )
                                        )
                                      } {<Id.Lit_Equals '='>} {(DQ <'4:0'>)} {<Id.Lit_RBracket ']'>}
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:rootdev)
                                          op: assign_op.Equal
                                          rhs: {<'/dev/root'>}
                                          spids: [620]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [594 617]
                                )
                              ]
                              else_action: [
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.AndOr
                                          ops: [Id.Op_DAmp Id.Op_DAmp]
                                          children: [
                                            (C {<rm>} {<-f>} {<'/run/rootdev'>})
                                            (C {<mknod>} {<-m>} {<600>} {<'/run/rootdev'>} {<b>} 
                                              {
                                                (braced_var_sub
                                                  token: <Id.VSub_Name rdev>
                                                  suffix_op: 
                                                    (suffix_op.Unary
                                                      op_id: Id.VOp1_Percent
                                                      arg_word: {<':*'>}
                                                    )
                                                )
                                              } 
                                              {
                                                (braced_var_sub
                                                  token: <Id.VSub_Name rdev>
                                                  suffix_op: 
                                                    (suffix_op.Unary
                                                      op_id: Id.VOp1_Pound
                                                      arg_word: {<'*:'>}
                                                    )
                                                )
                                              }
                                            )
                                            (C {<Id.Lit_LBracket '['>} {<-e>} {<'/run/rootdev'>} 
                                              {<Id.Lit_RBracket ']'>}
                                            )
                                          ]
                                        )
                                      ]
                                      action: [
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:rootdev)
                                              op: assign_op.Equal
                                              rhs: {<'/run/rootdev'>}
                                              spids: [679]
                                            )
                                          ]
                                        )
                                      ]
                                      spids: [627 676]
                                    )
                                  ]
                                  else_action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:rootfatal)
                                          op: assign_op.Equal
                                          rhs: {<yes>}
                                          spids: [686]
                                        )
                                      ]
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [556 591]
                        )
                      ]
                    )
                  ]
                  spids: [500 529]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$rootfatal'))} 
                      {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (C {<log_failure_msg>} 
                      {
                        (DQ <'The device node '> ($ Id.VSub_DollarName '$rootdev') 
                          <' for the root filesystem is missing or incorrect \n'> <'or there is no entry for the root filesystem listed in /etc/fstab. \n'> 
                          <'The system is also unable to create a temporary node in /run. \n'> <'This means you have to fix the problem manually.'>
                        )
                      }
                    )
                    (C {<log_warning_msg>} 
                      {
                        (DQ <'A maintenance shell will now be started. \n'> 
                          <'CONTROL-D will terminate this shell and restart the system.'>
                        )
                      }
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Pipeline
                              children: [(C {<sulogin>} {($ Id.VSub_DollarName '$CONSOLE')})]
                              negated: T
                            )
                          ]
                          action: [
                            (C {<log_failure_msg>} 
                              {
                                (DQ <'Attempt to start maintenance shell failed. \n'> 
                                  <'Will restart in 5 seconds.'>
                                )
                              }
                            )
                            (C {<sleep>} {<5>})
                          ]
                          spids: [757 766]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} 
                          {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>}
                        )
                        (C {<log_action_msg>} {(DQ <'Will now restart'>)})
                      ]
                    )
                    (C {<reboot>} {<-f>})
                  ]
                  spids: [715 730]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FSCKCODE)
                  op: assign_op.Equal
                  rhs: {<0>}
                  spids: [873]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {<-e>} {<'/run/initramfs/fsck-root'>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:rootcheck)
                          op: assign_op.Equal
                          rhs: {<no>}
                          spids: [892]
                        )
                      ]
                    )
                  ]
                  spids: [878 889]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [(C {<is_fastboot_active>})]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$rootcheck'))} 
                          {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                        )
                        (C {<log_warning_msg>} 
                          {(DQ <'Fast boot enabled, so skipping root file system check.'>)}
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:rootcheck)
                          op: assign_op.Equal
                          rhs: {<no>}
                          spids: [929]
                        )
                      ]
                    )
                  ]
                  spids: [900 905]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Simple
                      words: [{<which>} {<findmnt>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/null'>}
                        )
                        (redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: (C {<findmnt>} {<-f>} {<-n>} {<-o>} {<FSTYPE>} {<'/'>})
                                  )
                                )
                              } {<Id.Lit_Equals '='>} {(DQ <btrfs>)} {<Id.Lit_RBracket ']'>}
                            )
                          ]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$rootcheck'))} 
                                  {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                                )
                                (C {<log_warning_msg>} 
                                  {(DQ <'btrfs root detected, so skipping root file system check.'>)}
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:rootcheck)
                                  op: assign_op.Equal
                                  rhs: {<no>}
                                  spids: [1006]
                                )
                              ]
                            )
                          ]
                          spids: [953 982]
                        )
                      ]
                    )
                  ]
                  spids: [937 950]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$rootcheck'))} 
                      {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.AndOr
                              ops: [Id.Op_DAmp Id.Op_DAmp]
                              children: [
                                (command.Pipeline
                                  children: [
                                    (C {<mount>} {<-n>} {<-o>} {<remount> <Id.Lit_Comma ','> <ro>} 
                                      {($ Id.VSub_DollarName '$rootdev')} {<'/'>}
                                    )
                                  ]
                                  negated: T
                                )
                                (command.Pipeline
                                  children: [
                                    (command.Simple
                                      words: [
                                        {<mount>}
                                        {<-n>}
                                        {<-o>}
                                        {<remount> <Id.Lit_Comma ','> <ro>}
                                        {<-t>}
                                        {<dummytype>}
                                        {($ Id.VSub_DollarName '$rootdev')}
                                        {<'/'>}
                                      ]
                                      redirects: [
                                        (redir
                                          op: <Id.Redir_Great '2>'>
                                          loc: (redir_loc.Fd fd:2)
                                          arg: {<'/dev/null'>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                  ]
                                  negated: T
                                )
                                (command.Pipeline
                                  children: [
                                    (command.Simple
                                      words: [
                                        {<mount>}
                                        {<-n>}
                                        {<-o>}
                                        {<remount> <Id.Lit_Comma ','> <ro>}
                                        {<'/'>}
                                      ]
                                      redirects: [
                                        (redir
                                          op: <Id.Redir_Great '2>'>
                                          loc: (redir_loc.Fd fd:2)
                                          arg: {<'/dev/null'>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                  ]
                                  negated: T
                                )
                              ]
                            )
                          ]
                          action: [
                            (C {<log_failure_msg>} 
                              {
                                (DQ 
                                  <
'Cannot check root file system because it is not mounted read-only.'
                                  >
                                )
                              }
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:rootcheck)
                                  op: assign_op.Equal
                                  rhs: {<no>}
                                  spids: [1166]
                                )
                              ]
                            )
                          ]
                          spids: [1087 1156]
                        )
                      ]
                    )
                  ]
                  spids: [1017 1032]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$rootcheck'))} 
                      {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (C {<Id.Lit_LBracket '['>} {<-f>} {<'/forcefsck'>} 
                                  {<Id.Lit_RBracket ']'>}
                                )
                                (C {<grep>} {<-q>} {<-s>} {<-w>} {<-i>} {(DQ <forcefsck>)} 
                                  {<'/proc/cmdline'>}
                                )
                              ]
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:force)
                                  op: assign_op.Equal
                                  rhs: {(DQ <-f>)}
                                  spids: [1239]
                                )
                              ]
                            )
                          ]
                          spids: [1207 1236]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:force)
                              op: assign_op.Equal
                              rhs: {(DQ )}
                              spids: [1248]
                            )
                          ]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$FSCKFIX'))} 
                              {<Id.Lit_Equals '='>} {<yes>} {<Id.Lit_RBracket ']'>}
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:fix)
                                  op: assign_op.Equal
                                  rhs: {(DQ <-y>)}
                                  spids: [1275]
                                )
                              ]
                            )
                          ]
                          spids: [1257 1272]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:fix)
                              op: assign_op.Equal
                              rhs: {(DQ <-a>)}
                              spids: [1284]
                            )
                          ]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:spinner)
                          op: assign_op.Equal
                          rhs: {(DQ <-C>)}
                          spids: [1294]
                        )
                      ]
                    )
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$TERM'))}
                      arms: [
                        (case_arm
                          pat_list: [{<dumb>} {<network>} {<unknown>} {(DQ )}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:spinner)
                                  op: assign_op.Equal
                                  rhs: {(DQ )}
                                  spids: [1320]
                                )
                              ]
                            )
                          ]
                          spids: [1309 1317 1324 -1]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<Id.Lit_LBracket '['>} 
                              {(DQ (${ Id.VSub_Name KERNEL) <':'> (${ Id.VSub_Name MACHINE))} {<Id.Lit_Equals '='>} {<Linux> <Id.Lit_Colon ':'> <s390x>} {<Id.Lit_RBracket ']'>}
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:spinner)
                                  op: assign_op.Equal
                                  rhs: {(DQ )}
                                  spids: [1360]
                                )
                              ]
                            )
                          ]
                          spids: [1334 1357]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} 
                              {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>}
                            )
                          ]
                          action: [
                            (C {<log_action_begin_msg>} {(DQ <'Checking root file system'>)})
                            (C {<logsave>} {<-s>} {($ Id.VSub_DollarName '$FSCK_LOGFILE')} {<fsck>} 
                              {($ Id.VSub_DollarName '$spinner')} {($ Id.VSub_DollarName '$force')} {($ Id.VSub_DollarName '$fix')} {<-t>} 
                              {($ Id.VSub_DollarName '$roottype')} {($ Id.VSub_DollarName '$rootdev')}
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:FSCKCODE)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_QMark '$?')}
                                  spids: [1416]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$FSCKCODE'))} 
                                      {<Id.Lit_Equals '='>} {<0>} {<Id.Lit_RBracket ']'>}
                                    )
                                  ]
                                  action: [(C {<log_action_end_msg>} {<0>})]
                                  spids: [1420 1435]
                                )
                              ]
                              else_action: [
                                (C {<log_action_end_msg>} {<1>} 
                                  {(DQ <'code '> ($ Id.VSub_DollarName '$FSCKCODE'))}
                                )
                              ]
                            )
                          ]
                          spids: [1370 1385]
                        )
                      ]
                      else_action: [
                        (C {<log_daemon_msg>} {(DQ <'Will now check root file system'>)})
                        (C {<logsave>} {<-s>} {($ Id.VSub_DollarName '$FSCK_LOGFILE')} {<fsck>} 
                          {($ Id.VSub_DollarName '$spinner')} {($ Id.VSub_DollarName '$force')} {($ Id.VSub_DollarName '$fix')} {<-V>} {<-t>} 
                          {($ Id.VSub_DollarName '$roottype')} {($ Id.VSub_DollarName '$rootdev')}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:FSCKCODE)
                              op: assign_op.Equal
                              rhs: {($ Id.VSub_QMark '$?')}
                              spids: [1492]
                            )
                          ]
                        )
                        (C {<log_end_msg>} {($ Id.VSub_DollarName '$FSCKCODE')})
                      ]
                    )
                  ]
                  spids: [1189 1204]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$FSCKCODE'))} {<-eq>} {<32>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [(C {<log_warning_msg>} {(DQ <'File system check was interrupted by user'>)})]
                  spids: [1540 1555]
                )
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$FSCKCODE'))} {<-gt>} {<3>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (C {<log_failure_msg>} 
                      {
                        (DQ 
                          <
'An automatic file system check (fsck) of the root filesystem failed. \n'
                          > <'A manual fsck must be performed, then the system restarted. \n'> 
                          <'The fsck should be performed in maintenance mode with the \n'> <'root filesystem mounted in read-only mode.'>
                        )
                      }
                    )
                    (C {<log_warning_msg>} 
                      {
                        (DQ <'The root filesystem is currently mounted in read-only mode. \n'> 
                          <'A maintenance shell will now be started. \n'> <'After performing system maintenance, press CONTROL-D \n'> 
                          <'to terminate the maintenance shell and restart the system.'>
                        )
                      }
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Pipeline
                              children: [(C {<sulogin>} {($ Id.VSub_DollarName '$CONSOLE')})]
                              negated: T
                            )
                          ]
                          action: [
                            (C {<log_failure_msg>} 
                              {
                                (DQ <'Attempt to start maintenance shell failed. \n'> 
                                  <'Will restart in 5 seconds.'>
                                )
                              }
                            )
                            (C {<sleep>} {<5>})
                          ]
                          spids: [1615 1624]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} 
                          {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>}
                        )
                        (C {<log_action_msg>} {(DQ <'Will now restart'>)})
                      ]
                    )
                    (C {<reboot>} {<-f>})
                  ]
                  spids: [1565 1580]
                )
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$FSCKCODE'))} {<-gt>} {<1>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (C {<log_failure_msg>} 
                      {
                        (DQ <'The file system check corrected errors on the root partition \n'> 
                          <'but requested that the system be restarted.'>
                        )
                      }
                    )
                    (C {<log_warning_msg>} {(DQ <'The system will be restarted in 5 seconds.'>)})
                    (C {<sleep>} {<5>})
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} 
                          {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>}
                        )
                        (C {<log_action_msg>} {(DQ <'Will now restart'>)})
                      ]
                    )
                    (C {<reboot>} {<-f>})
                  ]
                  spids: [1669 1684]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {<mount>}
                            {<-n>}
                            {<-o>}
                            {<remount> <Id.Lit_Comma ','> ($ Id.VSub_DollarName '$rootopts') 
                              <Id.Lit_Comma ','> ($ Id.VSub_DollarName '$rootmode')
                            }
                            {($ Id.VSub_DollarName '$fstabroot')}
                            {<'/'>}
                          ]
                          redirects: [
                            (redir
                              op: <Id.Redir_Great '2>'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      negated: T
                    )
                  ]
                  action: [
                    (C {<mount>} {<-n>} {<-o>} 
                      {<remount> <Id.Lit_Comma ','> ($ Id.VSub_DollarName '$rootopts') 
                        <Id.Lit_Comma ','> ($ Id.VSub_DollarName '$rootmode')
                      } {<'/'>}
                    )
                  ]
                  spids: [1761 1785]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$rootmode'))} 
                          {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <ro>)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<mtab_migrate>})]
                  spids: [1819 1837]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DAmp]
                      children: [
                        (C {<selinux_enabled>})
                        (C {<Id.Lit_LBracket '['>} {<-x>} {<'/sbin/restorecon'>} {<Id.Lit_RBracket ']'>})
                        (C {<Id.Lit_LBracket '['>} {<-r>} {<'/etc/mtab'>} {<Id.Lit_RBracket ']'>})
                      ]
                    )
                  ]
                  action: [(C {<restorecon>} {<'/etc/mtab'>})]
                  spids: [1847 1872]
                )
              ]
            )
            (C {<rm>} {<-f>} {<'/run/rootdev'>})
            (C {<'/etc/init.d/mountkernfs.sh'>} {<reload>})
            (C {<'/etc/init.d/mountdevsubfs.sh'>} {<reload>})
          ]
        )
    )
    (command.ShFunction
      name: do_status
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:rootrw)
                  op: assign_op.Equal
                  rhs: {<false>}
                  spids: [1945]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:swapon)
                  op: assign_op.Equal
                  rhs: {<false>}
                  spids: [1949]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {<Id.Lit_LBracket '['>} {<-f>} {<'/etc/mtab'>} {<Id.Lit_RBracket ']'>})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {<grep>} {(DQ <' / '>)} {<'/etc/mtab'>})
                                    (C {<grep>} {<-q>} {<rw>})
                                  ]
                                  negated: F
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:rootrw)
                                  op: assign_op.Equal
                                  rhs: {<true>}
                                  spids: [1990]
                                )
                              ]
                            )
                          ]
                          spids: [1968 1987]
                        )
                      ]
                    )
                  ]
                  spids: [1953 1965]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-f>} {<'/proc/swaps'>} {<Id.Lit_RBracket ']'>})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} 
                                  {
                                    (DQ 
                                      (command_sub
                                        left_token: <Id.Left_DollarParen '$('>
                                        child: 
                                          (command.Pipeline
                                            children: [
                                              (C {<cat>} {<'/proc/swaps'>})
                                              (C {<grep>} {<-v>} {<Id.Lit_Other '^'> <Filename>})
                                            ]
                                            negated: F
                                          )
                                      )
                                    )
                                  } {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:swapon)
                                  op: assign_op.Equal
                                  rhs: {<true>}
                                  spids: [2042]
                                )
                              ]
                            )
                          ]
                          spids: [2015 2039]
                        )
                      ]
                    )
                  ]
                  spids: [2000 2012]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {<Id.Lit_LBracket '['>} {<true>} {<Id.Lit_Equals '='>} 
                              {(DQ ($ Id.VSub_DollarName '$rootrw'))} {<Id.Lit_RBracket ']'>}
                            )
                            (C {<Id.Lit_LBracket '['>} {<true>} {<Id.Lit_Equals '='>} 
                              {(DQ ($ Id.VSub_DollarName '$swapon'))} {<Id.Lit_RBracket ']'>}
                            )
                          ]
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})]
                  spids: [2052 2082]
                )
              ]
              else_action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<4>})]
            )
          ]
        )
    )
    (command.Case
      to_match: {(DQ ($ Id.VSub_Number '$1'))}
      arms: [
        (case_arm
          pat_list: [{<start>} {(DQ )}]
          action: [(C {<do_start>})]
          spids: [2112 2116 2122 -1]
        )
        (case_arm
          pat_list: [{<restart>} {<reload>} {<force-reload>}]
          action: [
            (command.Simple
              words: [
                {<echo>}
                {(DQ <'Error: argument \''> ($ Id.VSub_Number '$1') <'\' not supported'>)}
              ]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<3>})
          ]
          spids: [2125 2130 2150 -1]
        )
        (case_arm pat_list:[{<stop>}] spids:[2153 2154 2161 -1])
        (case_arm
          pat_list: [{<status>}]
          action: [
            (C {<do_status>})
            (command.ControlFlow
              token: <Id.ControlFlow_Exit exit>
              arg_word: {($ Id.VSub_QMark '$?')}
            )
          ]
          spids: [2164 2165 2176 -1]
        )
        (case_arm
          pat_list: [{<Id.Lit_Star '*'>}]
          action: [
            (command.Simple
              words: [{<echo>} {(DQ <'Usage: checkroot.sh [start|stop]'>)}]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<3>})
          ]
          spids: [2179 2180 2198 -1]
        )
      ]
    )
    (C {<Id.Lit_Colon ':'>})
  ]
)