(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OS)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [22]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ARCH)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$2')}
          spids: [25]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MAKE_TARGET)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$3')}
          spids: [28]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.Op_Less
                          left: {($ Id.VSub_Pound '$#')}
                          right: {<3>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'No arguments provided. This script is intended to be run from Maven.'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [32 45]
        )
      ]
    )
    (command.Case
      to_match: {($ Id.VSub_DollarName '$MAKE_TARGET')}
      arms: [
        (case_arm pat_list:[{<protoc-gen-javalite>}] spids:[69 70 73 -1])
        (case_arm pat_list:[{<protoc>}] spids:[76 77 80 -1])
        (case_arm
          pat_list: [{<Id.Lit_Star '*'>}]
          action: [
            (C {<echo>} {(DQ <'Target '>) (DQ ($ Id.VSub_DollarName '$TARGET')) (DQ <' invalid.'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [83 84 -1 104]
        )
      ]
    )
    (C {<export>} {<Id.Lit_VarLike 'PATH='> (DQ <'/bin:/usr/bin:'> ($ Id.VSub_DollarName '$PATH'))})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:E_PARAM_ERR)
          op: assign_op.Equal
          rhs: {<98>}
          spids: [131]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:E_ASSERT_FAILED)
          op: assign_op.Equal
          rhs: {<99>}
          spids: [134]
        )
      ]
    )
    (command.ShFunction
      name: fail
      body: 
        (BraceGroup
          children: [
            (C {<echo>} {(DQ <'ERROR: '> ($ Id.VSub_Number '$1'))})
            (C {<echo>})
            (command.ControlFlow
              token: <Id.ControlFlow_Exit exit>
              arg_word: {($ Id.VSub_DollarName '$E_ASSERT_FAILED')}
            )
          ]
        )
    )
    (command.ShFunction
      name: assertEq
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lineno)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$3')}
                  spids: [177]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$lineno'))} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} {(DQ <'lineno not given'>)})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {($ Id.VSub_DollarName '$E_PARAM_ERR')}
                    )
                  ]
                  spids: [181 194]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobNEqual
                                  left: {(DQ ($ Id.VSub_Number '$1'))}
                                  right: {(DQ ($ Id.VSub_Number '$2'))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} 
                      {
                        (DQ <'Assertion failed:  '> 
                          (word_part.EscapedLiteral
                            token: <Id.Lit_EscapedChar '\\"'>
                          ) ($ Id.VSub_Number '$1') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' == '> 
                          (word_part.EscapedLiteral
                            token: <Id.Lit_EscapedChar '\\"'>
                          ) ($ Id.VSub_Number '$2') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>)
                        )
                      }
                    )
                    (C {<echo>} 
                      {
                        (DQ <'File '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) 
                          ($ Id.VSub_Number '$0') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <', line '> 
                          ($ Id.VSub_DollarName '$lineno')
                        )
                      }
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {($ Id.VSub_DollarName '$E_ASSERT_FAILED')}
                    )
                  ]
                  spids: [213 230]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: checkArch
      body: 
        (BraceGroup
          children: [
            (C {<echo>})
            (C {<echo>} {(DQ <'Checking file format ...'>)})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.LogicalOr
                                  left: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobDEqual
                                      left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                                      right: {<windows>}
                                    )
                                  right: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobDEqual
                                      left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                                      right: {<linux>}
                                    )
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:format)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Pipeline
                                      children: [
                                        (C {<objdump>} {<-f>} {(DQ ($ Id.VSub_Number '$1'))})
                                        (C {<grep>} {<-o>} {(DQ <'file format .*'> <Id.Lit_Dollar '$'>)})
                                        (C {<grep>} {<-o>} {(DQ <'[^ ]*'> <Id.Lit_Dollar '$'>)})
                                      ]
                                      negated: F
                                    )
                                )
                              )
                            }
                          spids: [324]
                        )
                      ]
                    )
                    (C {<echo>} {<Id.Lit_VarLike 'Format='> ($ Id.VSub_DollarName '$format')})
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                                          right: {<linux>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.DBracket
                                              expr: 
                                                (bool_expr.Binary
                                                  op_id: Id.BoolBinary_GlobDEqual
                                                  left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                                  right: {<x86_32>}
                                                )
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<assertEq>} {($ Id.VSub_DollarName '$format')} 
                                      {(DQ <elf32-i386>)} {($ Id.VSub_DollarName '$LINENO')}
                                    )
                                  ]
                                  spids: [384 399]
                                )
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.DBracket
                                              expr: 
                                                (bool_expr.Binary
                                                  op_id: Id.BoolBinary_GlobDEqual
                                                  left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                                  right: {<x86_64>}
                                                )
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<assertEq>} {($ Id.VSub_DollarName '$format')} 
                                      {(DQ <elf64-x86-64>)} {($ Id.VSub_DollarName '$LINENO')}
                                    )
                                  ]
                                  spids: [413 428]
                                )
                              ]
                              else_action: [
                                (C {<fail>} {(DQ <'Unsupported arch: '> ($ Id.VSub_DollarName '$ARCH'))})
                              ]
                            )
                          ]
                          spids: [366 381]
                        )
                      ]
                      else_action: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (command.Sentence
                                      child: 
                                        (command.DBracket
                                          expr: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_GlobDEqual
                                              left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                              right: {<x86_32>}
                                            )
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                )
                              action: [
                                (C {<assertEq>} {($ Id.VSub_DollarName '$format')} {(DQ <pei-i386>)} 
                                  {($ Id.VSub_DollarName '$LINENO')}
                                )
                              ]
                              spids: [463 478]
                            )
                            (if_arm
                              cond: 
                                (condition.Shell
                                  commands: [
                                    (command.Sentence
                                      child: 
                                        (command.DBracket
                                          expr: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_GlobDEqual
                                              left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                              right: {<x86_64>}
                                            )
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                )
                              action: [
                                (C {<assertEq>} {($ Id.VSub_DollarName '$format')} {(DQ <pei-x86-64>)} 
                                  {($ Id.VSub_DollarName '$LINENO')}
                                )
                              ]
                              spids: [492 507]
                            )
                          ]
                          else_action: [
                            (C {<fail>} {(DQ <'Unsupported arch: '> ($ Id.VSub_DollarName '$ARCH'))})
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [296 321]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                                  right: {<osx>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:format)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Pipeline
                                      children: [
                                        (C {<file>} {<-b>} {(DQ ($ Id.VSub_Number '$1'))})
                                        (C {<grep>} {<-o>} {(DQ <'[^ ]*'> <Id.Lit_Dollar '$'>)})
                                      ]
                                      negated: F
                                    )
                                )
                              )
                            }
                          spids: [556]
                        )
                      ]
                    )
                    (C {<echo>} {<Id.Lit_VarLike 'Format='> ($ Id.VSub_DollarName '$format')})
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                          right: {<x86_32>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<assertEq>} {($ Id.VSub_DollarName '$format')} {(DQ <i386>)} 
                              {($ Id.VSub_DollarName '$LINENO')}
                            )
                          ]
                          spids: [587 602]
                        )
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                          right: {<x86_64>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<assertEq>} {($ Id.VSub_DollarName '$format')} {(DQ <x86_64>)} 
                              {($ Id.VSub_DollarName '$LINENO')}
                            )
                          ]
                          spids: [616 631]
                        )
                      ]
                      else_action: [
                        (C {<fail>} {(DQ <'Unsupported arch: '> ($ Id.VSub_DollarName '$ARCH'))})
                      ]
                    )
                  ]
                  spids: [538 553]
                )
              ]
              else_action: [(C {<fail>} {(DQ <'Unsupported system: '> ($ Id.VSub_DollarName '$OS'))})]
            )
            (C {<echo>})
          ]
        )
    )
    (command.ShFunction
      name: checkDependencies
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                                  right: {<windows>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dump_cmd)
                          op: assign_op.Equal
                          rhs: 
                            {(SQ <'objdump -x '>) (DQ ($ Id.VSub_Number '$1')) 
                              (SQ <' | fgrep "DLL Name"'>)
                            }
                          spids: [713]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:white_list)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <KERNEL32> <Id.Lit_BadBackslash '\\'> <.dll> 
                                <Id.Lit_BadBackslash '\\'> <'|msvcrt'> <Id.Lit_BadBackslash '\\'> <.dll>
                              )
                            }
                          spids: [725]
                        )
                      ]
                    )
                  ]
                  spids: [695 710]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                                  right: {<linux>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dump_cmd)
                          op: assign_op.Equal
                          rhs: {(SQ <'ldd '>) (DQ ($ Id.VSub_Number '$1'))}
                          spids: [755]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                          right: {<x86_32>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:white_list)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ <linux-gate> <Id.Lit_BadBackslash '\\'> <.so> 
                                        <Id.Lit_BadBackslash '\\'> <.1> <Id.Lit_BadBackslash '\\'> <'|libpthread'> <Id.Lit_BadBackslash '\\'> <.so> 
                                        <Id.Lit_BadBackslash '\\'> <.0> <Id.Lit_BadBackslash '\\'> <'|libm'> <Id.Lit_BadBackslash '\\'> <.so> <Id.Lit_BadBackslash '\\'> <.6> 
                                        <Id.Lit_BadBackslash '\\'> <'|libc'> <Id.Lit_BadBackslash '\\'> <.so> <Id.Lit_BadBackslash '\\'> <.6> <Id.Lit_BadBackslash '\\'> 
                                        <'|ld-linux'> <Id.Lit_BadBackslash '\\'> <.so> <Id.Lit_BadBackslash '\\'> <.2>
                                      )
                                    }
                                  spids: [782]
                                )
                              ]
                            )
                          ]
                          spids: [764 779]
                        )
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                          right: {<x86_64>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:white_list)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ <linux-vdso> <Id.Lit_BadBackslash '\\'> <.so> 
                                        <Id.Lit_BadBackslash '\\'> <.1> <Id.Lit_BadBackslash '\\'> <'|libpthread'> <Id.Lit_BadBackslash '\\'> <.so> 
                                        <Id.Lit_BadBackslash '\\'> <.0> <Id.Lit_BadBackslash '\\'> <'|libm'> <Id.Lit_BadBackslash '\\'> <.so> <Id.Lit_BadBackslash '\\'> <.6> 
                                        <Id.Lit_BadBackslash '\\'> <'|libc'> <Id.Lit_BadBackslash '\\'> <.so> <Id.Lit_BadBackslash '\\'> <.6> <Id.Lit_BadBackslash '\\'> 
                                        <'|ld-linux-x86-64'> <Id.Lit_BadBackslash '\\'> <.so> <Id.Lit_BadBackslash '\\'> <.2>
                                      )
                                    }
                                  spids: [834]
                                )
                              ]
                            )
                          ]
                          spids: [816 831]
                        )
                      ]
                    )
                  ]
                  spids: [737 752]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                                  right: {<osx>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dump_cmd)
                          op: assign_op.Equal
                          rhs: 
                            {(SQ <'otool -L '>) (DQ ($ Id.VSub_Number '$1')) (SQ <' | fgrep dylib'>)}
                          spids: [889]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:white_list)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <libz> <Id.Lit_BadBackslash '\\'> <.1> <Id.Lit_BadBackslash '\\'> 
                                <.dylib> <Id.Lit_BadBackslash '\\'> <'|libstdc++'> <Id.Lit_BadBackslash '\\'> <.6> <Id.Lit_BadBackslash '\\'> 
                                <.dylib> <Id.Lit_BadBackslash '\\'> <'|libSystem'> <Id.Lit_BadBackslash '\\'> <.B> <Id.Lit_BadBackslash '\\'> 
                                <.dylib>
                              )
                            }
                          spids: [901]
                        )
                      ]
                    )
                  ]
                  spids: [871 886]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.LogicalOr
                                  left: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ ($ Id.VSub_DollarName '$white_list'))}
                                    )
                                  right: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ ($ Id.VSub_DollarName '$dump_cmd'))}
                                    )
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<fail>} 
                      {
                        (DQ <'Unsupported platform '> ($ Id.VSub_DollarName '$OS') <-> 
                          ($ Id.VSub_DollarName '$ARCH') <.>
                        )
                      }
                    )
                  ]
                  spids: [926 947]
                )
              ]
            )
            (C {<echo>} {(DQ <'Checking for expected dependencies ...'>)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Pipeline
                  children: [
                    (C {<eval>} {($ Id.VSub_DollarName '$dump_cmd')})
                    (C {<grep>} {<-i>} {(DQ ($ Id.VSub_DollarName '$white_list'))})
                  ]
                  negated: F
                )
                (C {<fail>} {(DQ <'doesn\'t show any expected dependencies'>)})
              ]
            )
            (C {<echo>} {(DQ <'Checking for unexpected dependencies ...'>)})
            (command.Pipeline
              children: [
                (C {<eval>} {($ Id.VSub_DollarName '$dump_cmd')})
                (C {<grep>} {<-i>} {<-v>} {(DQ ($ Id.VSub_DollarName '$white_list'))})
              ]
              negated: F
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ret)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [1018]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {($ Id.VSub_DollarName '$ret')}
                                  right: {<0>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<fail>} {(DQ <'found unexpected dependencies (listed above).'>)})]
                  spids: [1022 1035]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobNEqual
                                  left: {($ Id.VSub_DollarName '$ret')}
                                  right: {<1>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<fail>} {(DQ <'Error when checking dependencies.'>)})]
                  spids: [1045 1058]
                )
              ]
            )
            (C {<echo>} {(DQ <'Dependencies look good.'>)})
            (C {<echo>})
          ]
        )
    )
    (C {<echo>} 
      {
        (DQ <'Building protoc, OS='> ($ Id.VSub_DollarName '$OS') <' ARCH='> 
          ($ Id.VSub_DollarName '$ARCH') <' TARGET='> ($ Id.VSub_DollarName '$TARGET')
        )
      }
    )
    (C {<cd>} 
      {
        (DQ 
          (command_sub
            left_token: <Id.Left_DollarParen '$('>
            child: (C {<dirname>} {(DQ ($ Id.VSub_Number '$0'))})
          )
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:WORKING_DIR)
          op: assign_op.Equal
          rhs: {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>}))}
          spids: [1117]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CONFIGURE_ARGS)
          op: assign_op.Equal
          rhs: {(DQ <--disable-shared>)}
          spids: [1122]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TARGET_FILE)
          op: assign_op.Equal
          rhs: {<'target/'> ($ Id.VSub_DollarName '$MAKE_TARGET') <.exe>}
          spids: [1128]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobDEqual
                          left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                          right: {<windows>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MAKE_TARGET)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name MAKE_TARGET) <.exe>)}
                  spids: [1151]
                )
              ]
            )
          ]
          spids: [1133 1148]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CXXFLAGS)
          op: assign_op.Equal
          rhs: {(DQ <-DNDEBUG>)}
          spids: [1168]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LDFLAGS)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [1173]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobDEqual
                          left: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<uname>})
                                )
                              )
                            }
                          right: {<CYGWIN> <Id.Lit_Other '*'>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<assertEq>} {(DQ ($ Id.VSub_DollarName '$OS'))} {<windows>} 
              {($ Id.VSub_DollarName '$LINENO')}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                  right: {<x86_64>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CONFIGURE_ARGS)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName '$CONFIGURE_ARGS') 
                                <' --host=x86_64-w64-mingw32'>
                              )
                            }
                          spids: [1236]
                        )
                      ]
                    )
                  ]
                  spids: [1218 1233]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                  right: {<x86_32>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CONFIGURE_ARGS)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName '$CONFIGURE_ARGS') <' --host=i686-pc-mingw32'>)
                            }
                          spids: [1261]
                        )
                      ]
                    )
                  ]
                  spids: [1243 1258]
                )
              ]
              else_action: [
                (C {<fail>} {(DQ <'Unsupported arch by CYGWIN: '> ($ Id.VSub_DollarName '$ARCH'))})
              ]
            )
          ]
          spids: [1178 1196]
        )
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobDEqual
                          left: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<uname>})
                                )
                              )
                            }
                          right: {<MINGW32> <Id.Lit_Other '*'>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<assertEq>} {(DQ ($ Id.VSub_DollarName '$OS'))} {<windows>} 
              {($ Id.VSub_DollarName '$LINENO')}
            )
            (C {<assertEq>} {(DQ ($ Id.VSub_DollarName '$ARCH'))} {<x86_32>} 
              {($ Id.VSub_DollarName '$LINENO')}
            )
          ]
          spids: [1281 1299]
        )
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobDEqual
                          left: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<uname>})
                                )
                              )
                            }
                          right: {<MINGW64> <Id.Lit_Other '*'>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<assertEq>} {(DQ ($ Id.VSub_DollarName '$OS'))} {<windows>} 
              {($ Id.VSub_DollarName '$LINENO')}
            )
            (C {<assertEq>} {(DQ ($ Id.VSub_DollarName '$ARCH'))} {<x86_64>} 
              {($ Id.VSub_DollarName '$LINENO')}
            )
          ]
          spids: [1323 1341]
        )
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobDEqual
                          left: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<uname>})
                                )
                              )
                            }
                          right: {<Linux> <Id.Lit_Other '*'>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                                  right: {<linux>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                          right: {<x86_64>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:CXXFLAGS)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName '$CXXFLAGS') <' -m64'>)}
                                  spids: [1422]
                                )
                              ]
                            )
                          ]
                          spids: [1404 1419]
                        )
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                          right: {<x86_32>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:CXXFLAGS)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName '$CXXFLAGS') <' -m32'>)}
                                  spids: [1447]
                                )
                              ]
                            )
                          ]
                          spids: [1429 1444]
                        )
                      ]
                      else_action: [
                        (C {<fail>} {(DQ <'Unsupported arch: '> ($ Id.VSub_DollarName '$ARCH'))})
                      ]
                    )
                  ]
                  spids: [1386 1401]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                                  right: {<windows>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CONFIGURE_ARGS)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$CONFIGURE_ARGS'))}
                          spids: [1498]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                          right: {<x86_64>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:CONFIGURE_ARGS)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ($ Id.VSub_DollarName '$CONFIGURE_ARGS') 
                                        <' --host=x86_64-w64-mingw32'>
                                      )
                                    }
                                  spids: [1522]
                                )
                              ]
                            )
                          ]
                          spids: [1504 1519]
                        )
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                          right: {<x86_32>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:CONFIGURE_ARGS)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ($ Id.VSub_DollarName '$CONFIGURE_ARGS') 
                                        <' --host=i686-w64-mingw32'>
                                      )
                                    }
                                  spids: [1547]
                                )
                              ]
                            )
                          ]
                          spids: [1529 1544]
                        )
                      ]
                      else_action: [
                        (C {<fail>} {(DQ <'Unsupported arch: '> ($ Id.VSub_DollarName '$ARCH'))})
                      ]
                    )
                  ]
                  spids: [1468 1483]
                )
              ]
              else_action: [
                (C {<fail>} 
                  {
                    (DQ <'Cannot build '> ($ Id.VSub_DollarName '$OS') <' on '> 
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<uname>})
                      )
                    )
                  }
                )
              ]
            )
          ]
          spids: [1365 1383]
        )
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobDEqual
                          left: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: (C {<uname>})
                                )
                              )
                            }
                          right: {<Darwin> <Id.Lit_Other '*'>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<assertEq>} {(DQ ($ Id.VSub_DollarName '$OS'))} {<osx>} 
              {($ Id.VSub_DollarName '$LINENO')}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CXXFLAGS)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$CXXFLAGS') <' -mmacosx-version-min=10.7'>)}
                  spids: [1621]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                  right: {<x86_64>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CXXFLAGS)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$CXXFLAGS') <' -m64'>)}
                          spids: [1646]
                        )
                      ]
                    )
                  ]
                  spids: [1628 1643]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$ARCH'))}
                                  right: {<x86_32>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CXXFLAGS)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$CXXFLAGS') <' -m32'>)}
                          spids: [1671]
                        )
                      ]
                    )
                  ]
                  spids: [1653 1668]
                )
              ]
              else_action: [(C {<fail>} {(DQ <'Unsupported arch: '> ($ Id.VSub_DollarName '$ARCH'))})]
            )
          ]
          spids: [1585 1603]
        )
      ]
      else_action: [
        (C {<fail>} 
          {
            (DQ <'Unsupported system: '> 
              (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<uname>}))
            )
          }
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobNEqual
                          left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                          right: {<osx>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:LDFLAGS)
                  op: assign_op.Equal
                  rhs: 
                    {(DQ ($ Id.VSub_DollarName '$LDFLAGS') <' -static-libgcc -static-libstdc++ -s'>)}
                  spids: [1733]
                )
              ]
            )
          ]
          spids: [1715 1730]
        )
      ]
    )
    (C {<export>} {<CXXFLAGS>} {<LDFLAGS>})
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe]
      children: [
        (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKING_DIR')) <'/..'>})
        (C {<'./configure'>} {($ Id.VSub_DollarName '$CONFIGURE_ARGS')})
        (C {<cd>} {<src>})
        (C {<make>} {<clean>})
        (C {<make>} {($ Id.VSub_DollarName '$MAKE_TARGET')})
        (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKING_DIR'))})
        (C {<mkdir>} {<-p>} {<target>})
        (C {<cp>} {<'../src/'> ($ Id.VSub_DollarName '$MAKE_TARGET')} 
          {($ Id.VSub_DollarName '$TARGET_FILE')}
        )
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobDEqual
                          left: {(DQ ($ Id.VSub_DollarName '$OS'))}
                          right: {<osx>}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<strip>} {($ Id.VSub_DollarName '$TARGET_FILE')})
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
          ]
          spids: [1816 1831]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<checkArch>} {($ Id.VSub_DollarName '$TARGET_FILE')})
        (C {<checkDependencies>} {($ Id.VSub_DollarName '$TARGET_FILE')})
      ]
    )
  ]
)