(command.CommandList
  children: [
    (C {<set>} {<-ex>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_ne
                          left: {($ Id.VSub_Pound '$#')}
                          right: {<2>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} 
              {
                (DQ <'Usage: '> ($ Id.VSub_Number '$0') 
                  <' fuzzer_mode_build_dir no_fuzzer_mode_build_dir'>
                )
              }
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [48 61]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:fuzzer_mode_build_dir)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [80]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:no_fuzzer_mode_build_dir)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$2')}
          spids: [83]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      children: [
                        (C {<grep>} {<-q>} {(SQ <'^FUZZ:'>)} 
                          {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/CMakeCache.txt'>)}
                        )
                      ]
                      negated: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} 
              {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <' was not built with -DFUZZ=1'>)}
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [92 110]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<grep>} {<-q>} {(SQ <'^NO_FUZZER_MODE:'>)} 
                      {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/CMakeCache.txt'>)}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} 
              {
                (DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') 
                  <' was built with -DNO_FUZZER_MODE=1'>
                )
              }
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [128 144]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      children: [
                        (C {<grep>} {<-q>} {(SQ <'^FUZZ:'>)} 
                          {
                            (DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_build_dir') <'/CMakeCache.txt'>)
                          }
                        )
                      ]
                      negated: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} 
              {
                (DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_build_dir') 
                  <' was not built with -DFUZZ=1'>
                )
              }
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [162 180]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      children: [
                        (C {<grep>} {<-q>} {(SQ <'^NO_FUZZER_MODE:'>)} 
                          {
                            (DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_build_dir') <'/CMakeCache.txt'>)
                          }
                        )
                      ]
                      negated: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} 
              {
                (DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_build_dir') 
                  <' was not built with -DNO_FUZZER_MODE=1'>
                )
              }
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [198 216]
        )
      ]
    )
    (command.ShFunction
      name: assert_directory
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.LogicalNot
                                  child: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_d
                                      child: {($ Id.VSub_Number '$1')}
                                    )
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} {(DQ ($ Id.VSub_Number '$1') <' not found.'>)})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [246 259]
                )
              ]
            )
          ]
        )
    )
    (C {<assert_directory>} {<client_corpus>})
    (C {<assert_directory>} {<client_corpus_no_fuzzer_mode>})
    (C {<assert_directory>} {<server_corpus>})
    (C {<assert_directory>} {<server_corpus_no_fuzzer_mode>})
    (C {<assert_directory>} {<dtls_client_corpus>})
    (C {<assert_directory>} {<dtls_server_corpus>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:fuzzer_mode_shim)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<readlink>} {<-f>} 
                    {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/ssl/test/bssl_shim'>)}
                  )
              )
            }
          spids: [310]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:no_fuzzer_mode_shim)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<readlink>} {<-f>} 
                    {(DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_build_dir') <'/ssl/test/bssl_shim'>)}
                  )
              )
            }
          spids: [322]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:fuzzer_mode_transcripts)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: (C {<mktemp>} {<-d>} {(SQ <'/tmp/boringssl-transcript.XXXXXX'>)})
              )
            }
          spids: [337]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:no_fuzzer_mode_transcripts)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: (C {<mktemp>} {<-d>} {(SQ <'/tmp/boringssl-transcript.XXXXXX'>)})
              )
            }
          spids: [348]
        )
      ]
    )
    (C {<echo>} {<Recording>} {<fuzzer-mode>} {<transcripts>})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Subshell
          child: 
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<cd>} {<'../ssl/test/runner/'>})
                (C {<go>} {<test>} {<-shim-path>} {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_shim'))} 
                  {<-transcript-dir>} {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_transcripts'))} {<-fuzzer>} {<-deterministic>}
                )
              ]
            )
        )
        (C {<true>})
      ]
    )
    (C {<echo>} {<Recording>} {<non-fuzzer-mode>} {<transcripts>})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Subshell
          child: 
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<cd>} {<'../ssl/test/runner/'>})
                (C {<go>} {<test>} {<-shim-path>} {(DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_shim'))} 
                  {<-transcript-dir>} {(DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_transcripts'))} {<-deterministic>}
                )
              ]
            )
        )
        (C {<true>})
      ]
    )
    (command.ShFunction
      name: minimize_corpus
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'fuzzer='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} {<Id.Lit_VarLike 'corpus='> (DQ ($ Id.VSub_Number '$2'))})
            (C {<echo>} {(DQ <'Minimizing '> (${ Id.VSub_Name corpus))})
            (C {<mv>} {(DQ ($ Id.VSub_DollarName '$corpus'))} {(DQ (${ Id.VSub_Name corpus) <_old>)})
            (C {<mkdir>} {(DQ ($ Id.VSub_DollarName '$corpus'))})
            (C {(DQ ($ Id.VSub_DollarName '$fuzzer'))} {<-max_len> <Id.Lit_Equals '='> <50000>} 
              {<-merge> <Id.Lit_Equals '='> <1>} {(DQ ($ Id.VSub_DollarName '$corpus'))} {(DQ (${ Id.VSub_Name corpus) <_old>)}
            )
            (C {<rm>} {<-Rf>} {(DQ (${ Id.VSub_Name corpus) <_old>)})
          ]
        )
    )
    (C {<minimize_corpus>} {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/fuzz/client'>)} 
      {<client_corpus>}
    )
    (C {<minimize_corpus>} {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/fuzz/server'>)} 
      {<server_corpus>}
    )
    (C {<minimize_corpus>} {(DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_build_dir') <'/fuzz/client'>)} 
      {<client_corpus_no_fuzzer_mode>}
    )
    (C {<minimize_corpus>} {(DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_build_dir') <'/fuzz/server'>)} 
      {<server_corpus_no_fuzzer_mode>}
    )
    (C {<minimize_corpus>} {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/fuzz/dtls_client'>)} 
      {<dtls_client_corpus>}
    )
    (C {<minimize_corpus>} {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/fuzz/dtls_server'>)} 
      {<dtls_server_corpus>}
    )
    (C {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/fuzz/client'>)} 
      {<-max_len> <Id.Lit_Equals '='> <50000>} {<-merge> <Id.Lit_Equals '='> <1>} {<client_corpus>} 
      {(DQ (${ Id.VSub_Name fuzzer_mode_transcripts) <'/tls/client'>)}
    )
    (C {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/fuzz/server'>)} 
      {<-max_len> <Id.Lit_Equals '='> <50000>} {<-merge> <Id.Lit_Equals '='> <1>} {<server_corpus>} 
      {(DQ (${ Id.VSub_Name fuzzer_mode_transcripts) <'/tls/server'>)}
    )
    (C {(DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_build_dir') <'/fuzz/client'>)} 
      {<-max_len> <Id.Lit_Equals '='> <50000>} {<-merge> <Id.Lit_Equals '='> <1>} {<client_corpus_no_fuzzer_mode>} 
      {(DQ (${ Id.VSub_Name no_fuzzer_mode_transcripts) <'/tls/client'>)}
    )
    (C {(DQ ($ Id.VSub_DollarName '$no_fuzzer_mode_build_dir') <'/fuzz/server'>)} 
      {<-max_len> <Id.Lit_Equals '='> <50000>} {<-merge> <Id.Lit_Equals '='> <1>} {<server_corpus_no_fuzzer_mode>} 
      {(DQ (${ Id.VSub_Name no_fuzzer_mode_transcripts) <'/tls/server'>)}
    )
    (C {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/fuzz/dtls_client'>)} 
      {<-max_len> <Id.Lit_Equals '='> <50000>} {<-merge> <Id.Lit_Equals '='> <1>} {<dtls_client_corpus>} 
      {(DQ (${ Id.VSub_Name fuzzer_mode_transcripts) <'/dtls/client'>)}
    )
    (C {(DQ ($ Id.VSub_DollarName '$fuzzer_mode_build_dir') <'/fuzz/dtls_server'>)} 
      {<-max_len> <Id.Lit_Equals '='> <50000>} {<-merge> <Id.Lit_Equals '='> <1>} {<dtls_server_corpus>} 
      {(DQ (${ Id.VSub_Name fuzzer_mode_transcripts) <'/dtls/server'>)}
    )
  ]
)