(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:APR_VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:APR_VERSION span_id:97)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (1.4.6))})
              )
            }
          spids: [95]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:APU_VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:APU_VERSION span_id:106)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (1.5.1))})
              )
            }
          spids: [104]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SERF_VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:SERF_VERSION span_id:115)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (1.3.8))})
              )
            }
          spids: [113]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ZLIB_VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:ZLIB_VERSION span_id:124)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (1.2.8))})
              )
            }
          spids: [122]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SQLITE_VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:SQLITE_VERSION span_id:133)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (3.7.15.1))})
              )
            }
          spids: [131]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GMOCK_VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:GMOCK_VERSION span_id:142)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (1.6.0))})
              )
            }
          spids: [140]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HTTPD_VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:HTTPD_VERSION span_id:151)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (2.4.10))})
              )
            }
          spids: [149]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:APR_ICONV_VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:APR_ICONV_VERSION span_id:160)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (1.2.1))})
              )
            }
          spids: [158]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:APR)
          op: assign_op.Equal
          rhs: {(apr-) (${ Id.VSub_Name APR_VERSION)}
          spids: [168]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:APR_UTIL)
          op: assign_op.Equal
          rhs: {(apr-util-) (${ Id.VSub_Name APU_VERSION)}
          spids: [174]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SERF)
          op: assign_op.Equal
          rhs: {(serf-) (${ Id.VSub_Name SERF_VERSION)}
          spids: [180]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ZLIB)
          op: assign_op.Equal
          rhs: {(zlib-) (${ Id.VSub_Name ZLIB_VERSION)}
          spids: [186]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SQLITE_VERSION_LIST)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:193)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(echo)} {($ Id.VSub_DollarName '$SQLITE_VERSION')})
                          (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/\\./ /g' span_id:209))})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [192]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SQLITE)
          op: assign_op.Equal
          rhs: 
            {(sqlite-amalgamation-) 
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:215)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(printf)} 
                        {(Id.Lit_Other '%') (d) (Id.Lit_Other '%') (02d) (Id.Lit_Other '%') (02d) 
                          (Id.Lit_Other '%') (02d)
                        } {($ Id.VSub_DollarName '$SQLITE_VERSION_LIST')}
                      )
                    ]
                  )
              )
            }
          spids: [213]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GMOCK)
          op: assign_op.Equal
          rhs: {(gmock-) (${ Id.VSub_Name GMOCK_VERSION)}
          spids: [232]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GMOCK_URL)
          op: assign_op.Equal
          rhs: {(https) (Id.Lit_Other ':') (//googlemock.googlecode.com/files/)}
          spids: [238]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HTTPD)
          op: assign_op.Equal
          rhs: {(httpd-) (${ Id.VSub_Name HTTPD_VERSION)}
          spids: [244]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:APR_ICONV)
          op: assign_op.Equal
          rhs: {(apr-iconv-) (${ Id.VSub_Name APR_ICONV_VERSION)}
          spids: [250]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BASEDIR)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:258)
                command_list: (command.CommandList children:[(C {(pwd)})])
              )
            }
          spids: [257]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TEMPDIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$BASEDIR') (/temp)}
          spids: [264]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HTTP_FETCH)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [269]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$HTTP_FETCH'))} 
          {(Id.Lit_RBracket ']')}
        )
        (command.Simple
          words: [{(type)} {(wget)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:287)
              fd: -1
              arg_word: {(/dev/null)}
            )
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:290)
              fd: 2
              arg_word: {(1)}
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:HTTP_FETCH)
              op: assign_op.Equal
              rhs: {(DQ ('wget -q -nc'))}
              spids: [295]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$HTTP_FETCH'))} 
          {(Id.Lit_RBracket ']')}
        )
        (command.Simple
          words: [{(type)} {(curl)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:316)
              fd: -1
              arg_word: {(/dev/null)}
            )
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:319)
              fd: 2
              arg_word: {(1)}
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:HTTP_FETCH)
              op: assign_op.Equal
              rhs: {(DQ ('curl -sOL'))}
              spids: [324]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$HTTP_FETCH'))} 
          {(Id.Lit_RBracket ']')}
        )
        (command.Simple
          words: [{(type)} {(fetch)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:345)
              fd: -1
              arg_word: {(/dev/null)}
            )
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:348)
              fd: 2
              arg_word: {(1)}
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:HTTP_FETCH)
              op: assign_op.Equal
              rhs: {(DQ ('fetch -q'))}
              spids: [353]
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:APACHE_MIRROR)
          op: assign_op.Equal
          rhs: {(http) (Id.Lit_Other ':') (//archive.apache.org/dist)}
          spids: [365]
        )
      ]
    )
    (command.ShFunction
      name: usage
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} {(DQ ('Usage: ') ($ Id.VSub_Number '$0'))})
            (C {(echo)} 
              {
                (DQ ('Usage: ') ($ Id.VSub_Number '$0') (' [ apr | serf | zlib | sqlite | gmock ] ...'))
              }
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:398)
              arg_word: {($ Id.VSub_Number '$1')}
            )
          ]
        )
    )
    (command.ShFunction
      name: get_apr
      body: 
        (command.BraceGroup
          children: [
            (C {(cd)} {($ Id.VSub_DollarName '$TEMPDIR')})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/apr)})
                (C {($ Id.VSub_DollarName '$HTTP_FETCH')} 
                  {($ Id.VSub_DollarName '$APACHE_MIRROR') (/apr/) ($ Id.VSub_DollarName '$APR') 
                    (.tar.bz2)
                  }
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/apr-util)})
                (C {($ Id.VSub_DollarName '$HTTP_FETCH')} 
                  {($ Id.VSub_DollarName '$APACHE_MIRROR') (/apr/) ($ Id.VSub_DollarName '$APR_UTIL') 
                    (.tar.bz2)
                  }
                )
              ]
            )
            (C {(cd)} {($ Id.VSub_DollarName '$BASEDIR')})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/apr)})
                (command.Pipeline
                  children: [
                    (C {(bzip2)} {(-dc)} 
                      {($ Id.VSub_DollarName '$TEMPDIR') (/) ($ Id.VSub_DollarName '$APR') (.tar.bz2)}
                    )
                    (C {(tar)} {(-xf)} {(-)})
                  ]
                  negated: F
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/apr-util)})
                (command.Pipeline
                  children: [
                    (C {(bzip2)} {(-dc)} 
                      {($ Id.VSub_DollarName '$TEMPDIR') (/) ($ Id.VSub_DollarName '$APR_UTIL') 
                        (.tar.bz2)
                      }
                    )
                    (C {(tar)} {(-xf)} {(-)})
                  ]
                  negated: F
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/apr)})
                (C {(mv)} {($ Id.VSub_DollarName '$APR')} {(apr)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/apr-util)})
                (C {(mv)} {($ Id.VSub_DollarName '$APR_UTIL')} {(apr-util)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: get_serf
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/serf)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:565)
                )
              ]
            )
            (C {(cd)} {($ Id.VSub_DollarName '$TEMPDIR')})
            (C {($ Id.VSub_DollarName '$HTTP_FETCH')} 
              {(https) (Id.Lit_Other ':') (//archive.apache.org/dist/serf/) 
                ($ Id.VSub_DollarName '$SERF') (.tar.bz2)
              }
            )
            (C {(cd)} {($ Id.VSub_DollarName '$BASEDIR')})
            (command.Pipeline
              children: [
                (C {(bzip2)} {(-dc)} 
                  {($ Id.VSub_DollarName '$TEMPDIR') (/) ($ Id.VSub_DollarName '$SERF') (.tar.bz2)}
                )
                (C {(tar)} {(-xf)} {(-)})
              ]
              negated: F
            )
            (C {(mv)} {($ Id.VSub_DollarName '$SERF')} {(serf)})
          ]
        )
    )
    (command.ShFunction
      name: get_zlib
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/zlib)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:633)
                )
              ]
            )
            (C {(cd)} {($ Id.VSub_DollarName '$TEMPDIR')})
            (C {($ Id.VSub_DollarName '$HTTP_FETCH')} 
              {(http) (Id.Lit_Other ':') (//sourceforge.net/projects/libpng/files/zlib/) 
                ($ Id.VSub_DollarName '$ZLIB_VERSION') (/) ($ Id.VSub_DollarName '$ZLIB') (.tar.gz)
              }
            )
            (C {(cd)} {($ Id.VSub_DollarName '$BASEDIR')})
            (command.Pipeline
              children: [
                (C {(gzip)} {(-dc)} 
                  {($ Id.VSub_DollarName '$TEMPDIR') (/) ($ Id.VSub_DollarName '$ZLIB') (.tar.gz)}
                )
                (C {(tar)} {(-xf)} {(-)})
              ]
              negated: F
            )
            (C {(mv)} {($ Id.VSub_DollarName '$ZLIB')} {(zlib)})
          ]
        )
    )
    (command.ShFunction
      name: get_sqlite
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/sqlite-amalgamation)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:703)
                )
              ]
            )
            (C {(cd)} {($ Id.VSub_DollarName '$TEMPDIR')})
            (C {($ Id.VSub_DollarName '$HTTP_FETCH')} 
              {(http) (Id.Lit_Other ':') (//www.sqlite.org/) ($ Id.VSub_DollarName '$SQLITE') (.zip)}
            )
            (C {(cd)} {($ Id.VSub_DollarName '$BASEDIR')})
            (C {(unzip)} {(-q)} 
              {($ Id.VSub_DollarName '$TEMPDIR') (/) ($ Id.VSub_DollarName '$SQLITE') (.zip)}
            )
            (C {(mv)} {($ Id.VSub_DollarName '$SQLITE')} {(sqlite-amalgamation)})
          ]
        )
    )
    (command.ShFunction
      name: get_gmock
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(test)} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/gmock-fused)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:764)
                )
              ]
            )
            (C {(cd)} {($ Id.VSub_DollarName '$TEMPDIR')})
            (C {($ Id.VSub_DollarName '$HTTP_FETCH')} 
              {(${ Id.VSub_Name GMOCK_URL) (/) (${ Id.VSub_Name GMOCK) (.zip)}
            )
            (C {(cd)} {($ Id.VSub_DollarName '$BASEDIR')})
            (C {(unzip)} {(-q)} 
              {($ Id.VSub_DollarName '$TEMPDIR') (/) ($ Id.VSub_DollarName '$GMOCK') (.zip)}
            )
            (C {(mv)} {($ Id.VSub_DollarName '$GMOCK') (/fused-src)} {(gmock-fused)})
            (C {(rm)} {(-fr)} {($ Id.VSub_DollarName '$GMOCK')})
          ]
        )
    )
    (command.ShFunction
      name: get_deps
      body: 
        (command.BraceGroup
          children: [
            (C {(mkdir)} {(-p)} {($ Id.VSub_DollarName '$TEMPDIR')})
            (command.ForEach
              iter_name: i
              iter_words: [{(zlib)} {(serf)} {(sqlite-amalgamation)} {(apr)} {(apr-util)} {(gmock-fused)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(-d)} {($ Id.VSub_DollarName '$i')} 
                                  {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:868)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {
                                  (DQ ("Local directory '") ($ Id.VSub_DollarName '$i') 
                                    ("' already exists; the downloaded copy won't be used")
                                  )
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:881)
                                  fd: -1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                          ]
                          spids: [859 870]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:903)
                    )
                  ]
                  action: [
                    (command.ForEach
                      iter_name: target
                      iter_words: [{(DQ ($ Id.VSub_At '$@'))}]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} 
                                          {(DQ ($ Id.VSub_DollarName '$target'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (deps))} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:938)
                                    )
                                  ]
                                  action: [
                                    (command.AndOr
                                      ops: [Id.Op_DPipe]
                                      children: [
                                        (C {(get_) ($ Id.VSub_DollarName '$target')})
                                        (C {(usage)})
                                      ]
                                    )
                                  ]
                                  spids: [922 940]
                                )
                              ]
                              else_action: [(C {(usage)})]
                            )
                          ]
                        )
                    )
                  ]
                  spids: [892 905]
                )
              ]
              else_action: [
                (C {(get_apr)})
                (C {(get_serf)})
                (C {(get_zlib)})
                (C {(get_sqlite)})
                (C {(echo)})
                (C {(echo)} {(DQ ('If you require mod_dav_svn, the recommended version of httpd is:'))})
                (C {(echo)} 
                  {
                    (DQ ('   ') ($ Id.VSub_DollarName '$APACHE_MIRROR') (/httpd/) 
                      ($ Id.VSub_DollarName '$HTTPD') (.tar.bz2)
                    )
                  }
                )
                (C {(echo)})
                (C {(echo)} {(DQ ('If you require apr-iconv, its recommended version is:'))})
                (C {(echo)} 
                  {
                    (DQ ('   ') ($ Id.VSub_DollarName '$APACHE_MIRROR') (/apr/) 
                      ($ Id.VSub_DollarName '$APR_ICONV') (.tar.bz2)
                    )
                  }
                )
              ]
            )
            (C {(rm)} {(-rf)} {($ Id.VSub_DollarName '$TEMPDIR')})
          ]
        )
    )
    (C {(get_deps)} {(DQ ($ Id.VSub_At '$@'))})
  ]
)