(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {($ Id.VSub_Pound '$#')} {(-ne)} {(3)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:19)
            )
          ]
          action: [
            (command.Simple
              words: [
                {(echo)}
                {
                  (DQ ('Usage: ') ($ Id.VSub_Number '$0') 
                    (' /sbin/depmod <kernelrelease> <symbolprefix>')
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:32)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:36)
              arg_word: {(1)}
            )
          ]
          spids: [10 21]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DEPMOD)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [42]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:KERNELRELEASE)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$2')}
          spids: [45]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SYMBOL_PREFIX)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$3')}
          spids: [48]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.Pipeline
                  children: [
                    (C {(test)} {(-r)} {(System.map)} {(-a)} {(-x)} {(DQ ($ Id.VSub_DollarName '$DEPMOD'))})
                  ]
                  negated: T
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:69)
            )
          ]
          action: [
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:74)
              arg_word: {(0)}
            )
          ]
          spids: [52 71]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$SYMBOL_PREFIX'))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:96)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:release)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:102)
                        command_list: 
                          (command.CommandList
                            children: [(C {(DQ ($ Id.VSub_DollarName '$DEPMOD'))} {(--version)})]
                          )
                      )
                    }
                  spids: [101]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:package)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:112)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(echo)} {(DQ ($ Id.VSub_DollarName '$release'))})
                                  (C {(cut)} {(-d) (SQ (Token id:Id.Lit_Chars val:' ' span_id:125))} 
                                    {(-f)} {(1)}
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [111]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(test)} {(DQ ($ Id.VSub_DollarName '$package'))} {(Id.Lit_Equals '=')} 
                          {(DQ (module-init-tools))}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:147)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:version)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:153)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {(DQ ($ Id.VSub_DollarName '$release'))})
                                          (C {(cut)} 
                                            {(-d) (SQ (Token id:Id.Lit_Chars val:' ' span_id:166))} {(-f)} {(2)}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [152]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:later)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:176)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(printf)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:180))} {(DQ ($ Id.VSub_DollarName '$version'))} {(DQ (3.13))}
                                          )
                                          (C {(sort)} {(-V)})
                                          (C {(tail)} {(-n)} {(1)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [175]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(test)} {(DQ ($ Id.VSub_DollarName '$later'))} 
                                  {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$version'))}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:221)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:SYMBOL_PREFIX)
                                  op: assign_op.Equal
                                  rhs: {(DQ )}
                                  spids: [230]
                                )
                              ]
                            )
                          ]
                          spids: [207 223]
                        )
                      ]
                    )
                  ]
                  spids: [134 149]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$SYMBOL_PREFIX'))})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:250)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:SYMBOL_PREFIX)
                          op: assign_op.Equal
                          rhs: {(DQ ('-P ') ($ Id.VSub_DollarName '$SYMBOL_PREFIX'))}
                          spids: [255]
                        )
                      ]
                    )
                  ]
                  spids: [241 252]
                )
              ]
            )
          ]
          spids: [87 98]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:depmod_hack_needed)
          op: assign_op.Equal
          rhs: {(true)}
          spids: [273]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tmp_dir)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:277)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(mktemp)} {(-d)} 
                        {
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:TMPDIR span_id:283)
                            suffix_op: 
                              (suffix_op.Unary
                                op_id: Id.VTest_ColonHyphen
                                arg_word: {(Id.Lit_Slash /) (tmp)}
                              )
                          ) (/depmod.XXXXXX)
                        }
                      )
                    ]
                  )
              )
            }
          spids: [276]
        )
      ]
    )
    (C {(mkdir)} {(-p)} 
      {(DQ ($ Id.VSub_DollarName '$tmp_dir') (/lib/modules/) ($ Id.VSub_DollarName '$KERNELRELEASE'))}
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [
                    {(DQ ($ Id.VSub_DollarName '$DEPMOD'))}
                    {(-b)}
                    {(DQ ($ Id.VSub_DollarName '$tmp_dir'))}
                    {($ Id.VSub_DollarName '$KERNELRELEASE')}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'2>' span_id:315)
                      fd: 2
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:317)
            )
          ]
          action: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(test)} {(-e)} 
                          {
                            (DQ ($ Id.VSub_DollarName '$tmp_dir') (/lib/modules/) 
                              ($ Id.VSub_DollarName '$KERNELRELEASE') (/modules.dep)
                            )
                          } {(-o)} {(-e)} 
                          {
                            (DQ ($ Id.VSub_DollarName '$tmp_dir') (/lib/modules/) 
                              ($ Id.VSub_DollarName '$KERNELRELEASE') (/modules.dep.bin)
                            )
                          }
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:347)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:depmod_hack_needed)
                          op: assign_op.Equal
                          rhs: {(false)}
                          spids: [352]
                        )
                      ]
                    )
                  ]
                  spids: [322 349]
                )
              ]
            )
          ]
          spids: [301 319]
        )
      ]
    )
    (C {(rm)} {(-rf)} {(DQ ($ Id.VSub_DollarName '$tmp_dir'))})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {($ Id.VSub_DollarName '$depmod_hack_needed')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:371)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:symlink)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$INSTALL_MOD_PATH') (/lib/modules/99.98.) 
                        ($ Id.VSub_DollarName '$KERNELRELEASE')
                      )
                    }
                  spids: [376]
                )
              ]
            )
            (C {(ln)} {(-s)} {(DQ ($ Id.VSub_DollarName '$KERNELRELEASE'))} 
              {(DQ ($ Id.VSub_DollarName '$symlink'))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:KERNELRELEASE)
                  op: assign_op.Equal
                  rhs: {(99.98.) ($ Id.VSub_DollarName '$KERNELRELEASE')}
                  spids: [397]
                )
              ]
            )
          ]
          spids: [368 373]
        )
      ]
    )
    (C {(Id.KW_Set set)} {(--)} {(-ae)} {(-F)} {(System.map)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$INSTALL_MOD_PATH'))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:423)
            )
          ]
          action: [
            (C {(Id.KW_Set set)} {(--)} {(DQ ($ Id.VSub_At '$@'))} {(-b)} 
              {(DQ ($ Id.VSub_DollarName '$INSTALL_MOD_PATH'))}
            )
          ]
          spids: [414 425]
        )
      ]
    )
    (C {(DQ ($ Id.VSub_DollarName '$DEPMOD'))} {(DQ ($ Id.VSub_At '$@'))} 
      {(DQ ($ Id.VSub_DollarName '$KERNELRELEASE'))} {($ Id.VSub_DollarName '$SYMBOL_PREFIX')}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ret)
          op: assign_op.Equal
          rhs: {($ Id.VSub_QMark '$?')}
          spids: [458]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {($ Id.VSub_DollarName '$depmod_hack_needed')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:465)
            )
          ]
          action: [(C {(rm)} {(-f)} {(DQ ($ Id.VSub_DollarName '$symlink'))})]
          spids: [462 467]
        )
      ]
    )
    (command.ControlFlow
      token: (Token id:Id.ControlFlow_Exit val:exit span_id:481)
      arg_word: {($ Id.VSub_DollarName '$ret')}
    )
  ]
)