(command.CommandList
  children: [
    (C {<set>} {<-ev>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DTC_UPSTREAM_PATH)
          op: assign_op.Equal
          rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})) <'/../dtc'>}
          spids: [84]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DTC_LINUX_PATH)
          op: assign_op.Equal
          rhs: {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<pwd>})) <'/scripts/dtc'>}
          spids: [92]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DTC_SOURCE)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'checks.c data.c dtc.c dtc.h flattree.c fstree.c livetree.c srcpos.c '> 
                <'\t\tsrcpos.h treesource.c util.c util.h version_gen.h Makefile.dtc '> <'\t\tdtc-lexer.l dtc-parser.y'>
              )
            }
          spids: [101]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DTC_GENERATED)
          op: assign_op.Equal
          rhs: {(DQ <'dtc-lexer.lex.c dtc-parser.tab.c dtc-parser.tab.h'>)}
          spids: [110]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LIBFDT_SOURCE)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                <
'Makefile.libfdt fdt.c fdt.h fdt_empty_tree.c fdt_ro.c fdt_rw.c fdt_strerror.c fdt_sw.c fdt_wip.c libfdt.h libfdt_env.h libfdt_internal.h'
                >
              )
            }
          spids: [115]
        )
      ]
    )
    (C {<cd>} {($ Id.VSub_DollarName '$DTC_UPSTREAM_PATH')})
    (C {<make>} {<clean>})
    (C {<make>} {<check>})
    (C {<cd>} {($ Id.VSub_DollarName '$DTC_LINUX_PATH')})
    (command.ForEach
      iter_name: f
      iter_words: [{($ Id.VSub_DollarName '$DTC_SOURCE')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {<cp>} {(${ Id.VSub_Name DTC_UPSTREAM_PATH) <'/'> (${ Id.VSub_Name f)} 
              {(${ Id.VSub_Name f)}
            )
            (C {<git>} {<add>} {(${ Id.VSub_Name f)})
          ]
        )
    )
    (command.ForEach
      iter_name: f
      iter_words: [{($ Id.VSub_DollarName '$DTC_GENERATED')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {<cp>} {(${ Id.VSub_Name DTC_UPSTREAM_PATH) <'/'> ($ Id.VSub_DollarName '$f')} 
              {(${ Id.VSub_Name f) <_shipped>}
            )
            (C {<git>} {<add>} {(${ Id.VSub_Name f) <_shipped>})
          ]
        )
    )
    (command.ForEach
      iter_name: f
      iter_words: [{($ Id.VSub_DollarName '$LIBFDT_SOURCE')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {<cp>} {(${ Id.VSub_Name DTC_UPSTREAM_PATH) <'/libfdt/'> (${ Id.VSub_Name f)} 
              {<'libfdt/'> (${ Id.VSub_Name f)}
            )
            (C {<git>} {<add>} {<'libfdt/'> (${ Id.VSub_Name f)})
          ]
        )
    )
    (C {<sed>} {<-i>} {<-->} {(SQ <'s/#include <libfdt_env.h>/#include "libfdt_env.h"/g'>)} 
      {<'./libfdt/libfdt.h'>}
    )
    (C {<sed>} {<-i>} {<-->} {(SQ <'s/#include <fdt.h>/#include "fdt.h"/g'>)} {<'./libfdt/libfdt.h'>})
    (C {<git>} {<add>} {<'./libfdt/libfdt.h'>})
    (C {<git>} {<commit>} {<-e>} {<-v>} {<-m>} {(DQ <'scripts/dtc: Update to upstream version [CHANGEME]'>)})
  ]
)