(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:-1 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: [-1 196]
                        )
                      ]
                      spids: [-1 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:-1 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: [-1 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: [-1 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: [-1 715]
                )
              ]
              spids: [-1 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 -1]
                )
                (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 -1]
                )
                (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 -1]
                )
              ]
              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 -1]
                )
                (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 -1]
                )
                (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 -1]
                )
                (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 -1]
                )
                (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 -1]
                )
                (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 -1]
                )
                (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 -1]
                )
                (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 -1]
                )
                (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 -1]
                )
                (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 -1]
                )
              ]
              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:-1 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: -1
                      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:-1 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: [-1 1925]
                                )
                              ]
                              spids: [-1 1948]
                            )
                          ]
                          spids: [1897 1951]
                        )
                      redirects: [
                        (Redir
                          op_id: Redir_Less
                          fd: -1
                          arg_word: {(DQ (${ VSub_Name list_file))}
                          spids: [1953]
                        )
                      ]
                    )
                  ]
                  spids: [-1 1883]
                )
              ]
              spids: [-1 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: -1
                          arg_word: {(DQ (${ VSub_Name KUBE_ROOT) (/docs/.generated_docs))}
                          spids: [2048]
                        )
                      ]
                    )
                  ]
                  spids: [-1 2009]
                )
              ]
              spids: [-1 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: [-1 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: [-1 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 (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) 
                                    (EscapedLiteralPart
                                      token: <Lit_EscapedChar "\\n">
                                    ) (${ VSub_Name link)
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_DGreat
                                  fd: -1
                                  arg_word: {(DQ (${ VSub_Name f))}
                                  spids: [2404]
                                )
                              ]
                            )
                          ]
                          spids: [2374 2389]
                        )
                      ]
                      else_action: [(C {(echo)} {(DQ ($ VSub_Name "$f"))})]
                      spids: [2413 2423]
                    )
                  ]
                  spids: [2319 2426]
                )
              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: [2449]
                )
              ]
              spids: [2447]
            )
            (C {(echo)} 
              {
                (DQ ("[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/") 
                  (${ VSub_Name path) ("?pixel)]()")
                )
              }
            )
          ]
          spids: [2444]
        )
      spids: [2434 2443]
    )
    (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: -1
                                          arg_word: {(/dev/null)}
                                          spids: [2516]
                                        )
                                      ]
                                    )
                                    (Pipeline
                                      children: [
                                        (C {(find)} {(.)} {(-name)} {(types.go)})
                                        (C {(xargs)} {(-n1)} {(dirname)})
                                        (C {(sed)} 
                                          {
                                            (DQ ("s|") 
                                              (EscapedLiteralPart
                                                token: <Lit_EscapedChar "\\.">
                                              ) ("/||g")
                                            )
                                          }
                                        )
                                        (C {(sort)})
                                      ]
                                      negated: False
                                    )
                                    (SimpleCommand
                                      words: [{(popd)}]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: -1
                                          arg_word: {(/dev/null)}
                                          spids: [2554]
                                        )
                                      ]
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub "$(">
                              spids: [2506 2559]
                            )
                          }
                        ]
                      )
                    }
                  spids: [2502]
                )
              ]
              spids: [2502]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:group_version)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [2568]
                )
              ]
              spids: [2566]
            )
            (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: [2581 2586]
                                    ) (" ")
                                  )
                                }
                              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: [2594 2599]
                                    ) (" ")
                                  )
                                }
                            )
                        )
                      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: [2613 2618]
                          )
                        )
                      }
                    )
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [-1 2606]
                )
              ]
              spids: [-1 2625]
            )
            (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: [-1 2652]
                )
              ]
              spids: [-1 2665]
            )
            (Case
              to_match: {(DQ (${ VSub_Name group_version))}
              arms: [
                (case_arm
                  pat_list: [{(__internal)}]
                  action: [(C {(echo)} {(DQ (pkg/api))})]
                  spids: [2696 2697 2707 -1]
                )
                (case_arm
                  pat_list: [{(federation/v1beta1)}]
                  action: [(C {(echo)} {(DQ (federation/apis/federation/v1beta1))})]
                  spids: [2710 2711 2721 -1]
                )
                (case_arm
                  pat_list: [{(meta/v1)}]
                  action: [(C {(echo)} {(DQ (vendor/k8s.io/apimachinery/pkg/apis/meta/v1))})]
                  spids: [2724 2725 2735 -1]
                )
                (case_arm
                  pat_list: [{(meta/v1)}]
                  action: [(C {(echo)} {(DQ (../vendor/k8s.io/apimachinery/pkg/apis/meta/v1))})]
                  spids: [2738 2739 2749 -1]
                )
                (case_arm
                  pat_list: [{(meta/v1alpha1)}]
                  action: [(C {(echo)} {(DQ (vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1))})]
                  spids: [2752 2753 2763 -1]
                )
                (case_arm
                  pat_list: [{(meta/v1alpha1)}]
                  action: [(C {(echo)} {(DQ (../vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1))})]
                  spids: [2766 2767 2777 -1]
                )
                (case_arm
                  pat_list: [{(unversioned)}]
                  action: [(C {(echo)} {(DQ (pkg/api/unversioned))})]
                  spids: [2780 2781 2791 -1]
                )
                (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: [2803 2807]
                          )
                        )
                      }
                    )
                  ]
                  spids: [2794 2796 2811 -1]
                )
                (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: [2824 2829]
                          )
                        )
                      }
                    )
                  ]
                  spids: [2814 2817 2833 -1]
                )
                (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: [2844 2848]
                          )
                        )
                      }
                    )
                  ]
                  spids: [2836 2837 2852 -1]
                )
              ]
              spids: [2681 2689 2855]
            )
          ]
          spids: [2499]
        )
      spids: [2489 2498]
    )
    (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: [2884]
                )
              ]
              spids: [2882]
            )
            (Case
              to_match: {(DQ (${ VSub_Name group_version))}
              arms: [
                (case_arm
                  pat_list: [{(v1)}]
                  action: [(C {(echo)} {(DQ (v1))})]
                  spids: [2901 2902 2912 -1]
                )
                (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: [2922 2927]
                          ) (_) 
                          (BracedVarSub
                            token: <VSub_Name group_version>
                            suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{("*") (Lit_Slash /)})
                            spids: [2929 2934]
                          )
                        )
                      }
                    )
                  ]
                  spids: [2915 2916 2938 -1]
                )
              ]
              spids: [2890 2898 2941]
            )
          ]
          spids: [2879]
        )
      spids: [2869 2878]
    )
    (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: [-1 3019]
                        )
                      ]
                      spids: [-1 3025]
                    )
                    (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: [3052]
                                )
                              ]
                              spids: [3052]
                            )
                          ]
                          spids: [-1 3049]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:SUBPATH)
                              op: Equal
                              rhs: {(DQ (apis))}
                              spids: [3061]
                            )
                          ]
                          spids: [3061]
                        )
                      ]
                      spids: [3058 3067]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SUBPATH)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name SUBPATH) (/) (${ VSub_Name ver))}
                          spids: [3070]
                        )
                      ]
                      spids: [3070]
                    )
                    (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: [3084 3096]
                                ) (.json)
                              )
                            }
                          spids: [3082]
                        )
                      ]
                      spids: [3082]
                    )
                    (SimpleCommand
                      words: [
                        {(curl)}
                        {(-w)}
                        {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))}
                        {(-fs)}
                        {(DQ (${ VSub_Name SWAGGER_API_PATH) (${ VSub_Name SUBPATH))}
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: 
                            {
                              (DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/) (${ VSub_Name SWAGGER_JSON_NAME))
                            }
                          spids: [3120]
                        )
                      ]
                    )
                    (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: [-1 3155]
                        )
                      ]
                      spids: [-1 3161]
                    )
                    (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: [3168 3173]
                              )
                            }
                          spids: [3164]
                        )
                      ]
                      spids: [3164]
                    )
                    (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: [3178 3183]
                                ) (.json)
                              )
                            }
                          spids: [3176]
                        )
                      ]
                      spids: [3176]
                    )
                    (SimpleCommand
                      words: [
                        {(curl)}
                        {(-w)}
                        {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))}
                        {(-fs)}
                        {(DQ (${ VSub_Name SWAGGER_API_PATH) (${ VSub_Name SUBPATH))}
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: 
                            {
                              (DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/) (${ VSub_Name SWAGGER_JSON_NAME))
                            }
                          spids: [3207]
                        )
                      ]
                    )
                  ]
                  spids: [2989 3220]
                )
              spids: [2983 2987]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/resourceListing.json))}
                  spids: [3244]
                )
              ]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH) (version))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/version.json))}
                  spids: [3271]
                )
              ]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH) (api))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/api.json))}
                  spids: [3298]
                )
              ]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH) (apis))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/apis.json))}
                  spids: [3325]
                )
              ]
            )
            (SimpleCommand
              words: [
                {(curl)}
                {(-w)}
                {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))}
                {(-fs)}
                {(DQ (${ VSub_Name SWAGGER_API_PATH) (logs))}
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(DQ (${ VSub_Name SWAGGER_ROOT_DIR) (/logs.json))}
                  spids: [3352]
                )
              ]
            )
          ]
          spids: [2975]
        )
      spids: [2965 2974]
    )
    (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: [3380]
        )
      spids: [3370 3379]
    )
    (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: [3453 3455]
                                )
                              }
                          )
                        spids: [3450 3456]
                      )
                    }
                  spids: [3449]
                )
              ]
              spids: [3445]
            )
            (SimpleCommand
              words: [{(pushd)} {(DQ (${ VSub_Name target_dir))}]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[3468])]
            )
            (SimpleCommand
              words: [{(git)} {(init)}]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[3476])]
            )
            (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:-1 arg_word:{(/dev/null)} spids:[3512])]
            )
            (SimpleCommand
              words: [{(git)} {(commit)} {(-q)} {(-m)} {(DQ (Snapshot))}]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[3528])]
            )
            (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: [3536 3540]
                                      )
                                    }
                                )
                              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: [-1 3550]
                )
              ]
              spids: [-1 3569]
            )
            (SimpleCommand
              words: [{(popd)}]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[3574])]
            )
          ]
          spids: [3442]
        )
      spids: [3432 3441]
    )
    (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: [3604 3610]
                      )
                    }
                  spids: [3603]
                )
              ]
              spids: [3599]
            )
            (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: [3621 3625]
                                )
                              }
                          )
                        spids: [3618 3626]
                      )
                    }
                  spids: [3617]
                )
              ]
              spids: [3613]
            )
            (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: -1
                              arg_word: {(/dev/null)}
                              spids: [3638]
                            )
                          ]
                        )
                      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:[3651])]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [-1 3642]
                )
              ]
              spids: [-1 3660]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:root) op:Equal spids:[3665])]
              spids: [3663]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:old_rev) op:Equal rhs:{(DQ )} spids:[3670])]
              spids: [3668]
            )
            (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: [3688 3706]
                              )
                            }
                          spids: [3687]
                        )
                      ]
                      spids: [3687]
                    )
                    (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: [-1 3755]
                        )
                      ]
                      spids: [-1 3765]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:root)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name path))}
                          spids: [3769]
                        )
                      ]
                      spids: [3769]
                    )
                    (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: [3835 3843]
                                      )
                                    }
                                  spids: [3834]
                                )
                              ]
                              spids: [3834]
                            )
                          ]
                          spids: [3831 3846]
                        )
                    )
                    (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: [3888]
                                )
                              ]
                            )
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(1)}
                            )
                          ]
                          spids: [-1 3869]
                        )
                      ]
                      spids: [-1 3897]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [(assign_pair lhs:(LhsName name:head) op:Equal spids:[3902])]
                      spids: [3900]
                    )
                    (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: [3930 3950]
                                        )
                                      )
                                    }
                                  spids: [3928]
                                )
                              ]
                              spids: [3928]
                            )
                          ]
                          spids: [-1 3925]
                        )
                      ]
                      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: [3959 3983]
                                    )
                                  )
                                }
                              spids: [3957]
                            )
                          ]
                          spids: [3957]
                        )
                      ]
                      spids: [3954 3987]
                    )
                    (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: [4037]
                                )
                              ]
                            )
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(1)}
                            )
                          ]
                          spids: [-1 4012]
                        )
                      ]
                      spids: [-1 4046]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:old_rev)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name rev))}
                          spids: [4049]
                        )
                      ]
                      spids: [4049]
                    )
                  ]
                  spids: [3684 4057]
                )
              redirects: [
                (Redir
                  op_id: Redir_Less
                  fd: -1
                  arg_word: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (SimpleCommand
                                words: [{(jq)} {(SQ <".Deps|.[]|.ImportPath + \" \" + .Rev">)} {(-r)}]
                                redirects: [
                                  (Redir
                                    op_id: Redir_Less
                                    fd: -1
                                    arg_word: {(DQ (${ VSub_Name godeps_json))}
                                    spids: [4070]
                                  )
                                ]
                              )
                            ]
                          )
                        left_token: <Left_ProcSubIn "<(">
                        spids: [4061 4077]
                      )
                    }
                  spids: [4059]
                )
              ]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [3596]
        )
      spids: [3586 3595]
    )
    (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:-1 arg_word:{(/dev/null)} spids:[4119])]
                    )
                  terminator: <Op_Semi ";">
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(-e)} 
                      {
                        (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) 
                          ("Unexpected dirty working directory:") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">)
                        )
                      }
                    )
                    (Pipeline
                      children: [
                        (If
                          arms: [
                            (if_arm
                              cond: [(Sentence child:(C {(tty)} {(-s)}) terminator:<Op_Semi ";">)]
                              action: [(C {(git)} {(status)} {(-s)})]
                              spids: [-1 4144]
                            )
                          ]
                          else_action: [(C {(git)} {(diff)} {(-a)}) (C {(exit)} {(1)})]
                          spids: [4154 4172]
                        )
                        (C {(sed)} {(SQ <"s/^/  /">)})
                      ]
                      negated: False
                    )
                    (C {(echo)} {(-e)} 
                      {
                        (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) 
                          (
"Commit your changes in another terminal and then continue here by pressing enter."
                          )
                        )
                      }
                    )
                    (C {(read)})
                  ]
                  spids: [4123 4196]
                )
              redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[4198])]
            )
          ]
          spids: [4103]
        )
      spids: [4093 4102]
    )
    (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: [4224 4230]
                      )
                    }
                  spids: [4223]
                )
              ]
              spids: [4223]
            )
            (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: [4247]
                                                )
                                              ]
                                            )
                                          ]
                                        )
                                      left_token: <Left_CommandSub "$(">
                                      spids: [4242 4249]
                                    )
                                  )
                                }
                              right: 
                                {(Lit_Other "*") (DQ ("godep ") (${ VSub_Name GODEP_VERSION)) 
                                  (Lit_Other "*")
                                }
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return>)]
                  spids: [-1 4266]
                )
              ]
              spids: [-1 4272]
            )
            (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: [4310]
                                                )
                                              ]
                                            )
                                          ]
                                        )
                                      left_token: <Left_CommandSub "$(">
                                      spids: [4305 4312]
                                    )
                                  )
                                }
                              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: [4346 4350]
                          )
                        )
                      }
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [-1 4329]
                )
              ]
              spids: [-1 4359]
            )
          ]
          spids: [4220]
        )
      spids: [4210 4219]
    )
    (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:[4394])]
              spids: [4392]
            )
            (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: [4404 4411]
                  )
                }
              ]
              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: [4449]
                                )
                              ]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:error)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [4453]
                                )
                              ]
                              spids: [4453]
                            )
                          ]
                          spids: [-1 4436]
                        )
                      ]
                      spids: [-1 4457]
                    )
                  ]
                  spids: [4414 4460]
                )
              spids: [4403 4412]
            )
            (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: [-1 4482]
                )
              ]
              spids: [-1 4490]
            )
          ]
          spids: [4380]
        )
      spids: [4370 4379]
    )
    (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: [4515]
                )
              ]
              spids: [4511]
            )
            (Assignment
              keyword: Assign_Local
              flags: ["'-r'"]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:commit)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [4523]
                )
              ]
              spids: [4519]
            )
            (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: [4549]
                )
              ]
            )
            (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: [4601]
                        )
                      ]
                    )
                  ]
                )
              spids: [4572 4620]
            )
            (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: [4623]
                )
              ]
              spids: [4623]
            )
            (C {(hash)} {(-r)})
          ]
          spids: [4508]
        )
      spids: [4498 4507]
    )
    (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:[4689])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 4680]
                )
              ]
              spids: [-1 4698]
            )
          ]
          spids: [4658]
        )
      spids: [4648 4657]
    )
    (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: [4732]
                )
              ]
              spids: [4728]
            )
            (Assignment
              keyword: Assign_Local
              flags: ["'-r'"]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pattern)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [4740]
                )
              ]
              spids: [4736]
            )
            (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: [4749 4753]
                      )
                    }
                  spids: [4748]
                )
              ]
              spids: [4744]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:full_branch) op:Equal spids:[4758])]
              spids: [4756]
            )
            (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: [4764 4772]
                        ) (/) (${ VSub_Name git_branch)
                      )
                    }
                  spids: [4762]
                )
              ]
              spids: [4762]
            )
            (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: -1
                                  arg_word: {(/dev/null)}
                                  spids: [4813]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(exit)} {(1)})]
                  spids: [-1 4817]
                )
              ]
              spids: [-1 4829]
            )
            (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: -1
                                  arg_word: {(/dev/null)}
                                  spids: [4875]
                                )
                              ]
                            )
                          ]
                          negated: False
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [-1 4880]
                )
              ]
              spids: [-1 4888]
            )
            (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: -1
                                  arg_word: {(/dev/null)}
                                  spids: [4927]
                                )
                              ]
                            )
                          ]
                          negated: False
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("Detected '") (${ VSub_Name pattern) ("' uncommitted changes."))})
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
                  ]
                  spids: [-1 4932]
                )
              ]
              spids: [-1 4951]
            )
            (C {(echo)} {(DQ ("No '") (${ VSub_Name pattern) ("' changes detected."))})
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [4725]
        )
      spids: [4715 4724]
    )
    (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: [4989]
                )
              ]
              spids: [4985]
            )
            (Assignment
              keyword: Assign_Local
              flags: ["'-r'"]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:destination_file)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [4997]
                )
              ]
              spids: [4993]
            )
            (Sentence
              child: (C {(rm)} {(${ VSub_Name destination_file)} {(2)})
              terminator: <Op_Amp "&">
            )
            (AndOr
              children: [
                (SimpleCommand
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[5010])]
                )
                (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: [5026 5030]
                  )
                }
              ]
              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: [5074 5079]
                                  ) (" retries left.")
                                )
                              }
                            )
                            (C {(sleep)} {(1)})
                          ]
                          spids: [-1 5063]
                        )
                      ]
                      else_action: [
                        (C {(echo)} {(DQ ("Downloading ") (${ VSub_Name url) (" succeed"))})
                        (ControlFlow
                          token: <ControlFlow_Return return>
                          arg_word: {(0)}
                        )
                      ]
                      spids: [5089 5108]
                    )
                  ]
                  spids: [5033 5111]
                )
              spids: [5025 -1]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [4982]
        )
      spids: [4972 4981]
    )
    (FuncDef
      name: "kube::util::test_openssl_installed"
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(openssl)} {(version)}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(/dev/null)} spids:[5147])]
            )
            (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: [-1 5170]
                )
              ]
              spids: [-1 5185]
            )
            (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: [5189 5195]
                      )
                    }
                  spids: [5188]
                )
              ]
              spids: [5188]
            )
          ]
          spids: [5140]
        )
      spids: [5130 5133]
    )
    (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: [5230]
                )
              ]
              spids: [5228]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [5236]
                )
              ]
              spids: [5234]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:id)
                  op: Equal
                  rhs: {($ VSub_Number "$3")}
                  spids: [5242]
                )
              ]
              spids: [5240]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:purpose)
                  op: Equal
                  rhs: {($ VSub_Number "$4")}
                  spids: [5248]
                )
              ]
              spids: [5246]
            )
            (SimpleCommand
              words: [{(${ VSub_Name sudo)} {(/bin/bash)} {(-e)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  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: [5264]
                )
              ]
            )
          ]
          spids: [5225]
        )
      spids: [5215 5218]
    )
    (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: [5386]
                )
              ]
              spids: [5384]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [5392]
                )
              ]
              spids: [5390]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ca)
                  op: Equal
                  rhs: {($ VSub_Number "$3")}
                  spids: [5398]
                )
              ]
              spids: [5396]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:id)
                  op: Equal
                  rhs: {($ VSub_Number "$4")}
                  spids: [5404]
                )
              ]
              spids: [5402]
            )
            (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: [5411 5415]
                      )
                    }
                  spids: [5410]
                )
              ]
              spids: [5408]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:groups) op:Equal rhs:{(DQ )} spids:[5420])]
              spids: [5418]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:SEP) op:Equal rhs:{(DQ )} spids:[5427])]
              spids: [5425]
            )
            (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: [5444 5447]
                          )
                        )
                      } {(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: [5456]
                        )
                      ]
                      spids: [5456]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SEP)
                          op: Equal
                          rhs: {(DQ (","))}
                          spids: [5473]
                        )
                      ]
                      spids: [5473]
                    )
                    (C {(shift)} {(1)})
                  ]
                  spids: [5453 5484]
                )
            )
            (SimpleCommand
              words: [{(${ VSub_Name sudo)} {(/bin/bash)} {(-e)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  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: [5495]
                )
              ]
            )
          ]
          spids: [5381]
        )
      spids: [5371 5374]
    )
    (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: [5633]
                )
              ]
              spids: [5631]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [5639]
                )
              ]
              spids: [5637]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ca)
                  op: Equal
                  rhs: {($ VSub_Number "$3")}
                  spids: [5645]
                )
              ]
              spids: [5643]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:id)
                  op: Equal
                  rhs: {($ VSub_Number "$4")}
                  spids: [5651]
                )
              ]
              spids: [5649]
            )
            (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: [5658 5662]
                      )
                    }
                  spids: [5657]
                )
              ]
              spids: [5655]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:hosts) op:Equal rhs:{(DQ )} spids:[5667])]
              spids: [5665]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:SEP) op:Equal rhs:{(DQ )} spids:[5674])]
              spids: [5672]
            )
            (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: [5691 5694]
                          )
                        )
                      } {(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: [5703]
                        )
                      ]
                      spids: [5703]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SEP)
                          op: Equal
                          rhs: {(DQ (","))}
                          spids: [5714]
                        )
                      ]
                      spids: [5714]
                    )
                    (C {(shift)} {(1)})
                  ]
                  spids: [5700 5725]
                )
            )
            (SimpleCommand
              words: [{(${ VSub_Name sudo)} {(/bin/bash)} {(-e)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  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: [5736]
                )
              ]
            )
          ]
          spids: [5628]
        )
      spids: [5618 5621]
    )
    (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: [5867]
                )
              ]
              spids: [5865]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [5873]
                )
              ]
              spids: [5871]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ca_file)
                  op: Equal
                  rhs: {($ VSub_Number "$3")}
                  spids: [5879]
                )
              ]
              spids: [5877]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:api_host)
                  op: Equal
                  rhs: {($ VSub_Number "$4")}
                  spids: [5885]
                )
              ]
              spids: [5883]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:api_port)
                  op: Equal
                  rhs: {($ VSub_Number "$5")}
                  spids: [5891]
                )
              ]
              spids: [5889]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:client_id)
                  op: Equal
                  rhs: {($ VSub_Number "$6")}
                  spids: [5897]
                )
              ]
              spids: [5895]
            )
            (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: [5904 5907]
                      )
                    }
                  spids: [5903]
                )
              ]
              spids: [5901]
            )
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(cat)}]
                  redirects: [
                    (HereDoc
                      op_id: Redir_DLess
                      fd: -1
                      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: [5912]
                    )
                  ]
                )
                (SimpleCommand
                  words: [
                    {(${ VSub_Name sudo)}
                    {(tee)}
                    {(DQ (${ VSub_Name dest_dir)) (/) (${ VSub_Name client_id) (.kubeconfig)}
                  ]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[5934])]
                )
              ]
              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: [5996 5998]
                      )
                    }
                  spids: [5995]
                )
              ]
              spids: [5995]
            )
            (SimpleCommand
              words: [{(${ VSub_Name sudo)} {(/bin/bash)} {(-e)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  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: [6013 6023]
                        ) (" --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: [6009]
                )
              ]
            )
          ]
          spids: [5862]
        )
      spids: [5852 5855]
    )
    (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: [6099]
                )
              ]
              spids: [6099]
            )
            (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: [6114 6119]
                                    )
                                  )
                                }
                                {(info)}
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [6124]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [6128]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(cat)}]
                      redirects: [
                        (HereDoc
                          op_id: Redir_DLess
                          fd: -1
                          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: [6138]
                        )
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: -1
                          arg_word: {(2)}
                          spids: [6143]
                        )
                      ]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [-1 6133]
                )
              ]
              spids: [-1 6152]
            )
          ]
          spids: [6096]
        )
      spids: [6086 6089]
    )
    (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:[6178])]
              spids: [6176]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:job) op:Equal spids:[6184])]
              spids: [6182]
            )
            (ForEach
              iter_name: job
              iter_words: [
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(jobs)} {(-p)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [6193 6197]
                  )
                }
              ]
              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: [6214 6221]
                                  )
                                }
                              spids: [6213]
                            )
                          ]
                          spids: [6213]
                        )
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [6200 6224]
                )
              spids: [6192 6198]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(${ VSub_Name fail)})
          ]
          spids: [6173]
        )
      spids: [6163 6172]
    )
    (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: [6266]
                )
              ]
              spids: [6264]
            )
            (C {(shift)})
            (C {(echo)} {(DQ ($ VSub_Star "$*"))})
          ]
          spids: [6261]
        )
      spids: [6251 6254]
    )
    (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: -1
                                  arg_word: {(/dev/null)}
                                  spids: [6333]
                                )
                              ]
                            )
                            (C {(command)} {(-v)} {(cfssljson)})
                          ]
                          op_id: Op_DAmp
                        )
                      terminator: <Op_Amp "&">
                    )
                    (Sentence
                      child: 
                        (SimpleCommand
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: -1
                              arg_word: {(/dev/null)}
                              spids: [6345]
                            )
                          ]
                        )
                      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: [6353 6359]
                              )
                            }
                          spids: [6352]
                        )
                      ]
                      spids: [6352]
                    )
                    (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: [6363 6369]
                              )
                            }
                          spids: [6362]
                        )
                      ]
                      spids: [6362]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
                  ]
                  spids: [-1 6349]
                )
              ]
              spids: [-1 6377]
            )
            (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: [6388 6391]
                      )
                    }
                  spids: [6387]
                )
              ]
              spids: [6385]
            )
            (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: [6421]
                        )
                      ]
                      spids: [6421]
                    )
                  ]
                  spids: [-1 6409]
                )
              ]
              spids: [-1 6430]
            )
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name cfssldir))})
            (SimpleCommand
              words: [{(pushd)} {(DQ (${ VSub_Name cfssldir))}]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[6453])]
            )
            (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: [6469 6473]
                      )
                    }
                  spids: [6468]
                )
              ]
              spids: [6468]
            )
            (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: [6487 6488 6521 -1]
                )
                (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: [6524 6525 6558 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {(DQ ("Unknown, unsupported platform: ") (${ VSub_Name kernel) (.))}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[6575])]
                    )
                    (SimpleCommand
                      words: [{(echo)} {(DQ ("Supported platforms: Linux, Darwin."))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[6585])]
                    )
                    (C {(exit)} {(2)})
                  ]
                  spids: [6561 6562 -1 6594]
                )
              ]
              spids: [6476 6484 6594]
            )
            (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: [6623]
                )
              ]
              spids: [6623]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CFSSLJSON_BIN)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name cfssldir) (/cfssljson))}
                  spids: [6632]
                )
              ]
              spids: [6632]
            )
            (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: [-1 6666]
                )
              ]
              spids: [-1 6694]
            )
            (SimpleCommand
              words: [{(popd)}]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[6699])]
            )
          ]
          spids: [6321]
        )
      spids: [6311 6314]
    )
    (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: [-1 6739]
                )
              ]
              else_action: [
                (C {(echo)} 
                  {(DQ ("ERROR: This script is designed to be run inside a kube-build container"))}
                )
                (C {(exit)} {(1)})
              ]
              spids: [6747 6762]
            )
          ]
          spids: [6725]
        )
      spids: [6715 6718]
    )
    (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: [6777 6780]
                            )
                          )
                        }
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_Declare
              flags: ["'-r'"]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:color_start)
                  op: Equal
                  rhs: {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\0">) ("33["))}
                  spids: [6793]
                )
              ]
              spids: [6789]
            )
            (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: [6804]
                )
              ]
              spids: [6800]
            )
            (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: [6817]
                )
              ]
              spids: [6813]
            )
            (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: [6830]
                )
              ]
              spids: [6826]
            )
            (Assignment
              keyword: Assign_Declare
              flags: ["'-r'"]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:color_norm)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name color_start) (0m))}
                  spids: [6843]
                )
              ]
              spids: [6839]
            )
          ]
          spids: [-1 6786]
        )
      ]
      spids: [-1 6851]
    )
  ]
)