(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: [69 77]
              ) (/..)
            }
          spids: [68]
        )
      ]
      spids: [68]
    )
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/hack/lib/init.sh))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:prefix)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name KUBE_ROOT>
                  suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(DQ (k8s.io/kubernetes))})
                  spids: [91 97]
                )
              )
            }
          spids: [89]
        )
      ]
      spids: [89]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:register_files)
          op: Equal
          rhs: {(ArrayLiteralPart)}
          spids: [101]
        )
      ]
      spids: [101]
    )
    (While
      cond: [
        (Sentence
          child: 
            (SimpleCommand
              words: [{(read)} {(-d)} {(SQ <Lit_EscapedChar '\\0'>)} {(-r)} {(file)}]
              more_env: [(env_pair name:IFS val:{(SQ )} spids:[107])]
            )
          terminator: <Op_Semi ';'>
        )
      ]
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:register_files)
                  op: PlusEqual
                  rhs: {(ArrayLiteralPart words:[{(DQ (${ VSub_Name file))}])}
                  spids: [126]
                )
              ]
              spids: [126]
            )
          ]
          spids: [123 135]
        )
      redirects: [
        (Redir
          op_id: Redir_Less
          fd: 16777215
          arg_word: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(find)} {(DQ (${ VSub_Name KUBE_ROOT)) (/pkg/apis)} {(-name)} {(register.go)} 
                        {(-print0)}
                      )
                    ]
                  )
                left_token: <Left_ProcSubIn '<('>
                spids: [139 154]
              )
            }
          spids: [137]
        )
      ]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:group_dirnames)
          op: Equal
          rhs: {(ArrayLiteralPart)}
          spids: [169]
        )
      ]
      spids: [169]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:external_group_versions)
          op: Equal
          rhs: {(ArrayLiteralPart)}
          spids: [173]
        )
      ]
      spids: [173]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:expected_install_packages)
          op: Equal
          rhs: {(ArrayLiteralPart)}
          spids: [177]
        )
      ]
      spids: [177]
    )
    (ForEach
      iter_name: register_file
      iter_words: [
        {
          (DQ 
            (BracedVarSub
              token: <VSub_Name register_files>
              bracket_op: (WholeArray op_id:Lit_At)
              spids: [188 193]
            )
          )
        }
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:package)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name register_file>
                          suffix_op: 
                            (StringUnary
                              op_id: VOp1_Pound
                              arg_word: {(DQ (${ VSub_Name prefix))}
                            )
                          spids: [202 210]
                        )
                      )
                    }
                  spids: [200]
                )
              ]
              spids: [200]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:package)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name package>
                          suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(DQ (/register.go))})
                          spids: [216 222]
                        )
                      )
                    }
                  spids: [214]
                )
              ]
              spids: [214]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:group_dirname)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name package>
                          suffix_op: 
                            (StringUnary
                              op_id: VOp1_Pound
                              arg_word: {(DQ (k8s.io/kubernetes/pkg/apis/))}
                            )
                          spids: [228 234]
                        )
                      )
                    }
                  spids: [226]
                )
              ]
              spids: [226]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:group_dirname)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name group_dirname>
                          suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{(DQ ('/*'))})
                          spids: [240 246]
                        )
                      )
                    }
                  spids: [238]
                )
              ]
              spids: [238]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:group_name) op:Equal rhs:{(DQ )} spids:[250])]
              spids: [250]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(grep)} {(-q)} {(SQ <'GroupName = "'>)} {(DQ (${ VSub_Name register_file))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:group_name)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(grep)} {(-q)} {(SQ <'GroupName = "'>)} 
                                            {(DQ (${ VSub_Name register_file))}
                                          )
                                          (C {(cut)} 
                                            {(-d) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)} {(-f2)} {(-)}
                                          )
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [276 301]
                              )
                            }
                          spids: [275]
                        )
                      ]
                      spids: [275]
                    )
                  ]
                  spids: [16777215 272]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {
                    (DQ (${ VSub_Name register_file) (' is missing ') 
                      (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('const GroupName =') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                    )
                  }
                )
                (C {(exit)} {(1)})
              ]
              spids: [304 325]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Name group_dirname>
                                      suffix_op: 
                                        (StringUnary
                                          op_id: VOp1_Pound
                                          arg_word: {("*'") (Lit_Slash /) ("'")}
                                        )
                                      spids: [342 348]
                                    )
                                  )
                                }
                              right: {(DQ (${ VSub_Name group_dirname))}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:group_dirnames)
                          op: PlusEqual
                          rhs: {(ArrayLiteralPart words:[{(DQ (${ VSub_Name group_dirname))}])}
                          spids: [365]
                        )
                      ]
                      spids: [365]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:expected_install_packages)
                          op: PlusEqual
                          rhs: {(ArrayLiteralPart words:[{(DQ (${ VSub_Name package))}])}
                          spids: [375]
                        )
                      ]
                      spids: [375]
                    )
                  ]
                  spids: [16777215 362]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:version)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (Pipeline
                                    children: [
                                      (C {(echo)} {(DQ (${ VSub_Name group_dirname))})
                                      (C {(cut)} {(-d/)} {(-f2)} {(-)})
                                    ]
                                    negated: False
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [389 407]
                          )
                        }
                      spids: [388]
                    )
                  ]
                  spids: [388]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:external_group_versions)
                      op: PlusEqual
                      rhs: 
                        {
                          (ArrayLiteralPart
                            words: [{(DQ (${ VSub_Name group_name) (/) (${ VSub_Name version))}]
                          )
                        }
                      spids: [410]
                    )
                  ]
                  spids: [410]
                )
              ]
              spids: [385 424]
            )
          ]
          spids: [197 426]
        )
      spids: [186 195]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:groups_without_codegen)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [{(DQ (abac))} {(DQ (componentconfig))} {(DQ (imagepolicy))} {(DQ (admission))}]
              )
            }
          spids: [439]
        )
      ]
      spids: [439]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:client_gen_file)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/vendor/k8s.io/code-generator/cmd/client-gen/main.go))}
          spids: [464]
        )
      ]
      spids: [464]
    )
    (ForEach
      iter_name: group_dirname
      iter_words: [
        {
          (DQ 
            (BracedVarSub
              token: <VSub_Name group_dirnames>
              bracket_op: (WholeArray op_id:Lit_At)
              spids: [480 485]
            )
          )
        }
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (C {(grep)} {(-q)} {(DQ (${ VSub_Name group_dirname) (/))} 
                              {(DQ (${ VSub_Name client_gen_file))}
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:found) op:Equal rhs:{(0)} spids:[518])]
                      spids: [518]
                    )
                    (ForEach
                      iter_name: group_without_codegen
                      iter_words: [
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Name groups_without_codegen>
                              bracket_op: (WholeArray op_id:Lit_At)
                              spids: [529 534]
                            )
                          )
                        }
                      ]
                      do_arg_iter: False
                      body: 
                        (DoGroup
                          children: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (DBracket
                                          expr: 
                                            (BoolBinary
                                              op_id: BoolBinary_GlobDEqual
                                              left: {(DQ (${ VSub_Name group_without_codegen))}
                                              right: {(DQ (${ VSub_Name group_dirname))}
                                            )
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:found)
                                          op: Equal
                                          rhs: {(1)}
                                          spids: [565]
                                        )
                                      ]
                                      spids: [565]
                                    )
                                  ]
                                  spids: [16777215 562]
                                )
                              ]
                              spids: [16777215 569]
                            )
                          ]
                          spids: [538 572]
                        )
                      spids: [527 536]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (LogicalAnd
                                      left: 
                                        (BoolBinary
                                          op_id: BoolBinary_ne
                                          left: {(DQ (${ VSub_Name found))}
                                          right: {(DQ (1))}
                                        )
                                      right: 
                                        (BoolUnary
                                          op_id: BoolUnary_f
                                          child: {(DQ (${ VSub_Name group_dirname) (/types.go))}
                                        )
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {
                                (DQ ('need to add ') (${ VSub_Name group_dirname) ('/ to ') 
                                  (${ VSub_Name client_gen_file)
                                )
                              }
                            )
                            (C {(exit)} {(1)})
                          ]
                          spids: [16777215 606]
                        )
                      ]
                      spids: [16777215 628]
                    )
                  ]
                  spids: [16777215 515]
                )
              ]
              spids: [16777215 631]
            )
          ]
          spids: [489 633]
        )
      spids: [478 487]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:packages_without_install)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {(DQ (k8s.io/kubernetes/pkg/apis/abac))}
                  {(DQ (k8s.io/kubernetes/pkg/apis/admission))}
                ]
              )
            }
          spids: [645]
        )
      ]
      spids: [645]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:known_version_files)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {(DQ (pkg/master/import_known_versions.go))}
                  {(DQ (pkg/client/clientset_generated/internal_clientset/import_known_versions.go))}
                ]
              )
            }
          spids: [660]
        )
      ]
      spids: [660]
    )
    (ForEach
      iter_name: expected_install_package
      iter_words: [
        {
          (DQ 
            (BracedVarSub
              token: <VSub_Name expected_install_packages>
              bracket_op: (WholeArray op_id:Lit_At)
              spids: [682 687]
            )
          )
        }
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:found) op:Equal rhs:{(0)} spids:[694])]
              spids: [694]
            )
            (ForEach
              iter_name: package_without_install
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name packages_without_install>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [705 710]
                    )
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ (${ VSub_Name package_without_install))} 
                                  {(Lit_Other '=') (Lit_Other '=')} {(DQ (${ VSub_Name expected_install_package))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:found)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [742]
                                )
                              ]
                              spids: [742]
                            )
                          ]
                          spids: [16777215 739]
                        )
                      ]
                      spids: [16777215 746]
                    )
                  ]
                  spids: [714 749]
                )
              spids: [703 712]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_eq
                              left: {(DQ (${ VSub_Name found))}
                              right: {(DQ (1))}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                  spids: [16777215 772]
                )
              ]
              spids: [16777215 778]
            )
            (ForEach
              iter_name: known_version_file
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name known_version_files>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [789 794]
                    )
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (Pipeline
                                  children: [
                                    (C {(grep)} {(-q)} 
                                      {(DQ (${ VSub_Name expected_install_package) (/install))} {(${ VSub_Name known_version_files)}
                                    )
                                  ]
                                  negated: True
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {
                                (DQ ('missing ') (${ VSub_Name expected_install_package) 
                                  ('/install from ') (${ VSub_Name known_version_files)
                                )
                              }
                            )
                            (C {(exit)} {(1)})
                          ]
                          spids: [16777215 822]
                        )
                      ]
                      spids: [16777215 844]
                    )
                  ]
                  spids: [798 847]
                )
              spids: [787 796]
            )
          ]
          spids: [691 849]
        )
      spids: [680 689]
    )
    (ForEach
      iter_name: external_group_version
      iter_words: [
        {
          (DQ 
            (BracedVarSub
              token: <VSub_Name external_group_versions>
              bracket_op: (WholeArray op_id:Lit_At)
              spids: [865 870]
            )
          )
        }
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (C {(grep)} {(-q)} {(DQ (${ VSub_Name external_group_version))} 
                              {(DQ (${ VSub_Name KUBE_ROOT) (/hack/lib/init.sh))}
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ ('missing ') (${ VSub_Name external_group_version) 
                          (
' from hack/lib/init.sh:/KUBE_AVAILABLE_GROUP_VERSIONS or hack/init.sh:/KUBE_NONSERVER_GROUP_VERSIONS'
                          )
                        )
                      }
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [16777215 900]
                )
              ]
              spids: [16777215 919]
            )
          ]
          spids: [874 921]
        )
      spids: [863 872]
    )
  ]
)