(CommandList
  children: [
    (FuncDef
      name: 'kube::util::sortable_date'
      body: (BraceGroup children:[(C {(date)} {(DQ ('+%Y%m%d-%H%M%S'))})] spids:[54])
      spids: [44 53]
    )
    (FuncDef
      name: 'kube::util::wait_for_url'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:url)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [81]
                )
              ]
              spids: [79]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prefix)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                        spids: [88 91]
                      )
                    }
                  spids: [87]
                )
              ]
              spids: [85]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:wait)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 3>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)})
                        spids: [97 101]
                      )
                    }
                  spids: [96]
                )
              ]
              spids: [94]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:times)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 4>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(30)})
                        spids: [107 111]
                      )
                    }
                  spids: [106]
                )
              ]
              spids: [104]
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(which)} {(curl)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [119]
                    )
                  ]
                )
                (BraceGroup
                  children: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (usage)
                      } {(DQ ('curl must be installed'))}
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [124]
                )
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:i) op:Equal spids:[151])]
              spids: [149]
            )
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(seq)} {(1)} {($ VSub_Name '$times')})])
                    left_token: <Left_CommandSub '$('>
                    spids: [160 166]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [(assign_pair lhs:(LhsName name:out) op:Equal spids:[174])]
                      spids: [172]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:out)
                                      op: Equal
                                      rhs: 
                                        {
                                          (CommandSubPart
                                            command_list: 
                                              (CommandList
                                                children: [
                                                  (SimpleCommand
                                                    words: [
                                                      {(curl)}
                                                      {(--max-time)}
                                                      {(1)}
                                                      {(-gkfs)}
                                                      {($ VSub_Name '$url')}
                                                    ]
                                                    redirects: [
                                                      (Redir
                                                        op_id: Redir_Great
                                                        fd: 2
                                                        arg_word: {(/dev/null)}
                                                        spids: [191]
                                                      )
                                                    ]
                                                  )
                                                ]
                                              )
                                            left_token: <Left_CommandSub '$('>
                                            spids: [180 193]
                                          )
                                        }
                                      spids: [179]
                                    )
                                  ]
                                  spids: [179]
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C 
                              {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') 
                                (Lit_Other ':') (status)
                              } {(DQ ('On try ') (${ VSub_Name i) (', ') (${ VSub_Name prefix) (': ') (${ VSub_Name out))}
                            )
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(0)}
                            )
                          ]
                          spids: [16777215 196]
                        )
                      ]
                      spids: [16777215 228]
                    )
                    (C {(sleep)} {(${ VSub_Name wait)})
                  ]
                  spids: [169 238]
                )
              spids: [159 167]
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (error)} 
              {
                (DQ ('Timed out waiting for ') (${ VSub_Name prefix) (' to answer at ') 
                  (${ VSub_Name url) ('; tried ') (${ VSub_Name times) (' waiting ') (${ VSub_Name wait) (' between each')
                )
              }
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [76]
        )
      spids: [66 75]
    )
    (FuncDef
      name: 'kube::util::get_random_port'
      body: 
        (BraceGroup
          children: [
            (C {(awk)} {(-v)} {(Lit_VarLike 'min=') (1024)} {(-v)} {(Lit_VarLike 'max=') (65535)} 
              {(SQ <'BEGIN{srand(); print int(min+rand()*(max-min+1))}'>)}
            )
          ]
          spids: [290]
        )
      spids: [280 289]
    )
    (FuncDef
      name: 'kube::util::test_host_port_free'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [330]
                )
              ]
              spids: [328]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:port)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [336]
                )
              ]
              spids: [334]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:success) op:Equal rhs:{(0)} spids:[342])]
              spids: [340]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[348])]
              spids: [346]
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(which)} {(nc)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [357]
                    )
                  ]
                )
                (BraceGroup
                  children: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (usage)
                      } 
                      {
                        (DQ ("netcat isn't installed, can't verify if ") (${ VSub_Name host) (':') 
                          (${ VSub_Name port) (' is free, skipping the check...')
                        )
                      }
                    )
                    (ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {(${ VSub_Name success)}
                    )
                  ]
                  spids: [362]
                )
              ]
              op_id: Op_DPipe
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(KW_Bang '!')} 
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (C {(nc)} {(-vz)} {(DQ (${ VSub_Name host))} 
                                      {(DQ (${ VSub_Name port))}
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [403 419]
                            )
                          } {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (status)
                      } {(DQ (${ VSub_Name host) (':') (${ VSub_Name port) (' is free, proceeding...'))}
                    )
                    (ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {(${ VSub_Name success)}
                    )
                  ]
                  spids: [16777215 424]
                )
              ]
              else_action: [
                (C 
                  {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} {(DQ (${ VSub_Name host) (':') (${ VSub_Name port) (' is already used'))}
                )
                (ControlFlow
                  token: <ControlFlow_Return return>
                  arg_word: {(${ VSub_Name fail)}
                )
              ]
              spids: [454 484]
            )
          ]
          spids: [325]
        )
      spids: [315 324]
    )
    (FuncDef
      name: 'kube::util::trap_add'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:trap_add_cmd) op:Equal spids:[510])]
              spids: [508]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:trap_add_cmd)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [513]
                )
              ]
              spids: [513]
            )
            (C {(shift)})
            (ForEach
              iter_name: trap_add_name
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [(assign_pair lhs:(LhsName name:existing_cmd) op:Equal spids:[537])]
                      spids: [535]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [(assign_pair lhs:(LhsName name:new_cmd) op:Equal spids:[542])]
                      spids: [540]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:existing_cmd)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(trap)} {(-p)} {(DQ (${ VSub_Name trap_add_name))})
                                          (C {(awk)} {(-F) (DQ ("'"))} {(SQ <'{print $2}'>)})
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [551 574]
                              )
                            }
                          spids: [550]
                        )
                      ]
                      spids: [550]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolUnary
                                      op_id: BoolUnary_z
                                      child: {(DQ (${ VSub_Name existing_cmd))}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:new_cmd)
                                  op: Equal
                                  rhs: {(DQ (${ VSub_Name trap_add_cmd))}
                                  spids: [596]
                                )
                              ]
                              spids: [596]
                            )
                          ]
                          spids: [16777215 593]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:new_cmd)
                              op: Equal
                              rhs: {(DQ (${ VSub_Name trap_add_cmd) (';') (${ VSub_Name existing_cmd))}
                              spids: [607]
                            )
                          ]
                          spids: [607]
                        )
                      ]
                      spids: [604 619]
                    )
                    (C {(trap)} {(DQ (${ VSub_Name new_cmd))} {(DQ (${ VSub_Name trap_add_name))})
                  ]
                  spids: [532 642]
                )
              spids: [526 530]
            )
          ]
          spids: [505]
        )
      spids: [495 504]
    )
    (FuncDef
      name: 'kube::util::cleanup-temp-dir'
      body: (BraceGroup children:[(C {(rm)} {(-rf)} {(DQ (${ VSub_Name KUBE_TEMP))})] spids:[660])
      spids: [650 659]
    )
    (FuncDef
      name: 'kube::util::ensure-temp-dir'
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_z
                              child: 
                                {
                                  (BracedVarSub
                                    token: <VSub_Name KUBE_TEMP>
                                    suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{})
                                    spids: [707 710]
                                  )
                                }
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:KUBE_TEMP)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (AndOr
                                        children: [
                                          (SimpleCommand
                                            words: [{(mktemp)} {(-d)}]
                                            redirects: [
                                              (Redir
                                                op_id: Redir_Great
                                                fd: 2
                                                arg_word: {(/dev/null)}
                                                spids: [724]
                                              )
                                            ]
                                          )
                                          (C {(mktemp)} {(-d)} {(-t)} {(kubernetes.XXXXXX)})
                                        ]
                                        op_id: Op_DPipe
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [719 736]
                              )
                            }
                          spids: [718]
                        )
                      ]
                      spids: [718]
                    )
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') (Lit_Other ':') 
                        (trap_add)
                      } {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') (Lit_Other ':') (cleanup-temp-dir)} 
                      {(EXIT)}
                    )
                  ]
                  spids: [16777215 715]
                )
              ]
              spids: [16777215 758]
            )
          ]
          spids: [698]
        )
      spids: [688 697]
    )
    (FuncDef
      name: 'kube::util::host_platform'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:host_os) op:Equal spids:[787])]
              spids: [785]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:host_arch) op:Equal spids:[792])]
              spids: [790]
            )
            (Case
              to_match: 
                {
                  (DQ 
                    (CommandSubPart
                      command_list: (CommandList children:[(C {(uname)} {(-s)})])
                      left_token: <Left_CommandSub '$('>
                      spids: [798 802]
                    )
                  )
                }
              arms: [
                (case_arm
                  pat_list: [{(Darwin)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_os)
                          op: Equal
                          rhs: {(darwin)}
                          spids: [812]
                        )
                      ]
                      spids: [812]
                    )
                  ]
                  spids: [808 809 816 16777215]
                )
                (case_arm
                  pat_list: [{(Linux)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_os)
                          op: Equal
                          rhs: {(linux)}
                          spids: [823]
                        )
                      ]
                      spids: [823]
                    )
                  ]
                  spids: [819 820 827 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (error)
                      } {(DQ ('Unsupported host OS.  Must be Linux or Mac OS X.'))}
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [830 831 852 16777215]
                )
              ]
              spids: [795 805 855]
            )
            (Case
              to_match: 
                {
                  (DQ 
                    (CommandSubPart
                      command_list: (CommandList children:[(C {(uname)} {(-m)})])
                      left_token: <Left_CommandSub '$('>
                      spids: [862 866]
                    )
                  )
                }
              arms: [
                (case_arm
                  pat_list: [{(x86_64) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_arch)
                          op: Equal
                          rhs: {(amd64)}
                          spids: [877]
                        )
                      ]
                      spids: [877]
                    )
                  ]
                  spids: [872 874 881 16777215]
                )
                (case_arm
                  pat_list: [{(i) (Lit_Other '?') (86_64) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_arch)
                          op: Equal
                          rhs: {(amd64)}
                          spids: [891]
                        )
                      ]
                      spids: [891]
                    )
                  ]
                  spids: [884 888 895 16777215]
                )
                (case_arm
                  pat_list: [{(amd64) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_arch)
                          op: Equal
                          rhs: {(amd64)}
                          spids: [903]
                        )
                      ]
                      spids: [903]
                    )
                  ]
                  spids: [898 900 907 16777215]
                )
                (case_arm
                  pat_list: [{(aarch64) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_arch)
                          op: Equal
                          rhs: {(arm64)}
                          spids: [915]
                        )
                      ]
                      spids: [915]
                    )
                  ]
                  spids: [910 912 919 16777215]
                )
                (case_arm
                  pat_list: [{(arm64) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_arch)
                          op: Equal
                          rhs: {(arm64)}
                          spids: [927]
                        )
                      ]
                      spids: [927]
                    )
                  ]
                  spids: [922 924 931 16777215]
                )
                (case_arm
                  pat_list: [{(arm) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_arch)
                          op: Equal
                          rhs: {(arm)}
                          spids: [939]
                        )
                      ]
                      spids: [939]
                    )
                  ]
                  spids: [934 936 943 16777215]
                )
                (case_arm
                  pat_list: [{(i) (Lit_Other '?') (86) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_arch)
                          op: Equal
                          rhs: {(x86)}
                          spids: [953]
                        )
                      ]
                      spids: [953]
                    )
                  ]
                  spids: [946 950 957 16777215]
                )
                (case_arm
                  pat_list: [{(s390x) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_arch)
                          op: Equal
                          rhs: {(s390x)}
                          spids: [965]
                        )
                      ]
                      spids: [965]
                    )
                  ]
                  spids: [960 962 969 16777215]
                )
                (case_arm
                  pat_list: [{(ppc64le) (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:host_arch)
                          op: Equal
                          rhs: {(ppc64le)}
                          spids: [977]
                        )
                      ]
                      spids: [977]
                    )
                  ]
                  spids: [972 974 981 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (error)
                      } {(DQ ('Unsupported host arch. Must be x86_64, 386, arm, arm64, s390x or ppc64le.'))}
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [984 985 1006 16777215]
                )
              ]
              spids: [859 869 1009]
            )
            (C {(echo)} {(DQ (${ VSub_Name host_os) (/) (${ VSub_Name host_arch))})
          ]
          spids: [782]
        )
      spids: [772 781]
    )
    (FuncDef
      name: 'kube::util::find-binary-for-platform'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lookfor)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1044]
                )
              ]
              spids: [1040]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:platform)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [1054]
                )
              ]
              spids: [1050]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:locations)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {(DQ (${ VSub_Name KUBE_ROOT) (/_output/bin/) (${ VSub_Name lookfor))}
                          {
                            (DQ (${ VSub_Name KUBE_ROOT) (/_output/dockerized/bin/) 
                              (${ VSub_Name platform) (/) (${ VSub_Name lookfor)
                            )
                          }
                          {
                            (DQ (${ VSub_Name KUBE_ROOT) (/_output/local/bin/) (${ VSub_Name platform) 
                              (/) (${ VSub_Name lookfor)
                            )
                          }
                          {
                            (DQ (${ VSub_Name KUBE_ROOT) (/platforms/) (${ VSub_Name platform) (/) 
                              (${ VSub_Name lookfor)
                            )
                          }
                        ]
                      )
                    }
                  spids: [1062]
                )
              ]
              spids: [1060]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:locations)
                  op: PlusEqual
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (AndOr
                                      children: [
                                        (SimpleCommand
                                          words: [
                                            {(find)}
                                            {(DQ (${ VSub_Name KUBE_ROOT) (/bazel-bin/))}
                                            {(-type)}
                                            {(f)}
                                            {(-executable)}
                                            {(EscapedLiteralPart token:<Lit_EscapedChar '\\('>)}
                                            {(-name)}
                                            {(DQ (${ VSub_Name lookfor))}
                                            {(-o)}
                                            {(-name)}
                                            {(DQ (${ VSub_Name lookfor) (_bin))}
                                            {(EscapedLiteralPart token:<Lit_EscapedChar '\\)'>)}
                                          ]
                                          redirects: [
                                            (Redir
                                              op_id: Redir_Great
                                              fd: 2
                                              arg_word: {(/dev/null)}
                                              spids: [1180]
                                            )
                                          ]
                                        )
                                        (C {(true)})
                                      ]
                                      op_id: Op_DPipe
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [1139 1186]
                            )
                          }
                        ]
                      )
                    }
                  spids: [1137]
                )
              ]
              spids: [1137]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:bin)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (Subshell
                                    child: 
                                      (AndOr
                                        children: [
                                          (SimpleCommand
                                            words: [
                                              {(ls)}
                                              {(-t)}
                                              {
                                                (DQ 
                                                  (BracedVarSub
                                                    token: <VSub_Name locations>
                                                    bracket_op: (WholeArray op_id:Lit_At)
                                                    spids: [1209 1214]
                                                  )
                                                )
                                              }
                                            ]
                                            redirects: [
                                              (Redir
                                                op_id: Redir_Great
                                                fd: 2
                                                arg_word: {(/dev/null)}
                                                spids: [1217]
                                              )
                                            ]
                                          )
                                          (C {(true)})
                                        ]
                                        op_id: Op_DPipe
                                      )
                                    spids: [1203 1223]
                                  )
                                  (C {(head)} {(-1)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [1201 1231]
                      )
                    }
                  spids: [1200]
                )
              ]
              spids: [1196]
            )
            (C {(echo)} {(-n)} {(DQ (${ VSub_Name bin))})
          ]
          spids: [1037]
        )
      spids: [1027 1036]
    )
    (FuncDef
      name: 'kube::util::find-binary'
      body: 
        (BraceGroup
          children: [
            (C 
              {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') (Lit_Other ':') 
                (find-binary-for-platform)
              } {(DQ ($ VSub_Number '$1'))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C 
                            {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                              (Lit_Other ':') (host_platform)
                            }
                          )
                        ]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [1273 1281]
                  )
                )
              }
            )
          ]
          spids: [1257]
        )
      spids: [1247 1256]
    )
    (FuncDef
      name: 'kube::util::gen-docs'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1308]
                )
              ]
              spids: [1306]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:gendocs)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C 
                                {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                                  (Lit_Other ':') (find-binary)
                                } {(DQ (gendocs))}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [1320 1332]
                      )
                    }
                  spids: [1319]
                )
              ]
              spids: [1319]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:genkubedocs)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C 
                                {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                                  (Lit_Other ':') (find-binary)
                                } {(DQ (genkubedocs))}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [1336 1348]
                      )
                    }
                  spids: [1335]
                )
              ]
              spids: [1335]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:genman)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C 
                                {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                                  (Lit_Other ':') (find-binary)
                                } {(DQ (genman))}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [1352 1364]
                      )
                    }
                  spids: [1351]
                )
              ]
              spids: [1351]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:genyaml)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C 
                                {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                                  (Lit_Other ':') (find-binary)
                                } {(DQ (genyaml))}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [1368 1380]
                      )
                    }
                  spids: [1367]
                )
              ]
              spids: [1367]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:genfeddocs)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C 
                                {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                                  (Lit_Other ':') (find-binary)
                                } {(DQ (genfeddocs))}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [1384 1396]
                      )
                    }
                  spids: [1383]
                )
              ]
              spids: [1383]
            )
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name dest) (/docs/user-guide/kubectl/))})
            (C {(DQ (${ VSub_Name gendocs))} {(DQ (${ VSub_Name dest) (/docs/user-guide/kubectl/))})
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name dest) (/docs/admin/))})
            (C {(DQ (${ VSub_Name genkubedocs))} {(DQ (${ VSub_Name dest) (/docs/admin/))} 
              {(DQ (kube-apiserver))}
            )
            (C {(DQ (${ VSub_Name genkubedocs))} {(DQ (${ VSub_Name dest) (/docs/admin/))} 
              {(DQ (kube-controller-manager))}
            )
            (C {(DQ (${ VSub_Name genkubedocs))} {(DQ (${ VSub_Name dest) (/docs/admin/))} 
              {(DQ (cloud-controller-manager))}
            )
            (C {(DQ (${ VSub_Name genkubedocs))} {(DQ (${ VSub_Name dest) (/docs/admin/))} 
              {(DQ (kube-proxy))}
            )
            (C {(DQ (${ VSub_Name genkubedocs))} {(DQ (${ VSub_Name dest) (/docs/admin/))} 
              {(DQ (kube-scheduler))}
            )
            (C {(DQ (${ VSub_Name genkubedocs))} {(DQ (${ VSub_Name dest) (/docs/admin/))} 
              {(DQ (kubelet))}
            )
            (C {(DQ (${ VSub_Name genfeddocs))} {(DQ (${ VSub_Name dest) (/docs/admin/))} 
              {(DQ (federation-apiserver))}
            )
            (C {(DQ (${ VSub_Name genfeddocs))} {(DQ (${ VSub_Name dest) (/docs/admin/))} 
              {(DQ (federation-controller-manager))}
            )
            (C {(DQ (${ VSub_Name genfeddocs))} {(DQ (${ VSub_Name dest) (/docs/admin/))} 
              {(DQ (kubefed))}
            )
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name dest) (/docs/man/man1/))})
            (C {(DQ (${ VSub_Name genman))} {(DQ (${ VSub_Name dest) (/docs/man/man1/))} 
              {(DQ (kube-apiserver))}
            )
            (C {(DQ (${ VSub_Name genman))} {(DQ (${ VSub_Name dest) (/docs/man/man1/))} 
              {(DQ (kube-controller-manager))}
            )
            (C {(DQ (${ VSub_Name genman))} {(DQ (${ VSub_Name dest) (/docs/man/man1/))} 
              {(DQ (cloud-controller-manager))}
            )
            (C {(DQ (${ VSub_Name genman))} {(DQ (${ VSub_Name dest) (/docs/man/man1/))} 
              {(DQ (kube-proxy))}
            )
            (C {(DQ (${ VSub_Name genman))} {(DQ (${ VSub_Name dest) (/docs/man/man1/))} 
              {(DQ (kube-scheduler))}
            )
            (C {(DQ (${ VSub_Name genman))} {(DQ (${ VSub_Name dest) (/docs/man/man1/))} {(DQ (kubelet))})
            (C {(DQ (${ VSub_Name genman))} {(DQ (${ VSub_Name dest) (/docs/man/man1/))} {(DQ (kubectl))})
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name dest) (/docs/yaml/kubectl/))})
            (C {(DQ (${ VSub_Name genyaml))} {(DQ (${ VSub_Name dest) (/docs/yaml/kubectl/))})
            (SimpleCommand
              words: [{(pushd)} {(DQ (${ VSub_Name dest))}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[1792])]
            )
            (C {(touch)} {(docs/.generated_docs)})
            (Pipeline
              children: [
                (C {(find)} {(.)} {(-type)} {(f)})
                (C {(cut)} {(-sd)} {(/)} {(-f)} {(2-)})
                (SimpleCommand
                  words: [{(sort)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(docs/.generated_docs)}
                      spids: [1829]
                    )
                  ]
                  more_env: [(env_pair name:LC_ALL val:{(C)} spids:[1824])]
                )
              ]
              negated: False
            )
            (SimpleCommand
              words: [{(popd)}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[1836])]
            )
          ]
          spids: [1303]
        )
      spids: [1293 1302]
    )
    (FuncDef
      name: 'kube::util::set-placeholder-gen-docs'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:list_file)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/docs/.generated_docs))}
                  spids: [1861]
                )
              ]
              spids: [1859]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(Lit_Other '[')} {(-e)} {(${ VSub_Name list_file)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (While
                      cond: [(Sentence child:(C {(read)} {(file)}) terminator:<Op_Semi ';'>)]
                      body: 
                        (DoGroup
                          children: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (DBracket
                                          expr: 
                                            (BoolBinary
                                              op_id: BoolBinary_GlobNEqual
                                              left: {(DQ (${ VSub_Name list_file))}
                                              right: 
                                                {
                                                  (DQ (${ VSub_Name KUBE_ROOT) (/) (${ VSub_Name file))
                                                }
                                            )
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (C {(cp)} 
                                      {
                                        (DQ (${ VSub_Name KUBE_ROOT) 
                                          (/hack/autogenerated_placeholder.txt)
                                        )
                                      } {(DQ (${ VSub_Name KUBE_ROOT) (/) (${ VSub_Name file))}
                                    )
                                  ]
                                  spids: [16777215 1925]
                                )
                              ]
                              spids: [16777215 1948]
                            )
                          ]
                          spids: [1897 1951]
                        )
                      redirects: [
                        (Redir
                          op_id: Redir_Less
                          fd: 16777215
                          arg_word: {(DQ (${ VSub_Name list_file))}
                          spids: [1953]
                        )
                      ]
                    )
                  ]
                  spids: [16777215 1883]
                )
              ]
              spids: [16777215 1969]
            )
          ]
          spids: [1856]
        )
      spids: [1846 1855]
    )
    (FuncDef
      name: 'kube::util::remove-gen-docs'
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-e)} 
                          {(DQ (${ VSub_Name KUBE_ROOT) (/docs/.generated_docs))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (While
                      cond: [(Sentence child:(C {(read)} {(file)}) terminator:<Op_Semi ';'>)]
                      body: 
                        (DoGroup
                          children: [
                            (AndOr
                              children: [
                                (SimpleCommand
                                  words: [{(rm)} {(DQ (${ VSub_Name KUBE_ROOT) (/) (${ VSub_Name file))}]
                                  redirects: [
                                    (Redir
                                      op_id: Redir_Great
                                      fd: 2
                                      arg_word: {(/dev/null)}
                                      spids: [2038]
                                    )
                                  ]
                                )
                                (C {(true)})
                              ]
                              op_id: Op_DPipe
                            )
                          ]
                          spids: [2023 2046]
                        )
                      redirects: [
                        (Redir
                          op_id: Redir_Less
                          fd: 16777215
                          arg_word: {(DQ (${ VSub_Name KUBE_ROOT) (/docs/.generated_docs))}
                          spids: [2048]
                        )
                      ]
                    )
                  ]
                  spids: [16777215 2009]
                )
              ]
              spids: [16777215 2065]
            )
          ]
          spids: [1990]
        )
      spids: [1980 1989]
    )
    (FuncDef
      name: 'kube::util::gen-analytics'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [2094]
                )
              ]
              spids: [2092]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dryrun)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Number 2>
                          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                          spids: [2104 2107]
                        )
                      )
                    }
                  spids: [2102]
                )
              ]
              spids: [2100]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair lhs:(LhsName name:mdfiles) op:Equal spids:[2113])
                (assign_pair lhs:(LhsName name:dir) op:Equal spids:[2115])
                (assign_pair lhs:(LhsName name:link) op:Equal spids:[2117])
              ]
              spids: [2111]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: 
                                {
                                  (CommandSubPart
                                    command_list: (CommandList children:[(C {(uname)})])
                                    left_token: <Left_CommandSub '$('>
                                    spids: [2136 2140]
                                  )
                                }
                              right: {(SQ <Linux>)}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:dir)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name path) (/))}
                          spids: [2154]
                        )
                      ]
                      spids: [2154]
                    )
                  ]
                  spids: [16777215 2151]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:dir)
                      op: Equal
                      rhs: {(DQ (${ VSub_Name path))}
                      spids: [2166]
                    )
                  ]
                  spids: [2166]
                )
              ]
              spids: [2163 2174]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:mdfiles)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (C {(find)} {(DQ (${ VSub_Name dir))} {(-name)} {(DQ ('*.md'))} 
                                      {(-type)} {(f)} {(-not)} {(-path)} {(SQ <'*/\\.*'>)} {(-not)} {(-path)} {(DQ (${ VSub_Name path) ('/vendor/*'))} 
                                      {(-not)} {(-path)} {(DQ (${ VSub_Name path) ('/staging/*'))} {(-not)} {(-path)} 
                                      {(DQ (${ VSub_Name path) ('/third_party/*'))} {(-not)} {(-path)} {(DQ (${ VSub_Name path) ('/_gopath/*'))} {(-not)} {(-path)} 
                                      {(DQ (${ VSub_Name path) ('/_output/*'))} {(-not)} {(-path)} {(DQ (${ VSub_Name path) ('/docs/user-guide/kubectl/kubectl*'))}
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [2191 2299]
                            )
                          }
                        ]
                      )
                    }
                  spids: [2189]
                )
              ]
              spids: [2189]
            )
            (ForEach
              iter_name: f
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name mdfiles>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [2310 2315]
                    )
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:link)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C 
                                        {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                                          (Lit_Other ':') (analytics-link)
                                        } 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              token: <VSub_Name f>
                                              suffix_op: 
                                                (StringUnary
                                                  op_id: VOp1_Pound
                                                  arg_word: {(${ VSub_Name path) (Lit_Slash /)}
                                                )
                                              spids: [2333 2340]
                                            )
                                          )
                                        }
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [2323 2342]
                              )
                            }
                          spids: [2322]
                        )
                      ]
                      spids: [2322]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(grep)} {(-q)} {(-F)} {(-x)} {(DQ (${ VSub_Name link))} 
                                  {(DQ (${ VSub_Name f))}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [16777215 2368]
                        )
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: (BoolUnary op_id:BoolUnary_z child:{(DQ (${ VSub_Name dryrun))})
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (SimpleCommand
                              words: [
                                {(echo)}
                                {(-e)}
                                {(DQ (Lit_Other '\\') (n) (Lit_Other '\\') (n) (${ VSub_Name link))}
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_DGreat
                                  fd: 16777215
                                  arg_word: {(DQ (${ VSub_Name f))}
                                  spids: [2406]
                                )
                              ]
                            )
                          ]
                          spids: [2374 2389]
                        )
                      ]
                      else_action: [(C {(echo)} {(DQ ($ VSub_Name '$f'))})]
                      spids: [2415 2425]
                    )
                  ]
                  spids: [2319 2428]
                )
              spids: [2308 2317]
            )
          ]
          spids: [2089]
        )
      spids: [2079 2088]
    )
    (FuncDef
      name: 'kube::util::analytics-link'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [2451]
                )
              ]
              spids: [2449]
            )
            (C {(echo)} 
              {
                (DQ ('[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/') 
                  (${ VSub_Name path) ('?pixel)]()')
                )
              }
            )
          ]
          spids: [2446]
        )
      spids: [2436 2445]
    )
    (FuncDef
      name: 'kube::util::group-version-to-pkg-path'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:staging_apis)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (SimpleCommand
                                      words: [
                                        {(pushd)}
                                        {(${ VSub_Name KUBE_ROOT) (/staging/src/k8s.io/api)}
                                      ]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: 16777215
                                          arg_word: {(/dev/null)}
                                          spids: [2518]
                                        )
                                      ]
                                    )
                                    (Pipeline
                                      children: [
                                        (C {(find)} {(.)} {(-name)} {(types.go)})
                                        (C {(xargs)} {(-n1)} {(dirname)})
                                        (C {(sed)} {(DQ ('s|') (Lit_Other '\\') ('./||g'))})
                                        (C {(sort)})
                                      ]
                                      negated: False
                                    )
                                    (SimpleCommand
                                      words: [{(popd)}]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: 16777215
                                          arg_word: {(/dev/null)}
                                          spids: [2556]
                                        )
                                      ]
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [2508 2561]
                            )
                          }
                        ]
                      )
                    }
                  spids: [2504]
                )
              ]
              spids: [2504]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:group_version)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [2570]
                )
              ]
              spids: [2568]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_EqualTilde
                              left: 
                                {
                                  (DQ (' ') 
                                    (BracedVarSub
                                      token: <VSub_Name staging_apis>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2583 2588]
                                    ) (' ')
                                  )
                                }
                              right: 
                                {
                                  (DQ (' ') 
                                    (BracedVarSub
                                      token: <VSub_Name group_version>
                                      suffix_op: 
                                        (PatSub
                                          pat: {('.*k8s.io')}
                                          replace: {(SQ )}
                                          do_all: False
                                          do_prefix: False
                                          do_suffix: False
                                        )
                                      spids: [2596 2601]
                                    ) (' ')
                                  )
                                }
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ (vendor/k8s.io/api/) 
                          (BracedVarSub
                            token: <VSub_Name group_version>
                            suffix_op: 
                              (PatSub
                                pat: {('.*k8s.io')}
                                replace: {(SQ )}
                                do_all: False
                                do_prefix: False
                                do_suffix: False
                              )
                            spids: [2615 2620]
                          )
                        )
                      }
                    )
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [16777215 2608]
                )
              ]
              spids: [16777215 2627]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name group_version))}
                              right: {(DQ (v1))}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ (vendor/k8s.io/api/core/v1))})
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [16777215 2654]
                )
              ]
              spids: [16777215 2667]
            )
            (Case
              to_match: {(DQ (${ VSub_Name group_version))}
              arms: [
                (case_arm
                  pat_list: [{(__internal)}]
                  action: [(C {(echo)} {(DQ (pkg/api))})]
                  spids: [2698 2699 2709 16777215]
                )
                (case_arm
                  pat_list: [{(federation/v1beta1)}]
                  action: [(C {(echo)} {(DQ (federation/apis/federation/v1beta1))})]
                  spids: [2712 2713 2723 16777215]
                )
                (case_arm
                  pat_list: [{(meta/v1)}]
                  action: [(C {(echo)} {(DQ (vendor/k8s.io/apimachinery/pkg/apis/meta/v1))})]
                  spids: [2726 2727 2737 16777215]
                )
                (case_arm
                  pat_list: [{(meta/v1)}]
                  action: [(C {(echo)} {(DQ (../vendor/k8s.io/apimachinery/pkg/apis/meta/v1))})]
                  spids: [2740 2741 2751 16777215]
                )
                (case_arm
                  pat_list: [{(meta/v1alpha1)}]
                  action: [(C {(echo)} {(DQ (vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1))})]
                  spids: [2754 2755 2765 16777215]
                )
                (case_arm
                  pat_list: [{(meta/v1alpha1)}]
                  action: [(C {(echo)} {(DQ (../vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1))})]
                  spids: [2768 2769 2779 16777215]
                )
                (case_arm
                  pat_list: [{(unversioned)}]
                  action: [(C {(echo)} {(DQ (pkg/api/unversioned))})]
                  spids: [2782 2783 2793 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*') (.k8s.io)}]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ (pkg/apis/) 
                          (BracedVarSub
                            token: <VSub_Name group_version>
                            suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{('.*k8s.io')})
                            spids: [2805 2809]
                          )
                        )
                      }
                    )
                  ]
                  spids: [2796 2798 2813 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*') (.k8s.io/) (Lit_Other '*')}]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ (pkg/apis/) 
                          (BracedVarSub
                            token: <VSub_Name group_version>
                            suffix_op: 
                              (PatSub
                                pat: {('.*k8s.io')}
                                replace: {(SQ )}
                                do_all: False
                                do_prefix: False
                                do_suffix: False
                              )
                            spids: [2826 2831]
                          )
                        )
                      }
                    )
                  ]
                  spids: [2816 2819 2835 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ (pkg/apis/) 
                          (BracedVarSub
                            token: <VSub_Name group_version>
                            suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(__internal)})
                            spids: [2846 2850]
                          )
                        )
                      }
                    )
                  ]
                  spids: [2838 2839 2854 16777215]
                )
              ]
              spids: [2683 2691 2857]
            )
          ]
          spids: [2501]
        )
      spids: [2491 2500]
    )
    (FuncDef
      name: 'kube::util::gv-to-swagger-name'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:group_version)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [2886]
                )
              ]
              spids: [2884]
            )
            (Case
              to_match: {(DQ (${ VSub_Name group_version))}
              arms: [
                (case_arm
                  pat_list: [{(v1)}]
                  action: [(C {(echo)} {(DQ (v1))})]
                  spids: [2903 2904 2914 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name group_version>
                            suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')})
                            spids: [2924 2929]
                          ) (_) 
                          (BracedVarSub
                            token: <VSub_Name group_version>
                            suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('*') (Lit_Slash /)})
                            spids: [2931 2936]
                          )
                        )
                      }
                    )
                  ]
                  spids: [2917 2918 2940 16777215]
                )
              ]
              spids: [2892 2900 2943]
            )
          ]
          spids: [2881]
        )
      spids: [2871 2880]
    )
    (FuncDef
      name: 'kube::util::fetch-swagger-spec'
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: ver
              iter_words: [{(${ VSub_Name VERSIONS)}]
              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 KUBE_NONSERVER_GROUP_VERSIONS) (' '))
                                        }
                                      right: 
                                        {(Lit_Other '*') (DQ (' ') (${ VSub_Name ver) (' ')) 
                                          (Lit_Other '*')
                                        }
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [16777215 3021]
                        )
                      ]
                      spids: [16777215 3027]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(${ VSub_Name ver)}
                                      right: {(DQ (v1))}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:SUBPATH)
                                  op: Equal
                                  rhs: {(DQ (api))}
                                  spids: [3054]
                                )
                              ]
                              spids: [3054]
                            )
                          ]
                          spids: [16777215 3051]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:SUBPATH)
                              op: Equal
                              rhs: {(DQ (apis))}
                              spids: [3063]
                            )
                          ]
                          spids: [3063]
                        )
                      ]
                      spids: [3060 3069]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SUBPATH)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name SUBPATH) (/) (${ VSub_Name ver))}
                          spids: [3072]
                        )
                      ]
                      spids: [3072]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SWAGGER_JSON_NAME)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C 
                                          {(kube) (Lit_Other ':') (Lit_Other ':') (util) 
                                            (Lit_Other ':') (Lit_Other ':') (gv-to-swagger-name)
                                          } {(${ VSub_Name ver)}
                                        )
                                      ]
                                    )
                                  left_token: <Left_CommandSub '$('>
                                  spids: [3086 3098]
                                ) (.json)
                              )
                            }
                          spids: [3084]
                        )
                      ]
                      spids: [3084]
                    )
                    (SimpleCommand
                      words: [
                        {(curl)}
                        {(-w)}
                        {(DQ (Lit_Other '\\') (n))}
                        {(-fs)}
                        {(DQ (${ VSub_Name SWAGGER_API_PATH) (${ VSub_Name SUBPATH))}
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: 
                            {
                              (DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/) (${ VSub_Name SWAGGER_JSON_NAME))
                            }
                          spids: [3123]
                        )
                      ]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(${ VSub_Name ver)}
                                      right: {(DQ (v1))}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [16777215 3158]
                        )
                      ]
                      spids: [16777215 3164]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SUBPATH)
                          op: Equal
                          rhs: 
                            {(DQ (apis/)) 
                              (BracedVarSub
                                token: <VSub_Name ver>
                                suffix_op: 
                                  (StringUnary
                                    op_id: VOp1_Percent
                                    arg_word: {(Lit_Slash /) ('*')}
                                  )
                                spids: [3171 3176]
                              )
                            }
                          spids: [3167]
                        )
                      ]
                      spids: [3167]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SWAGGER_JSON_NAME)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name ver>
                                  suffix_op: 
                                    (StringUnary
                                      op_id: VOp1_Percent
                                      arg_word: {(Lit_Slash /) ('*')}
                                    )
                                  spids: [3181 3186]
                                ) (.json)
                              )
                            }
                          spids: [3179]
                        )
                      ]
                      spids: [3179]
                    )
                    (SimpleCommand
                      words: [
                        {(curl)}
                        {(-w)}
                        {(DQ (Lit_Other '\\') (n))}
                        {(-fs)}
                        {(DQ (${ VSub_Name SWAGGER_API_PATH) (${ VSub_Name SUBPATH))}
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: 
                            {
                              (DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/) (${ VSub_Name SWAGGER_JSON_NAME))
                            }
                          spids: [3211]
                        )
                      ]
                    )
                  ]
                  spids: [2991 3224]
                )
              spids: [2985 2989]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (Lit_Other '\\') (n))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/resourceListing.json))}
                  spids: [3249]
                )
              ]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (Lit_Other '\\') (n))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH) (version))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/version.json))}
                  spids: [3277]
                )
              ]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (Lit_Other '\\') (n))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH) (api))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/api.json))}
                  spids: [3305]
                )
              ]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (Lit_Other '\\') (n))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH) (apis))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/apis.json))}
                  spids: [3333]
                )
              ]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (Lit_Other '\\') (n))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH) (logs))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/logs.json))}
                  spids: [3361]
                )
              ]
            )
          ]
          spids: [2977]
        )
      spids: [2967 2976]
    )
    (FuncDef
      name: 'kube::util::git_upstream_remote_name'
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(git)} {(remote)} {(-v)})
                (C {(grep)} {(fetch)})
                (C {(grep)} {(-E)} {(SQ <'github.com[/:]kubernetes/kubernetes|k8s.io/kubernetes'>)})
                (C {(head)} {(-n)} {(1)})
                (C {(awk)} {(SQ <'{print $1}'>)})
              ]
              negated: False
            )
          ]
          spids: [3389]
        )
      spids: [3379 3388]
    )
    (FuncDef
      name: 'kube::util::create-fake-git-tree'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:target_dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: 
                              {
                                (CommandSubPart
                                  command_list: (CommandList children:[(C {(pwd)})])
                                  left_token: <Left_CommandSub '$('>
                                  spids: [3462 3464]
                                )
                              }
                          )
                        spids: [3459 3465]
                      )
                    }
                  spids: [3458]
                )
              ]
              spids: [3454]
            )
            (SimpleCommand
              words: [{(pushd)} {(DQ (${ VSub_Name target_dir))}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[3477])]
            )
            (SimpleCommand
              words: [{(git)} {(init)}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[3485])]
            )
            (C {(git)} {(config)} {(--local)} {(user.email)} {(DQ ('nobody@k8s.io'))})
            (C {(git)} {(config)} {(--local)} {(user.name)} {(DQ ($ VSub_Number '$0'))})
            (SimpleCommand
              words: [{(git)} {(add)} {(.)}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[3521])]
            )
            (SimpleCommand
              words: [{(git)} {(commit)} {(-q)} {(-m)} {(DQ (Snapshot))}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[3537])]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DParen
                          child: 
                            (ArithBinary
                              op_id: Arith_GreatEqual
                              left: 
                                (ArithWord
                                  w: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name KUBE_VERBOSE>
                                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(5)})
                                        spids: [3545 3549]
                                      )
                                    }
                                )
                              right: (ArithWord w:{(Lit_Digits 6)})
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (status)
                      } {(DQ (${ VSub_Name target_dir) (' is now a git tree.'))}
                    )
                  ]
                  spids: [16777215 3559]
                )
              ]
              spids: [16777215 3578]
            )
            (SimpleCommand
              words: [{(popd)}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[3583])]
            )
          ]
          spids: [3451]
        )
      spids: [3441 3450]
    )
    (FuncDef
      name: 'kube::util::godep_restored'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:godeps_json)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(Godeps) (Lit_Slash /) (Godeps.json)}
                          )
                        spids: [3613 3619]
                      )
                    }
                  spids: [3612]
                )
              ]
              spids: [3608]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:gopath)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: 
                              {
                                (BracedVarSub
                                  token: <VSub_Name GOPATH>
                                  suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(':*')})
                                  spids: [3630 3634]
                                )
                              }
                          )
                        spids: [3627 3635]
                      )
                    }
                  spids: [3626]
                )
              ]
              spids: [3622]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (Pipeline children:[(C {(which)} {(jq)})] negated:True)
                      terminator: <Op_Amp '&'>
                    )
                    (Sentence
                      child: 
                        (SimpleCommand
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(/dev/null)}
                              spids: [3647]
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ('jq not found. Please install.'))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[3660])]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [16777215 3651]
                )
              ]
              spids: [16777215 3669]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:root) op:Equal spids:[3674])]
              spids: [3672]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:old_rev) op:Equal rhs:{(DQ )} spids:[3679])]
              spids: [3677]
            )
            (While
              cond: [(Sentence child:(C {(read)} {(path)} {(rev)}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:rev)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(echo)} {(DQ (${ VSub_Name rev))})
                                          (C {(sed)} 
                                            {
                                              (DQ ("s/['") 
                                                (EscapedLiteralPart
                                                  token: <Lit_EscapedChar '\\"'>
                                                ) (']//g')
                                              )
                                            }
                                          )
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [3697 3715]
                              )
                            }
                          spids: [3696]
                        )
                      ]
                      spids: [3696]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (AndOr
                                  children: [
                                    (DBracket
                                      expr: 
                                        (BoolBinary
                                          op_id: BoolBinary_GlobDEqual
                                          left: {(DQ (${ VSub_Name rev))}
                                          right: {(DQ (${ VSub_Name old_rev))}
                                        )
                                    )
                                    (DBracket
                                      expr: 
                                        (BoolBinary
                                          op_id: BoolBinary_GlobDEqual
                                          left: {(DQ (${ VSub_Name path))}
                                          right: {(DQ (${ VSub_Name root)) (Lit_Other '*')}
                                        )
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [16777215 3764]
                        )
                      ]
                      spids: [16777215 3774]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:root)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name path))}
                          spids: [3778]
                        )
                      ]
                      spids: [3778]
                    )
                    (While
                      cond: [
                        (Sentence
                          child: 
                            (C {(Lit_Other '[')} {(DQ (${ VSub_Name root))} 
                              {(KW_Bang '!') (Lit_Other '=')} {(DQ (.))} {(-a)} {(KW_Bang '!')} {(-d)} {(DQ (${ VSub_Name gopath) (/src/) (${ VSub_Name root) (/.git))} 
                              {(-a)} {(KW_Bang '!')} {(-d)} {(DQ (${ VSub_Name gopath) (/src/) (${ VSub_Name root) (/.hg))} {(Lit_Other ']')}
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      body: 
                        (DoGroup
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:root)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [(C {(dirname)} {(DQ (${ VSub_Name root))})]
                                          )
                                        left_token: <Left_CommandSub '$('>
                                        spids: [3844 3852]
                                      )
                                    }
                                  spids: [3843]
                                )
                              ]
                              spids: [3843]
                            )
                          ]
                          spids: [3840 3855]
                        )
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ (${ VSub_Name root))} 
                                  {(Lit_Other '=') (Lit_Other '=')} {(DQ (.))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (SimpleCommand
                              words: [
                                {(echo)}
                                {
                                  (DQ ('No checkout of ') (${ VSub_Name path) (' found in GOPATH ') 
                                    (EscapedLiteralPart
                                      token: <Lit_EscapedChar '\\"'>
                                    ) (${ VSub_Name gopath) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (.)
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 1
                                  arg_word: {(2)}
                                  spids: [3897]
                                )
                              ]
                            )
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(1)}
                            )
                          ]
                          spids: [16777215 3878]
                        )
                      ]
                      spids: [16777215 3906]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [(assign_pair lhs:(LhsName name:head) op:Equal spids:[3911])]
                      spids: [3909]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-d)} 
                                  {(DQ (${ VSub_Name gopath) (/src/) (${ VSub_Name root) (/.git))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:head)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (CommandSubPart
                                          command_list: 
                                            (CommandList
                                              children: [
                                                (AndOr
                                                  children: [
                                                    (C {(cd)} 
                                                      {
                                                        (DQ (${ VSub_Name gopath) (/src/) 
                                                          (${ VSub_Name root)
                                                        )
                                                      }
                                                    )
                                                    (C {(git)} {(rev-parse)} {(HEAD)})
                                                  ]
                                                  op_id: Op_DAmp
                                                )
                                              ]
                                            )
                                          left_token: <Left_CommandSub '$('>
                                          spids: [3939 3959]
                                        )
                                      )
                                    }
                                  spids: [3937]
                                )
                              ]
                              spids: [3937]
                            )
                          ]
                          spids: [16777215 3934]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:head)
                              op: Equal
                              rhs: 
                                {
                                  (DQ 
                                    (CommandSubPart
                                      command_list: 
                                        (CommandList
                                          children: [
                                            (AndOr
                                              children: [
                                                (C {(cd)} 
                                                  {
                                                    (DQ (${ VSub_Name gopath) (/src/) 
                                                      (${ VSub_Name root)
                                                    )
                                                  }
                                                )
                                                (C {(hg)} {(parent)} {(--template)} {(SQ <'{node}'>)})
                                              ]
                                              op_id: Op_DAmp
                                            )
                                          ]
                                        )
                                      left_token: <Left_CommandSub '$('>
                                      spids: [3968 3992]
                                    )
                                  )
                                }
                              spids: [3966]
                            )
                          ]
                          spids: [3966]
                        )
                      ]
                      spids: [3963 3996]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ (${ VSub_Name head))} 
                                  {(KW_Bang '!') (Lit_Other '=')} {(DQ (${ VSub_Name rev))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (SimpleCommand
                              words: [
                                {(echo)}
                                {
                                  (DQ ("Unexpected HEAD '") (${ VSub_Name head) ("' at ") 
                                    (${ VSub_Name gopath) (/src/) (${ VSub_Name root) (", expected '") (${ VSub_Name rev) ("'.")
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 1
                                  arg_word: {(2)}
                                  spids: [4046]
                                )
                              ]
                            )
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(1)}
                            )
                          ]
                          spids: [16777215 4021]
                        )
                      ]
                      spids: [16777215 4055]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:old_rev)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name rev))}
                          spids: [4058]
                        )
                      ]
                      spids: [4058]
                    )
                  ]
                  spids: [3693 4066]
                )
              redirects: [
                (Redir
                  op_id: Redir_Less
                  fd: 16777215
                  arg_word: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (SimpleCommand
                                words: [{(jq)} {(SQ <'.Deps|.[]|.ImportPath + " " + .Rev'>)} {(-r)}]
                                redirects: [
                                  (Redir
                                    op_id: Redir_Less
                                    fd: 16777215
                                    arg_word: {(DQ (${ VSub_Name godeps_json))}
                                    spids: [4079]
                                  )
                                ]
                              )
                            ]
                          )
                        left_token: <Left_ProcSubIn '<('>
                        spids: [4070 4086]
                      )
                    }
                  spids: [4068]
                )
              ]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [3605]
        )
      spids: [3595 3604]
    )
    (FuncDef
      name: 'kube::util::ensure_clean_working_dir'
      body: 
        (BraceGroup
          children: [
            (While
              cond: [
                (Sentence
                  child: 
                    (Pipeline
                      children: [(C {(git)} {(diff)} {(HEAD)} {(--exit-code)})]
                      negated: True
                    )
                  terminator: <Op_Amp '&'>
                )
                (Sentence
                  child: 
                    (SimpleCommand
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(/dev/null)}
                          spids: [4128]
                        )
                      ]
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(-e)} 
                      {
                        (DQ (Lit_Other '\\') ('nUnexpected dirty working directory:') (Lit_Other '\\') 
                          (n)
                        )
                      }
                    )
                    (Pipeline
                      children: [
                        (If
                          arms: [
                            (if_arm
                              cond: [(Sentence child:(C {(tty)} {(-s)}) terminator:<Op_Semi ';'>)]
                              action: [(C {(git)} {(status)} {(-s)})]
                              spids: [16777215 4154]
                            )
                          ]
                          else_action: [(C {(git)} {(diff)} {(-a)}) (C {(exit)} {(1)})]
                          spids: [4164 4182]
                        )
                        (C {(sed)} {(SQ <'s/^/  /'>)})
                      ]
                      negated: False
                    )
                    (C {(echo)} {(-e)} 
                      {
                        (DQ (Lit_Other '\\') 
                          (
'nCommit your changes in another terminal and then continue here by pressing enter.'
                          )
                        )
                      }
                    )
                    (C {(read)})
                  ]
                  spids: [4132 4206]
                )
              redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[4208])]
            )
          ]
          spids: [4112]
        )
      spids: [4102 4111]
    )
    (FuncDef
      name: 'kube::util::ensure_godep_version'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:GODEP_VERSION)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (v79))})
                        spids: [4234 4240]
                      )
                    }
                  spids: [4233]
                )
              ]
              spids: [4233]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: 
                                {
                                  (DQ 
                                    (CommandSubPart
                                      command_list: 
                                        (CommandList
                                          children: [
                                            (SimpleCommand
                                              words: [{(godep)} {(version)}]
                                              redirects: [
                                                (Redir
                                                  op_id: Redir_Great
                                                  fd: 2
                                                  arg_word: {(/dev/null)}
                                                  spids: [4257]
                                                )
                                              ]
                                            )
                                          ]
                                        )
                                      left_token: <Left_CommandSub '$('>
                                      spids: [4252 4259]
                                    )
                                  )
                                }
                              right: 
                                {(Lit_Other '*') (DQ ('godep ') (${ VSub_Name GODEP_VERSION)) 
                                  (Lit_Other '*')
                                }
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return>)]
                  spids: [16777215 4276]
                )
              ]
              spids: [16777215 4282]
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Installing godep version ') (${ VSub_Name GODEP_VERSION))}
            )
            (C {(go)} {(install)} {(./vendor/github.com/tools/godep/)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobNEqual
                              left: 
                                {
                                  (DQ 
                                    (CommandSubPart
                                      command_list: 
                                        (CommandList
                                          children: [
                                            (SimpleCommand
                                              words: [{(godep)} {(version)}]
                                              redirects: [
                                                (Redir
                                                  op_id: Redir_Great
                                                  fd: 2
                                                  arg_word: {(/dev/null)}
                                                  spids: [4320]
                                                )
                                              ]
                                            )
                                          ]
                                        )
                                      left_token: <Left_CommandSub '$('>
                                      spids: [4315 4322]
                                    )
                                  )
                                }
                              right: 
                                {(Lit_Other '*') (DQ ('godep ') (${ VSub_Name GODEP_VERSION)) 
                                  (Lit_Other '*')
                                }
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (error)
                      } 
                      {
                        (DQ ('Expected godep ') (${ VSub_Name GODEP_VERSION) (', got ') 
                          (CommandSubPart
                            command_list: (CommandList children:[(C {(godep)} {(version)})])
                            left_token: <Left_CommandSub '$('>
                            spids: [4356 4360]
                          )
                        )
                      }
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [16777215 4339]
                )
              ]
              spids: [16777215 4369]
            )
          ]
          spids: [4230]
        )
      spids: [4220 4229]
    )
    (FuncDef
      name: 'kube::util::ensure_no_staging_repos_in_gopath'
      body: 
        (BraceGroup
          children: [
            (C 
              {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') (Lit_Other ':') 
                (ensure_single_dir_gopath)
              }
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:error) op:Equal rhs:{(0)} spids:[4404])]
              spids: [4402]
            )
            (ForEach
              iter_name: repo
              iter_words: [
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(ls)} {(${ VSub_Name KUBE_ROOT) (/staging/src/k8s.io)})]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [4414 4421]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-e)} 
                                  {(DQ (${ VSub_Name GOPATH) (/src/k8s.io/) (${ VSub_Name repo))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (SimpleCommand
                              words: [
                                {(echo)}
                                {
                                  (DQ (k8s.io/) (${ VSub_Name repo) 
                                    (' exists in GOPATH. Remove before running godep-save.sh.')
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 1
                                  arg_word: {(2)}
                                  spids: [4459]
                                )
                              ]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:error)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [4463]
                                )
                              ]
                              spids: [4463]
                            )
                          ]
                          spids: [16777215 4446]
                        )
                      ]
                      spids: [16777215 4467]
                    )
                  ]
                  spids: [4424 4470]
                )
              spids: [4413 4422]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ (${ VSub_Name error))} {(Lit_Other '=')} {(DQ (1))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(exit)} {(1)})]
                  spids: [16777215 4492]
                )
              ]
              spids: [16777215 4500]
            )
          ]
          spids: [4390]
        )
      spids: [4380 4389]
    )
    (FuncDef
      name: 'kube::util::go_install_from_commit'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pkg)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [4525]
                )
              ]
              spids: [4521]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:commit)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [4533]
                )
              ]
              spids: [4529]
            )
            (C 
              {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') (Lit_Other ':') 
                (ensure-temp-dir)
              }
            )
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name KUBE_TEMP) (/go/src))})
            (SimpleCommand
              words: [{(go)} {(get)} {(-d)} {(-u)} {(DQ (${ VSub_Name pkg))}]
              more_env: [
                (env_pair
                  name: GOPATH
                  val: {(DQ (${ VSub_Name KUBE_TEMP) (/go))}
                  spids: [4559]
                )
              ]
            )
            (Subshell
              child: 
                (CommandList
                  children: [
                    (C {(cd)} {(DQ (${ VSub_Name KUBE_TEMP) (/go/src/) (${ VSub_Name pkg))})
                    (C {(git)} {(checkout)} {(-q)} {(DQ (${ VSub_Name commit))})
                    (SimpleCommand
                      words: [{(go)} {(install)} {(DQ (${ VSub_Name pkg))}]
                      more_env: [
                        (env_pair
                          name: GOPATH
                          val: {(DQ (${ VSub_Name KUBE_TEMP) (/go))}
                          spids: [4611]
                        )
                      ]
                    )
                  ]
                )
              spids: [4582 4630]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:PATH)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name KUBE_TEMP) ('/go/bin:') (${ VSub_Name PATH))}
                  spids: [4633]
                )
              ]
              spids: [4633]
            )
            (C {(hash)} {(-r)})
          ]
          spids: [4518]
        )
      spids: [4508 4517]
    )
    (FuncDef
      name: 'kube::util::ensure_single_dir_gopath'
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name GOPATH))}
                              right: {(Lit_Other '*') (Lit_Other ':') (Lit_Other '*')}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ('GOPATH must consist of a single directory.'))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[4699])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [16777215 4690]
                )
              ]
              spids: [16777215 4708]
            )
          ]
          spids: [4668]
        )
      spids: [4658 4667]
    )
    (FuncDef
      name: 'kube::util::has_changes_against_upstream_branch'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:git_branch)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [4742]
                )
              ]
              spids: [4738]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pattern)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [4750]
                )
              ]
              spids: [4746]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:not_pattern)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 3>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(totallyimpossiblepattern)}
                          )
                        spids: [4759 4763]
                      )
                    }
                  spids: [4758]
                )
              ]
              spids: [4754]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:full_branch) op:Equal spids:[4768])]
              spids: [4766]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:full_branch)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C 
                                  {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                                    (Lit_Other ':') (git_upstream_remote_name)
                                  }
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [4774 4782]
                        ) (/) (${ VSub_Name git_branch)
                      )
                    }
                  spids: [4772]
                )
              ]
              spids: [4772]
            )
            (C {(echo)} 
              {
                (DQ ("Checking for '") (${ VSub_Name pattern) ("' changes against '") 
                  (${ VSub_Name full_branch) ("'")
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(git)} {(describe)} {(DQ (${ VSub_Name full_branch))}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [4823]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(exit)} {(1)})]
                  spids: [16777215 4827]
                )
              ]
              spids: [16777215 4839]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (C {(git)} {(diff)} {(--name-only)} 
                              {(DQ (${ VSub_Name full_branch) (...HEAD))}
                            )
                            (C {(grep)} {(-v)} {(-E)} {(DQ (${ VSub_Name not_pattern))})
                            (SimpleCommand
                              words: [{(grep)} {(DQ (${ VSub_Name pattern))}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [4885]
                                )
                              ]
                            )
                          ]
                          negated: False
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [16777215 4890]
                )
              ]
              spids: [16777215 4898]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (C {(git)} {(status)} {(--porcelain)})
                            (C {(grep)} {(-v)} {(-E)} {(DQ (${ VSub_Name not_pattern))})
                            (SimpleCommand
                              words: [{(grep)} {(DQ (${ VSub_Name pattern))}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [4937]
                                )
                              ]
                            )
                          ]
                          negated: False
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("Detected '") (${ VSub_Name pattern) ("' uncommitted changes."))})
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
                  ]
                  spids: [16777215 4942]
                )
              ]
              spids: [16777215 4961]
            )
            (C {(echo)} {(DQ ("No '") (${ VSub_Name pattern) ("' changes detected."))})
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [4735]
        )
      spids: [4725 4734]
    )
    (FuncDef
      name: 'kube::util::download_file'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:url)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [4999]
                )
              ]
              spids: [4995]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:destination_file)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [5007]
                )
              ]
              spids: [5003]
            )
            (Sentence
              child: (C {(rm)} {(${ VSub_Name destination_file)} {(2)})
              terminator: <Op_Amp '&'>
            )
            (AndOr
              children: [
                (SimpleCommand
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [5020]
                    )
                  ]
                )
                (C {(true)})
              ]
              op_id: Op_DPipe
            )
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(seq)} {(5)})])
                    left_token: <Left_CommandSub '$('>
                    spids: [5036 5040]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (Pipeline
                                  children: [
                                    (C {(curl)} {(-fsSL)} {(--retry)} {(3)} {(--keepalive-time)} {(2)} 
                                      {(${ VSub_Name url)} {(-o)} {(${ VSub_Name destination_file)}
                                    )
                                  ]
                                  negated: True
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {
                                (DQ ('Downloading ') (${ VSub_Name url) (' failed. ') 
                                  (ArithSubPart
                                    anode: 
                                      (ArithBinary
                                        op_id: Arith_Minus
                                        left: (ArithWord w:{(Lit_Digits 5)})
                                        right: (ArithVarRef name:i)
                                      )
                                    spids: [5084 5089]
                                  ) (' retries left.')
                                )
                              }
                            )
                            (C {(sleep)} {(1)})
                          ]
                          spids: [16777215 5073]
                        )
                      ]
                      else_action: [
                        (C {(echo)} {(DQ ('Downloading ') (${ VSub_Name url) (' succeed'))})
                        (ControlFlow
                          token: <ControlFlow_Return return>
                          arg_word: {(0)}
                        )
                      ]
                      spids: [5099 5118]
                    )
                  ]
                  spids: [5043 5121]
                )
              spids: [5035 16777215]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [4992]
        )
      spids: [4982 4991]
    )
    (FuncDef
      name: 'kube::util::test_openssl_installed'
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(openssl)} {(version)}]
              redirects: [
                (Redir
                  op_id: Redir_GreatAnd
                  fd: 16777215
                  arg_word: {(/dev/null)}
                  spids: [5157]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_QMark '$?'))} {(KW_Bang '!') (Lit_Other '=')} 
                          {(DQ (0))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Failed to run openssl. Please ensure openssl is installed'))})
                    (C {(exit)} {(1)})
                  ]
                  spids: [16777215 5180]
                )
              ]
              spids: [16777215 5195]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:OPENSSL_BIN)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(command)} {(-v)} {(openssl)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [5199 5205]
                      )
                    }
                  spids: [5198]
                )
              ]
              spids: [5198]
            )
          ]
          spids: [5150]
        )
      spids: [5140 5143]
    )
    (FuncDef
      name: 'kube::util::create_signing_certkey'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sudo)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [5240]
                )
              ]
              spids: [5238]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [5246]
                )
              ]
              spids: [5244]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:id)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [5252]
                )
              ]
              spids: [5250]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:purpose)
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [5258]
                )
              ]
              spids: [5256]
            )
            (SimpleCommand
              words: [{(${ VSub_Name sudo)} {(/bin/bash)} {(-e)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('    rm -f ') (Right_DoubleQuote '"') (${ VSub_Name dest_dir) (/) 
                        (${ VSub_Name id) (-ca.crt) (Right_DoubleQuote '"') (' ') (Right_DoubleQuote '"') (${ VSub_Name dest_dir) (/) 
                        (${ VSub_Name id) (-ca.key) (Right_DoubleQuote '"') ('\n') ('    ') (${ VSub_Name OPENSSL_BIN) 
                        (' req -x509 -sha256 -new -nodes -days 365 -newkey rsa:2048 -keyout ') (Right_DoubleQuote '"') (${ VSub_Name dest_dir) (/) (${ VSub_Name id) (-ca.key) (Right_DoubleQuote '"') 
                        (' -out ') (Right_DoubleQuote '"') (${ VSub_Name dest_dir) (/) (${ VSub_Name id) (-ca.crt) (Right_DoubleQuote '"') 
                        (' -subj ') (Right_DoubleQuote '"') ('/C=xx/ST=x/L=x/O=x/OU=x/CN=ca/emailAddress=x/') (Right_DoubleQuote '"') ('\n') 
                        ("    echo '{") (Right_DoubleQuote '"') (signing) (Right_DoubleQuote '"') (':{') (Right_DoubleQuote '"') (default) 
                        (Right_DoubleQuote '"') (':{') (Right_DoubleQuote '"') (expiry) (Right_DoubleQuote '"') (':') (Right_DoubleQuote '"') (43800h) 
                        (Right_DoubleQuote '"') (',') (Right_DoubleQuote '"') (usages) (Right_DoubleQuote '"') (':[') (Right_DoubleQuote '"') (signing) 
                        (Right_DoubleQuote '"') (',') (Right_DoubleQuote '"') ('key encipherment') (Right_DoubleQuote '"') (',') (${ VSub_Name purpose) 
                        ("]}}}' > ") (Right_DoubleQuote '"') (${ VSub_Name dest_dir) (/) (${ VSub_Name id) (-ca-config.json) 
                        (Right_DoubleQuote '"') ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [5274]
                )
              ]
            )
          ]
          spids: [5235]
        )
      spids: [5225 5228]
    )
    (FuncDef
      name: 'kube::util::create_client_certkey'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sudo)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [5397]
                )
              ]
              spids: [5395]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [5403]
                )
              ]
              spids: [5401]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ca)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [5409]
                )
              ]
              spids: [5407]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:id)
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [5415]
                )
              ]
              spids: [5413]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cn)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 5>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {($ VSub_Number '$4')}
                          )
                        spids: [5422 5426]
                      )
                    }
                  spids: [5421]
                )
              ]
              spids: [5419]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:groups) op:Equal rhs:{(DQ )} spids:[5431])]
              spids: [5429]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:SEP) op:Equal rhs:{(DQ )} spids:[5438])]
              spids: [5436]
            )
            (C {(shift)} {(5)})
            (While
              cond: [
                (Sentence
                  child: 
                    (C {(Lit_Other '[')} {(-n)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Number 1>
                            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                            spids: [5455 5458]
                          )
                        )
                      } {(Lit_Other ']')}
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:groups)
                          op: PlusEqual
                          rhs: 
                            {
                              (DQ (${ VSub_Name SEP) ('{') 
                                (EscapedLiteralPart
                                  token: <Lit_EscapedChar '\\"'>
                                ) (O) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (':') 
                                (EscapedLiteralPart
                                  token: <Lit_EscapedChar '\\"'>
                                ) ($ VSub_Number '$1') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('}')
                              )
                            }
                          spids: [5467]
                        )
                      ]
                      spids: [5467]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SEP)
                          op: Equal
                          rhs: {(DQ (','))}
                          spids: [5484]
                        )
                      ]
                      spids: [5484]
                    )
                    (C {(shift)} {(1)})
                  ]
                  spids: [5464 5495]
                )
            )
            (SimpleCommand
              words: [{(${ VSub_Name sudo)} {(/bin/bash)} {(-e)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('    cd ') (${ VSub_Name dest_dir) ('\n') ("    echo '{") 
                        (Right_DoubleQuote '"') (CN) (Right_DoubleQuote '"') (':') (Right_DoubleQuote '"') (${ VSub_Name cn) (Right_DoubleQuote '"') (',') 
                        (Right_DoubleQuote '"') (names) (Right_DoubleQuote '"') (':[') (${ VSub_Name groups) ('],') (Right_DoubleQuote '"') (hosts) 
                        (Right_DoubleQuote '"') (':[') (Right_DoubleQuote '"') (Right_DoubleQuote '"') ('],') (Right_DoubleQuote '"') (key) 
                        (Right_DoubleQuote '"') (':{') (Right_DoubleQuote '"') (algo) (Right_DoubleQuote '"') (':') (Right_DoubleQuote '"') (rsa) 
                        (Right_DoubleQuote '"') (',') (Right_DoubleQuote '"') (size) (Right_DoubleQuote '"') (":2048}}' | ") (${ VSub_Name CFSSL_BIN) 
                        (' gencert -ca=') (${ VSub_Name ca) ('.crt -ca-key=') (${ VSub_Name ca) ('.key -config=') (${ VSub_Name ca) 
                        ('-config.json - | ') (${ VSub_Name CFSSLJSON_BIN) (' -bare client-') (${ VSub_Name id) ('\n') ('    mv ') 
                        (Right_DoubleQuote '"') (client-) (${ VSub_Name id) (-key.pem) (Right_DoubleQuote '"') (' ') (Right_DoubleQuote '"') (client-) 
                        (${ VSub_Name id) (.key) (Right_DoubleQuote '"') ('\n') ('    mv ') (Right_DoubleQuote '"') (client-) (${ VSub_Name id) (.pem) 
                        (Right_DoubleQuote '"') (' ') (Right_DoubleQuote '"') (client-) (${ VSub_Name id) (.crt) (Right_DoubleQuote '"') ('\n') 
                        ('    rm -f ') (Right_DoubleQuote '"') (client-) (${ VSub_Name id) (.csr) (Right_DoubleQuote '"') ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [5506]
                )
              ]
            )
          ]
          spids: [5392]
        )
      spids: [5382 5385]
    )
    (FuncDef
      name: 'kube::util::create_serving_certkey'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sudo)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [5645]
                )
              ]
              spids: [5643]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [5651]
                )
              ]
              spids: [5649]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ca)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [5657]
                )
              ]
              spids: [5655]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:id)
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [5663]
                )
              ]
              spids: [5661]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cn)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 5>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {($ VSub_Number '$4')}
                          )
                        spids: [5670 5674]
                      )
                    }
                  spids: [5669]
                )
              ]
              spids: [5667]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:hosts) op:Equal rhs:{(DQ )} spids:[5679])]
              spids: [5677]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:SEP) op:Equal rhs:{(DQ )} spids:[5686])]
              spids: [5684]
            )
            (C {(shift)} {(5)})
            (While
              cond: [
                (Sentence
                  child: 
                    (C {(Lit_Other '[')} {(-n)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Number 1>
                            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                            spids: [5703 5706]
                          )
                        )
                      } {(Lit_Other ']')}
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:hosts)
                          op: PlusEqual
                          rhs: 
                            {
                              (DQ (${ VSub_Name SEP) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                                ($ VSub_Number '$1') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                              )
                            }
                          spids: [5715]
                        )
                      ]
                      spids: [5715]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SEP)
                          op: Equal
                          rhs: {(DQ (','))}
                          spids: [5726]
                        )
                      ]
                      spids: [5726]
                    )
                    (C {(shift)} {(1)})
                  ]
                  spids: [5712 5737]
                )
            )
            (SimpleCommand
              words: [{(${ VSub_Name sudo)} {(/bin/bash)} {(-e)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('    cd ') (${ VSub_Name dest_dir) ('\n') ("    echo '{") 
                        (Right_DoubleQuote '"') (CN) (Right_DoubleQuote '"') (':') (Right_DoubleQuote '"') (${ VSub_Name cn) (Right_DoubleQuote '"') (',') 
                        (Right_DoubleQuote '"') (hosts) (Right_DoubleQuote '"') (':[') (${ VSub_Name hosts) ('],') (Right_DoubleQuote '"') (key) 
                        (Right_DoubleQuote '"') (':{') (Right_DoubleQuote '"') (algo) (Right_DoubleQuote '"') (':') (Right_DoubleQuote '"') (rsa) 
                        (Right_DoubleQuote '"') (',') (Right_DoubleQuote '"') (size) (Right_DoubleQuote '"') (":2048}}' | ") (${ VSub_Name CFSSL_BIN) 
                        (' gencert -ca=') (${ VSub_Name ca) ('.crt -ca-key=') (${ VSub_Name ca) ('.key -config=') (${ VSub_Name ca) 
                        ('-config.json - | ') (${ VSub_Name CFSSLJSON_BIN) (' -bare serving-') (${ VSub_Name id) ('\n') ('    mv ') 
                        (Right_DoubleQuote '"') (serving-) (${ VSub_Name id) (-key.pem) (Right_DoubleQuote '"') (' ') (Right_DoubleQuote '"') (serving-) 
                        (${ VSub_Name id) (.key) (Right_DoubleQuote '"') ('\n') ('    mv ') (Right_DoubleQuote '"') (serving-) (${ VSub_Name id) 
                        (.pem) (Right_DoubleQuote '"') (' ') (Right_DoubleQuote '"') (serving-) (${ VSub_Name id) (.crt) 
                        (Right_DoubleQuote '"') ('\n') ('    rm -f ') (Right_DoubleQuote '"') (serving-) (${ VSub_Name id) (.csr) (Right_DoubleQuote '"') 
                        ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [5748]
                )
              ]
            )
          ]
          spids: [5640]
        )
      spids: [5630 5633]
    )
    (FuncDef
      name: 'kube::util::write_client_kubeconfig'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sudo)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [5880]
                )
              ]
              spids: [5878]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [5886]
                )
              ]
              spids: [5884]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ca_file)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [5892]
                )
              ]
              spids: [5890]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:api_host)
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [5898]
                )
              ]
              spids: [5896]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:api_port)
                  op: Equal
                  rhs: {($ VSub_Number '$5')}
                  spids: [5904]
                )
              ]
              spids: [5902]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:client_id)
                  op: Equal
                  rhs: {($ VSub_Number '$6')}
                  spids: [5910]
                )
              ]
              spids: [5908]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:token)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 7>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                        spids: [5917 5920]
                      )
                    }
                  spids: [5916]
                )
              ]
              spids: [5914]
            )
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(cat)}]
                  redirects: [
                    (HereDoc
                      op_id: Redir_DLess
                      fd: 16777215
                      body: 
                        {
                          (DQ ('apiVersion: v1\n') ('kind: Config\n') ('clusters:\n') ('  - cluster:\n') 
                            ('      certificate-authority: ') (${ VSub_Name ca_file) ('\n') ('      server: https://') (${ VSub_Name api_host) (':') 
                            (${ VSub_Name api_port) ('/\n') ('    name: local-up-cluster\n') ('users:\n') ('  - user:\n') ('      token: ') 
                            (${ VSub_Name token) ('\n') ('      client-certificate: ') (${ VSub_Name dest_dir) (/client-) (${ VSub_Name client_id) 
                            ('.crt\n') ('      client-key: ') (${ VSub_Name dest_dir) (/client-) (${ VSub_Name client_id) ('.key\n') 
                            ('    name: local-up-cluster\n') ('contexts:\n') ('  - context:\n') ('      cluster: local-up-cluster\n') 
                            ('      user: local-up-cluster\n') ('    name: local-up-cluster\n') ('current-context: local-up-cluster\n')
                          )
                        }
                      do_expansion: True
                      here_end: EOF
                      was_filled: True
                      spids: [5925]
                    )
                  ]
                )
                (SimpleCommand
                  words: [
                    {(${ VSub_Name sudo)}
                    {(tee)}
                    {(DQ (${ VSub_Name dest_dir)) (/) (${ VSub_Name client_id) (.kubeconfig)}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [5947]
                    )
                  ]
                )
              ]
              negated: False
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:username)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(whoami)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [6010 6012]
                      )
                    }
                  spids: [6009]
                )
              ]
              spids: [6009]
            )
            (SimpleCommand
              words: [{(${ VSub_Name sudo)} {(/bin/bash)} {(-e)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('    ') 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C 
                                  {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                                    (Lit_Other ':') (find-binary)
                                  } {(kubectl)}
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [6027 6037]
                        ) (' --kubeconfig=') (Right_DoubleQuote '"') (${ VSub_Name dest_dir) (/) (${ VSub_Name client_id) 
                        (.kubeconfig) (Right_DoubleQuote '"') (' config view --minify --flatten > ') (Right_DoubleQuote '"') (/tmp/) 
                        (${ VSub_Name client_id) (.kubeconfig) (Right_DoubleQuote '"') ('\n') ('    mv -f ') (Right_DoubleQuote '"') (/tmp/) 
                        (${ VSub_Name client_id) (.kubeconfig) (Right_DoubleQuote '"') (' ') (Right_DoubleQuote '"') (${ VSub_Name dest_dir) (/) 
                        (${ VSub_Name client_id) (.kubeconfig) (Right_DoubleQuote '"') ('\n') ('    chown ') (${ VSub_Name username) (' ') 
                        (Right_DoubleQuote '"') (${ VSub_Name dest_dir) (/) (${ VSub_Name client_id) (.kubeconfig) (Right_DoubleQuote '"') ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [6023]
                )
              ]
            )
          ]
          spids: [5875]
        )
      spids: [5865 5868]
    )
    (FuncDef
      name: 'kube::util::ensure_docker_daemon_connectivity'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:DOCKER)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{(docker)} {(${ VSub_Name DOCKER_OPTS)}])}
                  spids: [6114]
                )
              ]
              spids: [6114]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Name DOCKER>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [6129 6134]
                                    )
                                  )
                                }
                                {(info)}
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [6139]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [6143]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(cat)}]
                      redirects: [
                        (HereDoc
                          op_id: Redir_DLess
                          fd: 16777215
                          body: 
                            {("Can't connect to 'docker' daemon.  please fix and retry.\n") ('\n') 
                              ('Possible causes:\n') ('  - Docker Daemon not started\n') ('    - Linux: confirm via your init system\n') 
                              (
'    - macOS w/ docker-machine: run `docker-machine ls` and `docker-machine start <name>`\n'
                              ) ('    - macOS w/ Docker for Mac: Check the menu bar and start the Docker application\n') 
                              ("  - DOCKER_HOST hasn't been set or is set incorrectly\n") ('    - Linux: domain socket is used, DOCKER_* should be unset. In Bash run `unset ${!DOCKER_*}`\n') 
                              (
'    - macOS w/ docker-machine: run `eval "$(docker-machine env <name>)"`\n'
                              ) 
                              (
'    - macOS w/ Docker for Mac: domain socket is used, DOCKER_* should be unset. In Bash run `unset ${!DOCKER_*}`\n'
                              ) ('  - Other things to check:\n') ("    - Linux: User isn't in 'docker' group.  Add and relogin.\n") 
                              ("      - Something like 'sudo usermod -a -G docker ${USER}'\n") ('      - RHEL7 bug and workaround: https://bugzilla.redhat.com/show_bug.cgi?id=1119282#c8\n')
                            }
                          do_expansion: False
                          here_end: EOF
                          was_filled: True
                          spids: [6153]
                        )
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: 16777215
                          arg_word: {(2)}
                          spids: [6158]
                        )
                      ]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [16777215 6148]
                )
              ]
              spids: [16777215 6167]
            )
          ]
          spids: [6111]
        )
      spids: [6101 6104]
    )
    (FuncDef
      name: 'kube::util::wait-for-jobs'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(0)} spids:[6193])]
              spids: [6191]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:job) op:Equal spids:[6199])]
              spids: [6197]
            )
            (ForEach
              iter_name: job
              iter_words: [
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(jobs)} {(-p)})])
                    left_token: <Left_CommandSub '$('>
                    spids: [6208 6212]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (C {(wait)} {(DQ (${ VSub_Name job))})
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:fail)
                              op: Equal
                              rhs: 
                                {
                                  (ArithSubPart
                                    anode: 
                                      (ArithBinary
                                        op_id: Arith_Plus
                                        left: (ArithVarRef name:fail)
                                        right: (ArithWord w:{(Lit_Digits 1)})
                                      )
                                    spids: [6229 6236]
                                  )
                                }
                              spids: [6228]
                            )
                          ]
                          spids: [6228]
                        )
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [6215 6239]
                )
              spids: [6207 6213]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(${ VSub_Name fail)})
          ]
          spids: [6188]
        )
      spids: [6178 6187]
    )
    (FuncDef
      name: 'kube::util::join'
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:IFS)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [6281]
                )
              ]
              spids: [6279]
            )
            (C {(shift)})
            (C {(echo)} {(DQ ($ VSub_Star '$*'))})
          ]
          spids: [6276]
        )
      spids: [6266 6269]
    )
    (FuncDef
      name: 'kube::util::ensure-cfssl'
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(command)} {(-v)} {(cfssl)})
                      terminator: <Op_Amp '&'>
                    )
                    (Sentence
                      child: 
                        (AndOr
                          children: [
                            (SimpleCommand
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [6348]
                                )
                              ]
                            )
                            (C {(command)} {(-v)} {(cfssljson)})
                          ]
                          op_id: Op_DAmp
                        )
                      terminator: <Op_Amp '&'>
                    )
                    (Sentence
                      child: 
                        (SimpleCommand
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(/dev/null)}
                              spids: [6360]
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:CFSSL_BIN)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(command)} {(-v)} {(cfssl)})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [6368 6374]
                              )
                            }
                          spids: [6367]
                        )
                      ]
                      spids: [6367]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:CFSSLJSON_BIN)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(command)} {(-v)} {(cfssljson)})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [6378 6384]
                              )
                            }
                          spids: [6377]
                        )
                      ]
                      spids: [6377]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
                  ]
                  spids: [16777215 6364]
                )
              ]
              spids: [16777215 6392]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cfssldir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                        spids: [6403 6406]
                      )
                    }
                  spids: [6402]
                )
              ]
              spids: [6400]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolUnary op_id:BoolUnary_z child:{(DQ (${ VSub_Name cfssldir))})
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') (Lit_Other ':') 
                        (ensure-temp-dir)
                      }
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:cfssldir)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name KUBE_TEMP) (/cfssl))}
                          spids: [6436]
                        )
                      ]
                      spids: [6436]
                    )
                  ]
                  spids: [16777215 6424]
                )
              ]
              spids: [16777215 6445]
            )
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name cfssldir))})
            (SimpleCommand
              words: [{(pushd)} {(DQ (${ VSub_Name cfssldir))}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[6468])]
            )
            (C {(echo)} 
              {
                (DQ ("Unable to successfully run 'cfssl' from ") ($ VSub_Name '$PATH') 
                  ('; downloading instead...')
                )
              }
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:kernel)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(uname)} {(-s)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [6484 6488]
                      )
                    }
                  spids: [6483]
                )
              ]
              spids: [6483]
            )
            (Case
              to_match: {(DQ (${ VSub_Name kernel))}
              arms: [
                (case_arm
                  pat_list: [{(Linux)}]
                  action: [
                    (C {(curl)} {(-s)} {(-L)} {(-o)} {(cfssl)} 
                      {(https) (Lit_Other ':') (//pkg.cfssl.org/R1.2/cfssl_linux-amd64)}
                    )
                    (C {(curl)} {(-s)} {(-L)} {(-o)} {(cfssljson)} 
                      {(https) (Lit_Other ':') (//pkg.cfssl.org/R1.2/cfssljson_linux-amd64)}
                    )
                  ]
                  spids: [6502 6503 6536 16777215]
                )
                (case_arm
                  pat_list: [{(Darwin)}]
                  action: [
                    (C {(curl)} {(-s)} {(-L)} {(-o)} {(cfssl)} 
                      {(https) (Lit_Other ':') (//pkg.cfssl.org/R1.2/cfssl_darwin-amd64)}
                    )
                    (C {(curl)} {(-s)} {(-L)} {(-o)} {(cfssljson)} 
                      {(https) (Lit_Other ':') (//pkg.cfssl.org/R1.2/cfssljson_darwin-amd64)}
                    )
                  ]
                  spids: [6539 6540 6573 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {(DQ ('Unknown, unsupported platform: ') (${ VSub_Name kernel) (.))}
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: 16777215
                          arg_word: {(2)}
                          spids: [6590]
                        )
                      ]
                    )
                    (SimpleCommand
                      words: [{(echo)} {(DQ ('Supported platforms: Linux, Darwin.'))}]
                      redirects: [
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: 16777215
                          arg_word: {(2)}
                          spids: [6600]
                        )
                      ]
                    )
                    (C {(exit)} {(2)})
                  ]
                  spids: [6576 6577 16777215 6609]
                )
              ]
              spids: [6491 6499 6609]
            )
            (AndOr
              children: [(C {(chmod)} {(Lit_Other '+') (x)} {(cfssl)}) (C {(true)})]
              op_id: Op_DPipe
            )
            (AndOr
              children: [(C {(chmod)} {(Lit_Other '+') (x)} {(cfssljson)}) (C {(true)})]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CFSSL_BIN)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name cfssldir) (/cfssl))}
                  spids: [6638]
                )
              ]
              spids: [6638]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CFSSLJSON_BIN)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name cfssldir) (/cfssljson))}
                  spids: [6647]
                )
              ]
              spids: [6647]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalOr
                              left: 
                                (LogicalNot
                                  child: (BoolUnary op_id:BoolUnary_x child:{(${ VSub_Name CFSSL_BIN)})
                                )
                              right: 
                                (LogicalNot
                                  child: 
                                    (BoolUnary
                                      op_id: BoolUnary_x
                                      child: {(${ VSub_Name CFSSLJSON_BIN)}
                                    )
                                )
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ 
                          (
"Failed to download 'cfssl'. Please install cfssl and cfssljson and verify they are in "
                          ) (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) (PATH.)
                        )
                      }
                    )
                    (C {(echo)} 
                      {
                        (DQ ('Hint: export PATH=') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                          ('PATH:') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                          ('GOPATH/bin; go get -u github.com/cloudflare/cfssl/cmd/...')
                        )
                      }
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [16777215 6681]
                )
              ]
              spids: [16777215 6709]
            )
            (SimpleCommand
              words: [{(popd)}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[6714])]
            )
          ]
          spids: [6336]
        )
      spids: [6326 6329]
    )
    (FuncDef
      name: 'kube::util::ensure_dockerized'
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (DBracket expr:(BoolUnary op_id:BoolUnary_f child:{(/kube-build-image)}))
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [16777215 6754]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {(DQ ('ERROR: This script is designed to be run inside a kube-build container'))}
                )
                (C {(exit)} {(1)})
              ]
              spids: [6762 6777]
            )
          ]
          spids: [6740]
        )
      spids: [6730 6733]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolUnary
                      op_id: BoolUnary_z
                      child: 
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Name color_start>
                              suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(SQ )})
                              spids: [6792 6795]
                            )
                          )
                        }
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_Declare
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:color_start)
                  op: Equal
                  rhs: {(DQ (Lit_Other '\\') ('033['))}
                  spids: [6808]
                )
              ]
              spids: [6804]
            )
            (Assignment
              keyword: Assign_Declare
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:color_red)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name color_start) ('0;31m'))}
                  spids: [6819]
                )
              ]
              spids: [6815]
            )
            (Assignment
              keyword: Assign_Declare
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:color_yellow)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name color_start) ('0;33m'))}
                  spids: [6832]
                )
              ]
              spids: [6828]
            )
            (Assignment
              keyword: Assign_Declare
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:color_green)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name color_start) ('0;32m'))}
                  spids: [6845]
                )
              ]
              spids: [6841]
            )
            (Assignment
              keyword: Assign_Declare
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:color_norm)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name color_start) (0m))}
                  spids: [6858]
                )
              ]
              spids: [6854]
            )
          ]
          spids: [16777215 6801]
        )
      ]
      spids: [16777215 6866]
    )
  ]
)