(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Pound '$#'))} {<-ne>} {<3>} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (C {<echo>} {(DQ <'Usage: zip_manifest_creator.sh <regexp> <input zip> <output manifest>'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [56 71]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:REGEX)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$1'))}
          spids: [88]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:INPUT_ZIP)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$2'))}
          spids: [93]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OUTPUT_MANIFEST)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$3'))}
          spids: [98]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RUNFILES)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name RUNFILES>
                suffix_op: 
                  (suffix_op.Unary
                    op_id: Id.VTest_ColonHyphen
                    arg_word: {($ Id.VSub_Number '$0') <.runfiles>}
                  )
              )
            }
          spids: [104]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ZIPPER)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$RUNFILES') </> <Id.Lit_Star '*'> </tools/zip/zipper/zipper>}
          spids: [116]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-x>} {($ Id.VSub_DollarName '$ZIPPER')} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ZIPPER)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$RUNFILES') </third_party/ijar/zipper>}
                  spids: [142]
                )
              ]
            )
          ]
          spids: [122 135]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-x>} {($ Id.VSub_DollarName '$ZIPPER')} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (C {<echo>} {(DQ <'zip_manifest_creator could not find zipper executable'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [148 161]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {($ Id.VSub_DollarName '$ZIPPER')} {<v>} {(DQ ($ Id.VSub_DollarName '$INPUT_ZIP'))})
        (C {<cut>} {<-d>} {(SQ <' '>)} {<-f3>})
        (C {<grep>} {<-v>} 
          {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\/'>) <Id.Lit_Other '$'>}
        )
        (command.Simple
          words: [{<grep>} {<-x>} {(DQ ($ Id.VSub_DollarName '$REGEX'))}]
          redirects: [
            (redir.Redir
              op: <Id.Redir_Great '>'>
              fd: -1
              arg_word: {(DQ ($ Id.VSub_DollarName '$OUTPUT_MANIFEST'))}
            )
          ]
        )
      ]
      negated: F
    )
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)