(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PATH)
          op: assign_op.Equal
          rhs: {</sbin> <Id.Lit_Other ':'> </bin> <Id.Lit_Other ':'> </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: 
        (command.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 '$('>
                          command_list: (command.CommandList children:[(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 '$('>
                          command_list: (command.CommandList children:[(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.Redir
                                  op: <Id.Redir_Great '>'>
                                  fd: -1
                                  arg_word: {</dev/null>}
                                )
                                (redir.Redir
                                  op: <Id.Redir_GreatAnd '2>&'>
                                  fd: 2
                                  arg_word: {<1>}
                                )
                              ]
                            )
                            (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 '$('>
                          command_list: (command.CommandList children:[(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 '$('>
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (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 '$('>
                                  command_list: 
                                    (command.CommandList
                                      children: [(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 '$('>
                                            command_list: 
                                              (command.CommandList
                                                children: [(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.Redir
                          op: <Id.Redir_Great '>'>
                          fd: -1
                          arg_word: {</dev/null>}
                        )
                        (redir.Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          fd: 2
                          arg_word: {<1>}
                        )
                      ]
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: <Id.Left_DollarParen '$('>
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (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.Redir
                                          op: <Id.Redir_Great '2>'>
                                          fd: 2
                                          arg_word: {</dev/null>}
                                        )
                                      ]
                                    )
                                  ]
                                  negated: T
                                )
                                (command.Pipeline
                                  children: [
                                    (command.Simple
                                      words: [
                                        {<mount>}
                                        {<-n>}
                                        {<-o>}
                                        {<remount> <Id.Lit_Comma ','> <ro>}
                                        {</>}
                                      ]
                                      redirects: [
                                        (redir.Redir
                                          op: <Id.Redir_Great '2>'>
                                          fd: 2
                                          arg_word: {</dev/null>}
                                        )
                                      ]
                                    )
                                  ]
                                  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_Other ':'> <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.Redir
                              op: <Id.Redir_Great '2>'>
                              fd: 2
                              arg_word: {</dev/null>}
                            )
                          ]
                        )
                      ]
                      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: 
        (command.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 '$('>
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (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.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
            )
            (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.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<3>})
          ]
          spids: [2179 2180 2198 -1]
        )
      ]
    )
    (C {<Id.Lit_Other ':'>})
  ]
)