(command.BraceGroup
  children: [
    (C {<.>} {</DietPi/dietpi/func/dietpi-globals>})
    (C {<G_CHECK_ROOT_USER>})
    (C {<G_CHECK_ROOTFS_RW>})
    (C {<export>} {<Id.Lit_VarLike 'G_PROGRAM_NAME='> (SQ <DietPi-Launcher>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PROGRAM_NAME)
          op: assign_op.Equal
          rhs: {(DQ <DietPi-Launcher>)}
          spids: [99]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CHOICE)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [106]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OPTION)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [110]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TARGETMENUID)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [114]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LAST_SELECTED_ITEM)
          op: assign_op.Equal
          rhs: {(DQ <dietpi-config>)}
          spids: [118]
        )
      ]
    )
    (command.ShFunction
      name: Menu_Main
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'option_name='> (sh_array_literal left:<Id.Op_LParen _>)})
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ )}
                              {
                                (DQ 
                                  <
'\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Install Optimized Software\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80'
                                  >
                                )
                              }
                            ]
                          )
                        }
                      spids: [144]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-Software>)}
                              {(DQ <'Install optimized software thats ready to run.'>)}
                            ]
                          )
                        }
                      spids: [161]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ )}
                              {
                                (DQ 
                                  <
'\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Configuration\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80'
                                  >
                                )
                              }
                            ]
                          )
                        }
                      spids: [179]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-Config>)}
                              {(DQ <'Feature rich config tool for your device.'>)}
                            ]
                          )
                        }
                      spids: [196]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.ArithWord
                              w: 
                                {
                                  (command_sub
                                    left_token: <Id.Left_DollarParen '$('>
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (command.Pipeline
                                            children: [
                                              (C {<dpkg>} {<--get-selections>})
                                              (C {<grep>} {<-ci>} {<-m1>} {(SQ <'^alsa-utils'>)})
                                            ]
                                            negated: F
                                          )
                                        ]
                                      )
                                  )
                                }
                            )
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:option_name)
                          op: assign_op.PlusEqual
                          rhs: 
                            {
                              (sh_array_literal
                                left: <Id.Op_LParen _>
                                words: [
                                  {(DQ <DietPi-JustBoom>)}
                                  {(DQ <'Launches EQ and MPD audio options menu'>)}
                                ]
                              )
                            }
                          spids: [245]
                        )
                      ]
                    )
                  ]
                  spids: [215 241]
                )
              ]
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-AutoStart>)}
                              {(DQ <'Choose what software runs after boot.'>)}
                            ]
                          )
                        }
                      spids: [262]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {<Id.Lit_LBracket '['>} {<-f>} {</DietPi/dietpi/.installed>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                            (command.DParen
                              child: 
                                (arith_expr.ArithWord
                                  w: 
                                    {
                                      (command_sub
                                        left_token: <Id.Left_DollarParen '$('>
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (command.Pipeline
                                                children: [
                                                  (C {<cat>} {</DietPi/dietpi/.installed>})
                                                  (C {<grep>} {<-ci>} {<-m1>} 
                                                    {(SQ <'aSOFTWARE_INSTALL_STATE\\[62\\]=2'>)}
                                                  )
                                                ]
                                                negated: F
                                              )
                                            ]
                                          )
                                      )
                                    }
                                )
                            )
                          ]
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.Sentence
                      child: 
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:option_name)
                              op: assign_op.PlusEqual
                              rhs: 
                                {
                                  (sh_array_literal
                                    left: <Id.Op_LParen _>
                                    words: [
                                      {(DQ <DietPi-CloudShell>)}
                                      {(DQ <'Adjust update rate, scenes settings and more.'>)}
                                    ]
                                  )
                                }
                              spids: [325]
                            )
                          ]
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (command.DParen
                      child: 
                        (arith_expr.UnaryAssign
                          op_id: Id.Node_PostDPlus
                          child: (sh_lhs_expr.Name name:index)
                        )
                    )
                  ]
                  spids: [285 321]
                )
              ]
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [{(DQ <DietPi-Cron>)} {(DQ <'Modify the start times of cron jobs.'>)}]
                          )
                        }
                      spids: [348]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-Process_Tool>)}
                              {(DQ <'Tweak Nice, Affinity, Schedulers for programs.'>)}
                            ]
                          )
                        }
                      spids: [366]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-Drive_Manager>)}
                              {(DQ <'Setup and control multiple external drives.'>)}
                            ]
                          )
                        }
                      spids: [384]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ )}
                              {
                                (DQ 
                                  <
'\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80DietPi Updates\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80'
                                  >
                                )
                              }
                            ]
                          )
                        }
                      spids: [402]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [{(DQ <DietPi-Update>)} {(DQ <'Keep your DietPi system upto date.'>)}]
                          )
                        }
                      spids: [419]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ )}
                              {
                                (DQ 
                                  <
'\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Backups / Sync\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80'
                                  >
                                )
                              }
                            ]
                          )
                        }
                      spids: [437]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-Backup>)}
                              {(DQ <'Backup and restore your DietPi system.'>)}
                            ]
                          )
                        }
                      spids: [454]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-Sync>)}
                              {(DQ <'Duplicate (Sync) one directory to another.'>)}
                            ]
                          )
                        }
                      spids: [472]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ )}
                              {
                                (DQ 
                                  <
'\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Maintenance\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80'
                                  >
                                )
                              }
                            ]
                          )
                        }
                      spids: [490]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-Cleaner>)}
                              {(DQ <'Remove unwanted junk from your system.'>)}
                            ]
                          )
                        }
                      spids: [507]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ )}
                              {
                                (DQ 
                                  <
'\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Misc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80'
                                  >
                                )
                              }
                            ]
                          )
                        }
                      spids: [525]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [{(DQ <DietPi-BugReport>)} {(DQ <'Found a bug? Let us know!'>)}]
                          )
                        }
                      spids: [542]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-CpuInfo>)}
                              {(DQ <'Displays CPU Temp, frequencies, type etc.'>)}
                            ]
                          )
                        }
                      spids: [560]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-LetsEncrypt>)}
                              {(DQ <'Frontend for Lets Encrypt, free SSL certs'>)}
                            ]
                          )
                        }
                      spids: [578]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:option_name)
                      op: assign_op.PlusEqual
                      rhs: 
                        {
                          (sh_array_literal
                            left: <Id.Op_LParen _>
                            words: [
                              {(DQ <DietPi-MorseCode>)}
                              {(DQ <'Converts and outputs a text file to morsecode.'>)}
                            ]
                          )
                        }
                      spids: [596]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.DParen
              child: 
                (arith_expr.UnaryAssign
                  op_id: Id.Node_PostDPlus
                  child: (sh_lhs_expr.Name name:index)
                )
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OPTION)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Simple
                                words: [
                                  {<whiptail>}
                                  {<--title>}
                                  {(DQ ($ Id.VSub_DollarName '$PROGRAM_NAME'))}
                                  {<--menu>}
                                  {(DQ <'Please select a program to run:'>)}
                                  {<--cancel-button>}
                                  {(DQ <Exit>)}
                                  {<--backtitle>}
                                  {(DQ ($ Id.VSub_DollarName '$PROGRAM_NAME'))}
                                  {<--default-item>}
                                  {(DQ ($ Id.VSub_DollarName '$LAST_SELECTED_ITEM'))}
                                  {<18>}
                                  {<76>}
                                  {<10>}
                                  {
                                    (DQ 
                                      (braced_var_sub
                                        token: <Id.VSub_Name option_name>
                                        bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                      )
                                    )
                                  }
                                ]
                                redirects: [
                                  (redir.Redir
                                    op: <Id.Redir_GreatAnd '3>&'>
                                    fd: 3
                                    arg_word: {<1>}
                                  )
                                  (redir.Redir
                                    op: <Id.Redir_GreatAnd '1>&'>
                                    fd: 1
                                    arg_word: {<2>}
                                  )
                                  (redir.Redir
                                    op: <Id.Redir_GreatAnd '2>&'>
                                    fd: 2
                                    arg_word: {<3>}
                                  )
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [616]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CHOICE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [676]
                )
              ]
            )
            (C {<unset>} {<option_name>})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.Binary
                              op_id: Id.Arith_DEqual
                              left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$CHOICE')})
                              right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
                            )
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$OPTION'))} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ )} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:LAST_SELECTED_ITEM)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName '$OPTION'))}
                                  spids: [730]
                                )
                              ]
                            )
                            (C {<local>} 
                              {<Id.Lit_VarLike 'command='> 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (C {<echo>} 
                                          {
                                            (DQ 
                                              (braced_var_sub
                                                token: <Id.VSub_Name OPTION>
                                                suffix_op: (suffix_op.Unary op_id:Id.VOp1_DComma arg_word:(word.Empty))
                                              )
                                            )
                                          }
                                        )
                                      ]
                                    )
                                )
                              }
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {<Id.Lit_LBracket '['>} {<-f>} 
                                          {(DQ </DietPi/dietpi/> ($ Id.VSub_DollarName '$command'))} {<Id.Lit_RBracket ']'>}
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                  action: [
                                    (C {</DietPi/dietpi/> (DQ ($ Id.VSub_DollarName '$command'))})
                                  ]
                                  spids: [761 775]
                                )
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {<Id.Lit_LBracket '['>} {<-f>} 
                                          {
                                            (DQ </DietPi/dietpi/misc/> 
                                              ($ Id.VSub_DollarName '$command')
                                            )
                                          } {<Id.Lit_RBracket ']'>}
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                  action: [
                                    (C {</DietPi/dietpi/misc/> (DQ ($ Id.VSub_DollarName '$command'))})
                                  ]
                                  spids: [790 804]
                                )
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {<Id.Lit_LBracket '['>} {<-f>} 
                                          {
                                            (DQ </DietPi/dietpi/func/> 
                                              ($ Id.VSub_DollarName '$command')
                                            )
                                          } {<Id.Lit_RBracket ']'>}
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                  action: [
                                    (C {</DietPi/dietpi/func/> (DQ ($ Id.VSub_DollarName '$command'))})
                                  ]
                                  spids: [819 833]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.AndOr
                                          ops: [Id.Op_DPipe Id.Op_DPipe]
                                          children: [
                                            (C {<Id.Lit_LBracket '['>} 
                                              {(DQ ($ Id.VSub_DollarName '$command'))} {<Id.Lit_Equals '='>} {(DQ <dietpi-cpuinfo>)} {<Id.Lit_RBracket ']'>}
                                            )
                                            (C {<Id.Lit_LBracket '['>} 
                                              {(DQ ($ Id.VSub_DollarName '$command'))} {<Id.Lit_Equals '='>} {(DQ <dietpi-update>)} {<Id.Lit_RBracket ']'>}
                                            )
                                            (C {<Id.Lit_LBracket '['>} 
                                              {(DQ ($ Id.VSub_DollarName '$command'))} {<Id.Lit_Equals '='>} {(DQ <dietpi-morsecode>)} {<Id.Lit_RBracket ']'>}
                                            )
                                          ]
                                        )
                                      terminator: <Id.Op_Semi _>
                                    )
                                  ]
                                  action: [
                                    (C {<echo>} {<-e>} {(DQ )})
                                    (C {<read>} {<-p>} {(DQ <' - Press any key to exit....'>)})
                                  ]
                                  spids: [852 903]
                                )
                              ]
                            )
                          ]
                          spids: [709 726]
                        )
                      ]
                    )
                  ]
                  spids: [691 705]
                )
              ]
              else_action: [
                (C {<whiptail>} {<--title>} {(DQ <'Exit '> ($ Id.VSub_DollarName '$PROGRAM_NAME') <'?'>)} 
                  {<--yesno>} {(DQ <'Exit '> ($ Id.VSub_DollarName '$PROGRAM_NAME') <'?'>)} {<--backtitle>} 
                  {(DQ ($ Id.VSub_DollarName '$PROGRAM_NAME'))} {<--yes-button>} {(DQ <Ok>)} {<--no-button>} {(DQ <Back>)} {<--defaultno>} {<9>} {<55>}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:CHOICE)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_QMark '$?')}
                      spids: [984]
                    )
                  ]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.DParen
                              child: 
                                (arith_expr.Binary
                                  op_id: Id.Arith_DEqual
                                  left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$CHOICE')})
                                  right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:TARGETMENUID)
                              op: assign_op.Equal
                              rhs: {<-1>}
                              spids: [1006]
                            )
                          ]
                        )
                      ]
                      spids: [988 1002]
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: [
        (command.Sentence
          child: 
            (command.DParen
              child: 
                (arith_expr.Binary
                  op_id: Id.Arith_Great
                  left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$TARGETMENUID')})
                  right: 
                    (arith_expr.Unary
                      op_id: Id.Node_UnaryMinus
                      child: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
                    )
                )
            )
          terminator: <Id.Op_Semi _>
        )
      ]
      body: 
        (command.DoGroup
          children: [
            (C {<clear>})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.Binary
                              op_id: Id.Arith_DEqual
                              left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$TARGETMENUID')})
                              right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
                            )
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<Menu_Main>})]
                  spids: [1067 1081]
                )
              ]
            )
          ]
        )
    )
    (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
  ]
)