(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'PERL='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'PERL='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PERL='> name:PERL)
          op: assign_op.Equal
          rhs: {(SQ <'@@PERL@@'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'OPTIONS_KEEPDASHDASH='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'OPTIONS_KEEPDASHDASH='>
          lhs: 
            (sh_lhs_expr.Name
              left: <Id.Lit_VarLike 'OPTIONS_KEEPDASHDASH='>
              name: OPTIONS_KEEPDASHDASH
            )
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'OPTIONS_STUCKLONG='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'OPTIONS_STUCKLONG='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTIONS_STUCKLONG='> name:OPTIONS_STUCKLONG)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'OPTIONS_SPEC='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'OPTIONS_SPEC='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTIONS_SPEC='> name:OPTIONS_SPEC)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'git instaweb [options] (--start | --stop | --restart)\n'> <'--\n'> 
                <'l,local        only bind on 127.0.0.1\n'> <'p,port=        the port to bind to\n'> <'d,httpd=       the command to launch\n'> 
                <'b,browser=     the browser to launch\n'> <'m,module-path= the module path (only needed for apache2)\n'> <' Action\n'> 
                <'stop           stop the web server\n'> <'start          start the web server\n'> <'restart        restart the web server\n'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'SUBDIRECTORY_OK='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'SUBDIRECTORY_OK='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SUBDIRECTORY_OK='> name:SUBDIRECTORY_OK)
          op: assign_op.Equal
          rhs: {<Yes>}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<git-sh-setup>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'fqgitdir='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'fqgitdir='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'fqgitdir='> name:fqgitdir)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName GIT_DIR))}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'local='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'local='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'local='> name:local)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <git>
                      more_env: []
                      words: [{<git>} {<config>} {<--bool>} {<--get>} {<instaweb.local>}]
                      redirects: []
                      do_fork: T
                    )
                  right: <Id.Eof_RParen _>
                )
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'httpd='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'httpd='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd='> name:httpd)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <git>
                      more_env: []
                      words: [{<git>} {<config>} {<--get>} {<instaweb.httpd>}]
                      redirects: []
                      do_fork: T
                    )
                  right: <Id.Eof_RParen _>
                )
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'root='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'root='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'root='> name:root)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <git>
                      more_env: []
                      words: [{<git>} {<config>} {<--get>} {<instaweb.gitwebdir>}]
                      redirects: []
                      do_fork: T
                    )
                  right: <Id.Eof_RParen _>
                )
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'port='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'port='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'port='> name:port)
          op: assign_op.Equal
          rhs: 
            {
              (CommandSub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Simple
                    blame_tok: <git>
                    more_env: []
                    words: [{<git>} {<config>} {<--get>} {<instaweb.port>}]
                    redirects: []
                    do_fork: T
                  )
                right: <Id.Eof_RParen _>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'module_path='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'module_path='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'module_path='> name:module_path)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <git>
                      more_env: []
                      words: [{<git>} {<config>} {<--get>} {<instaweb.modulepath>}]
                      redirects: []
                      do_fork: T
                    )
                  right: <Id.Eof_RParen _>
                )
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'action='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'action='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action)
          op: assign_op.Equal
          rhs: {(DQ <browse>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'conf='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'conf='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'conf='> name:conf)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/gitweb/httpd.conf'>)}
        )
      ]
      redirects: []
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <test>
          more_env: []
          words: [{<test>} {<-z>} {(DQ ($ Id.VSub_DollarName httpd))}]
          redirects: []
          do_fork: T
        )
        (command.ShAssignment
          left: <Id.Lit_VarLike 'httpd='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'httpd='>
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd='> name:httpd)
              op: assign_op.Equal
              rhs: {(SQ <'lighttpd -f'>)}
            )
          ]
          redirects: []
        )
      ]
      ops: [<Id.Op_DAmp _>]
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <test>
          more_env: []
          words: [{<test>} {<-z>} {(DQ ($ Id.VSub_DollarName root))}]
          redirects: []
          do_fork: T
        )
        (command.ShAssignment
          left: <Id.Lit_VarLike 'root='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'root='>
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'root='> name:root)
              op: assign_op.Equal
              rhs: {(SQ <'@@GITWEBDIR@@'>)}
            )
          ]
          redirects: []
        )
      ]
      ops: [<Id.Op_DAmp _>]
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <test>
          more_env: []
          words: [{<test>} {<-z>} {(DQ ($ Id.VSub_DollarName port))}]
          redirects: []
          do_fork: T
        )
        (command.ShAssignment
          left: <Id.Lit_VarLike 'port='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'port='>
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'port='> name:port)
              op: assign_op.Equal
              rhs: {<1234>}
            )
          ]
          redirects: []
        )
      ]
      ops: [<Id.Op_DAmp _>]
    )
    (command.ShFunction
      name_tok: <resolve_full_httpd>
      name: resolve_full_httpd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName httpd))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: 
                    (pat.Words
                      words: [
                        {<Id.Lit_Star '*'> <apache2> <Id.Lit_Star '*'>}
                        {<Id.Lit_Star '*'> <lighttpd> <Id.Lit_Star '*'>}
                        {<Id.Lit_Star '*'> <httpd> <Id.Lit_Star '*'>}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Pipeline
                                  negated: <Id.KW_Bang '!'>
                                  children: [
                                    (command.Simple
                                      blame_tok: <echo>
                                      more_env: []
                                      words: [{<echo>} {(DQ ($ Id.VSub_DollarName httpd))}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <sane_grep>
                                      more_env: []
                                      words: [{<sane_grep>} {<-->} {(SQ <'-f *$'>)}]
                                      redirects: [
                                        (Redir
                                          op: <Id.Redir_Great '>'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {<'/dev/null'>}
                                        )
                                        (Redir
                                          op: <Id.Redir_GreatAnd '2>&'>
                                          loc: (redir_loc.Fd fd:2)
                                          arg: {<1>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                  ]
                                  ops: [<Id.Op_Pipe _>]
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'httpd='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'httpd='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd='> name:httpd)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName httpd) <' -f'>)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [228 255]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'full_httpd='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'full_httpd='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'full_httpd='> name:full_httpd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb.psgi'>)}
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'httpd_only='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'httpd_only='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd_only='> name:httpd_only)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name httpd>
                                  var_name: httpd
                                  suffix_op: 
                                    (suffix_op.Unary
                                      op: <Id.VOp1_DPercent '%%'>
                                      arg_word: {<' '> <Id.Lit_Other '*'>}
                                    )
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'> <webrick> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'full_httpd='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'full_httpd='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'full_httpd='> name:full_httpd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/webrick.rb'>)}
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'httpd_only='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'httpd_only='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd_only='> name:httpd_only)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name httpd>
                                  var_name: httpd
                                  suffix_op: 
                                    (suffix_op.Unary
                                      op: <Id.VOp1_DPercent '%%'>
                                      arg_word: {<' '> <Id.Lit_Other '*'>}
                                    )
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'httpd_only='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'httpd_only='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd_only='> name:httpd_only)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Pipeline
                              children: [
                                (command.Simple
                                  blame_tok: <echo>
                                  more_env: []
                                  words: [{<echo>} {($ Id.VSub_DollarName httpd)}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <cut>
                                  more_env: []
                                  words: [{<cut>} {<-f1>} {<-d> (SQ <' '>)}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_Pipe _>]
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Case
                          case_kw: <Id.KW_Case case>
                          to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName httpd_only))})
                          arms_start: <Id.KW_In in>
                          arms: [
                            (CaseArm
                              left: <'/'>
                              pattern: (pat.Words words:[{<'/'> <Id.Lit_Star '*'>}])
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.Simple
                                  blame_tok: <Id.Lit_Colon ':'>
                                  more_env: []
                                  words: [{<Id.Lit_Colon ':'>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              right: <Id.Op_DSemi _>
                            )
                            (CaseArm
                              left: <Id.Lit_Star '*'>
                              pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                              middle: <Id.Right_CasePat _>
                              action: [
                                (command.Simple
                                  blame_tok: <which>
                                  more_env: []
                                  words: [{<which>} {($ Id.VSub_DollarName httpd_only)}]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                    (Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                              right: <Id.Op_DSemi _>
                            )
                          ]
                          arms_end: <Id.KW_Esac esac>
                          redirects: []
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'full_httpd='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'full_httpd='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'full_httpd='> name:full_httpd)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName httpd)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [374 409]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.ForEach
                  keyword: <Id.KW_For for>
                  iter_names: [i]
                  iterable: 
                    (for_iter.Words
                      words: [
                        {<'/usr/local/sbin'>}
                        {<'/usr/sbin'>}
                        {(DQ ($ Id.VSub_DollarName root))}
                        {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb'>)}
                      ]
                    )
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.If
                          if_kw: <Id.KW_If if>
                          arms: [
                            (IfArm
                              keyword: <Id.KW_If if>
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [
                                        {<test>}
                                        {<-x>}
                                        {
                                          (DQ ($ Id.VSub_DollarName i) <'/'> 
                                            ($ Id.VSub_DollarName httpd_only)
                                          )
                                        }
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                )
                              then_kw: <Id.KW_Then then>
                              action: [
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'full_httpd='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'full_httpd='>
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'full_httpd='>
                                          name: full_httpd
                                        )
                                      op: assign_op.Equal
                                      rhs: 
                                        {($ Id.VSub_DollarName i) <'/'> ($ Id.VSub_DollarName httpd)}
                                    )
                                  ]
                                  redirects: []
                                )
                                (command.ControlFlow
                                  keyword: <Id.ControlFlow_Return return>
                                )
                              ]
                              spids: [458 471]
                            )
                          ]
                          else_action: []
                          fi_kw: <Id.KW_Fi fi>
                          redirects: []
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {
                      (DQ ($ Id.VSub_DollarName httpd_only) <' not found. Install '> 
                        ($ Id.VSub_DollarName httpd_only) <' or use'>
                      )
                    }
                    {(DQ <'--httpd to specify another httpd daemon.'>)}
                  ]
                  redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                  do_fork: T
                )
                (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <start_httpd>
      name: start_httpd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [{<test>} {<-f>} {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <say>
                      more_env: []
                      words: [{<say>} {(DQ <'Instance already running. Restarting...'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <stop_httpd>
                      more_env: []
                      words: [{<stop_httpd>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [527 539]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <resolve_full_httpd>
              more_env: []
              words: [{<resolve_full_httpd>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [
                {<mkdir>}
                {<-p>}
                {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd_only))}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'conf='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'conf='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'conf='> name:conf)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> 
                        ($ Id.VSub_DollarName httpd_only) <.conf>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {(DQ ($ Id.VSub_DollarName conf))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <configure_httpd>
                  more_env: []
                  words: [{<configure_httpd>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {<-f>}
                    {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb_config.perl'>)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <gitweb_conf>
                  more_env: []
                  words: [{<gitweb_conf>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName httpd))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: 
                    (pat.Words
                      words: [
                        {<Id.Lit_Star '*'> <mongoose> <Id.Lit_Star '*'>}
                        {<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <Id.VSub_DollarName '$full_httpd'>
                          more_env: []
                          words: [{($ Id.VSub_DollarName full_httpd)} {(DQ ($ Id.VSub_DollarName conf))}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Amp _>
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'pid='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'pid='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pid='> name:pid)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Bang '!')}
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [
                                        {<test>}
                                        {($ Id.VSub_QMark '?')}
                                        {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                        {<0>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [
                                {<echo>}
                                {
                                  (DQ <'Could not execute http daemon '> ($ Id.VSub_DollarName httpd) 
                                    <.>
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [661 673]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <cat>
                      more_env: []
                      words: [{<cat>}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)}
                        )
                        (Redir
                          op: <Id.Redir_DLess '<<'>
                          loc: (redir_loc.Fd fd:0)
                          arg: 
                            (redir_param.HereDoc
                              here_begin: {<EOF>}
                              here_end_tok: <Id.Undefined_Tok ''>
                              stdin_parts: [($ Id.VSub_DollarName pid) <'\n'>]
                            )
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <Id.VSub_DollarName '$full_httpd'>
                      more_env: []
                      words: [{($ Id.VSub_DollarName full_httpd)} {(DQ ($ Id.VSub_DollarName conf))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [
                                        {<test>}
                                        {($ Id.VSub_QMark '?')}
                                        {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                        {<0>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [
                                {<echo>}
                                {
                                  (DQ <'Could not execute http daemon '> ($ Id.VSub_DollarName httpd) 
                                    <.>
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [725 737]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <stop_httpd>
      name: stop_httpd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <kill>
                  more_env: []
                  words: [
                    {<kill>}
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <cat>
                            more_env: []
                            words: [{<cat>} {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName fqgitdir) <'/pid'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <httpd_is_ready>
      name: httpd_is_ready
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <Id.Left_DoubleQuote '"'>
              more_env: []
              words: [
                {(DQ ($ Id.VSub_DollarName PERL))}
                {<-MIO> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Socket> <Id.Lit_Colon ':'> 
                  <Id.Lit_Colon ':'> <INET>
                }
                {<-e>}
                {
                  (DQ <'\n'> <'local '> 
                    (word_part.EscapedLiteral
                      token: <Id.Lit_EscapedChar '\\$'>
                      ch: '$'
                    ) <'| = 1; # turn on autoflush\n'> <'exit if (IO::Socket::INET->new(\'127.0.0.1:'> 
                    ($ Id.VSub_DollarName port) <'\'));\n'> <'print \'Waiting for '> <Id.Lit_BadBackslash '\\'> <'\''> ($ Id.VSub_DollarName httpd) 
                    <Id.Lit_BadBackslash '\\'> <'\' to start ..\';\n'> <'do {\n'> <'\tprint \'.\';\n'> <'\tsleep(1);\n'> 
                    <'} until (IO::Socket::INET->new(\'127.0.0.1:'> ($ Id.VSub_DollarName port) <'\'));\n'> <'print qq! (done)'> <Id.Lit_BadBackslash '\\'> <'n!;\n'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Simple
              blame_tok: <test>
              more_env: []
              words: [{<test>} {($ Id.VSub_Pound '#')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>}]
              redirects: []
              do_fork: T
            )
          ]
        )
      body: 
        (command.DoGroup
          left: <Id.KW_Do do>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <--stop>
                  pattern: (pat.Words words:[{<--stop>} {<stop>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'action='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'action='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action)
                          op: assign_op.Equal
                          rhs: {(DQ <stop>)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <--start>
                  pattern: (pat.Words words:[{<--start>} {<start>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'action='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'action='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action)
                          op: assign_op.Equal
                          rhs: {(DQ <start>)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <--restart>
                  pattern: (pat.Words words:[{<--restart>} {<restart>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'action='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'action='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action)
                          op: assign_op.Equal
                          rhs: {(DQ <restart>)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <-l>
                  pattern: (pat.Words words:[{<-l>} {<--local>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'local='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'local='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'local='> name:local)
                          op: assign_op.Equal
                          rhs: {<true>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <-d>
                  pattern: (pat.Words words:[{<-d>} {<--httpd>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'httpd='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'httpd='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'httpd='> name:httpd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <-b>
                  pattern: (pat.Words words:[{<-b>} {<--browser>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'browser='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'browser='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'browser='> name:browser)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <-p>
                  pattern: (pat.Words words:[{<-p>} {<--port>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'port='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'port='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'port='> name:port)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <-m>
                  pattern: (pat.Words words:[{<-m>} {<--module-path>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'module_path='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'module_path='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'module_path='>
                              name: module_path
                            )
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <-->
                  pattern: (pat.Words words:[{<-->}])
                  middle: <Id.Right_CasePat _>
                  action: []
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>}]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.Simple
      blame_tok: <mkdir>
      more_env: []
      words: [{<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/gitweb/tmp'>)}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'GIT_EXEC_PATH='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'GIT_EXEC_PATH='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_EXEC_PATH='> name:GIT_EXEC_PATH)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (CommandSub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Simple
                      blame_tok: <git>
                      more_env: []
                      words: [{<git>} {<--exec-path>}]
                      redirects: []
                      do_fork: T
                    )
                  right: <Id.Eof_RParen _>
                )
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'GIT_DIR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'GIT_DIR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_DIR='> name:GIT_DIR)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName fqgitdir))}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'GITWEB_CONFIG='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'GITWEB_CONFIG='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GITWEB_CONFIG='> name:GITWEB_CONFIG)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb_config.perl'>)}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [{<export>} {<GIT_EXEC_PATH>} {<GIT_DIR>} {<GITWEB_CONFIG>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <webrick_conf>
      name: webrick_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'wrapper='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'wrapper='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'wrapper='> name:wrapper)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd) 
                        <'/wrapper.sh'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName wrapper))}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'#!@SHELL_PATH@\n'>
                        <'# we use this shell script wrapper around the real gitweb.cgi since\n'>
                        <
'# there appears to be no other way to pass arbitrary environment variables\n'
                        >
                        <'# into the CGI process\n'>
                        <'GIT_EXEC_PATH='>
                        ($ Id.VSub_DollarName GIT_EXEC_PATH)
                        <' GIT_DIR='>
                        ($ Id.VSub_DollarName GIT_DIR)
                        <' GITWEB_CONFIG='>
                        ($ Id.VSub_DollarName GITWEB_CONFIG)
                        <'\n'>
                        <'export GIT_EXEC_PATH GIT_DIR GITWEB_CONFIG\n'>
                        <'exec '>
                        ($ Id.VSub_DollarName root)
                        <'/gitweb.cgi\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <chmod>
              more_env: []
              words: [{<chmod>} {<Id.Lit_Other '+'> <x>} {(DQ ($ Id.VSub_DollarName wrapper))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: 
                    {
                      (DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd) 
                        <.rb>
                      )
                    }
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'#!/usr/bin/env ruby\n'>
                        <'require \'webrick\'\n'>
                        <'require \'logger\'\n'>
                        <'options = {\n'>
                        <'  :Port => '>
                        ($ Id.VSub_DollarName port)
                        <',\n'>
                        <'  :DocumentRoot => '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  :Logger => Logger.new(\''>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/error.log\'),\n'>
                        <'  :AccessLog => [\n'>
                        <'    [ Logger.new(\''>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/access.log\'),\n'>
                        <'      WEBrick::AccessLog::COMBINED_LOG_FORMAT ]\n'>
                        <'  ],\n'>
                        <'  :DirectoryIndex => ['>
                        <Id.Right_DoubleQuote '"'>
                        <gitweb.cgi>
                        <Id.Right_DoubleQuote '"'>
                        <'],\n'>
                        <'  :CGIInterpreter => '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName wrapper)
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  :StartCallback => lambda do\n'>
                        <'    File.open('>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/pid'>
                        <Id.Right_DoubleQuote '"'>
                        <', '>
                        <Id.Right_DoubleQuote '"'>
                        <w>
                        <Id.Right_DoubleQuote '"'>
                        <') { |f| f.puts Process.pid }\n'>
                        <'  end,\n'>
                        <'  :ServerType => WEBrick::Daemon,\n'>
                        <'}\n'>
                        <'options[:BindAddress] = \'127.0.0.1\' if '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName local)
                        <Id.Right_DoubleQuote '"'>
                        <' == '>
                        <Id.Right_DoubleQuote '"'>
                        <true>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'server = WEBrick::HTTPServer.new(options)\n'>
                        <'[\'INT\', \'TERM\'].each do |signal|\n'>
                        <'  trap(signal) {server.shutdown}\n'>
                        <'end\n'>
                        <'server.start\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <chmod>
              more_env: []
              words: [
                {<chmod>}
                {<Id.Lit_Other '+'> <x>}
                {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd) <.rb>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName conf))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <lighttpd_conf>
      name: lighttpd_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'server.document-root = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'server.port = '>
                        ($ Id.VSub_DollarName port)
                        <'\n'>
                        <'server.modules = ( '>
                        <Id.Right_DoubleQuote '"'>
                        <mod_setenv>
                        <Id.Right_DoubleQuote '"'>
                        <', '>
                        <Id.Right_DoubleQuote '"'>
                        <mod_cgi>
                        <Id.Right_DoubleQuote '"'>
                        <' )\n'>
                        <'server.indexfiles = ( '>
                        <Id.Right_DoubleQuote '"'>
                        <gitweb.cgi>
                        <Id.Right_DoubleQuote '"'>
                        <' )\n'>
                        <'server.pid-file = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/pid'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'server.errorlog = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/error.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'\n'>
                        <'# to enable, add '>
                        <Id.Right_DoubleQuote '"'>
                        <mod_access>
                        <Id.Right_DoubleQuote '"'>
                        <', '>
                        <Id.Right_DoubleQuote '"'>
                        <mod_accesslog>
                        <Id.Right_DoubleQuote '"'>
                        <' to server.modules\n'>
                        <'# variable above and uncomment this\n'>
                        <'#accesslog.filename = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/access.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'\n'>
                        <'setenv.add-environment = ( '>
                        <Id.Right_DoubleQuote '"'>
                        <PATH>
                        <Id.Right_DoubleQuote '"'>
                        <' => env.PATH, '>
                        <Id.Right_DoubleQuote '"'>
                        <GITWEB_CONFIG>
                        <Id.Right_DoubleQuote '"'>
                        <' => env.GITWEB_CONFIG )\n'>
                        <'\n'>
                        <'cgi.assign = ( '>
                        <Id.Right_DoubleQuote '"'>
                        <.cgi>
                        <Id.Right_DoubleQuote '"'>
                        <' => '>
                        <Id.Right_DoubleQuote '"'>
                        <Id.Right_DoubleQuote '"'>
                        <' )\n'>
                        <'\n'>
                        <'# mimetype mapping\n'>
                        <'mimetype.assign             = (\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.pdf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/pdf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.sig>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/pgp-signature'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.spl>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/futuresplash'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.class>
                        <Id.Right_DoubleQuote '"'>
                        <'        =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/octet-stream'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.ps>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/postscript'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.torrent>
                        <Id.Right_DoubleQuote '"'>
                        <'      =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bittorrent'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.dvi>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-dvi'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.gz>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-gzip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.pac>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-ns-proxy-autoconfig'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.swf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-shockwave-flash'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tar.gz>
                        <Id.Right_DoubleQuote '"'>
                        <'       =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tgz'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tgz>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tgz'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tar>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.zip>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/zip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.mp3>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.m3u>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-mpegurl'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.wma>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-ms-wma'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.wax>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-ms-wax'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.ogg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/ogg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.wav>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-wav'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.gif>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/gif'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.jpg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/jpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.jpeg>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/jpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.png>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/png'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.xbm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xbitmap'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.xpm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xpixmap'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.xwd>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xwindowdump'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.css>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/css'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.html>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/html'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.htm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/html'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.js>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/javascript'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.asc>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.c>
                        <Id.Right_DoubleQuote '"'>
                        <'            =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.cpp>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.log>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.conf>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.text>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.txt>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.dtd>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/xml'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.xml>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/xml'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.mpeg>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.mpg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.mov>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/quicktime'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.qt>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/quicktime'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.avi>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-msvideo'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.asf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-asf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.asx>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-asf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.wmv>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-wmv'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.bz2>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tbz>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip-compressed-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <.tar.bz2>
                        <Id.Right_DoubleQuote '"'>
                        <'      =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip-compressed-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'  '>
                        <Id.Right_DoubleQuote '"'>
                        <Id.Right_DoubleQuote '"'>
                        <'              =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <' )\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {<x> (DQ ($ Id.VSub_DollarName local))}
                    {<Id.Lit_Equals '='>}
                    {<xtrue>}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(SQ <'server.bind = "127.0.0.1"'>)}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_DGreat '>>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_DollarName conf))}
                    )
                  ]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <apache2_conf>
      name: apache2_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-z>} {(DQ ($ Id.VSub_DollarName module_path))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-d>} {(DQ <'/usr/lib/httpd/modules'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'module_path='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'module_path='>
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'module_path='>
                                  name: module_path
                                )
                              op: assign_op.Equal
                              rhs: {(DQ <'/usr/lib/httpd/modules'>)}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      ops: [<Id.Op_DAmp _>]
                    )
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-d>} {(DQ <'/usr/lib/apache2/modules'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'module_path='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'module_path='>
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'module_path='>
                                  name: module_path
                                )
                              op: assign_op.Equal
                              rhs: {(DQ <'/usr/lib/apache2/modules'>)}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      ops: [<Id.Op_DAmp _>]
                    )
                  ]
                  spids: [1861 1872]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'bind='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'bind='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bind='> name:bind)
                  op: assign_op.Equal
                  rhs: (rhs_word__Empty)
                )
              ]
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {<x> (DQ ($ Id.VSub_DollarName local))}
                    {<Id.Lit_Equals '='>}
                    {<xtrue>}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'bind='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'bind='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bind='> name:bind)
                      op: assign_op.Equal
                      rhs: {(SQ <'127.0.0.1:'>)}
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(SQ <'text/css css'>)}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/mime.types'>)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'ServerName '>
                        <Id.Right_DoubleQuote '"'>
                        <git-instaweb>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'ServerRoot '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'DocumentRoot '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'ErrorLog '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/error.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'CustomLog '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/access.log'>
                        <Id.Right_DoubleQuote '"'>
                        <' combined\n'>
                        <'PidFile '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/pid'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'Listen '>
                        ($ Id.VSub_DollarName bind)
                        ($ Id.VSub_DollarName port)
                        <'\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [mod]
              iterable: (for_iter.Words words:[{<mpm_event>} {<mpm_prefork>} {<mpm_worker>}])
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {<-e>}
                                    {($ Id.VSub_DollarName module_path) <'/mod_'> 
                                      (${ Id.VSub_Name mod) <.so>
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [
                                {<echo>}
                                {(DQ <'LoadModule '> (${ Id.VSub_Name mod) <'_module '>)}
                                {
                                  (DQ ($ Id.VSub_DollarName module_path) <'/mod_'> 
                                    (${ Id.VSub_Name mod) <.so>
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_DGreat '>>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                                )
                              ]
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Break break>
                            )
                          ]
                          spids: [2020 2034]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [mod]
              iterable: 
                (for_iter.Words
                  words: [{<mime>} {<dir>} {<env>} {<log_config>} {<authz_core>}]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {<-e>}
                                    {($ Id.VSub_DollarName module_path) <'/mod_'> 
                                      (${ Id.VSub_Name mod) <.so>
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [
                                {<echo>}
                                {(DQ <'LoadModule '> (${ Id.VSub_Name mod) <'_module '>)}
                                {
                                  (DQ ($ Id.VSub_DollarName module_path) <'/mod_'> 
                                    (${ Id.VSub_Name mod) <.so>
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_DGreat '>>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          spids: [2098 2112]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'TypesConfig '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/mime.types'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'DirectoryIndex gitweb.cgi\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.AndOr
                          children: [
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [
                                {<test>}
                                {<-f>}
                                {(DQ ($ Id.VSub_DollarName module_path) <'/mod_perl.so'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <sane_grep>
                              more_env: []
                              words: [
                                {<sane_grep>}
                                {(SQ <MOD_PERL>)}
                                {(DQ ($ Id.VSub_DollarName root) <'/gitweb.cgi'>)}
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_Great '>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<'/dev/null'>}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_DAmp _>]
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <cat>
                      more_env: []
                      words: [{<cat>}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_DGreat '>>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ ($ Id.VSub_DollarName conf))}
                        )
                        (Redir
                          op: <Id.Redir_DLess '<<'>
                          loc: (redir_loc.Fd fd:0)
                          arg: 
                            (redir_param.HereDoc
                              here_begin: {<EOF>}
                              here_end_tok: <Id.Undefined_Tok ''>
                              stdin_parts: [
                                <'LoadModule perl_module '>
                                ($ Id.VSub_DollarName module_path)
                                <'/mod_perl.so\n'>
                                <'PerlPassEnv GIT_DIR\n'>
                                <'PerlPassEnv GIT_EXEC_PATH\n'>
                                <'PerlPassEnv GITWEB_CONFIG\n'>
                                <'<Location /gitweb.cgi>\n'>
                                <'\tSetHandler perl-script\n'>
                                <'\tPerlResponseHandler ModPerl::Registry\n'>
                                <'\tPerlOptions +ParseHeaders\n'>
                                <'\tOptions +ExecCGI\n'>
                                <'</Location>\n'>
                              ]
                            )
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [2179 2208]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <resolve_full_httpd>
                  more_env: []
                  words: [{<resolve_full_httpd>}]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'list_mods='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'list_mods='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'list_mods='> name:list_mods)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (CommandSub
                            left_token: <Id.Left_DollarParen '$('>
                            child: 
                              (command.Pipeline
                                children: [
                                  (command.Simple
                                    blame_tok: <echo>
                                    more_env: []
                                    words: [{<echo>} {(DQ ($ Id.VSub_DollarName full_httpd))}]
                                    redirects: []
                                    do_fork: T
                                  )
                                  (command.Simple
                                    blame_tok: <sed>
                                    more_env: []
                                    words: [{<sed>} {(SQ <'s/-f$/-l/'>)}]
                                    redirects: []
                                    do_fork: T
                                  )
                                ]
                                ops: [<Id.Op_Pipe _>]
                              )
                            right: <Id.Eof_RParen _>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
                (command.AndOr
                  children: [
                    (command.Pipeline
                      children: [
                        (command.Simple
                          blame_tok: <Id.VSub_DollarName '$list_mods'>
                          more_env: []
                          words: [{($ Id.VSub_DollarName list_mods)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <sane_grep>
                          more_env: []
                          words: [{<sane_grep>} {(SQ <'mod_cgi\\.c'>)}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Great '>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<'/dev/null'>}
                            )
                            (Redir
                              op: <Id.Redir_GreatAnd '2>&'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<1>}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_Pipe _>]
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {<-f>}
                                    {(DQ ($ Id.VSub_DollarName module_path) <'/mod_cgi.so'>)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [
                                {<echo>}
                                {
                                  (DQ <'LoadModule cgi_module '> ($ Id.VSub_DollarName module_path) 
                                    <'/mod_cgi.so'>
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_DGreat '>>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          spids: [2289 2301]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.AndOr
                          children: [
                            (command.Pipeline
                              children: [
                                (command.Simple
                                  blame_tok: <Id.VSub_DollarName '$list_mods'>
                                  more_env: []
                                  words: [{($ Id.VSub_DollarName list_mods)}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <grep>
                                  more_env: []
                                  words: [{<grep>} {(SQ <'mod_cgid\\.c'>)}]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                    (Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_Pipe _>]
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Simple
                                          blame_tok: <test>
                                          more_env: []
                                          words: [
                                            {<test>}
                                            {<-f>}
                                            {(DQ ($ Id.VSub_DollarName module_path) <'/mod_cgid.so'>)}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <echo>
                                      more_env: []
                                      words: [
                                        {<echo>}
                                        {
                                          (DQ <'LoadModule cgid_module '> 
                                            ($ Id.VSub_DollarName module_path) <'/mod_cgid.so'>
                                          )
                                        }
                                      ]
                                      redirects: [
                                        (Redir
                                          op: <Id.Redir_DGreat '>>'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {(DQ ($ Id.VSub_DollarName conf))}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                  ]
                                  spids: [2342 2354]
                                )
                              ]
                              else_kw: <Id.KW_Else else>
                              else_action: [
                                (command.Simple
                                  blame_tok: <echo>
                                  more_env: []
                                  words: [{<echo>} {(DQ <'You have no CGI support!'>)}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.ControlFlow
                                  keyword: <Id.ControlFlow_Exit exit>
                                  arg_word: {<2>}
                                )
                              ]
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          ops: [<Id.Op_DPipe _>]
                        )
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'ScriptSock logs/gitweb.sock'>)}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_DGreat '>>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {(DQ ($ Id.VSub_DollarName conf))}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  ops: [<Id.Op_DPipe _>]
                )
                (command.Simple
                  blame_tok: <cat>
                  more_env: []
                  words: [{<cat>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_DGreat '>>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_DollarName conf))}
                    )
                    (Redir
                      op: <Id.Redir_DLess '<<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: 
                        (redir_param.HereDoc
                          here_begin: {<EOF>}
                          here_end_tok: <Id.Undefined_Tok ''>
                          stdin_parts: [
                            <'PassEnv GIT_DIR\n'>
                            <'PassEnv GIT_EXEC_PATH\n'>
                            <'PassEnv GITWEB_CONFIG\n'>
                            <'AddHandler cgi-script .cgi\n'>
                            <'<Location /gitweb.cgi>\n'>
                            <'\tOptions +ExecCGI\n'>
                            <'</Location>\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <mongoose_conf>
      name: mongoose_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName conf))}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'# Mongoose web server configuration file.\n'>
                        <'# Lines starting with \'#\' and empty lines are ignored.\n'>
                        <'# For detailed description of every option, visit\n'>
                        <'# http://code.google.com/p/mongoose/wiki/MongooseManual\n'>
                        <'\n'>
                        <'root\t\t'>
                        ($ Id.VSub_DollarName root)
                        <'\n'>
                        <'ports\t\t'>
                        ($ Id.VSub_DollarName port)
                        <'\n'>
                        <'index_files\tgitweb.cgi\n'>
                        <'#ssl_cert\t'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/ssl_cert.pem\n'>
                        <'error_log\t'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/error.log\n'>
                        <'access_log\t'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <'/access.log\n'>
                        <'\n'>
                        <'#cgi setup\n'>
                        <'cgi_env\t\tPATH='>
                        ($ Id.VSub_DollarName PATH)
                        <',GIT_DIR='>
                        ($ Id.VSub_DollarName GIT_DIR)
                        <',GIT_EXEC_PATH='>
                        ($ Id.VSub_DollarName GIT_EXEC_PATH)
                        <',GITWEB_CONFIG='>
                        ($ Id.VSub_DollarName GITWEB_CONFIG)
                        <'\n'>
                        <'cgi_interp\t'>
                        ($ Id.VSub_DollarName PERL)
                        <'\n'>
                        <'cgi_ext\t\tcgi,pl\n'>
                        <'\n'>
                        <'# mimetype mapping\n'>
                        <
'mime_types\t.gz=application/x-gzip,.tar.gz=application/x-tgz,.tgz=application/x-tgz,.tar=application/x-tar,.zip=application/zip,.gif=image/gif,.jpg=image/jpeg,.jpeg=image/jpeg,.png=image/png,.css=text/css,.html=text/html,.htm=text/html,.js=text/javascript,.c=text/plain,.cpp=text/plain,.log=text/plain,.conf=text/plain,.text=text/plain,.txt=text/plain,.dtd=text/xml,.bz2=application/x-bzip,.tbz=application/x-bzip-compressed-tar,.tar.bz2=application/x-bzip-compressed-tar\n'
                        >
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <plackup_conf>
      name: plackup_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb.psgi'>)}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'#!'>
                        ($ Id.VSub_DollarName PERL)
                        <'\n'>
                        <'\n'>
                        <'# gitweb - simple web interface to track changes in git repositories\n'>
                        <'#          PSGI wrapper and server starter (see http://plackperl.org)\n'>
                        <'\n'>
                        <'use strict;\n'>
                        <'\n'>
                        <'use IO::Handle;\n'>
                        <'use Plack::MIME;\n'>
                        <'use Plack::Builder;\n'>
                        <'use Plack::App::WrapCGI;\n'>
                        <
'use CGI::Emulate::PSGI 0.07; # minimum version required to work with gitweb\n'
                        >
                        <'\n'>
                        <'# mimetype mapping (from lighttpd_conf)\n'>
                        <'Plack::MIME->add_type(\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.pdf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/pdf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.sig>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/pgp-signature'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.spl>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/futuresplash'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.class>
                        <Id.Right_DoubleQuote '"'>
                        <'        =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/octet-stream'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.ps>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/postscript'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.torrent>
                        <Id.Right_DoubleQuote '"'>
                        <'      =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bittorrent'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.dvi>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-dvi'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.gz>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-gzip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.pac>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-ns-proxy-autoconfig'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.swf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-shockwave-flash'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tar.gz>
                        <Id.Right_DoubleQuote '"'>
                        <'       =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tgz'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tgz>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tgz'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tar>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.zip>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/zip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.mp3>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.m3u>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-mpegurl'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.wma>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-ms-wma'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.wax>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-ms-wax'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.ogg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/ogg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.wav>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'audio/x-wav'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.gif>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/gif'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.jpg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/jpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.jpeg>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/jpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.png>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/png'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.xbm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xbitmap'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.xpm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xpixmap'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.xwd>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'image/x-xwindowdump'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.css>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/css'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.html>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/html'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.htm>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/html'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.js>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/javascript'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.asc>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.c>
                        <Id.Right_DoubleQuote '"'>
                        <'            =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.cpp>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.log>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.conf>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.text>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.txt>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.dtd>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/xml'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.xml>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/xml'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.mpeg>
                        <Id.Right_DoubleQuote '"'>
                        <'         =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.mpg>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/mpeg'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.mov>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/quicktime'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.qt>
                        <Id.Right_DoubleQuote '"'>
                        <'           =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/quicktime'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.avi>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-msvideo'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.asf>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-asf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.asx>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-asf'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.wmv>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'video/x-ms-wmv'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.bz2>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tbz>
                        <Id.Right_DoubleQuote '"'>
                        <'          =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip-compressed-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <.tar.bz2>
                        <Id.Right_DoubleQuote '"'>
                        <'      =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'application/x-bzip-compressed-tar'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t'>
                        <Id.Right_DoubleQuote '"'>
                        <Id.Right_DoubleQuote '"'>
                        <'              =>      '>
                        <Id.Right_DoubleQuote '"'>
                        <'text/plain'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <');\n'>
                        <'\n'>
                        <'my '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app = builder {\n'>
                        <'\t# to be able to override '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{__WARN__} to log build time warnings\n'>
                        <'\tuse CGI::Carp; # it sets '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{__WARN__} itself\n'>
                        <'\n'>
                        <'\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/'>
                        ($ Id.VSub_DollarName httpd_only)
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'\topen my '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'access_log_fh, \'>>\', '>
                        <Id.Right_DoubleQuote '"'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir/access.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'\t\tor die '>
                        <Id.Right_DoubleQuote '"'>
                        <'Couldn\'t open access log \''>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir/access.log\': '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'!'>
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'\topen my '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'error_log_fh,  \'>>\', '>
                        <Id.Right_DoubleQuote '"'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir/error.log'>
                        <Id.Right_DoubleQuote '"'>
                        <'\n'>
                        <'\t\tor die '>
                        <Id.Right_DoubleQuote '"'>
                        <'Couldn\'t open error log \''>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'logdir/error.log\': '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'!'>
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'access_log_fh->autoflush(1);\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'error_log_fh->autoflush(1);\n'>
                        <'\n'>
                        <'\t# redirect build time warnings to error.log\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{\'__WARN__\'} = sub {\n'>
                        <'\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'msg = shift;\n'>
                        <'\t\t# timestamp warning like in CGI::Carp::warn\n'>
                        <'\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'stamp = CGI::Carp::stamp();\n'>
                        <'\t\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'msg =~ s/^/'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'stamp/gm;\n'>
                        <'\t\tprint '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'error_log_fh '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'msg;\n'>
                        <'\t};\n'>
                        <'\n'>
                        <'\t# write errors to error.log, access to access.log\n'>
                        <'\tenable \'AccessLog\',\n'>
                        <'\t\tformat => '>
                        <Id.Right_DoubleQuote '"'>
                        <combined>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t\tlogger => sub { print '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'access_log_fh @_; };\n'>
                        <'\tenable sub {\n'>
                        <'\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app = shift;\n'>
                        <'\t\tsub {\n'>
                        <'\t\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env = shift;\n'>
                        <'\t\t\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env->{\'psgi.errors\'} = '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'error_log_fh;\n'>
                        <'\t\t\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app->('>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env);\n'>
                        <'\t\t}\n'>
                        <'\t};\n'>
                        <'\t# gitweb currently doesn\'t work with '>
                        ($ Id.VSub_DollarName SIG)
                        <'{CHLD} set to \'IGNORE\',\n'>
                        <'\t# because it uses \'close '>
                        ($ Id.VSub_DollarName fd)
                        <' or die...\' on piped filehandle '>
                        ($ Id.VSub_DollarName fh)
                        <'\n'>
                        <'\t# (which causes the parent process to wait for child to finish).\n'>
                        <'\tenable_if { '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{\'CHLD\'} eq \'IGNORE\' } sub {\n'>
                        <'\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app = shift;\n'>
                        <'\t\tsub {\n'>
                        <'\t\t\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env = shift;\n'>
                        <'\t\t\tlocal '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{\'CHLD\'} = \'DEFAULT\';\n'>
                        <'\t\t\tlocal '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'SIG{\'CLD\'}  = \'DEFAULT\';\n'>
                        <'\t\t\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app->('>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'env);\n'>
                        <'\t\t}\n'>
                        <'\t};\n'>
                        <'\t# serve static files, i.e. stylesheet, images, script\n'>
                        <'\tenable \'Static\',\n'>
                        <'\t\tpath => sub { m!'>
                        <Id.Lit_BadBackslash '\\'>
                        <'.(js|css|png)'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'! && s!^/gitweb/!! },\n'>
                        <'\t\troot => '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <'/'>
                        <Id.Right_DoubleQuote '"'>
                        <',\n'>
                        <'\t\tencoding => \'utf-8\'; # encoding for \'text/plain\' files\n'>
                        <'\t# convert CGI application to PSGI app\n'>
                        <'\tPlack::App::WrapCGI->new(script => '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName root)
                        <'/gitweb.cgi'>
                        <Id.Right_DoubleQuote '"'>
                        <')->to_app;\n'>
                        <'};\n'>
                        <'\n'>
                        <'# make it runnable as standalone app,\n'>
                        <'# like it would be run via \'plackup\' utility\n'>
                        <'if (caller) {\n'>
                        <'\treturn '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app;\n'>
                        <'} else {\n'>
                        <'\trequire Plack::Runner;\n'>
                        <'\n'>
                        <'\tmy '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'runner = Plack::Runner->new();\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'runner->parse_options(qw(--env deployment --port '>
                        ($ Id.VSub_DollarName port)
                        <'),\n'>
                        <'\t\t\t\t'>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName local)
                        <Id.Right_DoubleQuote '"'>
                        <' ? qw(--host 127.0.0.1) : ());\n'>
                        <'\t'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'runner->run('>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'app);\n'>
                        <'}\n'>
                        <'__END__\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <chmod>
              more_env: []
              words: [
                {<chmod>}
                {<a> <Id.Lit_Other '+'> <x>}
                {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb.psgi'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName conf))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <gitweb_conf>
      name: gitweb_conf
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/gitweb_config.perl'>)}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'#!@@PERL@@\n'>
                        <'our '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'projectroot = '>
                        <Id.Right_DoubleQuote '"'>
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <dirname>
                              more_env: []
                              words: [{<dirname>} {(DQ ($ Id.VSub_DollarName fqgitdir))}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'our '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'git_temp = '>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName fqgitdir)
                        <'/gitweb/tmp'>
                        <Id.Right_DoubleQuote '"'>
                        <';\n'>
                        <'our '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'projects_list = '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'projectroot;\n'>
                        <'\n'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'feature{\'remote_heads\'}{\'default\'} = [1];\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <configure_httpd>
      name: configure_httpd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName httpd))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'> <lighttpd> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <lighttpd_conf>
                      more_env: []
                      words: [{<lighttpd_conf>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: 
                    (pat.Words
                      words: [
                        {<Id.Lit_Star '*'> <apache2> <Id.Lit_Star '*'>}
                        {<Id.Lit_Star '*'> <httpd> <Id.Lit_Star '*'>}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <apache2_conf>
                      more_env: []
                      words: [{<apache2_conf>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <webrick>
                  pattern: (pat.Words words:[{<webrick>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <webrick_conf>
                      more_env: []
                      words: [{<webrick_conf>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'> <mongoose> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <mongoose_conf>
                      more_env: []
                      words: [{<mongoose_conf>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <plackup_conf>
                      more_env: []
                      words: [{<plackup_conf>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Unknown httpd specified: '> ($ Id.VSub_DollarName httpd))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Case
      case_kw: <Id.KW_Case case>
      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName action))})
      arms_start: <Id.KW_In in>
      arms: [
        (CaseArm
          left: <stop>
          pattern: (pat.Words words:[{<stop>}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.Simple
              blame_tok: <stop_httpd>
              more_env: []
              words: [{<stop_httpd>}]
              redirects: []
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          right: <Id.Op_DSemi _>
        )
        (CaseArm
          left: <start>
          pattern: (pat.Words words:[{<start>}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.Simple
              blame_tok: <start_httpd>
              more_env: []
              words: [{<start_httpd>}]
              redirects: []
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          right: <Id.Op_DSemi _>
        )
        (CaseArm
          left: <restart>
          pattern: (pat.Words words:[{<restart>}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.Simple
              blame_tok: <stop_httpd>
              more_env: []
              words: [{<stop_httpd>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <start_httpd>
              more_env: []
              words: [{<start_httpd>}]
              redirects: []
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          right: <Id.Op_DSemi _>
        )
      ]
      arms_end: <Id.KW_Esac esac>
      redirects: []
    )
    (command.Simple
      blame_tok: <gitweb_conf>
      more_env: []
      words: [{<gitweb_conf>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <resolve_full_httpd>
      more_env: []
      words: [{<resolve_full_httpd>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <mkdir>
      more_env: []
      words: [
        {<mkdir>}
        {<-p>}
        {(DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd_only))}
      ]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'conf='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'conf='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'conf='> name:conf)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName fqgitdir) <'/gitweb/'> ($ Id.VSub_DollarName httpd_only) <.conf>)
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <configure_httpd>
      more_env: []
      words: [{<configure_httpd>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <start_httpd>
      more_env: []
      words: [{<start_httpd>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'url='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'url='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'url='> name:url)
          op: assign_op.Equal
          rhs: 
            {<http> <Id.Lit_Colon ':'> <'//127.0.0.1'> <Id.Lit_Colon ':'> ($ Id.VSub_DollarName port)}
        )
      ]
      redirects: []
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <test>
                      more_env: []
                      words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName browser))}]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <httpd_is_ready>
                  more_env: []
                  words: [{<httpd_is_ready>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [
                    {<git>}
                    {<web--browse>}
                    {<-b>}
                    {(DQ ($ Id.VSub_DollarName browser))}
                    {($ Id.VSub_DollarName url)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {($ Id.VSub_DollarName url)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>]
            )
          ]
          spids: [3493 3504]
        )
      ]
      else_kw: <Id.KW_Else else>
      else_action: [
        (command.AndOr
          children: [
            (command.Simple
              blame_tok: <httpd_is_ready>
              more_env: []
              words: [{<httpd_is_ready>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <git>
              more_env: []
              words: [
                {<git>}
                {<web--browse>}
                {<-c>}
                {(DQ <instaweb.browser>)}
                {($ Id.VSub_DollarName url)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {($ Id.VSub_DollarName url)}]
              redirects: []
              do_fork: T
            )
          ]
          ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>]
        )
      ]
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
  ]
)