(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:include_dir)
          op: Equal
          rhs: {(../../include/openssl)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:out)
          op: Equal
          rhs: {(${ VSub_Name include_dir) (/lhash_macros.h)}
          spids: [7]
        )
      ]
      spids: [7]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{($ VSub_Name '$out')} spids:[16])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {
              (DQ ('/* Copyright (c) 2014, Google Inc.\n') (' *\n') 
                (' * Permission to use, copy, modify, and/or distribute this software for any\n') (' * purpose with or without fee is hereby granted, provided that the above\n') 
                (' * copyright notice and this permission notice appear in all copies.\n') (' *\n') (' * THE SOFTWARE IS PROVIDED ') (Right_DoubleQuote '"') ('AS IS') (Right_DoubleQuote '"') 
                (' AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n') (' * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n') 
                (
' * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n'
                ) (' * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n') 
                (
' * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\n'
                ) (' * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\n') 
                (' * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */\n') ('\n') ('#if !defined(IN_LHASH_H)\n') ('#error ') (Right_DoubleQuote '"') 
                ("Don't include this file directly. Include lhash.h") (Right_DoubleQuote '"') ('\n') ('#endif\n') ('\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [20]
        )
      ]
    )
    (FuncDef
      name: output_lhash
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:type)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [60]
                )
              ]
              spids: [60]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out')}
                  spids: [67]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('/* ') (${ VSub_Name type) (' */\n') ('#define lh_') (${ VSub_Name type) 
                        ('_new(hash, comp)') (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('\n') ('((LHASH_OF(') (${ VSub_Name type) 
                        (')*) lh_new(CHECKED_CAST(lhash_hash_func, uint32_t (*) (const ') (${ VSub_Name type) (' *), hash), CHECKED_CAST(lhash_cmp_func, int (*) (const ') (${ VSub_Name type) 
                        (' *a, const ') (${ VSub_Name type) (' *b), comp)))\n') ('\n') ('#define lh_') (${ VSub_Name type) ('_free(lh)') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('\n') ('  lh_free(CHECKED_CAST(_LHASH*, LHASH_OF(') (${ VSub_Name type) (')*, lh));\n') ('\n') 
                        ('#define lh_') (${ VSub_Name type) ('_num_items(lh)') (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('\n') 
                        ('  lh_num_items(CHECKED_CAST(_LHASH*, LHASH_OF(') (${ VSub_Name type) (')*, lh))\n') ('\n') ('#define lh_') (${ VSub_Name type) ('_retrieve(lh, data)') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('\n') ('  ((') (${ VSub_Name type) ('*) lh_retrieve(CHECKED_CAST(_LHASH*, LHASH_OF(') 
                        (${ VSub_Name type) (')*, lh), CHECKED_CAST(void*, ') (${ VSub_Name type) ('*, data)))\n') ('\n') ('#define lh_') 
                        (${ VSub_Name type) ('_insert(lh, old_data, data)') (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('\n') 
                        ('  lh_insert(CHECKED_CAST(_LHASH*, LHASH_OF(') (${ VSub_Name type) (')*, lh), CHECKED_CAST(void**, ') (${ VSub_Name type) 
                        ('**, old_data), CHECKED_CAST(void*, ') (${ VSub_Name type) ('*, data))\n') ('\n') ('#define lh_') (${ VSub_Name type) ('_delete(lh, data)') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('\n') ('  ((') (${ VSub_Name type) ('*) lh_delete(CHECKED_CAST(_LHASH*, LHASH_OF(') (${ VSub_Name type) 
                        (')*, lh), CHECKED_CAST(void*, ') (${ VSub_Name type) ('*, data)))\n') ('\n') ('#define lh_') (${ VSub_Name type) ('_doall(lh, func)') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('\n') ('  lh_doall(CHECKED_CAST(_LHASH*, LHASH_OF(') (${ VSub_Name type) 
                        (')*, lh), CHECKED_CAST(void (*)(void*), void (*) (') (${ VSub_Name type) ('*), func));\n') ('\n') ('#define lh_') (${ VSub_Name type) 
                        ('_doall_arg(lh, func, arg)') (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('\n') 
                        ('  lh_doall_arg(CHECKED_CAST(_LHASH*, LHASH_OF(') (${ VSub_Name type) (')*, lh), CHECKED_CAST(void (*)(void*, void*), void (*) (') (${ VSub_Name type) 
                        ('*, void*), func), arg);\n') ('\n') ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [71]
                )
              ]
            )
          ]
          spids: [57]
        )
      spids: [52 56]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:lhash_types)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Pipeline
                        children: [
                          (C {(cat)} {(${ VSub_Name include_dir) (/lhash.h)})
                          (C {(grep)} {(SQ <'^ \\* LHASH_OF:'>)})
                          (C {(sed)} {(-e)} {(SQ <'s/.*LHASH_OF://'>)} {(-e)} {(SQ <'s/ .*//'>)})
                        ]
                        negated: F
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [234 265]
              )
            }
          spids: [233]
        )
      ]
      spids: [233]
    )
    (ForEach
      iter_name: type
      iter_words: [{($ VSub_Name '$lhash_types')}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (C {(echo)} {(Hash)} {(of)} {(${ VSub_Name type)})
            (C {(output_lhash)} {(DQ (${ VSub_Name type))})
          ]
          spids: [277 299]
        )
      spids: [273 275]
    )
    (C {(clang-format)} {(-i)} {($ VSub_Name '$out')})
  ]
)