(command.CommandList
  children: [
    (command.Case
      to_match: {($ Id.VSub_Pound '$#')}
      arms: [
        (case_arm
          pat_list: [{<2>}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:VERSION)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [99]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RC_NUMBER)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$2'))}
                  spids: [105]
                )
              ]
            )
          ]
          spids: [96 97 111 -1]
        )
        (case_arm
          pat_list: [{<Id.Lit_Star '*'>}]
          action: [
            (C {<echo>} {(DQ <'Usage: '> ($ Id.VSub_Number '$0') <' X.Y.Z RC_NUMBER'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [115 116 132 -1]
        )
      ]
    )
    (C {<set>} {<-ex>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HERE)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.AndOr
                    ops: [Id.Op_DAmp]
                    children: [
                      (C {<cd>} 
                        {
                          (command_sub
                            left_token: <Id.Left_Backtick '`'>
                            child: 
                              (C {<dirname>} 
                                {
                                  (DQ 
                                    (braced_var_sub
                                      token: <Id.VSub_Name BASH_SOURCE>
                                      bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                                      suffix_op: 
                                        (suffix_op.Unary
                                          tok: <Id.VTest_ColonHyphen ':-'>
                                          arg_word: {($ Id.VSub_Number '$0')}
                                        )
                                    )
                                  )
                                }
                              )
                          )
                        }
                      )
                      (C {<pwd>})
                    ]
                  )
              )
            }
          spids: [142]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ARROW_DIST_URL)
          op: assign_op.Equal
          rhs: {(SQ <'https://dist.apache.org/repos/dist/dev/arrow'>)}
          spids: [169]
        )
      ]
    )
    (command.ShFunction
      name: download_dist_file
      body: 
        (BraceGroup
          children: [
            (C {<curl>} {<-f>} {<-O>} 
              {($ Id.VSub_DollarName '$ARROW_DIST_URL') <'/'> ($ Id.VSub_Number '$1')}
            )
          ]
        )
    )
    (command.ShFunction
      name: download_rc_file
      body: 
        (BraceGroup
          children: [
            (C {<download_dist_file>} 
              {<apache-arrow-> (${ Id.VSub_Name VERSION) <-rc> (${ Id.VSub_Name RC_NUMBER) <'/'> 
                ($ Id.VSub_Number '$1')
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: import_gpg_keys
      body: 
        (BraceGroup
          children: [(C {<download_dist_file>} {<KEYS>}) (C {<gpg>} {<--import>} {<KEYS>})]
        )
    )
    (command.ShFunction
      name: fetch_archive
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'dist_name='> ($ Id.VSub_Number '$1')})
            (C {<download_rc_file>} {(${ Id.VSub_Name dist_name) <.tar.gz>})
            (C {<download_rc_file>} {(${ Id.VSub_Name dist_name) <.tar.gz.asc>})
            (C {<download_rc_file>} {(${ Id.VSub_Name dist_name) <.tar.gz.md5>})
            (C {<download_rc_file>} {(${ Id.VSub_Name dist_name) <.tar.gz.sha512>})
            (C {<gpg>} {<--verify>} {(${ Id.VSub_Name dist_name) <.tar.gz.asc>} 
              {(${ Id.VSub_Name dist_name) <.tar.gz>}
            )
            (command.Pipeline
              children: [
                (C {<gpg>} {<--print-md>} {<MD5>} {(${ Id.VSub_Name dist_name) <.tar.gz>})
                (C {<diff>} {<->} {(${ Id.VSub_Name dist_name) <.tar.gz.md5>})
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: (C {<uname>})
                                  )
                                )
                              } {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Pipeline
                      children: [
                        (C {<shasum>} {<-a>} {<512>} {(${ Id.VSub_Name dist_name) <.tar.gz>})
                        (C {<diff>} {<->} {(${ Id.VSub_Name dist_name) <.tar.gz.sha512>})
                      ]
                      negated: F
                    )
                  ]
                  spids: [322 342]
                )
              ]
              else_action: [
                (command.Pipeline
                  children: [
                    (C {<sha512sum>} {(${ Id.VSub_Name dist_name) <.tar.gz>})
                    (C {<diff>} {<->} {(${ Id.VSub_Name dist_name) <.tar.gz.sha512>})
                  ]
                  negated: F
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: setup_tempdir
      body: 
        (BraceGroup
          children: [
            (command.ShFunction
              name: cleanup
              body: 
                (BraceGroup
                  children: [(C {<rm>} {<-fr>} {(DQ ($ Id.VSub_DollarName '$TMPDIR'))})]
                )
            )
            (C {<trap>} {<cleanup>} {<EXIT>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:TMPDIR)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<mktemp>} {<-d>} {<-t>} {(DQ ($ Id.VSub_Number '$1') <.XXXXX>)})
                      )
                    }
                  spids: [428]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: setup_miniconda
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: (C {<uname>})
                                  )
                                )
                              } {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:MINICONDA_URL)
                          op: assign_op.Equal
                          rhs: 
                            {<https> <Id.Lit_Colon ':'> 
                              <'//repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh'>
                            }
                          spids: [480]
                        )
                      ]
                    )
                  ]
                  spids: [457 477]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:MINICONDA_URL)
                      op: assign_op.Equal
                      rhs: 
                        {<https> <Id.Lit_Colon ':'> 
                          <'//repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh'>
                        }
                      spids: [489]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MINICONDA)
                  op: assign_op.Equal
                  rhs: 
                    {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})) 
                      <'/test-miniconda'>
                    }
                  spids: [499]
                )
              ]
            )
            (C {<wget>} {<-O>} {<miniconda.sh>} {($ Id.VSub_DollarName '$MINICONDA_URL')})
            (C {<bash>} {<miniconda.sh>} {<-b>} {<-p>} {($ Id.VSub_DollarName '$MINICONDA')})
            (C {<rm>} {<-f>} {<miniconda.sh>})
            (C {<export>} 
              {<Id.Lit_VarLike 'PATH='> ($ Id.VSub_DollarName '$MINICONDA') <'/bin'> <Id.Lit_Colon ':'> 
                ($ Id.VSub_DollarName '$PATH')
              }
            )
            (C {<conda>} {<create>} {<-n>} {<arrow-test>} {<-y>} {<-q>} {<Id.Lit_VarLike 'python='> <3.6>} 
              {<nomkl>} {<numpy>} {<pandas>} {<six>} {<cython>}
            )
            (C {<source>} {<activate>} {<arrow-test>})
          ]
        )
    )
    (command.ShFunction
      name: test_and_install_cpp
      body: 
        (BraceGroup
          children: [
            (C {<mkdir>} {<'cpp/build'>})
            (C {<pushd>} {<'cpp/build'>})
            (C {<cmake>} 
              {<-DCMAKE_INSTALL_PREFIX> <Id.Lit_Equals '='> ($ Id.VSub_DollarName '$ARROW_HOME')} {<-DARROW_PLASMA> <Id.Lit_Equals '='> <on>} {<-DARROW_PYTHON> <Id.Lit_Equals '='> <on>} 
              {<-DARROW_BOOST_USE_SHARED> <Id.Lit_Equals '='> <on>} {<-DCMAKE_BUILD_TYPE> <Id.Lit_Equals '='> <release>} 
              {<-DARROW_BUILD_BENCHMARKS> <Id.Lit_Equals '='> <on>} {<..>}
            )
            (C {<make>} {<-j> ($ Id.VSub_DollarName '$NPROC')})
            (C {<make>} {<install>})
            (C {<ctest>} {<-L>} {<unittest>})
            (C {<popd>})
          ]
        )
    )
    (command.ShFunction
      name: install_parquet_cpp
      body: 
        (BraceGroup
          children: [
            (C {<git>} {<clone>} 
              {<git> <Id.Lit_Splice '@github'> <.com> <Id.Lit_Colon ':'> <'apache/parquet-cpp.git'>}
            )
            (C {<mkdir>} {<'parquet-cpp/build'>})
            (C {<pushd>} {<'parquet-cpp/build'>})
            (C {<cmake>} 
              {<-DCMAKE_INSTALL_PREFIX> <Id.Lit_Equals '='> ($ Id.VSub_DollarName '$PARQUET_HOME')} {<-DCMAKE_BUILD_TYPE> <Id.Lit_Equals '='> <release>} 
              {<-DPARQUET_BOOST_USE_SHARED> <Id.Lit_Equals '='> <on>} {<-DPARQUET_BUILD_TESTS> <Id.Lit_Equals '='> <off>} {<..>}
            )
            (C {<make>} {<-j> ($ Id.VSub_DollarName '$NPROC')})
            (C {<make>} {<install>})
            (C {<popd>})
          ]
        )
    )
    (command.ShFunction
      name: test_python
      body: 
        (BraceGroup
          children: [
            (C {<pushd>} {<python>})
            (C {<pip>} {<install>} {<-r>} {<requirements.txt>})
            (C {<python>} {<setup.py>} {<build_ext>} {<--inplace>} {<--with-parquet>} {<--with-plasma>})
            (C {<py.test>} {<pyarrow>} {<-v>} {<--pdb>})
            (C {<popd>})
          ]
        )
    )
    (command.ShFunction
      name: test_glib
      body: 
        (BraceGroup
          children: [
            (C {<pushd>} {<c_glib>})
            (C {<'./configure'>} {<--prefix> <Id.Lit_Equals '='> ($ Id.VSub_DollarName '$ARROW_HOME')})
            (C {<make>} {<-j> ($ Id.VSub_DollarName '$NPROC')})
            (C {<make>} {<install>})
            (command.Simple
              words: [{<'test/run-test.sh'>}]
              more_env: [(env_pair name:NO_MAKE val:{<yes>} spids:[841])]
              do_fork: T
            )
            (C {<popd>})
          ]
        )
    )
    (command.ShFunction
      name: test_js
      body: 
        (BraceGroup
          children: [
            (C {<pushd>} {<js>})
            (C {<npm>} {<install>})
            (C {<npm>} {<run>} {<validate>})
            (C {<popd>})
          ]
        )
    )
    (command.ShFunction
      name: test_package_java
      body: 
        (BraceGroup
          children: [(C {<pushd>} {<java>}) (C {<mvn>} {<test>}) (C {<mvn>} {<package>}) (C {<popd>})]
        )
    )
    (command.ShFunction
      name: test_integration
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:JAVA_DIR)
                  op: assign_op.Equal
                  rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})) <'/java'>}
                  spids: [925]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CPP_BUILD_DIR)
                  op: assign_op.Equal
                  rhs: 
                    {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})) <'/cpp/build'>}
                  spids: [934]
                )
              ]
            )
            (C {<export>} 
              {<Id.Lit_VarLike 'ARROW_JAVA_INTEGRATION_JAR='> ($ Id.VSub_DollarName '$JAVA_DIR') 
                <'/tools/target/arrow-tools-'> ($ Id.VSub_DollarName '$VERSION') <-jar-with-dependencies.jar>
              }
            )
            (C {<export>} 
              {<Id.Lit_VarLike 'ARROW_CPP_EXE_PATH='> ($ Id.VSub_DollarName '$CPP_BUILD_DIR') 
                <'/release'>
              }
            )
            (C {<pushd>} {<integration>})
            (C {<python>} {<integration_test.py>})
            (C {<popd>})
          ]
        )
    )
    (C {<setup_tempdir>} {(DQ <arrow-> ($ Id.VSub_DollarName '$VERSION'))})
    (C {<echo>} {(DQ <'Working in sandbox '> ($ Id.VSub_DollarName '$TMPDIR'))})
    (C {<cd>} {($ Id.VSub_DollarName '$TMPDIR')})
    (C {<export>} {<Id.Lit_VarLike 'ARROW_HOME='> ($ Id.VSub_DollarName '$TMPDIR') <'/install'>})
    (C {<export>} {<Id.Lit_VarLike 'PARQUET_HOME='> ($ Id.VSub_DollarName '$TMPDIR') <'/install'>})
    (C {<export>} 
      {<Id.Lit_VarLike 'LD_LIBRARY_PATH='> ($ Id.VSub_DollarName '$ARROW_HOME') <'/lib'> 
        <Id.Lit_Colon ':'> ($ Id.VSub_DollarName '$LD_LIBRARY_PATH')
      }
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'PKG_CONFIG_PATH='> ($ Id.VSub_DollarName '$ARROW_HOME') <'/lib/pkgconfig'> 
        <Id.Lit_Colon ':'> ($ Id.VSub_DollarName '$PKG_CONFIG_PATH')
      }
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} 
                      {(DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<uname>})))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:NPROC)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<sysctl>} {<-n>} {<hw.ncpu>})
                      )
                    }
                  spids: [1049]
                )
              ]
            )
          ]
          spids: [1026 1046]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:NPROC)
              op: assign_op.Equal
              rhs: {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<nproc>}))}
              spids: [1061]
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VERSION)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [1068]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RC_NUMBER)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$2')}
          spids: [1071]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TARBALL)
          op: assign_op.Equal
          rhs: {<apache-arrow-> ($ Id.VSub_Number '$1') <.tar.gz>}
          spids: [1075]
        )
      ]
    )
    (C {<import_gpg_keys>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DIST_NAME)
          op: assign_op.Equal
          rhs: {(DQ <apache-arrow-> (${ Id.VSub_Name VERSION))}
          spids: [1084]
        )
      ]
    )
    (C {<fetch_archive>} {($ Id.VSub_DollarName '$DIST_NAME')})
    (C {<tar>} {<xvzf>} {(${ Id.VSub_Name DIST_NAME) <.tar.gz>})
    (C {<cd>} {(${ Id.VSub_Name DIST_NAME)})
    (C {<setup_miniconda>})
    (C {<test_and_install_cpp>})
    (C {<install_parquet_cpp>})
    (C {<test_python>})
    (C {<test_glib>})
    (C {<test_package_java>})
    (C {<test_integration>})
    (C {<test_js>})
    (C {<echo>} {(SQ <'Release candidate looks good!'>)})
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)