(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]
    )
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/hack/lib/init.sh))})
    (C {(kube) (Lit_Other ':') (Lit_Other ':') (golang) (Lit_Other ':') (Lit_Other ':') (setup_env)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:APIROOTS)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name APIROOTS>
                suffix_op: 
                  (StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: 
                      {(pkg) (Lit_Slash /) ('api pkg') (Lit_Slash /) ('apis pkg') (Lit_Slash /) 
                        ('watch staging') (Lit_Slash /) (src) (Lit_Slash /) (k8s.io) (Lit_Slash /) (apimachinery) (Lit_Slash /) (pkg) (Lit_Slash /) 
                        ('api staging') (Lit_Slash /) (src) (Lit_Slash /) (k8s.io) (Lit_Slash /) (apimachinery) (Lit_Slash /) (pkg) (Lit_Slash /) 
                        ('apis staging') (Lit_Slash /) (src) (Lit_Slash /) (k8s.io) (Lit_Slash /) (apiserver) (Lit_Slash /) ('pkg staging') 
                        (Lit_Slash /) (src) (Lit_Slash /) (k8s.io) (Lit_Slash /) ('api staging') (Lit_Slash /) (src) (Lit_Slash /) (k8s.io) 
                        (Lit_Slash /) (metrics) (Lit_Slash /) (pkg) (Lit_Slash /) (apis)
                      }
                  )
                spids: [95 149]
              )
            }
          spids: [94]
        )
      ]
      spids: [94]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:_tmp)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/_tmp))}
          spids: [151]
        )
      ]
      spids: [151]
    )
    (FuncDef
      name: cleanup
      body: (BraceGroup children:[(C {(rm)} {(-rf)} {(DQ (${ VSub_Name _tmp))})] spids:[164])
      spids: [160 163]
    )
    (C {(trap)} {(DQ (cleanup))} {(EXIT)} {(SIGINT)})
    (C {(cleanup)})
    (ForEach
      iter_name: APIROOT
      iter_words: [{(${ VSub_Name APIROOTS)}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name _tmp) (/) (${ VSub_Name APIROOT))})
            (C {(cp)} {(-a)} 
              {(DQ (${ VSub_Name KUBE_ROOT) (/) (${ VSub_Name APIROOT)) (/) (Lit_Other '*')} {(DQ (${ VSub_Name _tmp) (/) (${ VSub_Name APIROOT) (/))}
            )
          ]
          spids: [204 249]
        )
      spids: [198 202]
    )
    (SimpleCommand
      words: [{(DQ (${ VSub_Name KUBE_ROOT) (/hack/update-generated-protobuf.sh))}]
      more_env: [(env_pair name:KUBE_VERBOSE val:{(3)} spids:[252])]
    )
    (ForEach
      iter_name: APIROOT
      iter_words: [{(${ VSub_Name APIROOTS)}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:TMP_APIROOT)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name _tmp) (/) (${ VSub_Name APIROOT))}
                  spids: [276]
                )
              ]
              spids: [276]
            )
            (C {(echo)} 
              {(DQ ('diffing ') (${ VSub_Name APIROOT) (' against freshly generated protobuf'))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{(0)} spids:[299])]
              spids: [299]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(diff)} {(-Naupr)} {(-I)} {(SQ <'Auto generated by'>)} {(-x)} {(SQ <'zz_generated.*'>)} 
                  {(DQ (${ VSub_Name KUBE_ROOT) (/) (${ VSub_Name APIROOT))} {(DQ (${ VSub_Name TMP_APIROOT))}
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:ret)
                      op: Equal
                      rhs: {($ VSub_QMark '$?')}
                      spids: [337]
                    )
                  ]
                  spids: [337]
                )
              ]
            )
            (C {(cp)} {(-a)} {(DQ (${ VSub_Name TMP_APIROOT)) (/) (Lit_Other '*')} 
              {(DQ (${ VSub_Name KUBE_ROOT) (/) (${ VSub_Name APIROOT) (/))}
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_eq
                              left: {($ VSub_Name '$ret')}
                              right: {(0)}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(DQ (${ VSub_Name APIROOT) (' up to date.'))})]
                  spids: [16777215 378]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {
                    (DQ (${ VSub_Name APIROOT) 
                      (' is out of date. Please run hack/update-generated-protobuf.sh')
                    )
                  }
                )
                (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
              ]
              spids: [391 409]
            )
          ]
          spids: [273 411]
        )
      spids: [267 271]
    )
  ]
)