(CommandList
  children: [
    (FuncDef
      name: clean_up
      body: 
        (BraceGroup
          children: [(C {(rm)} {(-f)} {($ VSub_Name "$TMP_FILE")}) (C {(exit)})]
          spids: [68]
        )
      spids: [64 67]
    )
    (C {(trap)} {(clean_up)} {(HUP)} {(INT)} {(TERM)})
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ("Usage: ") ($ VSub_Number "$0") (" [OPTIONS] [CONFIG [...]]"))})
            (C {(echo)} {(DQ ("  -h    display this help text"))})
            (C {(echo)} {(DQ ("  -m    only merge the fragments, do not execute the make command"))})
            (C {(echo)} {(DQ ("  -n    use allnoconfig instead of alldefconfig"))})
            (C {(echo)} {(DQ ("  -r    list redundant entries when merging fragments"))})
            (C {(echo)} 
              {
                (DQ ("  -O    dir to put generated output files.  Consider setting ") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("KCONFIG_CONFIG instead.")
                )
              }
            )
          ]
          spids: [97]
        )
      spids: [93 96]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:RUNMAKE) op:Equal rhs:{(true)} spids:[148])]
      spids: [148]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ALLTARGET) op:Equal rhs:{(alldefconfig)} spids:[151])]
      spids: [151]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:WARNREDUN) op:Equal rhs:{(false)} spids:[154])]
      spids: [154]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:OUTPUT) op:Equal rhs:{(.)} spids:[157])]
      spids: [157]
    )
    (While
      cond: [(Sentence child:(C {(true)}) terminator:<Op_Semi ";">)]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {($ VSub_Number "$1")}
              arms: [
                (case_arm
                  pat_list: [{(DQ (-n))}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:ALLTARGET)
                          op: Equal
                          rhs: {(allnoconfig)}
                          spids: [182]
                        )
                      ]
                      spids: [182]
                    )
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [177 179 192 -1]
                )
                (case_arm
                  pat_list: [{(DQ (-m))}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:RUNMAKE)
                          op: Equal
                          rhs: {(false)}
                          spids: [201]
                        )
                      ]
                      spids: [201]
                    )
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [196 198 211 -1]
                )
                (case_arm
                  pat_list: [{(DQ (-h))}]
                  action: [(C {(usage)}) (C {(exit)})]
                  spids: [215 217 226 -1]
                )
                (case_arm
                  pat_list: [{(DQ (-r))}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:WARNREDUN)
                          op: Equal
                          rhs: {(true)}
                          spids: [235]
                        )
                      ]
                      spids: [235]
                    )
                    (C {(shift)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [230 232 245 -1]
                )
                (case_arm
                  pat_list: [{(DQ (-O))}]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(-d)} {($ VSub_Number "$2")} {(Lit_Other "]")})
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:OUTPUT)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [
                                              (Pipeline
                                                children: [
                                                  (C {(echo)} {($ VSub_Number "$2")})
                                                  (C {(sed)} {(SQ <"s/\\/*$//">)})
                                                ]
                                                negated: False
                                              )
                                            ]
                                          )
                                        left_token: <Left_CommandSub "$(">
                                        spids: [268 280]
                                      )
                                    }
                                  spids: [267]
                                )
                              ]
                              spids: [267]
                            )
                          ]
                          spids: [-1 264]
                        )
                      ]
                      else_action: [
                        (SimpleCommand
                          words: [
                            {(echo)}
                            {(DQ ("output directory ") ($ VSub_Number "$2") (" does not exist"))}
                          ]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[294])]
                        )
                        (C {(exit)} {(1)})
                      ]
                      spids: [283 303]
                    )
                    (C {(shift)} {(2)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                  spids: [249 251 314 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [(ControlFlow token:<ControlFlow_Break break>)]
                  spids: [317 318 324 -1]
                )
              ]
              spids: [169 173 327]
            )
          ]
          spids: [166 329]
        )
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other "[")} {(DQ ($ VSub_Pound "$#"))} {(-lt)} {(1)} {(Lit_Other "]")})
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(usage)}) (C {(exit)})]
          spids: [-1 348]
        )
      ]
      spids: [-1 356]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$KCONFIG_CONFIG"))} {(Lit_Other "]")})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$OUTPUT"))} 
                          {(KW_Bang "!") (Lit_Other "=")} {(.)} {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:KCONFIG_CONFIG)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(readlink)} {(-m)} {(--)} 
                                        {(DQ ($ VSub_Name "$OUTPUT") (/.config))}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [395 406]
                              )
                            }
                          spids: [394]
                        )
                      ]
                      spids: [394]
                    )
                  ]
                  spids: [-1 391]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:KCONFIG_CONFIG)
                      op: Equal
                      rhs: {(.config)}
                      spids: [412]
                    )
                  ]
                  spids: [412]
                )
              ]
              spids: [409 416]
            )
          ]
          spids: [-1 372]
        )
      ]
      spids: [-1 418]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:INITFILE)
          op: Equal
          rhs: {($ VSub_Number "$1")}
          spids: [421]
        )
      ]
      spids: [421]
    )
    (Sentence child:(C {(shift)}) terminator:<Op_Semi ";">)
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(KW_Bang "!")} {(-r)} {(DQ ($ VSub_Name "$INITFILE"))} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (SimpleCommand
              words: [
                {(echo)}
                {(DQ ("The base file '") ($ VSub_Name "$INITFILE") ("' does not exist.  Exit."))}
              ]
              redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[454])]
            )
            (C {(exit)} {(1)})
          ]
          spids: [-1 443]
        )
      ]
      spids: [-1 462]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:MERGE_LIST)
          op: Equal
          rhs: {($ VSub_Star "$*")}
          spids: [465]
        )
      ]
      spids: [465]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SED_CONFIG_EXP)
          op: Equal
          rhs: 
            {
              (DQ ("s/^") (EscapedLiteralPart token:<Lit_EscapedChar "\\(">) ("# ") 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (EscapedLiteralPart token:<Lit_EscapedChar "\\{">) ("0,1") 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\}">) (EscapedLiteralPart token:<Lit_EscapedChar "\\(">) ("CONFIG_[a-zA-Z0-9_]*") 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) ("[= ].*/") (EscapedLiteralPart token:<Lit_EscapedChar "\\2">) (/p)
              )
            }
          spids: [468]
        )
      ]
      spids: [468]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TMP_FILE)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(mktemp)} {(./.tmp.config.XXXXXXXXXX)})])
                left_token: <Left_CommandSub "$(">
                spids: [486 490]
              )
            }
          spids: [485]
        )
      ]
      spids: [485]
    )
    (C {(echo)} {(DQ ("Using ") ($ VSub_Name "$INITFILE") (" as base"))})
    (SimpleCommand
      words: [{(cat)} {($ VSub_Name "$INITFILE")}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{($ VSub_Name "$TMP_FILE")} spids:[505])]
    )
    (ForEach
      iter_name: MERGE_FILE
      iter_words: [{($ VSub_Name "$MERGE_LIST")}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (C {(echo)} {(DQ ("Merging ") ($ VSub_Name "$MERGE_FILE"))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(KW_Bang "!")} {(-r)} {(DQ ($ VSub_Name "$MERGE_FILE"))} 
                          {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("The merge file '") ($ VSub_Name "$MERGE_FILE") 
                            ("' does not exist.  Exit.")
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[560])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 549]
                )
              ]
              spids: [-1 569]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CFG_LIST)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(sed)} {(-n)} {(DQ ($ VSub_Name "$SED_CONFIG_EXP"))} 
                                {($ VSub_Name "$MERGE_FILE")}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [573 583]
                      )
                    }
                  spids: [572]
                )
              ]
              spids: [572]
            )
            (ForEach
              iter_name: CFG
              iter_words: [{($ VSub_Name "$CFG_LIST")}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (C {(grep)} {(-q)} {(-w)} {($ VSub_Name "$CFG")} {($ VSub_Name "$TMP_FILE")})
                        (ControlFlow token:<ControlFlow_Continue continue>)
                      ]
                      op_id: Op_DPipe
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:PREV_VAL)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(grep)} {(-w)} {($ VSub_Name "$CFG")} 
                                        {($ VSub_Name "$TMP_FILE")}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [616 624]
                              )
                            }
                          spids: [615]
                        )
                      ]
                      spids: [615]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:NEW_VAL)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(grep)} {(-w)} {($ VSub_Name "$CFG")} 
                                        {($ VSub_Name "$MERGE_FILE")}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [628 636]
                              )
                            }
                          spids: [627]
                        )
                      ]
                      spids: [627]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(DQ (x) ($ VSub_Name "$PREV_VAL"))} 
                                  {(KW_Bang "!") (Lit_Other "=")} {(DQ (x) ($ VSub_Name "$NEW_VAL"))} {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(echo)} {(Value)} {(of)} {($ VSub_Name "$CFG")} {(is)} {(redefined)} {(by)} 
                              {(fragment)} {($ VSub_Name "$MERGE_FILE") (Lit_Other ":")}
                            )
                            (C {(echo)} {(Previous)} {(value) (Lit_Other ":")} 
                              {($ VSub_Name "$PREV_VAL")}
                            )
                            (C {(echo)} {(New)} {(value) (Lit_Other ":")} {($ VSub_Name "$NEW_VAL")})
                            (C {(echo)})
                          ]
                          spids: [-1 660]
                        )
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$WARNREDUN"))} {(Lit_Other "=")} 
                                  {(DQ (true))} {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(echo)} {(Value)} {(of)} {($ VSub_Name "$CFG")} {(is)} {(redundant)} {(by)} 
                              {(fragment)} {($ VSub_Name "$MERGE_FILE") (Lit_Other ":")}
                            )
                          ]
                          spids: [706 723]
                        )
                      ]
                      spids: [-1 746]
                    )
                    (C {(sed)} {(-i)} {(DQ (/) ($ VSub_Name "$CFG") ("[ =]/d"))} 
                      {($ VSub_Name "$TMP_FILE")}
                    )
                  ]
                  spids: [597 762]
                )
              spids: [592 595]
            )
            (SimpleCommand
              words: [{(cat)} {($ VSub_Name "$MERGE_FILE")}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: -1
                  arg_word: {($ VSub_Name "$TMP_FILE")}
                  spids: [769]
                )
              ]
            )
          ]
          spids: [523 773]
        )
      spids: [518 521]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$RUNMAKE"))} {(Lit_Other "=")} {(DQ (false))} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(cp)} {(-T)} {(--)} {(DQ ($ VSub_Name "$TMP_FILE"))} {(DQ ($ VSub_Name "$KCONFIG_CONFIG"))})
            (C {(echo)} {(DQ ("#"))})
            (C {(echo)} 
              {
                (DQ ("# merged configuration written to ") ($ VSub_Name "$KCONFIG_CONFIG") 
                  (" (needs make)")
                )
              }
            )
            (C {(echo)} {(DQ ("#"))})
            (C {(clean_up)})
            (C {(exit)})
          ]
          spids: [-1 793]
        )
      ]
      spids: [-1 839]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:OUTPUT_ARG) op:Equal rhs:{(DQ )} spids:[848])]
      spids: [848]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$OUTPUT"))} {(KW_Bang "!") (Lit_Other "=")} 
                  {(DQ (.))} {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:OUTPUT_ARG)
                  op: Equal
                  rhs: {(DQ ("O=") ($ VSub_Name "$OUTPUT"))}
                  spids: [874]
                )
              ]
              spids: [874]
            )
          ]
          spids: [-1 871]
        )
      ]
      spids: [-1 880]
    )
    (C {(make)} {(Lit_VarLike "KCONFIG_ALLCONFIG=") ($ VSub_Name "$TMP_FILE")} 
      {($ VSub_Name "$OUTPUT_ARG")} {($ VSub_Name "$ALLTARGET")}
    )
    (ForEach
      iter_name: CFG
      iter_words: [
        {
          (CommandSubPart
            command_list: 
              (CommandList
                children: [
                  (C {(sed)} {(-n)} {(DQ ($ VSub_Name "$SED_CONFIG_EXP"))} {($ VSub_Name "$TMP_FILE")})
                ]
              )
            left_token: <Left_CommandSub "$(">
            spids: [913 923]
          )
        }
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:REQUESTED_VAL)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(grep)} {(-w)} {(-e)} {(DQ ($ VSub_Name "$CFG"))} 
                                {($ VSub_Name "$TMP_FILE")}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [931 943]
                      )
                    }
                  spids: [930]
                )
              ]
              spids: [930]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ACTUAL_VAL)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(grep)} {(-w)} {(-e)} {(DQ ($ VSub_Name "$CFG"))} 
                                {(DQ ($ VSub_Name "$KCONFIG_CONFIG"))}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [947 961]
                      )
                    }
                  spids: [946]
                )
              ]
              spids: [946]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(DQ (x) ($ VSub_Name "$REQUESTED_VAL"))} 
                          {(KW_Bang "!") (Lit_Other "=")} {(DQ (x) ($ VSub_Name "$ACTUAL_VAL"))} {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {(DQ ("Value requested for ") ($ VSub_Name "$CFG") (" not in final .config"))}
                    )
                    (C {(echo)} {(DQ ("Requested value:  ") ($ VSub_Name "$REQUESTED_VAL"))})
                    (C {(echo)} {(DQ ("Actual value:     ") ($ VSub_Name "$ACTUAL_VAL"))})
                    (C {(echo)} {(DQ )})
                  ]
                  spids: [-1 985]
                )
              ]
              spids: [-1 1019]
            )
          ]
          spids: [926 1021]
        )
      spids: [912 924]
    )
    (C {(clean_up)})
  ]
)