(CommandList
  children: [
    (C {(set)} {(-o)} {(errexit)})
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_ROOT)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [64 72]
              ) (/..)
            }
          spids: [63]
        )
      ]
      spids: [63]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:boilerDir)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/hack/boilerplate))}
          spids: [76]
        )
      ]
      spids: [76]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:boiler)
          op: Equal
          rhs: {(DQ (${ VSub_Name boilerDir) (/boilerplate.py))}
          spids: [84]
        )
      ]
      spids: [84]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:files_need_boilerplate)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {
                    (CommandSubPart
                      command_list: 
                        (CommandList
                          children: [(C {(${ VSub_Name boiler)} {(DQ ($ VSub_At '$@'))})]
                        )
                      left_token: <Left_CommandSub '$('>
                      spids: [95 103]
                    )
                  }
                ]
              )
            }
          spids: [93]
        )
      ]
      spids: [93]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_gt
                      left: 
                        {
                          (BracedVarSub
                            token: <VSub_Name files_need_boilerplate>
                            prefix_op: VSub_Pound
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [114 120]
                          )
                        }
                      right: {(0)}
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (ForEach
              iter_name: file
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name files_need_boilerplate>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [139 144]
                    )
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(DQ ('Boilerplate header is wrong for: ') (${ VSub_Name file))})
                  ]
                  spids: [148 161]
                )
              spids: [137 146]
            )
            (C {(exit)} {(1)})
          ]
          spids: [16777215 129]
        )
      ]
      spids: [16777215 169]
    )
  ]
)