(CommandList
  children: [
    (Case
      to_match: {($ VSub_Pound '$#')}
      arms: [
        (case_arm
          pat_list: [{(2)}]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:VERSION)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [99]
                )
              ]
              spids: [99]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RC_NUMBER)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [105]
                )
              ]
              spids: [105]
            )
          ]
          spids: [96 97 111 16777215]
        )
        (case_arm
          pat_list: [{(Lit_Other '*')}]
          action: [
            (C {(echo)} {(DQ ('Usage: ') ($ VSub_Number '$0') (' X.Y.Z RC_NUMBER'))})
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [115 116 132 16777215]
        )
      ]
      spids: [89 93 134]
    )
    (C {(set)} {(-ex)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:HERE)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        ops: [Op_DAmp]
                        children: [
                          (C {(cd)} 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(dirname)} 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              token: <VSub_Name BASH_SOURCE>
                                              bracket_op: 
                                                (ArrayIndex
                                                  expr: (ArithWord w:{(Lit_Digits 0)})
                                                )
                                              suffix_op: 
                                                (StringUnary
                                                  op_id: VTest_ColonHyphen
                                                  arg_word: {($ VSub_Number '$0')}
                                                )
                                              spids: [150 157]
                                            )
                                          )
                                        }
                                      )
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [146 159]
                              )
                            }
                          )
                          (C {(pwd)})
                        ]
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [143 164]
              )
            }
          spids: [142]
        )
      ]
      spids: [142]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ARROW_DIST_URL)
          op: Equal
          rhs: {(SQ <'https://dist.apache.org/repos/dist/dev/arrow'>)}
          spids: [167]
        )
      ]
      spids: [167]
    )
    (FuncDef
      name: download_dist_file
      body: 
        (BraceGroup
          children: [
            (C {(curl)} {(-f)} {(-O)} {($ VSub_Name '$ARROW_DIST_URL') (/) ($ VSub_Number '$1')})
          ]
          spids: [177]
        )
      spids: [173 176]
    )
    (FuncDef
      name: download_rc_file
      body: 
        (BraceGroup
          children: [
            (C {(download_dist_file)} 
              {(apache-arrow-) (${ VSub_Name VERSION) (-rc) (${ VSub_Name RC_NUMBER) (/) 
                ($ VSub_Number '$1')
              }
            )
          ]
          spids: [197]
        )
      spids: [193 196]
    )
    (FuncDef
      name: import_gpg_keys
      body: 
        (BraceGroup
          children: [(C {(download_dist_file)} {(KEYS)}) (C {(gpg)} {(--import)} {(KEYS)})]
          spids: [220]
        )
      spids: [216 219]
    )
    (FuncDef
      name: fetch_archive
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dist_name)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [246]
                )
              ]
              spids: [244]
            )
            (C {(download_rc_file)} {(${ VSub_Name dist_name) (.tar.gz)})
            (C {(download_rc_file)} {(${ VSub_Name dist_name) (.tar.gz.asc)})
            (C {(download_rc_file)} {(${ VSub_Name dist_name) (.tar.gz.md5)})
            (C {(download_rc_file)} {(${ VSub_Name dist_name) (.tar.gz.sha512)})
            (C {(gpg)} {(--verify)} {(${ VSub_Name dist_name) (.tar.gz.asc)} 
              {(${ VSub_Name dist_name) (.tar.gz)}
            )
            (Pipeline
              children: [
                (C {(gpg)} {(--print-md)} {(MD5)} {(${ VSub_Name dist_name) (.tar.gz)})
                (C {(diff)} {(-)} {(${ VSub_Name dist_name) (.tar.gz.md5)})
              ]
              negated: F
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (DQ 
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(uname)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [325 327]
                              )
                            )
                          } {(Lit_Other '=') (Lit_Other '=')} {(DQ (Darwin))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Pipeline
                      children: [
                        (C {(shasum)} {(-a)} {(512)} {(${ VSub_Name dist_name) (.tar.gz)})
                        (C {(diff)} {(-)} {(${ VSub_Name dist_name) (.tar.gz.sha512)})
                      ]
                      negated: F
                    )
                  ]
                  spids: [16777215 340]
                )
              ]
              else_action: [
                (Pipeline
                  children: [
                    (C {(sha512sum)} {(${ VSub_Name dist_name) (.tar.gz)})
                    (C {(diff)} {(-)} {(${ VSub_Name dist_name) (.tar.gz.sha512)})
                  ]
                  negated: F
                )
              ]
              spids: [366 388]
            )
          ]
          spids: [241]
        )
      spids: [237 240]
    )
    (FuncDef
      name: setup_tempdir
      body: 
        (BraceGroup
          children: [
            (FuncDef
              name: cleanup
              body: 
                (BraceGroup
                  children: [(C {(rm)} {(-fr)} {(DQ ($ VSub_Name '$TMPDIR'))})]
                  spids: [404]
                )
              spids: [400 403]
            )
            (C {(trap)} {(cleanup)} {(EXIT)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:TMPDIR)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(mktemp)} {(-d)} {(-t)} {(DQ ($ VSub_Number '$1') (.XXXXX))})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [427 438]
                      )
                    }
                  spids: [426]
                )
              ]
              spids: [426]
            )
          ]
          spids: [397]
        )
      spids: [393 396]
    )
    (FuncDef
      name: setup_miniconda
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (DQ 
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(uname)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [460 462]
                              )
                            )
                          } {(Lit_Other '=') (Lit_Other '=')} {(DQ (Darwin))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:MINICONDA_URL)
                          op: Equal
                          rhs: 
                            {(https) (Lit_Other ':') 
                              (//repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh)
                            }
                          spids: [478]
                        )
                      ]
                      spids: [478]
                    )
                  ]
                  spids: [16777215 475]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:MINICONDA_URL)
                      op: Equal
                      rhs: 
                        {(https) (Lit_Other ':') 
                          (//repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh)
                        }
                      spids: [487]
                    )
                  ]
                  spids: [487]
                )
              ]
              spids: [484 493]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:MINICONDA)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(pwd)})])
                        left_token: <Left_Backtick '`'>
                        spids: [498 500]
                      ) (/test-miniconda)
                    }
                  spids: [497]
                )
              ]
              spids: [497]
            )
            (C {(wget)} {(-O)} {(miniconda.sh)} {($ VSub_Name '$MINICONDA_URL')})
            (C {(bash)} {(miniconda.sh)} {(-b)} {(-p)} {($ VSub_Name '$MINICONDA')})
            (C {(rm)} {(-f)} {(miniconda.sh)})
            (C {(export)} 
              {(Lit_VarLike 'PATH=') ($ VSub_Name '$MINICONDA') (/bin) (Lit_Other ':') 
                ($ VSub_Name '$PATH')
              }
            )
            (C {(conda)} {(create)} {(-n)} {(arrow-test)} {(-y)} {(-q)} {(Lit_VarLike 'python=') (3.6)} 
              {(nomkl)} {(numpy)} {(pandas)} {(six)} {(cython)}
            )
            (C {(source)} {(activate)} {(arrow-test)})
          ]
          spids: [448]
        )
      spids: [444 447]
    )
    (FuncDef
      name: test_and_install_cpp
      body: 
        (BraceGroup
          children: [
            (C {(mkdir)} {(cpp/build)})
            (C {(pushd)} {(cpp/build)})
            (C {(cmake)} {(-DCMAKE_INSTALL_PREFIX) (Lit_Other '=') ($ VSub_Name '$ARROW_HOME')} 
              {(-DARROW_PLASMA) (Lit_Other '=') (on)} {(-DARROW_PYTHON) (Lit_Other '=') (on)} {(-DARROW_BOOST_USE_SHARED) (Lit_Other '=') (on)} 
              {(-DCMAKE_BUILD_TYPE) (Lit_Other '=') (release)} {(-DARROW_BUILD_BENCHMARKS) (Lit_Other '=') (on)} {(..)}
            )
            (C {(make)} {(-j) ($ VSub_Name '$NPROC')})
            (C {(make)} {(install)})
            (C {(ctest)} {(-L)} {(unittest)})
            (C {(popd)})
          ]
          spids: [588]
        )
      spids: [584 587]
    )
    (FuncDef
      name: install_parquet_cpp
      body: 
        (BraceGroup
          children: [
            (C {(git)} {(clone)} 
              {(git) (Lit_Other '@') (github.com) (Lit_Other ':') (apache/parquet-cpp.git)}
            )
            (C {(mkdir)} {(parquet-cpp/build)})
            (C {(pushd)} {(parquet-cpp/build)})
            (C {(cmake)} {(-DCMAKE_INSTALL_PREFIX) (Lit_Other '=') ($ VSub_Name '$PARQUET_HOME')} 
              {(-DCMAKE_BUILD_TYPE) (Lit_Other '=') (release)} {(-DPARQUET_BOOST_USE_SHARED) (Lit_Other '=') (on)} {(-DPARQUET_BUILD_TESTS) (Lit_Other '=') (off)} 
              {(..)}
            )
            (C {(make)} {(-j) ($ VSub_Name '$NPROC')})
            (C {(make)} {(install)})
            (C {(popd)})
          ]
          spids: [676]
        )
      spids: [672 675]
    )
    (FuncDef
      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)})
          ]
          spids: [757]
        )
      spids: [753 756]
    )
    (FuncDef
      name: test_glib
      body: 
        (BraceGroup
          children: [
            (C {(pushd)} {(c_glib)})
            (C {(./configure)} {(--prefix) (Lit_Other '=') ($ VSub_Name '$ARROW_HOME')})
            (C {(make)} {(-j) ($ VSub_Name '$NPROC')})
            (C {(make)} {(install)})
            (SimpleCommand
              words: [{(test/run-test.sh)}]
              more_env: [(env_pair name:NO_MAKE val:{(yes)} spids:[837])]
            )
            (C {(popd)})
          ]
          spids: [809]
        )
      spids: [805 808]
    )
    (FuncDef
      name: test_js
      body: 
        (BraceGroup
          children: [
            (C {(pushd)} {(js)})
            (C {(npm)} {(install)})
            (C {(npm)} {(run)} {(validate)})
            (C {(popd)})
          ]
          spids: [853]
        )
      spids: [849 852]
    )
    (FuncDef
      name: test_package_java
      body: 
        (BraceGroup
          children: [(C {(pushd)} {(java)}) (C {(mvn)} {(test)}) (C {(mvn)} {(package)}) (C {(popd)})]
          spids: [886]
        )
      spids: [882 885]
    )
    (FuncDef
      name: test_integration
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:JAVA_DIR)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(pwd)})])
                        left_token: <Left_Backtick '`'>
                        spids: [922 924]
                      ) (/java)
                    }
                  spids: [921]
                )
              ]
              spids: [921]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CPP_BUILD_DIR)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(pwd)})])
                        left_token: <Left_Backtick '`'>
                        spids: [929 931]
                      ) (/cpp/build)
                    }
                  spids: [928]
                )
              ]
              spids: [928]
            )
            (C {(export)} 
              {(Lit_VarLike 'ARROW_JAVA_INTEGRATION_JAR=') ($ VSub_Name '$JAVA_DIR') 
                (/tools/target/arrow-tools-) ($ VSub_Name '$VERSION') (-jar-with-dependencies.jar)
              }
            )
            (C {(export)} 
              {(Lit_VarLike 'ARROW_CPP_EXE_PATH=') ($ VSub_Name '$CPP_BUILD_DIR') (/release)}
            )
            (C {(pushd)} {(integration)})
            (C {(python)} {(integration_test.py)})
            (C {(popd)})
          ]
          spids: [918]
        )
      spids: [914 917]
    )
    (C {(setup_tempdir)} {(DQ (arrow-) ($ VSub_Name '$VERSION'))})
    (C {(echo)} {(DQ ('Working in sandbox ') ($ VSub_Name '$TMPDIR'))})
    (C {(cd)} {($ VSub_Name '$TMPDIR')})
    (C {(export)} {(Lit_VarLike 'ARROW_HOME=') ($ VSub_Name '$TMPDIR') (/install)})
    (C {(export)} {(Lit_VarLike 'PARQUET_HOME=') ($ VSub_Name '$TMPDIR') (/install)})
    (C {(export)} 
      {(Lit_VarLike 'LD_LIBRARY_PATH=') ($ VSub_Name '$ARROW_HOME') (/lib) (Lit_Other ':') 
        ($ VSub_Name '$LD_LIBRARY_PATH')
      }
    )
    (C {(export)} 
      {(Lit_VarLike 'PKG_CONFIG_PATH=') ($ VSub_Name '$ARROW_HOME') (/lib/pkgconfig) (Lit_Other ':') 
        ($ VSub_Name '$PKG_CONFIG_PATH')
      }
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} 
                  {
                    (DQ 
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(uname)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [1023 1025]
                      )
                    )
                  } {(Lit_Other '=') (Lit_Other '=')} {(DQ (Darwin))} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:NPROC)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(sysctl)} {(-n)} {(hw.ncpu)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [1042 1048]
                      )
                    }
                  spids: [1041]
                )
              ]
              spids: [1041]
            )
          ]
          spids: [16777215 1038]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:NPROC)
              op: Equal
              rhs: 
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(nproc)})])
                    left_token: <Left_CommandSub '$('>
                    spids: [1054 1056]
                  )
                }
              spids: [1053]
            )
          ]
          spids: [1053]
        )
      ]
      spids: [1050 1058]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VERSION)
          op: Equal
          rhs: {($ VSub_Number '$1')}
          spids: [1060]
        )
      ]
      spids: [1060]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:RC_NUMBER)
          op: Equal
          rhs: {($ VSub_Number '$2')}
          spids: [1063]
        )
      ]
      spids: [1063]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TARBALL)
          op: Equal
          rhs: {(apache-arrow-) ($ VSub_Number '$1') (.tar.gz)}
          spids: [1067]
        )
      ]
      spids: [1067]
    )
    (C {(import_gpg_keys)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DIST_NAME)
          op: Equal
          rhs: {(DQ (apache-arrow-) (${ VSub_Name VERSION))}
          spids: [1076]
        )
      ]
      spids: [1076]
    )
    (C {(fetch_archive)} {($ VSub_Name '$DIST_NAME')})
    (C {(tar)} {(xvzf)} {(${ VSub_Name DIST_NAME) (.tar.gz)})
    (C {(cd)} {(${ 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!'>)})
    (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)})
  ]
)