(command.CommandList
  children: [
    (command.ShFunction
      name: usage
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:104)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 148
                  stdin_parts: [
                    ('usage: ')
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:108)
                      command_list: 
                        (command.CommandList
                          children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                        )
                    )
                    (' [options] command ... [path]\n')
                    ('\n')
                    ('Options:\n')
                    ('  -b basedir   -- Operate on a system mounted at basedir\n')
                    ('                  (default: /)\n')
                    ('  -d workdir   -- Store working files in workdir\n')
                    ('                  (default: /var/db/freebsd-update/)\n')
                    ('  -f conffile  -- Read configuration options from conffile\n')
                    ('                  (default: /etc/freebsd-update.conf)\n')
                    ('  -F           -- Force a fetch operation to proceed\n')
                    ('  -k KEY       -- Trust an RSA key with SHA256 hash of KEY\n')
                    ('  -r release   -- Target for upgrade (e.g., 11.1-RELEASE)\n')
                    ('  -s server    -- Server from which to fetch updates\n')
                    ('                  (default: update.FreeBSD.org)\n')
                    ('  -t address   -- Mail output of cron command, if any, to address\n')
                    ('                  (default: root)\n')
                    ('  --not-running-from-cron\n')
                    ('               -- Run without a tty, for use by automated tools\n')
                    ('  --currently-running release\n')
                    ('               -- Update as if currently running this release\n')
                    ('Commands:\n')
                    ('  fetch        -- Fetch updates from server\n')
                    ('  cron         -- Sleep rand(3600) seconds, fetch updates, and send an\n')
                    ('                  email if updates were found\n')
                    (
'  upgrade      -- Fetch upgrades to FreeBSD version specified via -r option\n'
                    )
                    ('  install      -- Install downloaded updates or upgrades\n')
                    ('  rollback     -- Uninstall most recently installed updates\n')
                    ('  IDS          -- Compare the system against an index of ')
                    (Id.Right_DoubleQuote '"')
                    ('known good')
                    (Id.Right_DoubleQuote '"')
                    (' files.\n')
                  ]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:150)
              arg_word: {(0)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CONFIGOPTIONS)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ('KEYPRINT WORKDIR SERVERNAME MAILTO ALLOWADD ALLOWDELETE\n') 
                ('    KEEPMODIFIEDMETADATA COMPONENTS IGNOREPATHS UPDATEIFUNMODIFIED\n') ('    BASEDIR VERBOSELEVEL TARGETRELEASE STRICTCOMPONENTS MERGECHANGES\n') 
                ('    IDSIGNOREPATHS BACKUPKERNEL BACKUPKERNELDIR BACKUPKERNELSYMBOLFILES')
              )
            }
          spids: [225]
        )
      ]
    )
    (command.ShFunction
      name: nullconfig
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: X
              iter_words: [{(${ Id.VSub_Name CONFIGOPTIONS)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [(C {(eval)} {(${ Id.VSub_Name X) (Id.Lit_Equals '=') (DQ )})]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: saveconfig
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: X
              iter_words: [{(${ Id.VSub_Name CONFIGOPTIONS)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(eval)} 
                      {(${ Id.VSub_Name X) (Id.Lit_VarLike '_saved=') 
                        (word_part.EscapedLiteral
                          token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:305)
                        ) (${ Id.VSub_Name X)
                      }
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: mergeconfig
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: X
              iter_words: [{(${ Id.VSub_Name CONFIGOPTIONS)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(eval)} 
                      {(Id.Lit_VarLike '_=') 
                        (word_part.EscapedLiteral
                          token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:344)
                        ) (${ Id.VSub_Name X) (_saved)
                      }
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name _))} 
                                      {(Id.Lit_RBracket ']')}
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:366)
                            )
                          ]
                          action: [
                            (C {(eval)} 
                              {(${ Id.VSub_Name X) (Id.Lit_Equals '=') 
                                (word_part.EscapedLiteral
                                  token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:377)
                                ) (${ Id.VSub_Name X) (_saved)
                              }
                            )
                          ]
                          spids: [351 368]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: config_KeyPrint
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name KEYPRINT)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:414)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:KEYPRINT)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [419]
                        )
                      ]
                    )
                  ]
                  spids: [403 416]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:426)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_WorkDir
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name WORKDIR)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:458)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:WORKDIR)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [463]
                        )
                      ]
                    )
                  ]
                  spids: [447 460]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:470)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_ServerName
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name SERVERNAME)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:502)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:SERVERNAME)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [507]
                        )
                      ]
                    )
                  ]
                  spids: [491 504]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:514)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_MailTo
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name MAILTO)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:546)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:MAILTO)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [551]
                        )
                      ]
                    )
                  ]
                  spids: [535 548]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:558)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_AllowAdd
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name ALLOWADD)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:593)
                    )
                  ]
                  action: [
                    (command.Case
                      to_match: {($ Id.VSub_Number '$1')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ALLOWADD)
                                  op: assign_op.Equal
                                  rhs: {(yes)}
                                  spids: [617]
                                )
                              ]
                            )
                          ]
                          spids: [605 614 621 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) 
                              (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ALLOWADD)
                                  op: assign_op.Equal
                                  rhs: {(no)}
                                  spids: [633]
                                )
                              ]
                            )
                          ]
                          spids: [624 630 637 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:644)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [640 641 649 -1]
                        )
                      ]
                    )
                  ]
                  spids: [582 595]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:658)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_AllowDelete
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name ALLOWDELETE)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:690)
                    )
                  ]
                  action: [
                    (command.Case
                      to_match: {($ Id.VSub_Number '$1')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ALLOWDELETE)
                                  op: assign_op.Equal
                                  rhs: {(yes)}
                                  spids: [714]
                                )
                              ]
                            )
                          ]
                          spids: [702 711 718 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) 
                              (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:ALLOWDELETE)
                                  op: assign_op.Equal
                                  rhs: {(no)}
                                  spids: [730]
                                )
                              ]
                            )
                          ]
                          spids: [721 727 734 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:741)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [737 738 746 -1]
                        )
                      ]
                    )
                  ]
                  spids: [679 692]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:755)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_KeepModifiedMetadata
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name KEEPMODIFIEDMETADATA)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:793)
                    )
                  ]
                  action: [
                    (command.Case
                      to_match: {($ Id.VSub_Number '$1')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:KEEPMODIFIEDMETADATA)
                                  op: assign_op.Equal
                                  rhs: {(yes)}
                                  spids: [817]
                                )
                              ]
                            )
                          ]
                          spids: [805 814 821 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) 
                              (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:KEEPMODIFIEDMETADATA)
                                  op: assign_op.Equal
                                  rhs: {(no)}
                                  spids: [833]
                                )
                              ]
                            )
                          ]
                          spids: [824 830 837 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:844)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [840 841 849 -1]
                        )
                      ]
                    )
                  ]
                  spids: [782 795]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:858)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_Components
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: C
              iter_words: [{($ Id.VSub_At '$@')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$C'))} 
                                  {(Id.Lit_Equals '=')} {(DQ (src))} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:906)
                            )
                          ]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {(-e)} {(/usr/src/COPYRIGHT)} 
                                          {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:920)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:COMPONENTS)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (DQ (${ Id.VSub_Name COMPONENTS) (' ') 
                                                (${ Id.VSub_Name C)
                                              )
                                            }
                                          spids: [925]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [911 922]
                                )
                              ]
                              else_action: [(C {(echo)} {(DQ ('src component not installed, skipped'))})]
                            )
                          ]
                          spids: [891 908]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:COMPONENTS)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Name COMPONENTS) (' ') (${ Id.VSub_Name C))}
                              spids: [953]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: config_IgnorePaths
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: C
              iter_words: [{($ Id.VSub_At '$@')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:IGNOREPATHS)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name IGNOREPATHS) (' ') (${ Id.VSub_Name C))}
                          spids: [996]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: config_IDSIgnorePaths
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: C
              iter_words: [{($ Id.VSub_At '$@')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:IDSIGNOREPATHS)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name IDSIGNOREPATHS) (' ') (${ Id.VSub_Name C))}
                          spids: [1036]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: config_UpdateIfUnmodified
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: C
              iter_words: [{($ Id.VSub_At '$@')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:UPDATEIFUNMODIFIED)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name UPDATEIFUNMODIFIED) (' ') (${ Id.VSub_Name C))}
                          spids: [1079]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: config_MergeChanges
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: C
              iter_words: [{($ Id.VSub_At '$@')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:MERGECHANGES)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name MERGECHANGES) (' ') (${ Id.VSub_Name C))}
                          spids: [1122]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: config_BaseDir
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name BASEDIR)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1161)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BASEDIR)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [1166]
                        )
                      ]
                    )
                  ]
                  spids: [1150 1163]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1173)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_StrictComponents
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name STRICTCOMPONENTS)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1211)
                    )
                  ]
                  action: [
                    (command.Case
                      to_match: {($ Id.VSub_Number '$1')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:STRICTCOMPONENTS)
                                  op: assign_op.Equal
                                  rhs: {(yes)}
                                  spids: [1235]
                                )
                              ]
                            )
                          ]
                          spids: [1223 1232 1239 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) 
                              (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:STRICTCOMPONENTS)
                                  op: assign_op.Equal
                                  rhs: {(no)}
                                  spids: [1251]
                                )
                              ]
                            )
                          ]
                          spids: [1242 1248 1255 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1262)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1258 1259 1267 -1]
                        )
                      ]
                    )
                  ]
                  spids: [1200 1213]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1276)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_TargetRelease
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name TARGETRELEASE)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1308)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:TARGETRELEASE)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [1313]
                        )
                      ]
                    )
                  ]
                  spids: [1297 1310]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1320)
                  arg_word: {(1)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(echo)} {(${ Id.VSub_Name TARGETRELEASE)})
                            (C {(grep)} {(-qE)} 
                              {(SQ (Token id:Id.Lit_Chars val:'^[0-9.]+$' span_id:1343))}
                            )
                          ]
                          negated: F
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1345)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:TARGETRELEASE)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name TARGETRELEASE) (-RELEASE))}
                          spids: [1350]
                        )
                      ]
                    )
                  ]
                  spids: [1328 1347]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_VerboseLevel
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name VERBOSELEVEL)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1386)
                    )
                  ]
                  action: [
                    (command.Case
                      to_match: {($ Id.VSub_Number '$1')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Dd) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Bb) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Uu) (Id.Lit_RBracket ']') 
                              (Id.Lit_LBracket '[') (Gg) (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:VERBOSELEVEL)
                                  op: assign_op.Equal
                                  rhs: {(debug)}
                                  spids: [1416]
                                )
                              ]
                            )
                          ]
                          spids: [1398 1413 1420 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Tt) (Id.Lit_RBracket ']') 
                              (Id.Lit_LBracket '[') (Aa) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Tt) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) 
                              (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:VERBOSELEVEL)
                                  op: assign_op.Equal
                                  rhs: {(nostats)}
                                  spids: [1447]
                                )
                              ]
                            )
                          ]
                          spids: [1423 1444 1451 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Tt) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Aa) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Tt) (Id.Lit_RBracket ']') 
                              (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:VERBOSELEVEL)
                                  op: assign_op.Equal
                                  rhs: {(stats)}
                                  spids: [1472]
                                )
                              ]
                            )
                          ]
                          spids: [1454 1469 1476 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1483)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1479 1480 1488 -1]
                        )
                      ]
                    )
                  ]
                  spids: [1375 1388]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1497)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_BackupKernel
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name BACKUPKERNEL)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1526)
                    )
                  ]
                  action: [
                    (command.Case
                      to_match: {($ Id.VSub_Number '$1')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:BACKUPKERNEL)
                                  op: assign_op.Equal
                                  rhs: {(yes)}
                                  spids: [1550]
                                )
                              ]
                            )
                          ]
                          spids: [1538 1547 1554 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) 
                              (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:BACKUPKERNEL)
                                  op: assign_op.Equal
                                  rhs: {(no)}
                                  spids: [1566]
                                )
                              ]
                            )
                          ]
                          spids: [1557 1563 1570 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1577)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1573 1574 1582 -1]
                        )
                      ]
                    )
                  ]
                  spids: [1515 1528]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1591)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_BackupKernelDir
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name BACKUPKERNELDIR)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1620)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_Number '$1'))} 
                                  {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1636)
                            )
                          ]
                          action: [
                            (C {(echo)} {(DQ ('BackupKernelDir set to empty dir'))})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1648)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1625 1638]
                        )
                      ]
                    )
                    (command.Case
                      to_match: {($ Id.VSub_Number '$1')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(/)}
                            {(/bin)}
                            {(/boot)}
                            {(/etc)}
                            {(/lib)}
                            {(/libexec)}
                            {(/sbin)}
                            {(/usr)}
                            {(/var)}
                          ]
                          action: [
                            (C {(echo)} 
                              {(DQ ('BackupKernelDir set to invalid path ') ($ Id.VSub_Number '$1'))}
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1704)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1676 1693 1709 -1]
                        )
                        (case_arm
                          pat_list: [{(/) (Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:BACKUPKERNELDIR)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_Number '$1')}
                                  spids: [1717]
                                )
                              ]
                            )
                          ]
                          spids: [1712 1714 1721 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (C {(echo)} 
                              {
                                (DQ ('BackupKernelDir (') ($ Id.VSub_Number '$1') 
                                  (') is not an absolute path')
                                )
                              }
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1737)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1724 1725 1742 -1]
                        )
                      ]
                    )
                  ]
                  spids: [1609 1622]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1751)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: config_BackupKernelSymbolFiles
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name BACKUPKERNELSYMBOLFILES)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1780)
                    )
                  ]
                  action: [
                    (command.Case
                      to_match: {($ Id.VSub_Number '$1')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:BACKUPKERNELSYMBOLFILES)
                                  op: assign_op.Equal
                                  rhs: {(yes)}
                                  spids: [1804]
                                )
                              ]
                            )
                          ]
                          spids: [1792 1801 1808 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) 
                              (Id.Lit_RBracket ']')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:BACKUPKERNELSYMBOLFILES)
                                  op: assign_op.Equal
                                  rhs: {(no)}
                                  spids: [1820]
                                )
                              ]
                            )
                          ]
                          spids: [1811 1817 1824 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1831)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1827 1828 1836 -1]
                        )
                      ]
                    )
                  ]
                  spids: [1769 1782]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1845)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: configline
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(0)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1877)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:1882)
                    )
                  ]
                  spids: [1866 1879]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OPT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [1889]
                )
              ]
            )
            (C {(shift)})
            (C {(config_) (${ Id.VSub_Name OPT)} {($ Id.VSub_At '$@')})
          ]
        )
    )
    (command.ShFunction
      name: init_params
      body: 
        (command.BraceGroup
          children: [
            (C {(nullconfig)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CONFFILE)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1936]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:COMMANDS)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1946]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FORCEFETCH)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [1956]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:NOTTYOK)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [1965]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: parse_cmdline
      body: 
        (command.BraceGroup
          children: [
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:1982)
              cond: [
                (command.Sentence
                  child: 
                    (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} 
                      {(Id.Lit_RBracket ']')}
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:1993)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_Number '$1'))}
                      arms: [
                        (case_arm
                          pat_list: [{(-f)}]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(1)} 
                                          {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:2026)
                                    )
                                  ]
                                  action: [
                                    (command.Sentence
                                      child: (C {(usage)})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:2031)
                                    )
                                  ]
                                  spids: [2015 2028]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} 
                                          {(DQ (${ Id.VSub_Name CONFFILE))} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:2051)
                                    )
                                  ]
                                  action: [
                                    (command.Sentence
                                      child: (C {(usage)})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:2056)
                                    )
                                  ]
                                  spids: [2036 2053]
                                )
                              ]
                            )
                            (command.Sentence
                              child: (C {(shift)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2062)
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:CONFFILE)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                                  spids: [2064]
                                )
                              ]
                            )
                          ]
                          spids: [2011 2012 2070 -1]
                        )
                        (case_arm
                          pat_list: [{(-F)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:FORCEFETCH)
                                  op: assign_op.Equal
                                  rhs: {(1)}
                                  spids: [2077]
                                )
                              ]
                            )
                          ]
                          spids: [2073 2074 2081 -1]
                        )
                        (case_arm
                          pat_list: [{(--not-running-from-cron)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:NOTTYOK)
                                  op: assign_op.Equal
                                  rhs: {(1)}
                                  spids: [2088]
                                )
                              ]
                            )
                          ]
                          spids: [2084 2085 2092 -1]
                        )
                        (case_arm
                          pat_list: [{(--currently-running)}]
                          action: [
                            (command.Sentence
                              child: (C {(shift)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2100)
                            )
                            (C {(export)} {(Id.Lit_VarLike 'UNAME_r=') (DQ ($ Id.VSub_Number '$1'))})
                          ]
                          spids: [2095 2096 2110 -1]
                        )
                        (case_arm
                          pat_list: [{(-b)}]
                          action: [
                            (command.Sentence
                              child: 
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} 
                                              {(1)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2133)
                                        )
                                      ]
                                      action: [
                                        (command.Sentence
                                          child: (C {(usage)})
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2138)
                                        )
                                      ]
                                      spids: [2122 2135]
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2141)
                            )
                            (C {(shift)})
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [(C {(config_BaseDir)} {($ Id.VSub_Number '$1')}) (C {(usage)})]
                            )
                          ]
                          spids: [2118 2119 2155 -1]
                        )
                        (case_arm
                          pat_list: [{(-d)}]
                          action: [
                            (command.Sentence
                              child: 
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} 
                                              {(1)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2173)
                                        )
                                      ]
                                      action: [
                                        (command.Sentence
                                          child: (C {(usage)})
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2178)
                                        )
                                      ]
                                      spids: [2162 2175]
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2181)
                            )
                            (C {(shift)})
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [(C {(config_WorkDir)} {($ Id.VSub_Number '$1')}) (C {(usage)})]
                            )
                          ]
                          spids: [2158 2159 2195 -1]
                        )
                        (case_arm
                          pat_list: [{(-k)}]
                          action: [
                            (command.Sentence
                              child: 
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} 
                                              {(1)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2213)
                                        )
                                      ]
                                      action: [
                                        (command.Sentence
                                          child: (C {(usage)})
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2218)
                                        )
                                      ]
                                      spids: [2202 2215]
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2221)
                            )
                            (C {(shift)})
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [(C {(config_KeyPrint)} {($ Id.VSub_Number '$1')}) (C {(usage)})]
                            )
                          ]
                          spids: [2198 2199 2235 -1]
                        )
                        (case_arm
                          pat_list: [{(-s)}]
                          action: [
                            (command.Sentence
                              child: 
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} 
                                              {(1)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2253)
                                        )
                                      ]
                                      action: [
                                        (command.Sentence
                                          child: (C {(usage)})
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2258)
                                        )
                                      ]
                                      spids: [2242 2255]
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2261)
                            )
                            (C {(shift)})
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (C {(config_ServerName)} {($ Id.VSub_Number '$1')})
                                (C {(usage)})
                              ]
                            )
                          ]
                          spids: [2238 2239 2275 -1]
                        )
                        (case_arm
                          pat_list: [{(-r)}]
                          action: [
                            (command.Sentence
                              child: 
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} 
                                              {(1)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2293)
                                        )
                                      ]
                                      action: [
                                        (command.Sentence
                                          child: (C {(usage)})
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2298)
                                        )
                                      ]
                                      spids: [2282 2295]
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2301)
                            )
                            (C {(shift)})
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (C {(config_TargetRelease)} {($ Id.VSub_Number '$1')})
                                (C {(usage)})
                              ]
                            )
                          ]
                          spids: [2278 2279 2315 -1]
                        )
                        (case_arm
                          pat_list: [{(-t)}]
                          action: [
                            (command.Sentence
                              child: 
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} 
                                              {(1)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2333)
                                        )
                                      ]
                                      action: [
                                        (command.Sentence
                                          child: (C {(usage)})
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2338)
                                        )
                                      ]
                                      spids: [2322 2335]
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2341)
                            )
                            (C {(shift)})
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [(C {(config_MailTo)} {($ Id.VSub_Number '$1')}) (C {(usage)})]
                            )
                          ]
                          spids: [2318 2319 2355 -1]
                        )
                        (case_arm
                          pat_list: [{(-v)}]
                          action: [
                            (command.Sentence
                              child: 
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} 
                                              {(1)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2373)
                                        )
                                      ]
                                      action: [
                                        (command.Sentence
                                          child: (C {(usage)})
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:2378)
                                        )
                                      ]
                                      spids: [2362 2375]
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2381)
                            )
                            (C {(shift)})
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (C {(config_VerboseLevel)} {($ Id.VSub_Number '$1')})
                                (C {(usage)})
                              ]
                            )
                          ]
                          spids: [2358 2359 2395 -1]
                        )
                        (case_arm
                          pat_list: [{(--debug)}]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [(C {(config_VerboseLevel)} {(debug)}) (C {(usage)})]
                            )
                          ]
                          spids: [2403 2404 2416 -1]
                        )
                        (case_arm
                          pat_list: [{(--no-stats)}]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [(C {(config_VerboseLevel)} {(nostats)}) (C {(usage)})]
                            )
                          ]
                          spids: [2419 2420 2432 -1]
                        )
                        (case_arm
                          pat_list: [{(cron)} {(fetch)} {(upgrade)} {(install)} {(rollback)} {(IDS)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMMANDS)
                                  op: assign_op.Equal
                                  rhs: {(DQ (${ Id.VSub_Name COMMANDS) (' ') ($ Id.VSub_Number '$1'))}
                                  spids: [2464]
                                )
                              ]
                            )
                          ]
                          spids: [2440 2461 2474 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [(C {(usage)})]
                          spids: [2482 2483 2489 -1]
                        )
                      ]
                    )
                    (C {(shift)})
                  ]
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name COMMANDS))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2519)
                    )
                  ]
                  action: [(C {(usage)})]
                  spids: [2506 2521]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: parse_conffile
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} 
                              {(DQ (${ Id.VSub_Name CONFFILE))} {(Id.Lit_RBracket ']')}
                            )
                            (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-r)} 
                              {(DQ (${ Id.VSub_Name CONFFILE))} {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2582)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} {(DQ ('File does not exist '))})
                    (C {(echo)} {(-n)} {(DQ ('or is not readable: '))})
                    (C {(echo)} {(${ Id.VSub_Name CONFFILE)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:2612)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [2551 2584]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name CONFFILE))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2646)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CONFFILE)
                          op: assign_op.Equal
                          rhs: {(DQ (/etc/freebsd-update.conf))}
                          spids: [2651]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-r)} 
                                  {(DQ (${ Id.VSub_Name CONFFILE))} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2672)
                            )
                          ]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:2677)
                            )
                          ]
                          spids: [2657 2674]
                        )
                      ]
                    )
                  ]
                  spids: [2633 2648]
                )
              ]
            )
            (C {(saveconfig)})
            (C {(nullconfig)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:L)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [2710]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:2714)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(LINE)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:2719)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:L)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$L')})
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                  )
                              )
                            }
                          spids: [2724]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:LINEX)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:2736)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {(DQ (${ Id.VSub_Name LINE))})
                                          (C {(cut)} {(-f)} {(1)} {(-d)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'#' span_id:2758))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [2735]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [(C {(configline)} {(${ Id.VSub_Name LINEX)})]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2772)
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {
                                (DQ ('Error processing configuration file, line ') 
                                  ($ Id.VSub_DollarName '$L') (':')
                                )
                              }
                            )
                            (C {(echo)} {(DQ ('==> ') (${ Id.VSub_Name LINE))})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Exit val:exit span_id:2796)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [2763 2774]
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:2806)
                  fd: -1
                  arg_word: {(${ Id.VSub_Name CONFFILE)}
                )
              ]
            )
            (C {(mergeconfig)})
          ]
        )
    )
    (command.ShFunction
      name: default_params
      body: 
        (command.BraceGroup
          children: [
            (C {(saveconfig)})
            (C {(nullconfig)})
            (C {(config_WorkDir)} {(/var/db/freebsd-update)})
            (C {(config_MailTo)} {(root)})
            (C {(config_AllowAdd)} {(yes)})
            (C {(config_AllowDelete)} {(yes)})
            (C {(config_KeepModifiedMetadata)} {(yes)})
            (C {(config_BaseDir)} {(/)})
            (C {(config_VerboseLevel)} {(stats)})
            (C {(config_StrictComponents)} {(no)})
            (C {(config_BackupKernel)} {(yes)})
            (C {(config_BackupKernelDir)} {(/boot/kernel.old)})
            (C {(config_BackupKernelSymbolFiles)} {(no)})
            (C {(mergeconfig)})
          ]
        )
    )
    (command.ShFunction
      name: fetch_setup_verboselevel
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(${ Id.VSub_Name VERBOSELEVEL)}
              arms: [
                (case_arm
                  pat_list: [{(debug)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:QUIETREDIR)
                          op: assign_op.Equal
                          rhs: {(DQ (/dev/stderr))}
                          spids: [2942]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:QUIETFLAG)
                          op: assign_op.Equal
                          rhs: {(DQ (' '))}
                          spids: [2948]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:STATSREDIR)
                          op: assign_op.Equal
                          rhs: {(DQ (/dev/stderr))}
                          spids: [2954]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:DDSTATS)
                          op: assign_op.Equal
                          rhs: {(DQ (..))}
                          spids: [2960]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:XARGST)
                          op: assign_op.Equal
                          rhs: {(DQ (-t))}
                          spids: [2966]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:NDEBUG)
                          op: assign_op.Equal
                          rhs: {(DQ (' '))}
                          spids: [2972]
                        )
                      ]
                    )
                  ]
                  spids: [2938 2939 2978 -1]
                )
                (case_arm
                  pat_list: [{(nostats)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:QUIETREDIR)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [2985]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:QUIETFLAG)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [2990]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:STATSREDIR)
                          op: assign_op.Equal
                          rhs: {(DQ (/dev/null))}
                          spids: [2995]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:DDSTATS)
                          op: assign_op.Equal
                          rhs: {(DQ (..))}
                          spids: [3001]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:XARGST)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [3007]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:NDEBUG)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [3012]
                        )
                      ]
                    )
                  ]
                  spids: [2981 2982 3017 -1]
                )
                (case_arm
                  pat_list: [{(stats)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:QUIETREDIR)
                          op: assign_op.Equal
                          rhs: {(DQ (/dev/null))}
                          spids: [3024]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:QUIETFLAG)
                          op: assign_op.Equal
                          rhs: {(DQ (-q))}
                          spids: [3030]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:STATSREDIR)
                          op: assign_op.Equal
                          rhs: {(DQ (/dev/stdout))}
                          spids: [3036]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:DDSTATS)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [3042]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:XARGST)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [3047]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:NDEBUG)
                          op: assign_op.Equal
                          rhs: {(DQ (-n))}
                          spids: [3052]
                        )
                      ]
                    )
                  ]
                  spids: [3020 3021 3058 -1]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetchupgrade_check_params
      body: 
        (command.BraceGroup
          children: [
            (C {(export)} 
              {(Id.Lit_VarLike 'HTTP_USER_AGENT=') 
                (DQ ('freebsd-update (') (${ Id.VSub_Name COMMAND) (', ') 
                  (command_sub
                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:3101)
                    command_list: (command.CommandList children:[(C {(uname)} {(-r)})])
                  ) (')')
                )
              }
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_SERVERNAME_z)
                  op: assign_op.Equal
                  rhs: {(DQ ('SERVERNAME must be given via command line or configuration file.'))}
                  spids: [3113]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_KEYPRINT_z)
                  op: assign_op.Equal
                  rhs: {(DQ ('Key must be given via -k option or configuration file.'))}
                  spids: [3120]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_KEYPRINT_bad)
                  op: assign_op.Equal
                  rhs: {(DQ ('Invalid key fingerprint: '))}
                  spids: [3126]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_WORKDIR_bad)
                  op: assign_op.Equal
                  rhs: {(DQ ('Directory does not exist or is not writable: '))}
                  spids: [3132]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_WORKDIR_bad2)
                  op: assign_op.Equal
                  rhs: {(DQ ('Directory is not on a persistent filesystem: '))}
                  spids: [3138]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name SERVERNAME))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3158)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:3168)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(DQ (${ Id.VSub_Name _SERVERNAME_z))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:3188)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [3145 3160]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name KEYPRINT))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3209)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:3219)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(DQ (${ Id.VSub_Name _KEYPRINT_z))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:3239)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [3196 3211]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(echo)} {(DQ (${ Id.VSub_Name KEYPRINT))})
                            (C {(grep)} {(-qE)} {(DQ ('^[0-9a-f]{64}') (Id.Lit_Other '$'))})
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3269)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:3279)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _KEYPRINT_bad))})
                    (C {(echo)} {(${ Id.VSub_Name KEYPRINT)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:3308)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [3247 3271]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ (${ Id.VSub_Name WORKDIR))} {(-a)} 
                              {(-w)} {(DQ (${ Id.VSub_Name WORKDIR))} {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3341)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:3351)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad))})
                    (C {(echo)} {(${ Id.VSub_Name WORKDIR)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:3380)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [3316 3343]
                )
              ]
            )
            (command.Case
              to_match: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:3390)
                    command_list: 
                      (command.CommandList
                        children: [(C {(df)} {(-T)} {(${ Id.VSub_Name WORKDIR)})]
                      )
                  )
                }
              arms: [
                (case_arm
                  pat_list: [
                    {(Id.Lit_Star '*') (/dev/md) (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') 
                      (Id.Lit_Star '*')
                    }
                    {(Id.Lit_Star '*') (tmpfs) (Id.Lit_Star '*')}
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:3424)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad2))})
                    (C {(echo)} {(${ Id.VSub_Name WORKDIR)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:3453)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [3404 3416 3458 -1]
                )
              ]
            )
            (C {(chmod)} {(700)} {(${ Id.VSub_Name WORKDIR)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(cd)} {(${ Id.VSub_Name WORKDIR)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:3481)
                  arg_word: {(1)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RELNUM)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:3504)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(uname)} {(-r)})
                                  (C {(sed)} {(-E)} 
                                    {(SQ (Token id:Id.Lit_Chars val:'s,-p[0-9]+,,' span_id:3521))}
                                  )
                                  (C {(sed)} {(-E)} 
                                    {
                                      (SQ 
                                        (Token
                                          id: Id.Lit_Chars
                                          val: 's,-SECURITY,-RELEASE,'
                                          span_id: 3532
                                        )
                                      )
                                    }
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [3503]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ARCH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:3538)
                        command_list: (command.CommandList children:[(C {(uname)} {(-m)})])
                      )
                    }
                  spids: [3537]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FETCHDIR)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH)}
                  spids: [3547]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PATCHDIR)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH) (/bp)}
                  spids: [3557]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BOOTFILE)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:3574)
                        command_list: 
                          (command.CommandList
                            children: [(C {(sysctl)} {(-n)} {(kern.bootfile)})]
                          )
                      )
                    }
                  spids: [3573]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:KERNELDIR)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:BOOTFILE span_id:3587)
                        suffix_op: 
                          (suffix_op.Unary
                            op_id: Id.VOp1_Percent
                            arg_word: {(Id.Lit_Slash /) (kernel)}
                          )
                      )
                    }
                  spids: [3585]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-d)} {(${ Id.VSub_Name KERNELDIR)} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3607)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Cannot identify running kernel'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:3619)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [3594 3609]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:KERNCONF)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:3661)
                        command_list: (command.CommandList children:[(C {(uname)} {(-i)})])
                      )
                    }
                  spids: [3660]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KERNCONF)} {(Id.Lit_Equals '=')} 
                          {(DQ (SMP-GENERIC))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3685)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:KERNCONF)
                          op: assign_op.Equal
                          rhs: {(SMP)}
                          spids: [3690]
                        )
                      ]
                    )
                  ]
                  spids: [3670 3687]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KERNCONF)} 
                              {(Id.Lit_Equals '=')} {(DQ (GENERIC))} {(Id.Lit_RBracket ']')}
                            )
                            (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name ARCH)} {(Id.Lit_Equals '=')} 
                              {(DQ (amd64))} {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3728)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(sysctl)} {(kern.version)})
                                    (C {(grep)} {(-qE)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'/SMP$' span_id:3746))}
                                    )
                                  ]
                                  negated: F
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:3748)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:KERNCONF)
                                  op: assign_op.Equal
                                  rhs: {(SMP)}
                                  spids: [3753]
                                )
                              ]
                            )
                          ]
                          spids: [3733 3750]
                        )
                      ]
                    )
                  ]
                  spids: [3697 3730]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BSPATCH)
                  op: assign_op.Equal
                  rhs: {(/usr/bin/bspatch)}
                  spids: [3768]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:SHA256)
                  op: assign_op.Equal
                  rhs: {(/sbin/sha256)}
                  spids: [3772]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHTTPGET)
                  op: assign_op.Equal
                  rhs: {(/usr/libexec/phttpget)}
                  spids: [3776]
                )
              ]
            )
            (C {(fetch_setup_verboselevel)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BDHASH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:3794)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(echo)} {(${ Id.VSub_Name BASEDIR)})
                                  (C {(sha256)} {(-q)})
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [3793]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_check_params
      body: 
        (command.BraceGroup
          children: [
            (C {(fetchupgrade_check_params)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name TARGETRELEASE))} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3843)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:3853)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} {(DQ ("-r option is meaningless with 'fetch' command.  "))})
                    (C {(echo)} {(DQ ("(Did you mean 'upgrade' instead?)"))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:3880)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [3828 3845]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-f)} 
                          {(${ Id.VSub_Name BDHASH) (-install/kerneldone)} {(-a)} {($ Id.VSub_DollarName '$FORCEFETCH')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:3913)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('You have a partially completed upgrade pending'))})
                    (C {(echo)} {(DQ ("Run '") ($ Id.VSub_Number '$0') (" install' first."))})
                    (C {(echo)} 
                      {(DQ ("Run '") ($ Id.VSub_Number '$0') (" fetch -F' to proceed anyway."))}
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:3943)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [3893 3915]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: upgrade_check_params
      body: 
        (command.BraceGroup
          children: [
            (C {(fetchupgrade_check_params)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:NKERNCONF)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name KERNCONF)}
                  spids: [3972]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_TARGETRELEASE_z)
                  op: assign_op.Equal
                  rhs: {(DQ ('Release target must be specified via -r option.'))}
                  spids: [3983]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name TARGETRELEASE))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4002)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:4012)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(DQ (${ Id.VSub_Name _TARGETRELEASE_z))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4032)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [3989 4004]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TARGETRELEASE))} 
                          {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name RELNUM))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4064)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:4074)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(DQ ('Cannot upgrade from ') (${ Id.VSub_Name RELNUM) (' to itself'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4096)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4045 4066]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name ALLOWADD))} 
                          {(Id.Lit_Equals '=')} {(DQ (no))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4126)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:4136)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('WARNING: ') 
                          (word_part.EscapedLiteral
                            token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:4153)
                          ) ('AllowAdd no') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:4155)) 
                          (' is a bad idea ')
                        )
                      }
                    )
                    (C {(echo)} {(DQ ('when upgrading between releases.'))})
                    (C {(echo)})
                  ]
                  spids: [4109 4128]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name ALLOWDELETE))} 
                          {(Id.Lit_Equals '=')} {(DQ (no))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4190)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:4200)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('WARNING: ') 
                          (word_part.EscapedLiteral
                            token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:4217)
                          ) ('AllowDelete no') 
                          (word_part.EscapedLiteral
                            token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:4219)
                          ) (' is a bad idea ')
                        )
                      }
                    )
                    (C {(echo)} {(DQ ('when upgrading between releases.'))})
                    (C {(echo)})
                  ]
                  spids: [4173 4192]
                )
              ]
            )
            (C {(Id.Lit_Other ':')} 
              {
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:EDITOR span_id:4245)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonEquals
                      arg_word: {(SQ (Token id:Id.Lit_Chars val:/usr/bin/vi span_id:4248))}
                    )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: install_check_params
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:4277)
                              command_list: (command.CommandList children:[(C {(id)} {(-u)})])
                            )
                          } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4291)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('You must be root to run this.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4303)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4273 4293]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:4320)
                              command_list: 
                                (command.CommandList
                                  children: [(C {(sysctl)} {(-n)} {(kern.securelevel)})]
                                )
                            )
                          } {(-gt)} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4335)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Updates cannot be installed when the system securelevel'))})
                    (C {(echo)} {(DQ ('is greater than zero.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4354)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4316 4337]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_WORKDIR_bad)
                  op: assign_op.Equal
                  rhs: {(DQ ('Directory does not exist or is not writable: '))}
                  spids: [4367]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ (${ Id.VSub_Name WORKDIR))} {(-a)} 
                              {(-w)} {(DQ (${ Id.VSub_Name WORKDIR))} {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4398)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:4408)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad))})
                    (C {(echo)} {(${ Id.VSub_Name WORKDIR)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4437)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4373 4400]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(cd)} {(${ Id.VSub_Name WORKDIR)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:4453)
                  arg_word: {(1)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BDHASH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:4464)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(echo)} {(${ Id.VSub_Name BASEDIR)})
                                  (C {(sha256)} {(-q)})
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [4463]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BDHASH) (-install)} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4500)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('No updates are available to install.'))})
                    (C {(echo)} {(DQ ("Run '") ($ Id.VSub_Number '$0') (" fetch' first."))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4521)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4486 4502]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(Id.Lit_LBracket '[')} {(-f)} 
                                  {(${ Id.VSub_Name BDHASH) (-install/INDEX-OLD)} {(Id.Lit_RBracket ']')}
                                )
                              ]
                              negated: T
                            )
                            (command.Pipeline
                              children: [
                                (C {(Id.Lit_LBracket '[')} {(-f)} 
                                  {(${ Id.VSub_Name BDHASH) (-install/INDEX-NEW)} {(Id.Lit_RBracket ']')}
                                )
                              ]
                              negated: T
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4559)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Update manifest is corrupt -- this should never happen.'))})
                    (C {(echo)} {(DQ ("Re-run '") ($ Id.VSub_Number '$0') (" fetch'."))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4580)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4529 4561]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BOOTFILE)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:4594)
                        command_list: 
                          (command.CommandList
                            children: [(C {(sysctl)} {(-n)} {(kern.bootfile)})]
                          )
                      )
                    }
                  spids: [4593]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:KERNELDIR)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:BOOTFILE span_id:4607)
                        suffix_op: 
                          (suffix_op.Unary
                            op_id: Id.VOp1_Percent
                            arg_word: {(Id.Lit_Slash /) (kernel)}
                          )
                      )
                    }
                  spids: [4605]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-d)} {(${ Id.VSub_Name KERNELDIR)} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4627)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Cannot identify running kernel'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4639)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4614 4629]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: rollback_check_params
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:4671)
                              command_list: (command.CommandList children:[(C {(id)} {(-u)})])
                            )
                          } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4685)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('You must be root to run this.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4697)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4667 4687]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_WORKDIR_bad)
                  op: assign_op.Equal
                  rhs: {(DQ ('Directory does not exist or is not writable: '))}
                  spids: [4710]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ (${ Id.VSub_Name WORKDIR))} {(-a)} 
                              {(-w)} {(DQ (${ Id.VSub_Name WORKDIR))} {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4741)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:4751)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad))})
                    (C {(echo)} {(${ Id.VSub_Name WORKDIR)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4780)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4716 4743]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(cd)} {(${ Id.VSub_Name WORKDIR)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:4796)
                  arg_word: {(1)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BDHASH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:4807)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(echo)} {(${ Id.VSub_Name BASEDIR)})
                                  (C {(sha256)} {(-q)})
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [4806]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BDHASH) (-rollback)} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4843)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('No rollback directory found.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4855)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4829 4845]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(Id.Lit_LBracket '[')} {(-f)} 
                                  {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-OLD)} {(Id.Lit_RBracket ']')}
                                )
                              ]
                              negated: T
                            )
                            (command.Pipeline
                              children: [
                                (C {(Id.Lit_LBracket '[')} {(-f)} 
                                  {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-NEW)} {(Id.Lit_RBracket ']')}
                                )
                              ]
                              negated: T
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:4893)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Update manifest is corrupt -- this should never happen.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:4905)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4863 4895]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: IDS_check_params
      body: 
        (command.BraceGroup
          children: [
            (C {(export)} 
              {(Id.Lit_VarLike 'HTTP_USER_AGENT=') 
                (DQ ('freebsd-update (') (${ Id.VSub_Name COMMAND) (', ') 
                  (command_sub
                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:4953)
                    command_list: (command.CommandList children:[(C {(uname)} {(-r)})])
                  ) (')')
                )
              }
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_SERVERNAME_z)
                  op: assign_op.Equal
                  rhs: {(DQ ('SERVERNAME must be given via command line or configuration file.'))}
                  spids: [4965]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_KEYPRINT_z)
                  op: assign_op.Equal
                  rhs: {(DQ ('Key must be given via -k option or configuration file.'))}
                  spids: [4972]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_KEYPRINT_bad)
                  op: assign_op.Equal
                  rhs: {(DQ ('Invalid key fingerprint: '))}
                  spids: [4978]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_WORKDIR_bad)
                  op: assign_op.Equal
                  rhs: {(DQ ('Directory does not exist or is not writable: '))}
                  spids: [4984]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name SERVERNAME))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5004)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:5014)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(DQ (${ Id.VSub_Name _SERVERNAME_z))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:5034)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [4991 5006]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name KEYPRINT))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5055)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:5065)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(DQ (${ Id.VSub_Name _KEYPRINT_z))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:5085)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [5042 5057]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(echo)} {(DQ (${ Id.VSub_Name KEYPRINT))})
                            (C {(grep)} {(-qE)} {(DQ ('^[0-9a-f]{64}') (Id.Lit_Other '$'))})
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5115)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:5125)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _KEYPRINT_bad))})
                    (C {(echo)} {(${ Id.VSub_Name KEYPRINT)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:5154)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [5093 5117]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ (${ Id.VSub_Name WORKDIR))} {(-a)} 
                              {(-w)} {(DQ (${ Id.VSub_Name WORKDIR))} {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5187)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:5197)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (': ')
                        )
                      }
                    )
                    (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad))})
                    (C {(echo)} {(${ Id.VSub_Name WORKDIR)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:5226)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [5162 5189]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(cd)} {(${ Id.VSub_Name WORKDIR)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:5242)
                  arg_word: {(1)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RELNUM)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:5265)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(uname)} {(-r)})
                                  (C {(sed)} {(-E)} 
                                    {(SQ (Token id:Id.Lit_Chars val:'s,-p[0-9]+,,' span_id:5282))}
                                  )
                                  (C {(sed)} {(-E)} 
                                    {
                                      (SQ 
                                        (Token
                                          id: Id.Lit_Chars
                                          val: 's,-SECURITY,-RELEASE,'
                                          span_id: 5293
                                        )
                                      )
                                    }
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [5264]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ARCH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:5299)
                        command_list: (command.CommandList children:[(C {(uname)} {(-m)})])
                      )
                    }
                  spids: [5298]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FETCHDIR)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH)}
                  spids: [5308]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PATCHDIR)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH) (/bp)}
                  spids: [5318]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BOOTFILE)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:5335)
                        command_list: 
                          (command.CommandList
                            children: [(C {(sysctl)} {(-n)} {(kern.bootfile)})]
                          )
                      )
                    }
                  spids: [5334]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:KERNELDIR)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:BOOTFILE span_id:5348)
                        suffix_op: 
                          (suffix_op.Unary
                            op_id: Id.VOp1_Percent
                            arg_word: {(Id.Lit_Slash /) (kernel)}
                          )
                      )
                    }
                  spids: [5346]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-d)} {(${ Id.VSub_Name KERNELDIR)} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5368)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Cannot identify running kernel'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:5380)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [5355 5370]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:KERNCONF)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:5422)
                        command_list: (command.CommandList children:[(C {(uname)} {(-i)})])
                      )
                    }
                  spids: [5421]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KERNCONF)} {(Id.Lit_Equals '=')} 
                          {(DQ (SMP-GENERIC))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5446)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:KERNCONF)
                          op: assign_op.Equal
                          rhs: {(SMP)}
                          spids: [5451]
                        )
                      ]
                    )
                  ]
                  spids: [5431 5448]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KERNCONF)} 
                              {(Id.Lit_Equals '=')} {(DQ (GENERIC))} {(Id.Lit_RBracket ']')}
                            )
                            (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name ARCH)} {(Id.Lit_Equals '=')} 
                              {(DQ (amd64))} {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5489)
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(sysctl)} {(kern.version)})
                                    (C {(grep)} {(-qE)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'/SMP$' span_id:5507))}
                                    )
                                  ]
                                  negated: F
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:5509)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:KERNCONF)
                                  op: assign_op.Equal
                                  rhs: {(SMP)}
                                  spids: [5514]
                                )
                              ]
                            )
                          ]
                          spids: [5494 5511]
                        )
                      ]
                    )
                  ]
                  spids: [5458 5491]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:SHA256)
                  op: assign_op.Equal
                  rhs: {(/sbin/sha256)}
                  spids: [5529]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PHTTPGET)
                  op: assign_op.Equal
                  rhs: {(/usr/libexec/phttpget)}
                  spids: [5533]
                )
              ]
            )
            (C {(fetch_setup_verboselevel)})
          ]
        )
    )
    (command.ShFunction
      name: fetch_pick_server_init
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(Id.Lit_Other ':')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:5598)
                  fd: -1
                  arg_word: {(serverlist_tried)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (command.Pipeline children:[(C {(which)} {(-s)} {(host)})] negated:T)
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5619)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(Id.Lit_Other ':')}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:5626)
                          fd: -1
                          arg_word: {(serverlist_full)}
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:5631)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [5610 5621]
                )
              ]
            )
            (C {(echo)} {(-n)} {(DQ ('Looking up ') (${ Id.VSub_Name SERVERNAME) (' mirrors... '))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MLIST)
                  op: assign_op.Equal
                  rhs: {(DQ (_http._tcp.) (${ Id.VSub_Name SERVERNAME))}
                  spids: [5663]
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(host)} {(-t)} {(srv)} {(DQ (${ Id.VSub_Name MLIST))})
                (C {(sed)} {(-nE)} 
                  {(DQ (s/) (${ Id.VSub_Name MLIST) (' (has SRV record|server selection) //p'))}
                )
                (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (4)} {(-d)} 
                  {(SQ (Token id:Id.Lit_Chars val:' ' span_id:5715))}
                )
                (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/\\.$//' span_id:5726))})
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:5734)
                      fd: -1
                      arg_word: {(serverlist_full)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:5747)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (command.Simple
                                      words: [{(wc)} {(-l)}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Less val:'<' span_id:5754)
                                          fd: -1
                                          arg_word: {(serverlist_full)}
                                        )
                                      ]
                                    )
                                  ]
                                )
                            )
                          } {(-eq)} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5764)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('none found.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:5776)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [5743 5766]
                )
              ]
            )
            (C {(echo)} 
              {
                (command_sub
                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:5790)
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.Simple
                          words: [{(wc)} {(-l)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:5797)
                              fd: -1
                              arg_word: {(serverlist_full)}
                            )
                          ]
                        )
                      ]
                    )
                )
              } {(DQ ('mirrors found.'))}
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-n)} 
                          {(DQ (${ Id.VSub_Name HTTP_PROXY) (${ Id.VSub_Name http_proxy))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5833)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:RANDVALUE)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:5839)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(sha256)} {(-qs)} 
                                            {
                                              (DQ (${ Id.VSub_Name HTTP_PROXY) 
                                                (${ Id.VSub_Name http_proxy)
                                              )
                                            }
                                          )
                                          (C {(tr)} {(-d)} 
                                            {(SQ (Token id:Id.Lit_Chars val:a-f span_id:5865))}
                                          )
                                          (C {(cut)} {(-c)} {(1-9)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [5838]
                        )
                      ]
                    )
                  ]
                  spids: [5817 5835]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:RANDVALUE)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:5883)
                            command_list: 
                              (command.CommandList
                                children: [(C {(jot)} {(-r)} {(1)} {(0)} {(999999999)})]
                              )
                          )
                        }
                      spids: [5882]
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_pick_server
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(sort)} {(serverlist_tried)})
                (command.Simple
                  words: [{(comm)} {(-23)} {(serverlist_full)} {(-)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:5932)
                      fd: -1
                      arg_word: {(serverlist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:5945)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (command.Simple
                                      words: [{(wc)} {(-l)}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Less val:'<' span_id:5952)
                                          fd: -1
                                          arg_word: {(serverlist)}
                                        )
                                      ]
                                    )
                                  ]
                                )
                            )
                          } {(-eq)} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:5962)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('No mirrors remaining, giving up.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:5974)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [5941 5964]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:SRV_PRIORITY)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:5987)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(cut)} {(-f)} {(1)} {(-d)} 
                                    {(SQ (Token id:Id.Lit_Chars val:' ' span_id:5999))} {(serverlist)}
                                  )
                                  (C {(sort)} {(-n)})
                                  (C {(head)} {(-1)})
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [5986]
                )
              ]
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:SRV_WSUM)
                      op: assign_op.Equal
                      rhs: {(0)}
                      spids: [6022]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:6024)
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:6027)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(X)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:6032)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$X'))}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(${ Id.VSub_Name SRV_PRIORITY) 
                              (word_part.EscapedLiteral
                                token: (Token id:Id.Lit_EscapedChar val:'\\ ' span_id:6049)
                              ) (Id.Lit_Star '*')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:SRV_W)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:6055)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (command.Pipeline
                                                children: [
                                                  (C {(echo)} {($ Id.VSub_DollarName '$X')})
                                                  (C {(cut)} {(-f)} {(2)} {(-d)} 
                                                    {
                                                      (SQ 
                                                        (Token
                                                          id: Id.Lit_Chars
                                                          val: ' '
                                                          span_id: 6073
                                                        )
                                                      )
                                                    }
                                                  )
                                                ]
                                                negated: F
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [6054]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:SRV_WSUM)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (word_part.ArithSub
                                        anode: 
                                          (arith_expr.Binary
                                            op_id: Id.Arith_Plus
                                            left: 
                                              (arith_expr.ArithWord
                                                w: {($ Id.VSub_DollarName '$SRV_WSUM')}
                                              )
                                            right: 
                                              (arith_expr.ArithWord
                                                w: {($ Id.VSub_DollarName '$SRV_W')}
                                              )
                                          )
                                      )
                                    }
                                  spids: [6078]
                                )
                              ]
                            )
                          ]
                          spids: [6046 6051 6089 -1]
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:6097)
                  fd: -1
                  arg_word: {(serverlist)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name SRV_WSUM)} {(-eq)} {(0)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6119)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:SRV_WSUM)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:6125)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(grep)} {(-E)} 
                                            {(DQ ('^') (${ Id.VSub_Name SRV_PRIORITY) (' '))} {(serverlist)}
                                          )
                                          (C {(wc)} {(-l)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [6124]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:SRV_W_ADD)
                          op: assign_op.Equal
                          rhs: {(1)}
                          spids: [6150]
                        )
                      ]
                    )
                  ]
                  spids: [6106 6121]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:SRV_W_ADD)
                      op: assign_op.Equal
                      rhs: {(0)}
                      spids: [6157]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:SRV_RND)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:6169)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(expr)} {(${ Id.VSub_Name RANDVALUE)} {(Id.Lit_Other '%')} 
                                {(${ Id.VSub_Name SRV_WSUM)}
                              )
                            ]
                          )
                      )
                    }
                  spids: [6168]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:6196)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(X)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:6201)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$X'))}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(${ Id.VSub_Name SRV_PRIORITY) 
                              (word_part.EscapedLiteral
                                token: (Token id:Id.Lit_EscapedChar val:'\\ ' span_id:6218)
                              ) (Id.Lit_Star '*')
                            }
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:SRV_W)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:6224)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (command.Pipeline
                                                children: [
                                                  (C {(echo)} {($ Id.VSub_DollarName '$X')})
                                                  (C {(cut)} {(-f)} {(2)} {(-d)} 
                                                    {
                                                      (SQ 
                                                        (Token
                                                          id: Id.Lit_Chars
                                                          val: ' '
                                                          span_id: 6242
                                                        )
                                                      )
                                                    }
                                                  )
                                                ]
                                                negated: F
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [6223]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:SRV_W)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (word_part.ArithSub
                                        anode: 
                                          (arith_expr.Binary
                                            op_id: Id.Arith_Plus
                                            left: 
                                              (arith_expr.ArithWord
                                                w: {($ Id.VSub_DollarName '$SRV_W')}
                                              )
                                            right: 
                                              (arith_expr.ArithWord
                                                w: {($ Id.VSub_DollarName '$SRV_W_ADD')}
                                              )
                                          )
                                      )
                                    }
                                  spids: [6247]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$SRV_RND')} 
                                          {(-lt)} {($ Id.VSub_DollarName '$SRV_W')} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:6269)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:SERVERNAME)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (command_sub
                                                left_token: 
                                                  (Token
                                                    id: Id.Left_Backtick
                                                    val: '`'
                                                    span_id: 6275
                                                  )
                                                command_list: 
                                                  (command.CommandList
                                                    children: [
                                                      (command.Pipeline
                                                        children: [
                                                          (C {(echo)} {($ Id.VSub_DollarName '$X')})
                                                          (C {(cut)} {(-f)} {(3)} {(-d)} 
                                                            {
                                                              (SQ 
                                                                (Token
                                                                  id: Id.Lit_Chars
                                                                  val: ' '
                                                                  span_id: 6293
                                                                )
                                                              )
                                                            }
                                                          )
                                                        ]
                                                        negated: F
                                                      )
                                                    ]
                                                  )
                                              )
                                            }
                                          spids: [6274]
                                        )
                                      ]
                                    )
                                    (command.Simple
                                      words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$X'))}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_DGreat val:'>>' span_id:6304)
                                          fd: -1
                                          arg_word: {(serverlist_tried)}
                                        )
                                      ]
                                    )
                                    (command.ControlFlow
                                      token: (Token id:Id.ControlFlow_Break val:break span_id:6309)
                                    )
                                  ]
                                  spids: [6258 6271]
                                )
                              ]
                              else_action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:SRV_RND)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (word_part.ArithSub
                                            anode: 
                                              (arith_expr.Binary
                                                op_id: Id.Arith_Minus
                                                left: 
                                                  (arith_expr.ArithWord
                                                    w: {($ Id.VSub_DollarName '$SRV_RND')}
                                                  )
                                                right: 
                                                  (arith_expr.ArithWord
                                                    w: {($ Id.VSub_DollarName '$SRV_W')}
                                                  )
                                              )
                                          )
                                        }
                                      spids: [6315]
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [6215 6220 6329 -1]
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:6337)
                  fd: -1
                  arg_word: {(serverlist)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_make_patchlist
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} 
                  {
                    (DQ ('^([0-9a-f]{64})') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') (1) 
                      (Id.Lit_Other '$')
                    )
                  }
                )
                (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:6377))} 
                  {(SQ (Token id:Id.Lit_Chars val:' ' span_id:6381))}
                )
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:6387)
                  cond: [
                    (command.Sentence
                      child: (C {(read)} {(X)} {(Y)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6394)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (command.AndOr
                                      ops: [Id.Op_DPipe]
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(-f)} 
                                          {(DQ (files/) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')}
                                        )
                                        (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} 
                                          {(DQ (files/) (${ Id.VSub_Name X) (.gz))} {(Id.Lit_RBracket ']')}
                                        )
                                      ]
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:6433)
                                )
                              ]
                              action: [
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Continue val:continue span_id:6438)
                                )
                              ]
                              spids: [6399 6435]
                            )
                          ]
                        )
                        (C {(echo)} {(DQ (${ Id.VSub_Name X) ('|') (${ Id.VSub_Name Y))})
                      ]
                    )
                )
                (C {(uniq)})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_progress
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:LNC)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [6477]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:6481)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(x)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:6486)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:LNC)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$LNC')})
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                  )
                              )
                            }
                          spids: [6491]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} 
                                  {
                                    (word_part.ArithSub
                                      anode: 
                                        (arith_expr.Binary
                                          op_id: Id.Arith_Percent
                                          left: 
                                            (arith_expr.ArithWord
                                              w: {($ Id.VSub_DollarName '$LNC')}
                                            )
                                          right: (arith_expr.ArithWord w:{(Id.Lit_Digits 10)})
                                        )
                                    )
                                  } {(Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:6520)
                            )
                          ]
                          action: [(C {(echo)} {(-n)} {($ Id.VSub_DollarName '$LNC')})]
                          spids: [6502 6522]
                        )
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} 
                                  {
                                    (word_part.ArithSub
                                      anode: 
                                        (arith_expr.Binary
                                          op_id: Id.Arith_Percent
                                          left: 
                                            (arith_expr.ArithWord
                                              w: {($ Id.VSub_DollarName '$LNC')}
                                            )
                                          right: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)})
                                        )
                                    )
                                  } {(Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:6550)
                            )
                          ]
                          action: [(C {(echo)} {(-n)} {(.)})]
                          spids: [6532 6552]
                        )
                      ]
                    )
                  ]
                )
            )
            (C {(echo)} {(-n)} {(DQ (' '))})
          ]
        )
    )
    (command.ShFunction
      name: continuep
      body: 
        (command.BraceGroup
          children: [
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:6590)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(-p)} {(DQ ('Does this look reasonable (y/n)? '))} {(CONTINUE)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:6601)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.Case
                      to_match: {(DQ (${ Id.VSub_Name CONTINUE))}
                      arms: [
                        (case_arm
                          pat_list: [{(y) (Id.Lit_Star '*')}]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:6622)
                              arg_word: {(0)}
                            )
                          ]
                          spids: [6617 6619 6627 -1]
                        )
                        (case_arm
                          pat_list: [{(n) (Id.Lit_Star '*')}]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:6635)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [6630 6632 6640 -1]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: workdir_init
      body: 
        (command.BraceGroup
          children: [(C {(mkdir)} {(-p)} {(files)}) (C {(touch)} {(tINDEX.present)})]
        )
    )
    (command.ShFunction
      name: fetch_key
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-r)} {(pub.ssl)} {(Id.Lit_RBracket ']')})
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (command_sub
                                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:6707)
                                  command_list: 
                                    (command.CommandList
                                      children: [(C {(${ Id.VSub_Name SHA256)} {(-q)} {(pub.ssl)})]
                                    )
                                )
                              } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name KEYPRINT)} {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6726)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:6731)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [6693 6728]
                )
              ]
            )
            (C {(echo)} {(-n)} {(DQ ('Fetching public key from ') (${ Id.VSub_Name SERVERNAME) ('... '))})
            (C {(rm)} {(-f)} {(pub.ssl)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Simple
                  words: [
                    {(fetch)}
                    {(${ Id.VSub_Name QUIETFLAG)}
                    {(http) (Id.Lit_Other ':') (//) (${ Id.VSub_Name SERVERNAME) (/) 
                      (${ Id.VSub_Name FETCHDIR) (/pub.ssl)
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'2>' span_id:6780)
                      fd: 2
                      arg_word: {(${ Id.VSub_Name QUIETREDIR)}
                    )
                  ]
                )
                (C {(true)})
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-r)} {(pub.ssl)} {(Id.Lit_RBracket ']')})
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6801)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ (failed.))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:6813)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [6790 6803]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} 
                              {
                                (command_sub
                                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:6827)
                                  command_list: 
                                    (command.CommandList
                                      children: [(C {(${ Id.VSub_Name SHA256)} {(-q)} {(pub.ssl)})]
                                    )
                                )
                              } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name KEYPRINT)} {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6846)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('key has incorrect hash.'))})
                    (C {(rm)} {(-f)} {(pub.ssl)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:6865)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [6821 6848]
                )
              ]
            )
            (C {(echo)} {(DQ (done.))})
          ]
        )
    )
    (command.ShFunction
      name: fetch_tag
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} {(-n)} {(DQ ('Fetching metadata signature '))})
            (C {(echo)} {(${ Id.VSub_Name NDEBUG)} 
              {
                (DQ ('for ') (${ Id.VSub_Name RELNUM) (' from ') (${ Id.VSub_Name SERVERNAME) ('... '))
              }
            )
            (C {(rm)} {(-f)} {(latest.ssl)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Simple
                  words: [
                    {(fetch)}
                    {(${ Id.VSub_Name QUIETFLAG)}
                    {(http) (Id.Lit_Other ':') (//) (${ Id.VSub_Name SERVERNAME) (/) 
                      (${ Id.VSub_Name FETCHDIR) (/latest.ssl)
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'2>' span_id:6948)
                      fd: 2
                      arg_word: {(${ Id.VSub_Name QUIETREDIR)}
                    )
                  ]
                )
                (C {(true)})
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-r)} {(latest.ssl)} {(Id.Lit_RBracket ']')})
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:6969)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ (failed.))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:6981)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [6958 6971]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Simple
                  words: [{(openssl)} {(rsautl)} {(-pubin)} {(-inkey)} {(pub.ssl)} {(-verify)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:7004)
                      fd: -1
                      arg_word: {(latest.ssl)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:7008)
                      fd: -1
                      arg_word: {(tag.new)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'2>' span_id:7012)
                      fd: 2
                      arg_word: {(${ Id.VSub_Name QUIETREDIR)}
                    )
                  ]
                )
                (C {(true)})
              ]
            )
            (C {(rm)} {(latest.ssl)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(Id.Lit_LBracket '[')} 
                                  {
                                    (command_sub
                                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:7034)
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (command.Simple
                                              words: [{(wc)} {(-l)}]
                                              redirects: [
                                                (redir.Redir
                                                  op: (Token id:Id.Redir_Less val:'<' span_id:7041)
                                                  fd: -1
                                                  arg_word: {(tag.new)}
                                                )
                                              ]
                                            )
                                          ]
                                        )
                                    )
                                  } {(Id.Lit_Equals '=')} {(1)} {(Id.Lit_RBracket ']')}
                                )
                              ]
                              negated: T
                            )
                            (command.Pipeline
                              children: [
                                (C {(grep)} {(-qE)} 
                                  {
                                    (DQ ('^freebsd-update') (Id.Lit_Other '\\') ('|') 
                                      (${ Id.VSub_Name ARCH) (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name RELNUM) (Id.Lit_Other '\\') ('|[0-9]+') (Id.Lit_Other '\\') 
                                      ('|[0-9a-f]{64}') (Id.Lit_Other '\\') ('|[0-9]{10}')
                                    )
                                  } {(tag.new)}
                                )
                              ]
                              negated: T
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:7086)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('invalid signature.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:7098)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [7028 7088]
                )
              ]
            )
            (C {(echo)} {(DQ (done.))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RELPATCHNUM)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:7116)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Simple
                                words: [
                                  {(cut)}
                                  {(-f)}
                                  {(4)}
                                  {(-d)}
                                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7128))}
                                ]
                                redirects: [
                                  (redir.Redir
                                    op: (Token id:Id.Redir_Less val:'<' span_id:7131)
                                    fd: -1
                                    arg_word: {(tag.new)}
                                  )
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [7115]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:TINDEXHASH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:7138)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Simple
                                words: [
                                  {(cut)}
                                  {(-f)}
                                  {(5)}
                                  {(-d)}
                                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7150))}
                                ]
                                redirects: [
                                  (redir.Redir
                                    op: (Token id:Id.Redir_Less val:'<' span_id:7153)
                                    fd: -1
                                    arg_word: {(tag.new)}
                                  )
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [7137]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:EOLTIME)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:7160)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Simple
                                words: [
                                  {(cut)}
                                  {(-f)}
                                  {(6)}
                                  {(-d)}
                                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7172))}
                                ]
                                redirects: [
                                  (redir.Redir
                                    op: (Token id:Id.Redir_Less val:'<' span_id:7175)
                                    fd: -1
                                    arg_word: {(tag.new)}
                                  )
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [7159]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_tagsanity
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RELPX)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:7202)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(uname)} {(-r)})
                                  (C {(sed)} {(-E)} 
                                    {(SQ (Token id:Id.Lit_Chars val:'s,.*-,,' span_id:7216))}
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [7201]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(echo)} {(${ Id.VSub_Name RELPX)})
                            (C {(grep)} {(-qE)} 
                              {(SQ (Token id:Id.Lit_Chars val:'^p[0-9]+$' span_id:7236))}
                            )
                          ]
                          negated: F
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:7238)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:RELPX)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:7244)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {(${ Id.VSub_Name RELPX)})
                                          (C {(cut)} {(-c)} {(2-)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [7243]
                        )
                      ]
                    )
                  ]
                  spids: [7221 7240]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:RELPX)
                      op: assign_op.Equal
                      rhs: {(0)}
                      spids: [7266]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name RELPATCHNUM))} {(-lt)} 
                          {(DQ (${ Id.VSub_Name RELPX))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:7292)
                    )
                  ]
                  action: [
                    (C {(echo)})
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Files on mirror (') (${ Id.VSub_Name RELNUM) (-p) 
                          (${ Id.VSub_Name RELPATCHNUM) (')')
                        )
                      }
                    )
                    (C {(echo)} {(DQ (' appear older than what'))})
                    (C {(echo)} 
                      {
                        (DQ ('we are currently running (') 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:7328)
                            command_list: (command.CommandList children:[(C {(uname)} {(-r)})])
                          ) (')!')
                        )
                      }
                    )
                    (C {(echo)} {(DQ ('Cowardly refusing to proceed any further.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:7346)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [7273 7294]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-f)} {(tag)} {(Id.Lit_RBracket ']')})
                            (C {(grep)} {(-qE)} 
                              {
                                (DQ ('^freebsd-update') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name ARCH) 
                                  (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name RELNUM) (Id.Lit_Other '\\') ('|[0-9]+') (Id.Lit_Other '\\') ('|[0-9a-f]{64}') 
                                  (Id.Lit_Other '\\') ('|[0-9]{10}')
                                )
                              } {(tag)}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:7409)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:LASTRELPATCHNUM)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:7415)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Simple
                                        words: [
                                          {(cut)}
                                          {(-f)}
                                          {(4)}
                                          {(-d)}
                                          {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7427))}
                                        ]
                                        redirects: [
                                          (redir.Redir
                                            op: (Token id:Id.Redir_Less val:'<' span_id:7430)
                                            fd: -1
                                            arg_word: {(tag)}
                                          )
                                        ]
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [7414]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name RELPATCHNUM))} {(-lt)} 
                                  {(DQ (${ Id.VSub_Name LASTRELPATCHNUM))} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:7456)
                            )
                          ]
                          action: [
                            (C {(echo)})
                            (C {(echo)} {(-n)} 
                              {
                                (DQ ('Files on mirror (') (${ Id.VSub_Name RELNUM) (-p) 
                                  (${ Id.VSub_Name RELPATCHNUM) (')')
                                )
                              }
                            )
                            (C {(echo)} {(DQ (' are older than the'))})
                            (C {(echo)} {(-n)} {(DQ ('most recently seen updates'))})
                            (C {(echo)} 
                              {
                                (DQ (' (') (${ Id.VSub_Name RELNUM) (-p) 
                                  (${ Id.VSub_Name LASTRELPATCHNUM) (').')
                                )
                              }
                            )
                            (C {(echo)} {(DQ ('Cowardly refusing to proceed any further.'))})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:7519)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [7437 7458]
                        )
                      ]
                    )
                  ]
                  spids: [7367 7411]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_metadata_index
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} {(${ Id.VSub_Name NDEBUG)} {(DQ ('Fetching metadata index... '))})
            (C {(rm)} {(-f)} {(${ Id.VSub_Name TINDEXHASH)})
            (C {(fetch)} {(${ Id.VSub_Name QUIETFLAG)} 
              {(http) (Id.Lit_Other ':') (//) (${ Id.VSub_Name SERVERNAME) (/) (${ Id.VSub_Name FETCHDIR) 
                (/t/) (${ Id.VSub_Name TINDEXHASH)
              }
            )
            (command.Simple
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'2>' span_id:7585)
                  fd: 2
                  arg_word: {(${ Id.VSub_Name QUIETREDIR)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name TINDEXHASH)} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:7604)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ (failed.))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:7616)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [7591 7606]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:7628)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(${ Id.VSub_Name SHA256)} {(-q)} {(${ Id.VSub_Name TINDEXHASH)})
                                  ]
                                )
                            )
                          } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(${ Id.VSub_Name TINDEXHASH)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:7650)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('update metadata index corrupt.'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:7662)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [7624 7652]
                )
              ]
            )
            (C {(echo)} {(DQ (done.))})
          ]
        )
    )
    (command.ShFunction
      name: fetch_metadata_bogus
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)})
            (C {(echo)} 
              {(DQ ('The update metadata') ($ Id.VSub_Number '$1') (' is correctly signed, but'))}
            )
            (C {(echo)} {(DQ ('failed an integrity check.'))})
            (C {(echo)} {(DQ ('Cowardly refusing to proceed any further.'))})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:7716)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_metadata_index_merge
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.ForEach
                  iter_name: METAFILE
                  iter_words: [{($ Id.VSub_At '$@')}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (C {(Id.Lit_LBracket '[')} 
                                      {
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_Backtick
                                              val: '`'
                                              span_id: 7753
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (command.Pipeline
                                                  children: [
                                                    (C {(grep)} {(-E)} 
                                                      {
                                                        (DQ ('^') (${ Id.VSub_Name METAFILE) 
                                                          (Id.Lit_Other '\\') ('|')
                                                        )
                                                      } {(${ Id.VSub_Name TINDEXHASH)}
                                                    )
                                                    (C {(wc)} {(-l)})
                                                  ]
                                                  negated: F
                                                )
                                              ]
                                            )
                                        )
                                      } {(-ne)} {(1)} {(Id.Lit_RBracket ']')}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:7789)
                                )
                              ]
                              action: [
                                (C {(fetch_metadata_bogus)} {(DQ (' index'))})
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:7801)
                                  arg_word: {(1)}
                                )
                              ]
                              spids: [7749 7791]
                            )
                          ]
                        )
                        (C {(grep)} {(-E)} {(DQ (${ Id.VSub_Name METAFILE) (Id.Lit_Other '\\') ('|'))} 
                          {(${ Id.VSub_Name TINDEXHASH)}
                        )
                      ]
                    )
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:7834)
                      fd: -1
                      arg_word: {(tINDEX.wanted)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-f)} {(tINDEX.present)} {(Id.Lit_RBracket ']')})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:7849)
                    )
                  ]
                  action: [
                    (command.Pipeline
                      children: [
                        (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7859))} {(-v)} 
                          {(2)} {(tINDEX.wanted)} {(tINDEX.present)}
                        )
                        (command.Simple
                          words: [{(sort)} {(-m)} {(-)} {(tINDEX.wanted)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:7881)
                              fd: -1
                              arg_word: {(tINDEX.new)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (C {(rm)} {(tINDEX.wanted)})
                  ]
                  spids: [7840 7851]
                )
              ]
              else_action: [(C {(mv)} {(tINDEX.wanted)} {(tINDEX.new)})]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_metadata_index_sanity
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(grep)} {(-qvE)} 
                          {
                            (SQ 
                              (Token
                                id: Id.Lit_Chars
                                val: '^[0-9A-Z.-]+\\|[0-9a-f]{64}$'
                                span_id: 7933
                              )
                            )
                          } {(tINDEX.new)}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:7937)
                    )
                  ]
                  action: [
                    (C {(fetch_metadata_bogus)} {(DQ (' index'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:7949)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [7926 7939]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_metadata_sanity
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:P)
                  op: assign_op.Equal
                  rhs: {(DQ ('[-+./:=,%@_[~[:alnum:]]'))}
                  spids: [7982]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:M)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ('[0-9]+') (Id.Lit_Other '\\') ('|[0-9]+') (Id.Lit_Other '\\') ('|[0-9]+') 
                        (Id.Lit_Other '\\') ('|[0-9]+')
                      )
                    }
                  spids: [7988]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:H)
                  op: assign_op.Equal
                  rhs: {(DQ ('[0-9a-f]{64}'))}
                  spids: [8000]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.Simple
                              words: [{(gunzip)} {(-c)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Less val:'<' span_id:8017)
                                  fd: -1
                                  arg_word: {(files/) ($ Id.VSub_Number '$1') (.gz)}
                                )
                              ]
                            )
                            (C {(grep)} {(-qvE)} 
                              {
                                (DQ ('^[a-z]+') (Id.Lit_Other '\\') ('|[0-9a-z-]+') (Id.Lit_Other '\\') 
                                  ('|') (${ Id.VSub_Name P) ('+') (Id.Lit_Other '\\') ('|[fdL-]') (Id.Lit_Other '\\') ('|')
                                )
                              }
                            )
                          ]
                          negated: F
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:8045)
                    )
                  ]
                  action: [
                    (C {(fetch_metadata_bogus)} {(DQ )})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:8056)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [8011 8047]
                )
              ]
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(gunzip)} {(-c)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:8073)
                      fd: -1
                      arg_word: {(files/) ($ Id.VSub_Number '$1') (.gz)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(cut)} {(-f)} {(4-)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8091))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:8094)
                      fd: -1
                      arg_word: {(sanitycheck.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^f' span_id:8111))} 
                              {(sanitycheck.tmp)}
                            )
                            (C {(grep)} {(-qvE)} 
                              {
                                (DQ ('^f') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name M) 
                                  (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name H) (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name P) ('*') 
                                  (word_part.EscapedLiteral
                                    token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:8141)
                                  )
                                )
                              }
                            )
                          ]
                          negated: F
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:8143)
                    )
                  ]
                  action: [
                    (C {(fetch_metadata_bogus)} {(DQ )})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:8154)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [8104 8145]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^d' span_id:8174))} 
                              {(sanitycheck.tmp)}
                            )
                            (C {(grep)} {(-qvE)} 
                              {
                                (DQ ('^d') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name M) 
                                  (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') 
                                  (word_part.EscapedLiteral
                                    token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:8197)
                                  )
                                )
                              }
                            )
                          ]
                          negated: F
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:8199)
                    )
                  ]
                  action: [
                    (C {(fetch_metadata_bogus)} {(DQ )})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:8210)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [8167 8201]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^L' span_id:8230))} 
                              {(sanitycheck.tmp)}
                            )
                            (C {(grep)} {(-qvE)} 
                              {
                                (DQ ('^L') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name M) 
                                  (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name P) ('*') (Id.Lit_Other '\\') ('|') 
                                  (word_part.EscapedLiteral
                                    token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:8257)
                                  )
                                )
                              }
                            )
                          ]
                          negated: F
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:8259)
                    )
                  ]
                  action: [
                    (C {(fetch_metadata_bogus)} {(DQ )})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:8270)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [8223 8261]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^-' span_id:8290))} 
                              {(sanitycheck.tmp)}
                            )
                            (C {(grep)} {(-qvE)} 
                              {
                                (DQ ('^-') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') 
                                  (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|')
                                )
                              }
                            )
                          ]
                          negated: F
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:8317)
                    )
                  ]
                  action: [
                    (C {(fetch_metadata_bogus)} {(DQ )})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:8328)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [8283 8319]
                )
              ]
            )
            (C {(rm)} {(sanitycheck.tmp)})
          ]
        )
    )
    (command.ShFunction
      name: fetch_metadata
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_metadata_index)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:8366)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_metadata_index_merge)} {($ Id.VSub_At '$@')})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:8377)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_metadata_index_sanity)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:8386)
                  arg_word: {(1)}
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8401))} {(-o)} 
                  {(1.2) (Id.Lit_Comma ',') (2.2)} {(tINDEX.present)} {(tINDEX.new)}
                )
                (command.Simple
                  words: [{(fetch_make_patchlist)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:8419)
                      fd: -1
                      arg_word: {(patchlist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(Id.Lit_LBracket '[')} {(-s)} {(patchlist)} {(Id.Lit_RBracket ']')})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:8434)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Fetching ') 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:8449)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (command.Simple
                                        words: [{(wc)} {(-l)}]
                                        redirects: [
                                          (redir.Redir
                                            op: (Token id:Id.Redir_Less val:'<' span_id:8456)
                                            fd: -1
                                            arg_word: {(patchlist)}
                                          )
                                        ]
                                      )
                                      (C {(tr)} {(-d)} 
                                        {(SQ (Token id:Id.Lit_Chars val:' ' span_id:8467))}
                                      )
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          ) (' ')
                        )
                      }
                    )
                    (C {(echo)} {(${ Id.VSub_Name NDEBUG)} 
                      {(DQ ('metadata patches.') (${ Id.VSub_Name DDSTATS))}
                    )
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(tr)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8491))}
                            {(SQ (Token id:Id.Lit_Chars val:- span_id:8495))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:8498)
                              fd: -1
                              arg_word: {(patchlist)}
                            )
                          ]
                        )
                        (C {(lam)} {(-s)} {(DQ (${ Id.VSub_Name FETCHDIR) (/tp/))} {(-)} {(-s)} {(DQ (.gz))})
                        (command.Simple
                          words: [
                            {(xargs)}
                            {(${ Id.VSub_Name XARGST)}
                            {(${ Id.VSub_Name PHTTPGET)}
                            {(${ Id.VSub_Name SERVERNAME)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'2>' span_id:8543)
                              fd: 2
                              arg_word: {(${ Id.VSub_Name STATSREDIR)}
                            )
                          ]
                        )
                        (C {(fetch_progress)})
                      ]
                      negated: F
                    )
                    (C {(echo)} {(DQ (done.))})
                    (C {(echo)} {(-n)} {(DQ ('Applying metadata patches... '))})
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(tr)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8577))}
                            {(SQ (Token id:Id.Lit_Chars val:' ' span_id:8581))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:8584)
                              fd: -1
                              arg_word: {(patchlist)}
                            )
                          ]
                        )
                        (command.WhileUntil
                          keyword: (Token id:Id.KW_While val:while span_id:8591)
                          cond: [
                            (command.Sentence
                              child: (C {(read)} {(X)} {(Y)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:8598)
                            )
                          ]
                          body: 
                            (command.DoGroup
                              children: [
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} 
                                              {(DQ (${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:8623)
                                        )
                                      ]
                                      action: [
                                        (command.Sentence
                                          child: 
                                            (command.ControlFlow
                                              token: 
                                                (Token
                                                  id: Id.ControlFlow_Continue
                                                  val: continue
                                                  span_id: 8627
                                                )
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:8628)
                                        )
                                      ]
                                      spids: [8603 8625]
                                    )
                                  ]
                                )
                                (command.Simple
                                  words: [{(gunzip)} {(-c)}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Less val:'<' span_id:8637)
                                      fd: -1
                                      arg_word: {(${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y) (.gz)}
                                    )
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Great val:'>' span_id:8648)
                                      fd: -1
                                      arg_word: {(diff)}
                                    )
                                  ]
                                )
                                (command.Simple
                                  words: [{(gunzip)} {(-c)}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Less val:'<' span_id:8657)
                                      fd: -1
                                      arg_word: {(files/) (${ Id.VSub_Name X) (.gz)}
                                    )
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Great val:'>' span_id:8665)
                                      fd: -1
                                      arg_word: {(diff-OLD)}
                                    )
                                  ]
                                )
                                (command.Pipeline
                                  children: [
                                    (C {(grep)} {(-E)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'^-' span_id:8680))} {(diff)}
                                    )
                                    (C {(cut)} {(-c)} {(2-)})
                                    (command.WhileUntil
                                      keyword: (Token id:Id.KW_While val:while span_id:8697)
                                      cond: [
                                        (command.Sentence
                                          child: (C {(read)} {(PREFIX)})
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:8702)
                                        )
                                      ]
                                      body: 
                                        (command.DoGroup
                                          children: [
                                            (C {(look)} {(DQ (${ Id.VSub_Name PREFIX))} {(diff-OLD)})
                                          ]
                                        )
                                    )
                                    (command.Simple
                                      words: [{(sort)}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Great val:'>' span_id:8725)
                                          fd: -1
                                          arg_word: {(diff-rm)}
                                        )
                                      ]
                                    )
                                  ]
                                  negated: F
                                )
                                (command.Pipeline
                                  children: [
                                    (C {(grep)} {(-E)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'^\\+' span_id:8735))} {(diff)}
                                    )
                                    (command.Simple
                                      words: [{(cut)} {(-c)} {(2-)}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Great val:'>' span_id:8749)
                                          fd: -1
                                          arg_word: {(diff-add)}
                                        )
                                      ]
                                    )
                                  ]
                                  negated: F
                                )
                                (command.Pipeline
                                  children: [
                                    (C {(comm)} {(-23)} {(diff-OLD)} {(diff-rm)})
                                    (command.Simple
                                      words: [{(sort)} {(-)} {(diff-add)}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Great val:'>' span_id:8776)
                                          fd: -1
                                          arg_word: {(diff-NEW)}
                                        )
                                      ]
                                    )
                                  ]
                                  negated: F
                                )
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} 
                                              {
                                                (command_sub
                                                  left_token: 
                                                    (Token
                                                      id: Id.Left_Backtick
                                                      val: '`'
                                                      span_id: 8786
                                                    )
                                                  command_list: 
                                                    (command.CommandList
                                                      children: [
                                                        (C {(${ Id.VSub_Name SHA256)} {(-q)} 
                                                          {(diff-NEW)}
                                                        )
                                                      ]
                                                    )
                                                )
                                              } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:8805)
                                        )
                                      ]
                                      action: [
                                        (C {(mv)} {(diff-NEW)} {(files/) (${ Id.VSub_Name Y)})
                                        (C {(gzip)} {(-n)} {(files/) (${ Id.VSub_Name Y)})
                                      ]
                                      spids: [8782 8807]
                                    )
                                  ]
                                  else_action: [(C {(mv)} {(diff-NEW)} {(${ Id.VSub_Name Y) (.bad)})]
                                )
                                (C {(rm)} {(-f)} {(${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y) (.gz)} 
                                  {(diff)}
                                )
                                (C {(rm)} {(-f)} {(diff-OLD)} {(diff-NEW)} {(diff-add)} {(diff-rm)})
                              ]
                            )
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'2>' span_id:8877)
                              fd: 2
                              arg_word: {(${ Id.VSub_Name QUIETREDIR)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (C {(echo)} {(DQ (done.))})
                  ]
                  spids: [8425 8436]
                )
              ]
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8907))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:8910)
                      fd: -1
                      arg_word: {(tINDEX.new)}
                    )
                  ]
                )
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:8917)
                  cond: [
                    (command.Sentence
                      child: (C {(read)} {(Y)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:8922)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} 
                                      {(DQ (files/) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:8944)
                                )
                              ]
                              action: [
                                (command.Sentence
                                  child: (C {(echo)} {(${ Id.VSub_Name Y)})
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:8954)
                                )
                              ]
                              spids: [8927 8946]
                            )
                          ]
                        )
                      ]
                    )
                )
                (command.Simple
                  words: [{(sort)} {(-u)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:8969)
                      fd: -1
                      arg_word: {(filelist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(Id.Lit_LBracket '[')} {(-s)} {(filelist)} {(Id.Lit_RBracket ']')})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:8984)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Fetching ') 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:8995)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (command.Simple
                                        words: [{(wc)} {(-l)}]
                                        redirects: [
                                          (redir.Redir
                                            op: (Token id:Id.Redir_Less val:'<' span_id:9002)
                                            fd: -1
                                            arg_word: {(filelist)}
                                          )
                                        ]
                                      )
                                      (C {(tr)} {(-d)} 
                                        {(SQ (Token id:Id.Lit_Chars val:' ' span_id:9013))}
                                      )
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          ) (' ')
                        )
                      }
                    )
                    (C {(echo)} {(${ Id.VSub_Name NDEBUG)} {(DQ ('metadata files... '))})
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(lam)}
                            {(-s)}
                            {(DQ (${ Id.VSub_Name FETCHDIR) (/m/))}
                            {(-)}
                            {(-s)}
                            {(DQ (.gz))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:9050)
                              fd: -1
                              arg_word: {(filelist)}
                            )
                          ]
                        )
                        (command.Simple
                          words: [
                            {(xargs)}
                            {(${ Id.VSub_Name XARGST)}
                            {(${ Id.VSub_Name PHTTPGET)}
                            {(${ Id.VSub_Name SERVERNAME)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'2>' span_id:9073)
                              fd: 2
                              arg_word: {(${ Id.VSub_Name QUIETREDIR)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:9080)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(Y)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:9085)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(${ Id.VSub_Name Y) (.gz)} {(Id.Lit_RBracket ']')}
                                            )
                                          ]
                                          negated: T
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:9104)
                                    )
                                  ]
                                  action: [
                                    (C {(echo)} {(DQ (failed.))})
                                    (command.ControlFlow
                                      token: (Token id:Id.ControlFlow_Return val:return span_id:9116)
                                      arg_word: {(1)}
                                    )
                                  ]
                                  spids: [9090 9106]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} 
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_Backtick
                                                  val: '`'
                                                  span_id: 9128
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (command.Pipeline
                                                      children: [
                                                        (command.Simple
                                                          words: [{(gunzip)} {(-c)}]
                                                          redirects: [
                                                            (redir.Redir
                                                              op: 
                                                                (Token
                                                                  id: Id.Redir_Less
                                                                  val: '<'
                                                                  span_id: 9136
                                                                )
                                                              fd: -1
                                                              arg_word: {(${ Id.VSub_Name Y) (.gz)}
                                                            )
                                                          ]
                                                        )
                                                        (C {(${ Id.VSub_Name SHA256)} {(-q)})
                                                      ]
                                                      negated: F
                                                    )
                                                  ]
                                                )
                                            )
                                          } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:9160)
                                    )
                                  ]
                                  action: [
                                    (C {(mv)} {(${ Id.VSub_Name Y) (.gz)} 
                                      {(files/) (${ Id.VSub_Name Y) (.gz)}
                                    )
                                  ]
                                  spids: [9124 9162]
                                )
                              ]
                              else_action: [
                                (C {(echo)} {(DQ ('metadata is corrupt.'))})
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:9189)
                                  arg_word: {(1)}
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:9199)
                          fd: -1
                          arg_word: {(filelist)}
                        )
                      ]
                    )
                    (C {(echo)} {(DQ (done.))})
                  ]
                  spids: [8975 8986]
                )
              ]
            )
            (command.Simple
              words: [
                {(cut)}
                {(-f)}
                {(2)}
                {(-d)}
                {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9227))}
                {(tINDEX.new)}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:9232)
                  fd: -1
                  arg_word: {(filelist)}
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:9237)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(X)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:9242)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(fetch_metadata_sanity)} {(${ Id.VSub_Name X)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:9255)
                          arg_word: {(1)}
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:9262)
                  fd: -1
                  arg_word: {(filelist)}
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9280))} 
                  {(tINDEX.present)}
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:9290)
                      fd: -1
                      arg_word: {(oldfiles)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9304))} 
                  {(tINDEX.new)}
                )
                (C {(sort)})
                (C {(comm)} {(-13)} {(-)} {(oldfiles)})
                (C {(lam)} {(-s)} {(DQ (files/))} {(-)} {(-s)} {(DQ (.gz))})
                (C {(xargs)} {(rm)} {(-f)})
              ]
              negated: F
            )
            (C {(rm)} {(patchlist)} {(filelist)} {(oldfiles)})
            (C {(rm)} {(${ Id.VSub_Name TINDEXHASH)})
            (C {(mv)} {(tINDEX.new)} {(tINDEX.present)})
            (C {(mv)} {(tag.new)} {(tag)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:9389)
              arg_word: {(0)}
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_filter_metadata_components
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:METAHASH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:9411)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(look)} {(DQ ($ Id.VSub_Number '$1') ('|'))} {(tINDEX.present)})
                                  (C {(cut)} {(-f)} {(2)} {(-d)} 
                                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9434))}
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [9410]
                )
              ]
            )
            (command.Simple
              words: [{(gunzip)} {(-c)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:9443)
                  fd: -1
                  arg_word: {(files/) (${ Id.VSub_Name METAHASH) (.gz)}
                )
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:9451)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$1') (.all)}
                )
              ]
            )
            (command.ForEach
              iter_name: C
              iter_words: [{(${ Id.VSub_Name COMPONENTS)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(look)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:9479)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (C {(echo)} {(${ Id.VSub_Name C)})
                                      (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:/ span_id:9493))} 
                                        {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9497))}
                                      )
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          ) ('|')
                        )
                      } {($ Id.VSub_Number '$1') (.all)}
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:9509)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$1')}
                )
              ]
            )
            (C {(rm)} {($ Id.VSub_Number '$1') (.all)})
          ]
        )
    )
    (command.ShFunction
      name: fetch_filter_metadata
      body: 
        (command.BraceGroup
          children: [
            (C {(fetch_filter_metadata_components)} {($ Id.VSub_Number '$1')})
            (command.Pipeline
              children: [
                (C {(cut)} {(-f)} {(3-)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9582))} 
                  {($ Id.VSub_Number '$1')}
                )
                (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s,/|d|,|d|,' span_id:9595))})
                (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s,/|-|,|-|,' span_id:9606))})
                (command.Simple
                  words: [{(sort)} {(-u)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:9616)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (command.ForEach
                  iter_name: X
                  iter_words: [{(${ Id.VSub_Name IGNOREPATHS)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} 
                          {($ Id.VSub_Number '$1') (.tmp)}
                        )
                      ]
                    )
                )
                (C {(sort)} {(-u)})
                (command.Simple
                  words: [{(comm)} {(-13)} {(-)} {($ Id.VSub_Number '$1') (.tmp)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:9677)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1')}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(rm)} {($ Id.VSub_Number '$1') (.tmp)})
          ]
        )
    )
    (command.ShFunction
      name: fetch_filter_kernel_names
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(grep)} {(Id.Lit_Other '^') (/boot/) ($ Id.VSub_Number '$2')} 
                  {($ Id.VSub_Number '$1')}
                )
                (C {(sed)} {(-e)} 
                  {(DQ ('s,/boot/') ($ Id.VSub_Number '$2') (',') (${ Id.VSub_Name KERNELDIR) (',g'))}
                )
                (command.Simple
                  words: [{(sort)} {(-)} {($ Id.VSub_Number '$1')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:9755)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-d)} {(/boot/) ($ Id.VSub_Number '$2')} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:9782)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [
                        {(grep)}
                        {(-v)}
                        {(Id.Lit_Other '^') (/boot/) ($ Id.VSub_Number '$2')}
                        {($ Id.VSub_Number '$1')}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:9797)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$1') (.tmp)}
                        )
                      ]
                    )
                    (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')})
                  ]
                  spids: [9770 9784]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_inspect_system
      body: 
        (command.BraceGroup
          children: [
            (C {(rm)} {(-f)} {(.err)})
            (C {(echo)} {(-n)} {(DQ ('Inspecting system... '))})
            (command.Pipeline
              children: [
                (C {(cat)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$3')})
                (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9878))})
                (command.Simple
                  words: [{(sort)} {(-u)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:9888)
                      fd: -1
                      arg_word: {(filelist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:9906)
                  cond: [
                    (command.Sentence
                      child: (C {(read)} {(F)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:9911)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (command.Pipeline
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(-e)} 
                                          {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                        )
                                      ]
                                      negated: T
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:9937)
                                )
                              ]
                              action: [
                                (C {(echo)} {(DQ (${ Id.VSub_Name F) ('|-||||||'))})
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Continue val:continue span_id:9952)
                                )
                              ]
                              spids: [9920 9939]
                            )
                          ]
                        )
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (command.Pipeline
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(-r)} 
                                          {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                        )
                                      ]
                                      negated: T
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:9975)
                                )
                              ]
                              action: [
                                (command.Simple
                                  words: [
                                    {(echo)}
                                    {
                                      (DQ ('Cannot read file: ') (${ Id.VSub_Name BASEDIR) (/) 
                                        (${ Id.VSub_Name F)
                                      )
                                    }
                                  ]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Great val:'>' span_id:9995)
                                      fd: -1
                                      arg_word: {(/dev/stderr)}
                                    )
                                  ]
                                )
                                (C {(touch)} {(.err)})
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:10004)
                                  arg_word: {(1)}
                                )
                              ]
                              spids: [9958 9977]
                            )
                          ]
                        )
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (C {(Id.Lit_LBracket '[')} {(-L)} 
                                      {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:10032)
                                )
                              ]
                              action: [
                                (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name F) ('|L|'))})
                                (command.Sentence
                                  child: 
                                    (C {(stat)} {(-n)} {(-f)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: '%d-%i|%u|%g|%Mp%Lp|%Of|'
                                            span_id: 10056
                                          )
                                        )
                                      } {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:10066)
                                )
                                (command.Sentence
                                  child: 
                                    (C {(readlink)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)})
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:10078)
                                )
                              ]
                              spids: [10017 10034]
                            )
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (C {(Id.Lit_LBracket '[')} {(-f)} 
                                      {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:10096)
                                )
                              ]
                              action: [
                                (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name F) ('|f|'))})
                                (command.Sentence
                                  child: 
                                    (C {(stat)} {(-n)} {(-f)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: '%d-%i|%u|%g|%Mp%Lp|%Of|'
                                            span_id: 10120
                                          )
                                        )
                                      } {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:10130)
                                )
                                (command.Sentence
                                  child: 
                                    (C {(sha256)} {(-q)} 
                                      {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:10144)
                                )
                              ]
                              spids: [10081 10098]
                            )
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (C {(Id.Lit_LBracket '[')} {(-d)} 
                                      {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:10162)
                                )
                              ]
                              action: [
                                (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name F) ('|d|'))})
                                (command.Sentence
                                  child: 
                                    (C {(stat)} {(-f)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: '%d-%i|%u|%g|%Mp%Lp|%Of|'
                                            span_id: 10184
                                          )
                                        )
                                      } {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)}
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:10194)
                                )
                              ]
                              spids: [10147 10164]
                            )
                          ]
                          else_action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {
                                  (DQ ('Unknown file type: ') (${ Id.VSub_Name BASEDIR) (/) 
                                    (${ Id.VSub_Name F)
                                  )
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:10215)
                                  fd: -1
                                  arg_word: {(/dev/stderr)}
                                )
                              ]
                            )
                            (C {(touch)} {(.err)})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:10224)
                              arg_word: {(1)}
                            )
                          ]
                        )
                      ]
                    )
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:10234)
                      fd: -1
                      arg_word: {(filelist)}
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(sort)}
                    {(-k)}
                    {(3) (Id.Lit_Comma ',') (3)}
                    {(-t)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10252))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:10255)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$2') (.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(rm)} {(filelist)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(Id.Lit_LBracket '[')} {(-f)} {(.err)} {(Id.Lit_RBracket ']')})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:10280)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:10285)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [10271 10282]
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (3)} {(-d)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10317))} {($ Id.VSub_Number '$2') (.tmp)}
                )
                (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10337))}
                )
                (C {(sort)} {(-s)} {(-u)} {(-k)} {(2) (Id.Lit_Comma ',') (2)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10358))}
                )
                (C {(join)} {(-1)} {(2)} {(-2)} {(3)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10377))} {(-)} {($ Id.VSub_Number '$2') (.tmp)}
                )
                (C {(awk)} {(-F)} 
                  {
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\|' span_id:10392)
                    )
                  } {(-v)} 
                  {(Id.Lit_VarLike 'OFS=') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\|' span_id:10397)
                    )
                  } 
                  {
                    (SQ (Token id:Id.Lit_Chars val:'{\n' span_id:10402) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\t\t    if (($2 == $3) || ($4 == "-"))\n'
                        span_id: 10403
                      ) (Token id:Id.Lit_Chars val:'\t\t\tprint $3,$4,$5,$6,$7,$8,$9,""\n' span_id:10404) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\t\t    else\n'
                        span_id: 10405
                      ) (Token id:Id.Lit_Chars val:'\t\t\tprint $3,$4,$5,$6,$7,$8,$9,$2\n' span_id:10406) 
                      (Token id:Id.Lit_Chars val:'\t\t}' span_id:10407)
                    )
                  }
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:10415)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$2')}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(rm)} {($ Id.VSub_Number '$2') (.tmp)})
            (C {(echo)} {(DQ (done.))})
          ]
        )
    )
    (command.ShFunction
      name: fetch_filter_mergechanges
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: F
              iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Pipeline
                      children: [
                        (command.ForEach
                          iter_name: X
                          iter_words: [{(${ Id.VSub_Name MERGECHANGES)}]
                          do_arg_iter: F
                          body: 
                            (command.DoGroup
                              children: [
                                (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {(${ Id.VSub_Name F)})
                              ]
                            )
                        )
                        (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} 
                          {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10520))}
                        )
                        (command.Simple
                          words: [{(sort)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:10528)
                              fd: -1
                              arg_word: {(${ Id.VSub_Name F) (-values)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                )
            )
            (command.Pipeline
              children: [
                (C {(comm)} {(-13)} {($ Id.VSub_Number '$1') (-values)} 
                  {($ Id.VSub_Number '$2') (-values)}
                )
                (C {(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|f|' span_id:10564))})
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10579))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:10582)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$2') (-paths)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:10609)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(X)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:10614)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.Pipeline
                      children: [
                        (C {(look)} {(DQ (${ Id.VSub_Name X) ('|'))} {($ Id.VSub_Number '$1') (-values)})
                        (C {(head)} {(-1)})
                      ]
                      negated: F
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:10641)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$2') (-paths)}
                )
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:10646)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$3')}
                )
              ]
            )
            (C {(rm)} {($ Id.VSub_Number '$1') (-values)} {($ Id.VSub_Number '$2') (-values)} 
              {($ Id.VSub_Number '$2') (-paths)}
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_filter_unmodified_notpresent
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.ForEach
                  iter_name: X
                  iter_words: [{(${ Id.VSub_Name UPDATEIFUNMODIFIED)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {($ Id.VSub_Number '$1')})
                        (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {($ Id.VSub_Number '$3')})
                      ]
                    )
                )
                (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10773))}
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:10781)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (-values)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (command.ForEach
                  iter_name: X
                  iter_words: [{(${ Id.VSub_Name UPDATEIFUNMODIFIED)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {($ Id.VSub_Number '$2')})
                      ]
                    )
                )
                (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10838))}
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:10846)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$2') (-values)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(comm)} {(-13)} {($ Id.VSub_Number '$1') (-values)} 
                  {($ Id.VSub_Number '$2') (-values)}
                )
                (command.Simple
                  words: [
                    {(sort)}
                    {(-t)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10883))}
                    {(-k)}
                    {(1) (Id.Lit_Comma ',') (1)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:10892)
                      fd: -1
                      arg_word: {(mlines.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10906))} 
                  {($ Id.VSub_Number '$4')}
                )
                (C {(sort)})
                (C {(join)} {(-v)} {(2)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10928))} {(-)} 
                  {(mlines.tmp)}
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:10940)
                      fd: -1
                      arg_word: {(mlines)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(rm)} {($ Id.VSub_Number '$1') (-values)} {($ Id.VSub_Number '$2') (-values)} 
              {(mlines.tmp)}
            )
            (command.Pipeline
              children: [
                (C {(comm)} {(-13)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')})
                (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10989))}
                )
                (command.Simple
                  words: [{(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|-|' span_id:10998))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_DGreat val:'>>' span_id:11001)
                      fd: -1
                      arg_word: {(mlines)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.ForEach
              iter_name: X
              iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$3')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Simple
                      words: [
                        {(sort)}
                        {(-t)}
                        {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11032))}
                        {(-k)}
                        {(1) (Id.Lit_Comma ',') (1)}
                        {(${ Id.VSub_Name X)}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:11045)
                          fd: -1
                          arg_word: {(${ Id.VSub_Name X) (.tmp)}
                        )
                      ]
                    )
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(cut)}
                            {(-f)}
                            {(1)}
                            {(-d)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11062))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:11065)
                              fd: -1
                              arg_word: {(mlines)}
                            )
                          ]
                        )
                        (C {(sort)})
                        (C {(join)} {(-v)} {(2)} {(-t)} 
                          {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11086))} {(-)} {(${ Id.VSub_Name X) (.tmp)}
                        )
                        (command.Simple
                          words: [{(sort)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:11101)
                              fd: -1
                              arg_word: {(${ Id.VSub_Name X)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (C {(rm)} {(${ Id.VSub_Name X) (.tmp)})
                  ]
                )
            )
            (command.Pipeline
              children: [
                (C {(fgrep)} {(-v)} {(SQ (Token id:Id.Lit_Chars val:'|-|' span_id:11129))} {(mlines)})
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11146))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:11149)
                      fd: -1
                      arg_word: {(modifiedfiles)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(rm)} {(mlines)})
          ]
        )
    )
    (command.ShFunction
      name: fetch_filter_allowadd
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  words: [
                    {(cut)}
                    {(-f)}
                    {(1) (Id.Lit_Comma ',') (2)}
                    {(-d)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11189))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:11192)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1')}
                    )
                  ]
                )
                (C {(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|-' span_id:11202))})
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11217))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:11220)
                      fd: -1
                      arg_word: {(filesnotpresent)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name ALLOWADD)} 
                          {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (yes))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:11242)
                    )
                  ]
                  action: [
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [{(sort)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:11249)
                              fd: -1
                              arg_word: {($ Id.VSub_Number '$2')}
                            )
                          ]
                        )
                        (C {(join)} {(-v)} {(1)} {(-t)} 
                          {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11265))} {(-)} {(filesnotpresent)}
                        )
                        (command.Simple
                          words: [{(sort)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:11277)
                              fd: -1
                              arg_word: {($ Id.VSub_Number '$2') (.tmp)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (C {(mv)} {($ Id.VSub_Number '$2') (.tmp)} {($ Id.VSub_Number '$2')})
                  ]
                  spids: [11226 11244]
                )
              ]
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:11297)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1')}
                    )
                  ]
                )
                (C {(join)} {(-v)} {(1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11313))} {(-)} 
                  {(filesnotpresent)}
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:11325)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')})
            (C {(rm)} {(filesnotpresent)})
          ]
        )
    )
    (command.ShFunction
      name: fetch_filter_allowdelete
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: X
              iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(cut)}
                            {(-f)}
                            {(1-2)}
                            {(-d)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11387))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:11390)
                              fd: -1
                              arg_word: {(${ Id.VSub_Name X)}
                            )
                          ]
                        )
                        (command.Simple
                          words: [{(sort)} {(-u)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:11403)
                              fd: -1
                              arg_word: {(${ Id.VSub_Name X) (.nodes)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name ALLOWDELETE)} 
                          {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (yes))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:11435)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [
                        {(comm)}
                        {(-23)}
                        {($ Id.VSub_Number '$1') (.nodes)}
                        {($ Id.VSub_Number '$2') (.nodes)}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:11450)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$1') (.badnodes)}
                        )
                      ]
                    )
                  ]
                  spids: [11419 11437]
                )
              ]
              else_action: [
                (command.Simple
                  words: [{(Id.Lit_Other ':')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:11461)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (.badnodes)}
                    )
                  ]
                )
              ]
            )
            (command.Pipeline
              children: [
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:11475)
                  cond: [
                    (command.Sentence
                      child: (C {(read)} {(X)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:11480)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(look)} {(DQ (${ Id.VSub_Name X) ('|'))} {($ Id.VSub_Number '$1')})
                      ]
                    )
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:11499)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (.badnodes)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(comm)} {(-13)} {(-)} {($ Id.VSub_Number '$1')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:11515)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')})
            (C {(rm)} {($ Id.VSub_Number '$1') (.badnodes)} {($ Id.VSub_Number '$1') (.nodes)} 
              {($ Id.VSub_Number '$2') (.nodes)}
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_filter_modified_metadata
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: X
              iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Simple
                      words: [
                        {(cut)}
                        {(-f)}
                        {(1-6)}
                        {(-d)}
                        {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11588))}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:11591)
                          fd: -1
                          arg_word: {(${ Id.VSub_Name X)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:11597)
                          fd: -1
                          arg_word: {(${ Id.VSub_Name X) (.metadata)}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KEEPMODIFIEDMETADATA)} 
                          {(Id.Lit_Equals '=')} {(DQ (yes))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:11628)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [
                        {(comm)}
                        {(-13)}
                        {($ Id.VSub_Number '$1') (.metadata)}
                        {($ Id.VSub_Number '$2') (.metadata)}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:11643)
                          fd: -1
                          arg_word: {(keepmeta)}
                        )
                      ]
                    )
                  ]
                  spids: [11613 11630]
                )
              ]
              else_action: [
                (command.Simple
                  words: [{(Id.Lit_Other ':')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:11653)
                      fd: -1
                      arg_word: {(keepmeta)}
                    )
                  ]
                )
              ]
            )
            (command.Simple
              words: [{(Id.Lit_Other ':')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:11672)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$3') (.remove)}
                )
              ]
            )
            (command.Simple
              words: [{(Id.Lit_Other ':')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:11680)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$3') (.add)}
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:11686)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(LINE)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:11691)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:NODE)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:11697)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {(DQ (${ Id.VSub_Name LINE))})
                                          (C {(cut)} {(-f)} {(1-2)} {(-d)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11719))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [11696]
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(look)} {(DQ (${ Id.VSub_Name NODE) ('|'))} {($ Id.VSub_Number '$3')}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_DGreat val:'>>' span_id:11735)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$3') (.remove)}
                        )
                      ]
                    )
                    (command.Pipeline
                      children: [
                        (C {(look)} {(DQ (${ Id.VSub_Name NODE) ('|'))} {($ Id.VSub_Number '$3')})
                        (C {(cut)} {(-f)} {(7-)} {(-d)} 
                          {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11764))}
                        )
                        (command.Simple
                          words: [{(lam)} {(-s)} {(DQ (${ Id.VSub_Name LINE) ('|'))} {(-)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_DGreat val:'>>' span_id:11783)
                              fd: -1
                              arg_word: {($ Id.VSub_Number '$3') (.add)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:11791)
                  fd: -1
                  arg_word: {(keepmeta)}
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(sort)} {($ Id.VSub_Number '$3') (.remove)})
                (C {(comm)} {(-13)} {(-)} {($ Id.VSub_Number '$3')})
                (command.Simple
                  words: [{(sort)} {(-u)} {(-)} {($ Id.VSub_Number '$3') (.add)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:11829)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$3') (.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(mv)} {($ Id.VSub_Number '$3') (.tmp)} {($ Id.VSub_Number '$3')})
            (C {(rm)} {(keepmeta)} {($ Id.VSub_Number '$1') (.metadata)} 
              {($ Id.VSub_Number '$2') (.metadata)} {($ Id.VSub_Number '$3') (.add)} {($ Id.VSub_Number '$3') (.remove)}
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_filter_uptodate
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(comm)} {(-23)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:11885)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$1') (.tmp)}
                )
              ]
            )
            (command.Simple
              words: [{(comm)} {(-13)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:11899)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$2') (.tmp)}
                )
              ]
            )
            (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')})
            (C {(mv)} {($ Id.VSub_Number '$2') (.tmp)} {($ Id.VSub_Number '$2')})
          ]
        )
    )
    (command.ShFunction
      name: fetch_files_premerge
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-s)} {($ Id.VSub_Number '$1')} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:11948)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {(DQ ('Fetching files from ') (${ Id.VSub_Name OLDRELNUM) (' for merging... '))}
                    )
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [{(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|f|' span_id:11978))}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:11981)
                              fd: -1
                              arg_word: {($ Id.VSub_Number '$1')}
                            )
                          ]
                        )
                        (C {(cut)} {(-f)} {(3)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11997))})
                        (command.Simple
                          words: [{(sort)} {(-u)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:12007)
                              fd: -1
                              arg_word: {(files.wanted)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:12017)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(Y)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:12022)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} 
                                          {(DQ (files/) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:12044)
                                    )
                                  ]
                                  action: [
                                    (command.Sentence
                                      child: (C {(echo)} {(${ Id.VSub_Name Y)})
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:12054)
                                    )
                                  ]
                                  spids: [12027 12046]
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:12062)
                          fd: -1
                          arg_word: {(files.wanted)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:12066)
                          fd: -1
                          arg_word: {(filelist)}
                        )
                      ]
                    )
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(lam)}
                            {(-s)}
                            {(DQ (${ Id.VSub_Name OLDFETCHDIR) (/f/))}
                            {(-)}
                            {(-s)}
                            {(DQ (.gz))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:12095)
                              fd: -1
                              arg_word: {(filelist)}
                            )
                          ]
                        )
                        (command.Simple
                          words: [
                            {(xargs)}
                            {(${ Id.VSub_Name XARGST)}
                            {(${ Id.VSub_Name PHTTPGET)}
                            {(${ Id.VSub_Name SERVERNAME)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'2>' span_id:12118)
                              fd: 2
                              arg_word: {(${ Id.VSub_Name QUIETREDIR)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:12129)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(Y)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:12134)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(${ Id.VSub_Name Y) (.gz)} {(Id.Lit_RBracket ']')}
                                            )
                                          ]
                                          negated: T
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:12153)
                                    )
                                  ]
                                  action: [
                                    (C {(echo)} {(DQ (failed.))})
                                    (command.ControlFlow
                                      token: 
                                        (Token
                                          id: Id.ControlFlow_Return
                                          val: return
                                          span_id: 12165
                                        )
                                      arg_word: {(1)}
                                    )
                                  ]
                                  spids: [12139 12155]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} 
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_Backtick
                                                  val: '`'
                                                  span_id: 12177
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (command.Pipeline
                                                      children: [
                                                        (command.Simple
                                                          words: [{(gunzip)} {(-c)}]
                                                          redirects: [
                                                            (redir.Redir
                                                              op: 
                                                                (Token
                                                                  id: Id.Redir_Less
                                                                  val: '<'
                                                                  span_id: 12185
                                                                )
                                                              fd: -1
                                                              arg_word: {(${ Id.VSub_Name Y) (.gz)}
                                                            )
                                                          ]
                                                        )
                                                        (C {(${ Id.VSub_Name SHA256)} {(-q)})
                                                      ]
                                                      negated: F
                                                    )
                                                  ]
                                                )
                                            )
                                          } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:12209)
                                    )
                                  ]
                                  action: [
                                    (C {(mv)} {(${ Id.VSub_Name Y) (.gz)} 
                                      {(files/) (${ Id.VSub_Name Y) (.gz)}
                                    )
                                  ]
                                  spids: [12173 12211]
                                )
                              ]
                              else_action: [
                                (C {(echo)} {(DQ (${ Id.VSub_Name Y) (' has incorrect hash.'))})
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:12241)
                                  arg_word: {(1)}
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:12251)
                          fd: -1
                          arg_word: {(filelist)}
                        )
                      ]
                    )
                    (C {(echo)} {(DQ (done.))})
                    (C {(rm)} {(filelist)} {(files.wanted)})
                  ]
                  spids: [11939 11950]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_files_prepare
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} {(-n)} {(DQ ('Preparing to download files... '))})
            (command.ForEach
              iter_name: X
              iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$3')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(cut)}
                            {(-f)}
                            {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)}
                            {(-d)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12344))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:12347)
                              fd: -1
                              arg_word: {(${ Id.VSub_Name X)}
                            )
                          ]
                        )
                        (C {(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|f|' span_id:12359))})
                        (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (3)} {(-d)} 
                          {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12376))}
                        )
                        (command.Simple
                          words: [{(sort)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:12384)
                              fd: -1
                              arg_word: {(${ Id.VSub_Name X) (.hashes)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                )
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12409))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:12412)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$3') (.hashes)}
                    )
                  ]
                )
                (C {(sort)} {(-u)})
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:12427)
                  cond: [
                    (command.Sentence
                      child: (C {(read)} {(HASH)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:12432)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (command.Pipeline
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(-f)} 
                                          {(files/) (${ Id.VSub_Name HASH) (.gz)} {(Id.Lit_RBracket ']')}
                                        )
                                      ]
                                      negated: T
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:12452)
                                )
                              ]
                              action: [(C {(echo)} {(${ Id.VSub_Name HASH)})]
                              spids: [12437 12454]
                            )
                          ]
                        )
                      ]
                    )
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:12469)
                      fd: -1
                      arg_word: {(files.wanted)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(comm)} {(-12)} {($ Id.VSub_Number '$1') (.hashes)} 
                  {($ Id.VSub_Number '$2') (.hashes)}
                )
                (command.Simple
                  words: [
                    {(sort)}
                    {(-k)}
                    {(1) (Id.Lit_Comma ',') (1)}
                    {(-t)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12503))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:12506)
                      fd: -1
                      arg_word: {(unmodified.files)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:12524)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(LINE)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:12529)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:F)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:12535)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {(DQ (${ Id.VSub_Name LINE))})
                                          (C {(cut)} {(-f)} {(1)} {(-d)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12557))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [12534]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:HASH)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:12563)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {(DQ (${ Id.VSub_Name LINE))})
                                          (C {(cut)} {(-f)} {(2)} {(-d)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12585))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [12562]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(-f)} 
                                  {(files/) (${ Id.VSub_Name HASH) (.gz)} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:12608)
                            )
                          ]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Continue val:continue span_id:12613)
                            )
                          ]
                          spids: [12595 12610]
                        )
                      ]
                    )
                    (C {(cp)} {(DQ (${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F))} {(tmpfile)})
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} 
                                  {
                                    (command_sub
                                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:12643)
                                      command_list: 
                                        (command.CommandList
                                          children: [(C {(sha256)} {(-q)} {(tmpfile)})]
                                        )
                                    )
                                  } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(${ Id.VSub_Name HASH)} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:12661)
                            )
                          ]
                          action: [
                            (C {(echo)})
                            (C {(echo)} 
                              {
                                (DQ ('File changed while FreeBSD Update running: ') 
                                  (${ Id.VSub_Name F)
                                )
                              }
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:12679)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [12639 12663]
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(gzip)} {(-c)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:12696)
                          fd: -1
                          arg_word: {(tmpfile)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:12700)
                          fd: -1
                          arg_word: {(files/) (${ Id.VSub_Name HASH) (.gz)}
                        )
                      ]
                    )
                    (C {(rm)} {(tmpfile)})
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:12716)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$2') (.hashes)}
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12738))} {($ Id.VSub_Number '$3') (.hashes)}
                )
                (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12752))} {(-o)} 
                  {(2.2) (Id.Lit_Comma ',') (1.2)} {(-)} {(unmodified.files)}
                )
                (command.Simple
                  words: [{(fetch_make_patchlist)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:12770)
                      fd: -1
                      arg_word: {(patchlist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(rm)} {(unmodified.files)} {($ Id.VSub_Number '$1') (.hashes)} 
              {($ Id.VSub_Number '$2') (.hashes)} {($ Id.VSub_Number '$3') (.hashes)}
            )
            (C {(rm)} {($ Id.VSub_Number '$1')})
            (C {(echo)} {(DQ (done.))})
          ]
        )
    )
    (command.ShFunction
      name: fetch_files
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(Id.Lit_LBracket '[')} {(-s)} {(patchlist)} {(Id.Lit_RBracket ']')})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:12842)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Fetching ') 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:12853)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (command.Simple
                                        words: [{(wc)} {(-l)}]
                                        redirects: [
                                          (redir.Redir
                                            op: (Token id:Id.Redir_Less val:'<' span_id:12860)
                                            fd: -1
                                            arg_word: {(patchlist)}
                                          )
                                        ]
                                      )
                                      (C {(tr)} {(-d)} 
                                        {(SQ (Token id:Id.Lit_Chars val:' ' span_id:12871))}
                                      )
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          ) (' ')
                        )
                      }
                    )
                    (C {(echo)} {(${ Id.VSub_Name NDEBUG)} {(DQ (patches.) (${ Id.VSub_Name DDSTATS))})
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(tr)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12895))}
                            {(SQ (Token id:Id.Lit_Chars val:- span_id:12899))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:12902)
                              fd: -1
                              arg_word: {(patchlist)}
                            )
                          ]
                        )
                        (C {(lam)} {(-s)} {(DQ (${ Id.VSub_Name PATCHDIR) (/))} {(-)})
                        (command.Simple
                          words: [
                            {(xargs)}
                            {(${ Id.VSub_Name XARGST)}
                            {(${ Id.VSub_Name PHTTPGET)}
                            {(${ Id.VSub_Name SERVERNAME)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'2>' span_id:12941)
                              fd: 2
                              arg_word: {(${ Id.VSub_Name STATSREDIR)}
                            )
                          ]
                        )
                        (C {(fetch_progress)})
                      ]
                      negated: F
                    )
                    (C {(echo)} {(DQ (done.))})
                    (C {(echo)} {(-n)} {(DQ ('Applying patches... '))})
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(tr)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12975))}
                            {(SQ (Token id:Id.Lit_Chars val:' ' span_id:12979))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:12982)
                              fd: -1
                              arg_word: {(patchlist)}
                            )
                          ]
                        )
                        (command.WhileUntil
                          keyword: (Token id:Id.KW_While val:while span_id:12989)
                          cond: [
                            (command.Sentence
                              child: (C {(read)} {(X)} {(Y)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:12996)
                            )
                          ]
                          body: 
                            (command.DoGroup
                              children: [
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} 
                                              {(DQ (${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y))} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:13020)
                                        )
                                      ]
                                      action: [
                                        (command.Sentence
                                          child: 
                                            (command.ControlFlow
                                              token: 
                                                (Token
                                                  id: Id.ControlFlow_Continue
                                                  val: continue
                                                  span_id: 13024
                                                )
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:13025)
                                        )
                                      ]
                                      spids: [13001 13022]
                                    )
                                  ]
                                )
                                (command.Simple
                                  words: [{(gunzip)} {(-c)}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Less val:'<' span_id:13034)
                                      fd: -1
                                      arg_word: {(files/) (${ Id.VSub_Name X) (.gz)}
                                    )
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Great val:'>' span_id:13042)
                                      fd: -1
                                      arg_word: {(OLD)}
                                    )
                                  ]
                                )
                                (C {(bspatch)} {(OLD)} {(NEW)} 
                                  {(${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y)}
                                )
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} 
                                              {
                                                (command_sub
                                                  left_token: 
                                                    (Token
                                                      id: Id.Left_Backtick
                                                      val: '`'
                                                      span_id: 13068
                                                    )
                                                  command_list: 
                                                    (command.CommandList
                                                      children: [
                                                        (C {(${ Id.VSub_Name SHA256)} {(-q)} {(NEW)})
                                                      ]
                                                    )
                                                )
                                              } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:13087)
                                        )
                                      ]
                                      action: [
                                        (C {(mv)} {(NEW)} {(files/) (${ Id.VSub_Name Y)})
                                        (C {(gzip)} {(-n)} {(files/) (${ Id.VSub_Name Y)})
                                      ]
                                      spids: [13064 13089]
                                    )
                                  ]
                                )
                                (C {(rm)} {(-f)} {(diff)} {(OLD)} {(NEW)} 
                                  {(${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y)}
                                )
                              ]
                            )
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'2>' span_id:13136)
                              fd: 2
                              arg_word: {(${ Id.VSub_Name QUIETREDIR)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (C {(echo)} {(DQ (done.))})
                  ]
                  spids: [12833 12844]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:13157)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(Y)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:13162)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} 
                                  {(DQ (files/) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:13184)
                            )
                          ]
                          action: [
                            (command.Sentence
                              child: (C {(echo)} {(${ Id.VSub_Name Y)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:13194)
                            )
                          ]
                          spids: [13167 13186]
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:13202)
                  fd: -1
                  arg_word: {(files.wanted)}
                )
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:13206)
                  fd: -1
                  arg_word: {(filelist)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(Id.Lit_LBracket '[')} {(-s)} {(filelist)} {(Id.Lit_RBracket ']')})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:13221)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ ('Fetching ') 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:13232)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (command.Simple
                                        words: [{(wc)} {(-l)}]
                                        redirects: [
                                          (redir.Redir
                                            op: (Token id:Id.Redir_Less val:'<' span_id:13239)
                                            fd: -1
                                            arg_word: {(filelist)}
                                          )
                                        ]
                                      )
                                      (C {(tr)} {(-d)} 
                                        {(SQ (Token id:Id.Lit_Chars val:' ' span_id:13250))}
                                      )
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          ) (' ')
                        )
                      }
                    )
                    (C {(echo)} {(${ Id.VSub_Name NDEBUG)} {(DQ ('files... '))})
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(lam)}
                            {(-s)}
                            {(DQ (${ Id.VSub_Name FETCHDIR) (/f/))}
                            {(-)}
                            {(-s)}
                            {(DQ (.gz))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:13287)
                              fd: -1
                              arg_word: {(filelist)}
                            )
                          ]
                        )
                        (command.Simple
                          words: [
                            {(xargs)}
                            {(${ Id.VSub_Name XARGST)}
                            {(${ Id.VSub_Name PHTTPGET)}
                            {(${ Id.VSub_Name SERVERNAME)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'2>' span_id:13310)
                              fd: 2
                              arg_word: {(${ Id.VSub_Name QUIETREDIR)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:13317)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(Y)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:13322)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(${ Id.VSub_Name Y) (.gz)} {(Id.Lit_RBracket ']')}
                                            )
                                          ]
                                          negated: T
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:13341)
                                    )
                                  ]
                                  action: [
                                    (C {(echo)} {(DQ (failed.))})
                                    (command.ControlFlow
                                      token: 
                                        (Token
                                          id: Id.ControlFlow_Return
                                          val: return
                                          span_id: 13353
                                        )
                                      arg_word: {(1)}
                                    )
                                  ]
                                  spids: [13327 13343]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} 
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_Backtick
                                                  val: '`'
                                                  span_id: 13365
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (command.Pipeline
                                                      children: [
                                                        (command.Simple
                                                          words: [{(gunzip)} {(-c)}]
                                                          redirects: [
                                                            (redir.Redir
                                                              op: 
                                                                (Token
                                                                  id: Id.Redir_Less
                                                                  val: '<'
                                                                  span_id: 13373
                                                                )
                                                              fd: -1
                                                              arg_word: {(${ Id.VSub_Name Y) (.gz)}
                                                            )
                                                          ]
                                                        )
                                                        (C {(${ Id.VSub_Name SHA256)} {(-q)})
                                                      ]
                                                      negated: F
                                                    )
                                                  ]
                                                )
                                            )
                                          } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:13397)
                                    )
                                  ]
                                  action: [
                                    (C {(mv)} {(${ Id.VSub_Name Y) (.gz)} 
                                      {(files/) (${ Id.VSub_Name Y) (.gz)}
                                    )
                                  ]
                                  spids: [13361 13399]
                                )
                              ]
                              else_action: [
                                (C {(echo)} {(DQ (${ Id.VSub_Name Y) (' has incorrect hash.'))})
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:13429)
                                  arg_word: {(1)}
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:13439)
                          fd: -1
                          arg_word: {(filelist)}
                        )
                      ]
                    )
                    (C {(echo)} {(DQ (done.))})
                  ]
                  spids: [13212 13223]
                )
              ]
            )
            (C {(rm)} {(files.wanted)} {(filelist)} {(patchlist)})
          ]
        )
    )
    (command.ShFunction
      name: fetch_create_manifest
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-L)} {(DQ (${ Id.VSub_Name BDHASH) (-install))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:13502)
                    )
                  ]
                  action: [
                    (C {(rm)} {(-r)} {(${ Id.VSub_Name BDHASH) (-install/)})
                    (C {(rm)} {(${ Id.VSub_Name BDHASH) (-install)})
                  ]
                  spids: [13488 13504]
                )
              ]
            )
            (command.Pipeline
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {(Id.Lit_LBracket '[')} {(-s)} {(modifiedfiles)} {(Id.Lit_RBracket ']')})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:13542)
                        )
                      ]
                      action: [
                        (C {(echo)})
                        (C {(echo)} {(-n)} {(DQ ('The following files are affected by updates, '))})
                        (C {(echo)} {(DQ ('but no changes have'))})
                        (C {(echo)} {(-n)} {(DQ ('been downloaded because the files have been '))})
                        (C {(echo)} {(DQ ('modified locally:'))})
                        (C {(cat)} {(modifiedfiles)})
                      ]
                      spids: [13533 13544]
                    )
                  ]
                )
                (C {($ Id.VSub_DollarName '$PAGER')})
              ]
              negated: F
            )
            (C {(rm)} {(modifiedfiles)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-PRESENT)} 
                                  {(Id.Lit_RBracket ']')}
                                )
                              ]
                              negated: T
                            )
                            (command.Pipeline
                              children: [
                                (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-NEW)} {(Id.Lit_RBracket ']')})
                              ]
                              negated: T
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:13628)
                    )
                  ]
                  action: [
                    (C {(rm)} {(INDEX-PRESENT)} {(INDEX-NEW)})
                    (C {(echo)})
                    (C {(echo)} {(-n)} {(DQ ('No updates needed to update system to '))})
                    (C {(echo)} {(DQ (${ Id.VSub_Name RELNUM) (-p) (${ Id.VSub_Name RELPATCHNUM) (.))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:13666)
                    )
                  ]
                  spids: [13604 13630]
                )
              ]
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:13690))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:13693)
                      fd: -1
                      arg_word: {(INDEX-PRESENT)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:13702)
                      fd: -1
                      arg_word: {(INDEX-PRESENT.flist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:13716))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:13719)
                      fd: -1
                      arg_word: {(INDEX-NEW)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:13728)
                      fd: -1
                      arg_word: {(INDEX-NEW.flist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Simple
              words: [{(comm)} {(-23)} {(INDEX-PRESENT.flist)} {(INDEX-NEW.flist)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:13741)
                  fd: -1
                  arg_word: {(files.removed)}
                )
              ]
            )
            (command.Simple
              words: [{(comm)} {(-13)} {(INDEX-PRESENT.flist)} {(INDEX-NEW.flist)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:13754)
                  fd: -1
                  arg_word: {(files.added)}
                )
              ]
            )
            (command.Simple
              words: [{(comm)} {(-12)} {(INDEX-PRESENT.flist)} {(INDEX-NEW.flist)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:13767)
                  fd: -1
                  arg_word: {(files.updated)}
                )
              ]
            )
            (C {(rm)} {(INDEX-PRESENT.flist)} {(INDEX-NEW.flist)})
            (command.Pipeline
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {(Id.Lit_LBracket '[')} {(-s)} {(files.removed)} {(Id.Lit_RBracket ']')})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:13793)
                        )
                      ]
                      action: [
                        (C {(echo)})
                        (C {(echo)} {(-n)} {(DQ ('The following files will be removed '))})
                        (C {(echo)} 
                          {
                            (DQ ('as part of updating to ') (${ Id.VSub_Name RELNUM) (-p) 
                              (${ Id.VSub_Name RELPATCHNUM) (':')
                            )
                          }
                        )
                        (C {(cat)} {(files.removed)})
                      ]
                      spids: [13784 13795]
                    )
                  ]
                )
                (C {($ Id.VSub_DollarName '$PAGER')})
              ]
              negated: F
            )
            (C {(rm)} {(files.removed)})
            (command.Pipeline
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {(Id.Lit_LBracket '[')} {(-s)} {(files.added)} {(Id.Lit_RBracket ']')})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:13856)
                        )
                      ]
                      action: [
                        (C {(echo)})
                        (C {(echo)} {(-n)} {(DQ ('The following files will be added '))})
                        (C {(echo)} 
                          {
                            (DQ ('as part of updating to ') (${ Id.VSub_Name RELNUM) (-p) 
                              (${ Id.VSub_Name RELPATCHNUM) (':')
                            )
                          }
                        )
                        (C {(cat)} {(files.added)})
                      ]
                      spids: [13847 13858]
                    )
                  ]
                )
                (C {($ Id.VSub_DollarName '$PAGER')})
              ]
              negated: F
            )
            (C {(rm)} {(files.added)})
            (command.Pipeline
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {(Id.Lit_LBracket '[')} {(-s)} {(files.updated)} {(Id.Lit_RBracket ']')})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:13919)
                        )
                      ]
                      action: [
                        (C {(echo)})
                        (C {(echo)} {(-n)} {(DQ ('The following files will be updated '))})
                        (C {(echo)} 
                          {
                            (DQ ('as part of updating to ') (${ Id.VSub_Name RELNUM) (-p) 
                              (${ Id.VSub_Name RELPATCHNUM) (':')
                            )
                          }
                        )
                        (C {(cat)} {(files.updated)})
                      ]
                      spids: [13910 13921]
                    )
                  ]
                )
                (C {($ Id.VSub_DollarName '$PAGER')})
              ]
              negated: F
            )
            (C {(rm)} {(files.updated)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:MDIR)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:13975)
                            command_list: 
                              (command.CommandList
                                children: [(C {(mktemp)} {(-d)} {(install.XXXXXX)})]
                              )
                          )
                        }
                      spids: [13974]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:13987)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(mv)} {(INDEX-PRESENT)} {(${ Id.VSub_Name MDIR) (/INDEX-OLD)})
            (C {(mv)} {(INDEX-NEW)} {(${ Id.VSub_Name MDIR) (/INDEX-NEW)})
            (C {(ln)} {(-s)} {(${ Id.VSub_Name MDIR)} {(${ Id.VSub_Name BDHASH) (-install)})
          ]
        )
    )
    (command.ShFunction
      name: fetch_warn_eol
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:NOWTIME)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:14054)
                        command_list: (command.CommandList children:[(C {(date)} {(DQ ('+%s'))})])
                      )
                    }
                  spids: [14053]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(Id.Lit_LBracket '[')} {(-f)} {(lasteolwarn)} {(Id.Lit_RBracket ']')})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:14079)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:LASTWARN)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:14085)
                                command_list: 
                                  (command.CommandList
                                    children: [(C {(cat)} {(lasteolwarn)})]
                                  )
                              )
                            }
                          spids: [14084]
                        )
                      ]
                    )
                  ]
                  spids: [14070 14081]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:LASTWARN)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:14098)
                            command_list: 
                              (command.CommandList
                                children: [(C {(expr)} {(${ Id.VSub_Name NOWTIME)} {(-)} {(63072000)})]
                              )
                          )
                        }
                      spids: [14097]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name EOLTIME)} {(-lt)} 
                          {(${ Id.VSub_Name NOWTIME)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:14136)
                    )
                  ]
                  action: [
                    (C {(echo)})
                    (command.Simple
                      words: [{(cat)}]
                      redirects: [
                        (redir.HereDoc
                          op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:14146)
                          fd: -1
                          here_begin: {(EOF)}
                          here_end_span_id: 14173
                          stdin_parts: [
                            ('WARNING: ')
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:14150)
                              command_list: (command.CommandList children:[(C {(uname)} {(-sr)})])
                            )
                            (' HAS PASSED ITS END-OF-LIFE DATE.\n')
                            ('Any security issues discovered after ')
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:14159)
                              command_list: 
                                (command.CommandList
                                  children: [(C {(date)} {(-r)} {(${ Id.VSub_Name EOLTIME)})]
                                )
                            )
                            ('\n')
                            ('will not have been corrected.\n')
                          ]
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:14175)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [14121 14138]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:SINCEWARN)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:14193)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(expr)} {(${ Id.VSub_Name NOWTIME)} {(-)} {(${ Id.VSub_Name LASTWARN)})
                            ]
                          )
                      )
                    }
                  spids: [14192]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:TIMELEFT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:14211)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(expr)} {(${ Id.VSub_Name EOLTIME)} {(-)} {(${ Id.VSub_Name NOWTIME)})
                            ]
                          )
                      )
                    }
                  spids: [14210]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TIMELEFT)} {(-gt)} {(7884000)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:14246)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:14251)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [14233 14248]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TIMELEFT)} {(-gt)} 
                          {
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:14278)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(expr)} {(${ Id.VSub_Name SINCEWARN)} 
                                      {
                                        (word_part.EscapedLiteral
                                          token: 
                                            (Token
                                              id: Id.Lit_EscapedChar
                                              val: '\\*'
                                              span_id: 14289
                                            )
                                        )
                                      } {(3)}
                                    )
                                  ]
                                )
                            )
                          } {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:14295)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:14300)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [14268 14297]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TIMELEFT)} {(-lt)} {(604800)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:14326)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:UNIT)
                          op: assign_op.Equal
                          rhs: {(DQ (day))}
                          spids: [14331]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:SIZE)
                          op: assign_op.Equal
                          rhs: {(86400)}
                          spids: [14337]
                        )
                      ]
                    )
                  ]
                  spids: [14313 14328]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TIMELEFT)} {(-lt)} {(2678400)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:14354)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:UNIT)
                          op: assign_op.Equal
                          rhs: {(DQ (week))}
                          spids: [14359]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:SIZE)
                          op: assign_op.Equal
                          rhs: {(604800)}
                          spids: [14365]
                        )
                      ]
                    )
                  ]
                  spids: [14341 14356]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:UNIT)
                      op: assign_op.Equal
                      rhs: {(DQ (month))}
                      spids: [14372]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:SIZE)
                      op: assign_op.Equal
                      rhs: {(2678400)}
                      spids: [14378]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:NUM)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:14391)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(expr)} {(${ Id.VSub_Name TIMELEFT)} {(/)} {(${ Id.VSub_Name SIZE)})
                            ]
                          )
                      )
                    }
                  spids: [14390]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name NUM)} 
                          {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(1)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:14422)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:UNIT)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name UNIT) (s))}
                          spids: [14427]
                        )
                      ]
                    )
                  ]
                  spids: [14408 14424]
                )
              ]
            )
            (C {(echo)})
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:14449)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 14472
                  stdin_parts: [
                    ('WARNING: ')
                    (command_sub
                      left_token: (Token id:Id.Left_Backtick val:'`' span_id:14453)
                      command_list: (command.CommandList children:[(C {(uname)} {(-sr)})])
                    )
                    (' is approaching its End-of-Life date.\n')
                    ('It is strongly recommended that you upgrade to a newer\n')
                    ('release within the next ')
                    (${ Id.VSub_Name NUM)
                    (' ')
                    (${ Id.VSub_Name UNIT)
                    ('.\n')
                  ]
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(${ Id.VSub_Name NOWTIME)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:14485)
                  fd: -1
                  arg_word: {(lasteolwarn)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fetch_run
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(workdir_init)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14507)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {(fetch_pick_server_init)}) (C {(fetch_pick_server)})]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:14529)
              cond: [
                (command.Sentence
                  child: (command.Pipeline children:[(C {(fetch_key)})] negated:T)
                  terminator: (Token id:Id.Op_Semi val:';' span_id:14534)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(fetch_pick_server)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:14543)
                          arg_word: {(1)}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:14560)
              cond: [
                (command.Sentence
                  child: (command.Pipeline children:[(C {(fetch_tag)})] negated:T)
                  terminator: (Token id:Id.Op_Semi val:';' span_id:14565)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(fetch_pick_server)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:14574)
                          arg_word: {(1)}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_tagsanity)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14586)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_metadata)} {(INDEX-NEW)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14604)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_filter_metadata)} {(INDEX-NEW)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14628)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_filter_metadata)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14639)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(fetch_filter_kernel_names)} {(INDEX-NEW)} {(${ Id.VSub_Name KERNCONF)})
            (C {(fetch_filter_kernel_names)} {(INDEX-OLD)} {(${ Id.VSub_Name KERNCONF)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_inspect_system)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14686)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(fetch_filter_unmodified_notpresent)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)} 
              {(/dev/null)}
            )
            (C {(fetch_filter_allowadd)} {(INDEX-PRESENT)} {(INDEX-NEW)})
            (C {(fetch_filter_allowdelete)} {(INDEX-PRESENT)} {(INDEX-NEW)})
            (C {(fetch_filter_modified_metadata)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)})
            (C {(fetch_filter_uptodate)} {(INDEX-PRESENT)} {(INDEX-NEW)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_files_prepare)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14826)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_files)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14840)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_create_manifest)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14858)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_warn_eol)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:14872)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: upgrade_guess_components
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name STRICTCOMPONENTS))} 
                          {(Id.Lit_Equals '=')} {(DQ (no))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:14910)
                    )
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(fetch_filter_metadata_components)} {($ Id.VSub_Number '$1')})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:14929)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (C {(echo)} {(-n)} {(DQ ('Inspecting system... '))})
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(cut)}
                            {(-f)}
                            {(1-3)}
                            {(-d)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:14966))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:14969)
                              fd: -1
                              arg_word: {(INDEX-ALL)}
                            )
                          ]
                        )
                        (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:14979))} 
                          {(SQ (Token id:Id.Lit_Chars val:' ' span_id:14983))}
                        )
                        (command.WhileUntil
                          keyword: (Token id:Id.KW_While val:while span_id:14989)
                          cond: [
                            (command.Sentence
                              child: (C {(read)} {(C)} {(S)} {(F)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:14998)
                            )
                          ]
                          body: 
                            (command.DoGroup
                              children: [
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {(-e)} 
                                              {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:15018)
                                        )
                                      ]
                                      action: [
                                        (C {(echo)} 
                                          {(DQ ('+ ') (${ Id.VSub_Name C) ('|') (${ Id.VSub_Name S))}
                                        )
                                      ]
                                      spids: [15003 15020]
                                    )
                                  ]
                                )
                                (C {(echo)} {(DQ ('= ') (${ Id.VSub_Name C) ('|') (${ Id.VSub_Name S))})
                              ]
                            )
                        )
                        (C {(sort)})
                        (C {(uniq)} {(-c)})
                        (command.Simple
                          words: [
                            {(sed)}
                            {(-E)}
                            {(SQ (Token id:Id.Lit_Chars val:'s,^ +,,' span_id:15076))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:15079)
                              fd: -1
                              arg_word: {(compfreq)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.Pipeline
                      children: [
                        (C {(grep)} {(SQ (Token id:Id.Lit_Chars val:' = ' span_id:15087))} {(compfreq)})
                        (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (3)} {(-d)} 
                          {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15106))}
                        )
                        (command.Simple
                          words: [
                            {(sort)}
                            {(-k)}
                            {(2) (Id.Lit_Comma ',') (2)}
                            {(-t)}
                            {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15123))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:15126)
                              fd: -1
                              arg_word: {(compfreq.total)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.Pipeline
                      children: [
                        (C {(grep)} {(SQ (Token id:Id.Lit_Chars val:' + ' span_id:15134))} {(compfreq)})
                        (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (3)} {(-d)} 
                          {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15153))}
                        )
                        (command.Simple
                          words: [
                            {(sort)}
                            {(-k)}
                            {(2) (Id.Lit_Comma ',') (2)}
                            {(-t)}
                            {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15170))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:15173)
                              fd: -1
                              arg_word: {(compfreq.present)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.Pipeline
                      children: [
                        (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15183))} {(-1)} 
                          {(2)} {(-2)} {(2)} {(compfreq.present)} {(compfreq.total)}
                        )
                        (command.WhileUntil
                          keyword: (Token id:Id.KW_While val:while span_id:15201)
                          cond: [
                            (command.Sentence
                              child: (C {(read)} {(S)} {(P)} {(T)})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:15210)
                            )
                          ]
                          body: 
                            (command.DoGroup
                              children: [
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name P)} {(-gt)} 
                                              {
                                                (command_sub
                                                  left_token: 
                                                    (Token
                                                      id: Id.Left_Backtick
                                                      val: '`'
                                                      span_id: 15225
                                                    )
                                                  command_list: 
                                                    (command.CommandList
                                                      children: [
                                                        (C {(expr)} {(${ Id.VSub_Name T)} {(/)} {(2)})
                                                      ]
                                                    )
                                                )
                                              } {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:15240)
                                        )
                                      ]
                                      action: [(C {(echo)} {(${ Id.VSub_Name S)})]
                                      spids: [15215 15242]
                                    )
                                  ]
                                )
                              ]
                            )
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:15257)
                              fd: -1
                              arg_word: {(comp.present)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.Simple
                      words: [
                        {(cut)}
                        {(-f)}
                        {(2)}
                        {(-d)}
                        {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15271))}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:15274)
                          fd: -1
                          arg_word: {(compfreq.total)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:15278)
                          fd: -1
                          arg_word: {(comp.total)}
                        )
                      ]
                    )
                    (C {(rm)} {(INDEX-ALL)} {(compfreq)} {(compfreq.total)} {(compfreq.present)})
                    (C {(echo)} {(DQ (done.))})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:KCOMP)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:15344)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {(${ Id.VSub_Name KERNCONF)})
                                          (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:A-Z span_id:15358))} 
                                            {(SQ (Token id:Id.Lit_Chars val:a-z span_id:15362))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [15343]
                        )
                      ]
                    )
                    (command.Simple
                      words: [
                        {(grep)}
                        {(-E)}
                        {
                          (DQ ('^kernel') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name KCOMP) 
                            (word_part.EscapedLiteral
                              token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:15378)
                            )
                          )
                        }
                        {(comp.total)}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_DGreat val:'>>' span_id:15383)
                          fd: -1
                          arg_word: {(comp.present)}
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.AndOr
                                  ops: [Id.Op_DAmp]
                                  children: [
                                    (C {(grep)} {(-qE)} {(DQ ('^kernel') (Id.Lit_Other '\\') ('|'))} 
                                      {(comp.total)}
                                    )
                                    (command.Pipeline
                                      children: [
                                        (C {(grep)} {(-qE)} 
                                          {
                                            (DQ ('^kernel') (Id.Lit_Other '\\') ('|') 
                                              (${ Id.VSub_Name KCOMP) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:15419))
                                            )
                                          } {(comp.total)}
                                        )
                                      ]
                                      negated: T
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:15423)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [{(cat)}]
                              redirects: [
                                (redir.HereDoc
                                  op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:15430)
                                  fd: -1
                                  here_begin: {(EOF)}
                                  here_end_span_id: 15454
                                  stdin_parts: [
                                    ('\n')
                                    ('WARNING: This system is running a ')
                                    (Id.Right_DoubleQuote '"')
                                    (${ Id.VSub_Name KCOMP)
                                    (Id.Right_DoubleQuote '"')
                                    (' kernel, which is not a\n')
                                    ('kernel configuration distributed as part of FreeBSD ')
                                    (${ Id.VSub_Name RELNUM)
                                    ('.\n')
                                    (
'This kernel will not be updated: you MUST update the kernel manually\n'
                                    )
                                    ('before running ')
                                    (Id.Right_DoubleQuote '"')
                                    ($ Id.VSub_Number '$0')
                                    (' install')
                                    (Id.Right_DoubleQuote '"')
                                    ('.\n')
                                  ]
                                )
                              ]
                            )
                          ]
                          spids: [15389 15425]
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(sort)} {(-u)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:15472)
                          fd: -1
                          arg_word: {(comp.present)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:15476)
                          fd: -1
                          arg_word: {(comp.present.tmp)}
                        )
                      ]
                    )
                    (C {(mv)} {(comp.present.tmp)} {(comp.present)})
                    (command.Simple
                      words: [{(comm)} {(-13)} {(comp.present)} {(comp.total)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:15496)
                          fd: -1
                          arg_word: {(comp.absent)}
                        )
                      ]
                    )
                    (C {(echo)})
                    (C {(echo)} {(-n)} {(DQ ('The following components of FreeBSD '))})
                    (C {(echo)} {(DQ ('seem to be installed:'))})
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(tr)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15536))}
                            {(SQ (Token id:Id.Lit_Chars val:/ span_id:15540))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:15543)
                              fd: -1
                              arg_word: {(comp.present)}
                            )
                          ]
                        )
                        (C {(fmt)} {(-72)})
                      ]
                      negated: F
                    )
                    (C {(echo)})
                    (C {(echo)} {(-n)} {(DQ ('The following components of FreeBSD '))})
                    (C {(echo)} {(DQ ('do not seem to be installed:'))})
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [
                            {(tr)}
                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15577))}
                            {(SQ (Token id:Id.Lit_Chars val:/ span_id:15581))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:15584)
                              fd: -1
                              arg_word: {(comp.absent)}
                            )
                          ]
                        )
                        (C {(fmt)} {(-72)})
                      ]
                      negated: F
                    )
                    (C {(echo)})
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(continuep)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:15603)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (C {(echo)})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:COMPONENTS)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [15624]
                        )
                      ]
                    )
                    (command.Simple
                      words: [
                        {(tr)}
                        {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15632))}
                        {(SQ (Token id:Id.Lit_Chars val:/ span_id:15636))}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:15639)
                          fd: -1
                          arg_word: {(comp.present)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:15643)
                          fd: -1
                          arg_word: {(comp.present.tmp)}
                        )
                      ]
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:15648)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(C)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:15653)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:COMPONENTS)
                                  op: assign_op.Equal
                                  rhs: {(DQ (${ Id.VSub_Name COMPONENTS) (' ') (${ Id.VSub_Name C))}
                                  spids: [15658]
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:15672)
                          fd: -1
                          arg_word: {(comp.present.tmp)}
                        )
                      ]
                    )
                    (C {(rm)} {(comp.present)} {(comp.present.tmp)} {(comp.absent)} {(comp.total)})
                  ]
                  spids: [14893 14912]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: upgrade_guess_new_kernel
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name STRICTCOMPONENTS))} 
                          {(Id.Lit_Equals '=')} {(DQ (no))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:15735)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:METAHASH)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:15745)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(look)} {(DQ ($ Id.VSub_Number '$1') ('|'))} 
                                            {(tINDEX.present)}
                                          )
                                          (C {(cut)} {(-f)} {(2)} {(-d)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15768))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [15744]
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(gunzip)} {(-c)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:15777)
                          fd: -1
                          arg_word: {(files/) (${ Id.VSub_Name METAHASH) (.gz)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:15785)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$1') (.all)}
                        )
                      ]
                    )
                    (command.ForEach
                      iter_name: C
                      iter_words: [{(${ Id.VSub_Name COMPONENTS)}]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.AndOr
                                          ops: [Id.Op_DAmp]
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name C)} 
                                              {(Id.Lit_Equals '=')} {(DQ (kernel/) (${ Id.VSub_Name KCOMP))} {(Id.Lit_RBracket ']')}
                                            )
                                            (command.Pipeline
                                              children: [
                                                (C {(grep)} {(-qE)} 
                                                  {
                                                    (DQ ('^kernel') (Id.Lit_Other '\\') ('|') 
                                                      (${ Id.VSub_Name KCOMP) (Id.Lit_Other '\\') ('|')
                                                    )
                                                  } {($ Id.VSub_Number '$1') (.all)}
                                                )
                                              ]
                                              negated: T
                                            )
                                          ]
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:15855)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:COMPONENTS)
                                          op: assign_op.Equal
                                          rhs: {(DQ (${ Id.VSub_Name COMPONENTS) (' kernel/generic'))}
                                          spids: [15860]
                                        )
                                      ]
                                    )
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:NKERNCONF)
                                          op: assign_op.Equal
                                          rhs: {(DQ (GENERIC))}
                                          spids: [15869]
                                        )
                                      ]
                                    )
                                    (command.Simple
                                      words: [{(cat)}]
                                      redirects: [
                                        (redir.HereDoc
                                          op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:15877)
                                          fd: -1
                                          here_begin: {(EOF)}
                                          here_end_span_id: 15904
                                          stdin_parts: [
                                            ('\n')
                                            ('WARNING: This system is running a ')
                                            (Id.Right_DoubleQuote '"')
                                            (${ Id.VSub_Name KCOMP)
                                            (Id.Right_DoubleQuote '"')
                                            (' kernel, which is not a\n')
                                            ('kernel configuration distributed as part of FreeBSD ')
                                            (${ Id.VSub_Name RELNUM)
                                            ('.\n')
                                            ('As part of upgrading to FreeBSD ')
                                            (${ Id.VSub_Name RELNUM)
                                            (', this kernel will be\n')
                                            ('replaced with a ')
                                            (Id.Right_DoubleQuote '"')
                                            (generic)
                                            (Id.Right_DoubleQuote '"')
                                            (' kernel.\n')
                                          ]
                                        )
                                      ]
                                    )
                                    (command.AndOr
                                      ops: [Id.Op_DPipe]
                                      children: [
                                        (C {(continuep)})
                                        (command.ControlFlow
                                          token: 
                                            (Token
                                              id: Id.ControlFlow_Return
                                              val: return
                                              span_id: 15910
                                            )
                                          arg_word: {(1)}
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [15814 15857]
                                )
                              ]
                            )
                          ]
                        )
                    )
                    (C {(rm)} {($ Id.VSub_Number '$1') (.all)})
                  ]
                  spids: [15718 15737]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: upgrade_oldall_to_oldnew
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15968))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:15971)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1')}
                    )
                  ]
                )
                (command.Simple
                  words: [{(sort)} {(-u)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:15982)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (.paths)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15997))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:16000)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$2')}
                    )
                  ]
                )
                (C {(sort)} {(-u)})
                (C {(comm)} {(-13)} {($ Id.VSub_Number '$1') (.paths)} {(-)})
                (C {(lam)} {(-)} {(-s)} {(DQ ('|-||||||'))})
                (command.Simple
                  words: [{(sort)} {(-)} {($ Id.VSub_Number '$1')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:16045)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')})
            (command.Simple
              words: [{(comm)} {(-23)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:16072)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$1') (.tmp)}
                )
              ]
            )
            (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')})
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16108))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:16111)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1')}
                    )
                  ]
                )
                (command.Simple
                  words: [{(sort)} {(-u)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:16122)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1') (.paths)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [
                    {(sort)}
                    {(-k)}
                    {(1) (Id.Lit_Comma ',') (1)}
                    {(-t)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16139))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:16142)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$2')}
                    )
                  ]
                )
                (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16154))} {(-)} 
                  {($ Id.VSub_Number '$1') (.paths)}
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:16167)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$2') (.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(rm)} {($ Id.VSub_Number '$1') (.paths)})
            (C {(mv)} {($ Id.VSub_Number '$2') (.tmp)} {($ Id.VSub_Number '$2')})
            (C {(mv)} {($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$3')})
          ]
        )
    )
    (command.ShFunction
      name: samef
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:X)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:16216)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (command.Simple
                                    words: [
                                      {(sed)}
                                      {(-E)}
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: 's/\\$FreeBSD.*\\$/$FreeBSD$/'
                                            span_id: 16232
                                          )
                                        )
                                      }
                                    ]
                                    redirects: [
                                      (redir.Redir
                                        op: (Token id:Id.Redir_Less val:'<' span_id:16235)
                                        fd: -1
                                        arg_word: {($ Id.VSub_Number '$1')}
                                      )
                                    ]
                                  )
                                  (C {(${ Id.VSub_Name SHA256)})
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [16215]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:Y)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:16248)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (command.Simple
                                    words: [
                                      {(sed)}
                                      {(-E)}
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: 's/\\$FreeBSD.*\\$/$FreeBSD$/'
                                            span_id: 16264
                                          )
                                        )
                                      }
                                    ]
                                    redirects: [
                                      (redir.Redir
                                        op: (Token id:Id.Redir_Less val:'<' span_id:16267)
                                        fd: -1
                                        arg_word: {($ Id.VSub_Number '$2')}
                                      )
                                    ]
                                  )
                                  (C {(${ Id.VSub_Name SHA256)})
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [16247]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$X')} {(Id.Lit_Equals '=')} 
                          {($ Id.VSub_DollarName '$Y')} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:16291)
                    )
                  ]
                  action: [
                    (command.Sentence
                      child: 
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:16296)
                          arg_word: {(0)}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:16299)
                    )
                  ]
                  spids: [16280 16293]
                )
              ]
              else_action: [
                (command.Sentence
                  child: 
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:16305)
                      arg_word: {(1)}
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:16308)
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: upgrade_merge
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-s)} {($ Id.VSub_Number '$1')} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:16343)
                    )
                  ]
                  action: [
                    (command.Pipeline
                      children: [
                        (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16357))} 
                          {($ Id.VSub_Number '$1')}
                        )
                        (command.Simple
                          words: [{(sort)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:16367)
                              fd: -1
                              arg_word: {($ Id.VSub_Number '$1') (-paths)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (C {(rm)} {(-rf)} {(merge/)})
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:16385)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(F)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:16390)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:D)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:16396)
                                        command_list: 
                                          (command.CommandList
                                            children: [(C {(dirname)} {(${ Id.VSub_Name F)})]
                                          )
                                      )
                                    }
                                  spids: [16395]
                                )
                              ]
                            )
                            (C {(mkdir)} {(-p)} {(merge/old/) (${ Id.VSub_Name D)})
                            (C {(mkdir)} {(-p)} 
                              {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) (${ Id.VSub_Name D)}
                            )
                            (C {(mkdir)} {(-p)} 
                              {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name D)}
                            )
                            (C {(mkdir)} {(-p)} {(merge/new/) (${ Id.VSub_Name D)})
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:16457)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$1') (-paths)}
                        )
                      ]
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:16468)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(F)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:16473)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:V)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:16483)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (command.Pipeline
                                                children: [
                                                  (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} 
                                                    {($ Id.VSub_Number '$2')}
                                                  )
                                                  (C {(cut)} {(-f)} {(7)} {(-d)} 
                                                    {
                                                      (SQ 
                                                        (Token
                                                          id: Id.Lit_Chars
                                                          val: '|'
                                                          span_id: 16508
                                                        )
                                                      )
                                                    }
                                                  )
                                                ]
                                                negated: F
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [16482]
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(gunzip)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Less val:'<' span_id:16515)
                                  fd: -1
                                  arg_word: {(files/) (${ Id.VSub_Name V) (.gz)}
                                )
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:16523)
                                  fd: -1
                                  arg_word: {(merge/old/) (${ Id.VSub_Name F)}
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} 
                                              {($ Id.VSub_Number '$1')}
                                            )
                                            (C {(fgrep)} {(-q)} {(DQ ('|f|'))})
                                          ]
                                          negated: F
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:16558)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:V)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (command_sub
                                                left_token: 
                                                  (Token
                                                    id: Id.Left_Backtick
                                                    val: '`'
                                                    span_id: 16564
                                                  )
                                                command_list: 
                                                  (command.CommandList
                                                    children: [
                                                      (command.Pipeline
                                                        children: [
                                                          (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} 
                                                            {($ Id.VSub_Number '$1')}
                                                          )
                                                          (C {(cut)} {(-f)} {(3)} {(-d)} 
                                                            {
                                                              (SQ 
                                                                (Token
                                                                  id: Id.Lit_Chars
                                                                  val: '|'
                                                                  span_id: 16589
                                                                )
                                                              )
                                                            }
                                                          )
                                                        ]
                                                        negated: F
                                                      )
                                                    ]
                                                  )
                                              )
                                            }
                                          spids: [16563]
                                        )
                                      ]
                                    )
                                    (command.Simple
                                      words: [{(gunzip)}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Less val:'<' span_id:16596)
                                          fd: -1
                                          arg_word: {(files/) (${ Id.VSub_Name V) (.gz)}
                                        )
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Great val:'>' span_id:16606)
                                          fd: -1
                                          arg_word: 
                                            {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) 
                                              (${ Id.VSub_Name F)
                                            }
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [16536 16560]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} 
                                              {($ Id.VSub_Number '$3')}
                                            )
                                            (C {(cut)} {(-f)} 
                                              {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16654))}
                                            )
                                            (C {(fgrep)} {(-q)} {(DQ ('|f|'))})
                                          ]
                                          negated: F
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:16667)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:V)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (command_sub
                                                left_token: 
                                                  (Token
                                                    id: Id.Left_Backtick
                                                    val: '`'
                                                    span_id: 16673
                                                  )
                                                command_list: 
                                                  (command.CommandList
                                                    children: [
                                                      (command.Pipeline
                                                        children: [
                                                          (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} 
                                                            {($ Id.VSub_Number '$3')}
                                                          )
                                                          (C {(cut)} {(-f)} {(7)} {(-d)} 
                                                            {
                                                              (SQ 
                                                                (Token
                                                                  id: Id.Lit_Chars
                                                                  val: '|'
                                                                  span_id: 16698
                                                                )
                                                              )
                                                            }
                                                          )
                                                        ]
                                                        negated: F
                                                      )
                                                    ]
                                                  )
                                              )
                                            }
                                          spids: [16672]
                                        )
                                      ]
                                    )
                                    (command.Simple
                                      words: [{(gunzip)}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Less val:'<' span_id:16705)
                                          fd: -1
                                          arg_word: {(files/) (${ Id.VSub_Name V) (.gz)}
                                        )
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Great val:'>' span_id:16715)
                                          fd: -1
                                          arg_word: 
                                            {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name F)}
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [16626 16669]
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:16732)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$1') (-paths)}
                        )
                      ]
                    )
                    (C {(echo)} {(-n)} {(DQ ('Attempting to automatically merge '))})
                    (C {(echo)} {(-n)} {(DQ ('changes in files...'))})
                    (command.Simple
                      words: [{(Id.Lit_Other ':')}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:16763)
                          fd: -1
                          arg_word: {(failed.merges)}
                        )
                      ]
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:16768)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(F)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:16773)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(merge/) (${ Id.VSub_Name RELNUM) (/) 
                                                (${ Id.VSub_Name F)
                                              } {(Id.Lit_RBracket ']')}
                                            )
                                          ]
                                          negated: T
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:16808)
                                    )
                                  ]
                                  action: [
                                    (command.ControlFlow
                                      token: 
                                        (Token
                                          id: Id.ControlFlow_Continue
                                          val: continue
                                          span_id: 16813
                                        )
                                    )
                                  ]
                                  spids: [16790 16810]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) 
                                                (${ Id.VSub_Name F)
                                              } {(Id.Lit_RBracket ']')}
                                            )
                                          ]
                                          negated: T
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:16850)
                                    )
                                  ]
                                  action: [
                                    (C {(cp)} 
                                      {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name F)} {(merge/new/) (${ Id.VSub_Name F)}
                                    )
                                    (command.ControlFlow
                                      token: 
                                        (Token
                                          id: Id.ControlFlow_Continue
                                          val: continue
                                          span_id: 16872
                                        )
                                    )
                                  ]
                                  spids: [16832 16852]
                                )
                              ]
                            )
                            (command.Case
                              to_match: {(${ Id.VSub_Name F)}
                              arms: [
                                (case_arm
                                  pat_list: [{(/etc/spwd.db)} {(/etc/pwd.db)} {(/etc/login.conf.db)}]
                                  action: [
                                    (C {(cp)} {(merge/old/) (${ Id.VSub_Name F)} 
                                      {(merge/new/) (${ Id.VSub_Name F)}
                                    )
                                  ]
                                  spids: [16892 16901 16925 -1]
                                )
                                (case_arm
                                  pat_list: [{(Id.Lit_Star '*')}]
                                  action: [
                                    (command.If
                                      arms: [
                                        (if_arm
                                          cond: [
                                            (command.Sentence
                                              child: 
                                                (command.Pipeline
                                                  children: [
                                                    (command.Simple
                                                      words: [
                                                        {(merge)}
                                                        {(-p)}
                                                        {(-L)}
                                                        {(DQ ('current version'))}
                                                        {(-L)}
                                                        {(DQ (${ Id.VSub_Name OLDRELNUM))}
                                                        {(-L)}
                                                        {(DQ (${ Id.VSub_Name RELNUM))}
                                                        {(merge/old/) (${ Id.VSub_Name F)}
                                                        {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) 
                                                          (${ Id.VSub_Name F)
                                                        }
                                                        {(merge/) (${ Id.VSub_Name RELNUM) (/) 
                                                          (${ Id.VSub_Name F)
                                                        }
                                                      ]
                                                      redirects: [
                                                        (redir.Redir
                                                          op: 
                                                            (Token
                                                              id: Id.Redir_Great
                                                              val: '>'
                                                              span_id: 16995
                                                            )
                                                          fd: -1
                                                          arg_word: {(merge/new/) (${ Id.VSub_Name F)}
                                                        )
                                                        (redir.Redir
                                                          op: 
                                                            (Token
                                                              id: Id.Redir_Great
                                                              val: '2>'
                                                              span_id: 17002
                                                            )
                                                          fd: 2
                                                          arg_word: {(/dev/null)}
                                                        )
                                                      ]
                                                    )
                                                  ]
                                                  negated: T
                                                )
                                              terminator: (Token id:Id.Op_Semi val:';' span_id:17004)
                                            )
                                          ]
                                          action: [
                                            (command.Simple
                                              words: [{(echo)} {(${ Id.VSub_Name F)}]
                                              redirects: [
                                                (redir.Redir
                                                  op: 
                                                    (Token
                                                      id: Id.Redir_DGreat
                                                      val: '>>'
                                                      span_id: 17015
                                                    )
                                                  fd: -1
                                                  arg_word: {(failed.merges)}
                                                )
                                              ]
                                            )
                                          ]
                                          spids: [16932 17006]
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [16928 16929 17023 -1]
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:17031)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$1') (-paths)}
                        )
                      ]
                    )
                    (C {(echo)} {(DQ (' done.'))})
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:17049)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(F)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:17054)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(samef)} {(merge/old/) (${ Id.VSub_Name F)} 
                                          {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) (${ Id.VSub_Name F)}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:17088)
                                    )
                                  ]
                                  action: [
                                    (C {(cp)} 
                                      {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name F)} {(merge/new/) (${ Id.VSub_Name F)}
                                    )
                                    (command.ControlFlow
                                      token: 
                                        (Token
                                          id: Id.ControlFlow_Continue
                                          val: continue
                                          span_id: 17110
                                        )
                                    )
                                  ]
                                  spids: [17071 17090]
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(cat)}]
                              redirects: [
                                (redir.HereDoc
                                  op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:17119)
                                  fd: -1
                                  here_begin: {(EOF)}
                                  here_end_span_id: 17135
                                  stdin_parts: [
                                    ('\n')
                                    ('The following file could not be merged automatically: ')
                                    (${ Id.VSub_Name F)
                                    ('\n')
                                    ('Press Enter to edit this file in ')
                                    (${ Id.VSub_Name EDITOR)
                                    (' and resolve the conflicts\n')
                                    ('manually...\n')
                                  ]
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(read)} {(dummy)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Less val:'<' span_id:17141)
                                  fd: -1
                                  arg_word: {(/dev/tty)}
                                )
                              ]
                            )
                            (command.Simple
                              words: [
                                {(${ Id.VSub_Name EDITOR)}
                                {
                                  (command_sub
                                    left_token: (Token id:Id.Left_Backtick val:'`' span_id:17149)
                                    command_list: (command.CommandList children:[(C {(pwd)})])
                                  ) (/merge/new/) (${ Id.VSub_Name F)
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Less val:'<' span_id:17159)
                                  fd: -1
                                  arg_word: {(/dev/tty)}
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:17166)
                          fd: -1
                          arg_word: {(failed.merges)}
                        )
                      ]
                    )
                    (C {(rm)} {(failed.merges)})
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:17185)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(F)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:17190)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.AndOr
                                          ops: [Id.Op_DAmp Id.Op_DAmp]
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(merge/old/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                            )
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(merge/new/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                            )
                                            (C {(samef)} {(merge/old/) (${ Id.VSub_Name F)} 
                                              {(merge/new/) (${ Id.VSub_Name F)}
                                            )
                                          ]
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:17243)
                                    )
                                  ]
                                  action: [
                                    (command.ControlFlow
                                      token: 
                                        (Token
                                          id: Id.ControlFlow_Continue
                                          val: continue
                                          span_id: 17248
                                        )
                                    )
                                  ]
                                  spids: [17203 17245]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.AndOr
                                          ops: [Id.Op_DAmp Id.Op_DAmp]
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(merge/old/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                            )
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) 
                                                (${ Id.VSub_Name F)
                                              } {(Id.Lit_RBracket ']')}
                                            )
                                            (C {(samef)} {(merge/old/) (${ Id.VSub_Name F)} 
                                              {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) 
                                                (${ Id.VSub_Name F)
                                              }
                                            )
                                          ]
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:17312)
                                    )
                                  ]
                                  action: [
                                    (command.ControlFlow
                                      token: 
                                        (Token
                                          id: Id.ControlFlow_Continue
                                          val: continue
                                          span_id: 17317
                                        )
                                    )
                                  ]
                                  spids: [17263 17314]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(-f)} 
                                              {(merge/new/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                            )
                                          ]
                                          negated: T
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:17342)
                                    )
                                  ]
                                  action: [
                                    (command.Simple
                                      words: [{(cat)}]
                                      redirects: [
                                        (redir.HereDoc
                                          op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:17349)
                                          fd: -1
                                          here_begin: {(EOF)}
                                          here_end_span_id: 17364
                                          stdin_parts: [
                                            ('\n')
                                            (
'The following file will be removed, as it no longer exists in\n'
                                            )
                                            ('FreeBSD ')
                                            (${ Id.VSub_Name RELNUM)
                                            (': ')
                                            (${ Id.VSub_Name F)
                                            ('\n')
                                          ]
                                        )
                                      ]
                                    )
                                    (command.AndOr
                                      ops: [Id.Op_DPipe]
                                      children: [
                                        (command.Simple
                                          words: [{(continuep)}]
                                          redirects: [
                                            (redir.Redir
                                              op: (Token id:Id.Redir_Less val:'<' span_id:17368)
                                              fd: -1
                                              arg_word: {(/dev/tty)}
                                            )
                                          ]
                                        )
                                        (command.ControlFlow
                                          token: 
                                            (Token
                                              id: Id.ControlFlow_Return
                                              val: return
                                              span_id: 17374
                                            )
                                          arg_word: {(1)}
                                        )
                                      ]
                                    )
                                    (command.ControlFlow
                                      token: 
                                        (Token
                                          id: Id.ControlFlow_Continue
                                          val: continue
                                          span_id: 17379
                                        )
                                    )
                                  ]
                                  spids: [17328 17344]
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(cat)}]
                              redirects: [
                                (redir.HereDoc
                                  op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:17392)
                                  fd: -1
                                  here_begin: {(EOF)}
                                  here_end_span_id: 17411
                                  stdin_parts: [
                                    ('\n')
                                    ('The following changes, which occurred between FreeBSD ')
                                    (${ Id.VSub_Name OLDRELNUM)
                                    (' and\n')
                                    ('FreeBSD ')
                                    (${ Id.VSub_Name RELNUM)
                                    (' have been merged into ')
                                    (${ Id.VSub_Name F)
                                    (':\n')
                                  ]
                                )
                              ]
                            )
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (C {(diff)} {(-U)} {(5)} {(-L)} {(DQ ('current version'))} {(-L)} 
                                  {(DQ ('new version'))} {(merge/old/) (${ Id.VSub_Name F)} {(merge/new/) (${ Id.VSub_Name F)}
                                )
                                (C {(true)})
                              ]
                            )
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (command.Simple
                                  words: [{(continuep)}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_Less val:'<' span_id:17450)
                                      fd: -1
                                      arg_word: {(/dev/tty)}
                                    )
                                  ]
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:17456)
                                  arg_word: {(1)}
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:17463)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$1') (-paths)}
                        )
                      ]
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:17474)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(F)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:17479)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {(-f)} 
                                          {(merge/new/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:17496)
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:V)
                                          op: assign_op.Equal
                                          rhs: 
                                            {
                                              (command_sub
                                                left_token: 
                                                  (Token
                                                    id: Id.Left_Backtick
                                                    val: '`'
                                                    span_id: 17502
                                                  )
                                                command_list: 
                                                  (command.CommandList
                                                    children: [
                                                      (C {(${ Id.VSub_Name SHA256)} {(-q)} 
                                                        {(merge/new/) (${ Id.VSub_Name F)}
                                                      )
                                                    ]
                                                  )
                                              )
                                            }
                                          spids: [17501]
                                        )
                                      ]
                                    )
                                    (command.Simple
                                      words: [{(gzip)} {(-c)}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Less val:'<' span_id:17523)
                                          fd: -1
                                          arg_word: {(merge/new/) (${ Id.VSub_Name F)}
                                        )
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Great val:'>' span_id:17530)
                                          fd: -1
                                          arg_word: {(files/) (${ Id.VSub_Name V) (.gz)}
                                        )
                                      ]
                                    )
                                    (C {(echo)} {(DQ (${ Id.VSub_Name F) ('|') (${ Id.VSub_Name V))})
                                  ]
                                  spids: [17484 17498]
                                )
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:17557)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$1') (-paths)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:17562)
                          fd: -1
                          arg_word: {(newhashes)}
                        )
                      ]
                    )
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:17576)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(F)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:17581)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} {($ Id.VSub_Number '$3')})
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:17600)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$1') (-paths)}
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:17605)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$3') (-oldlines)}
                        )
                      ]
                    )
                    (command.Simple
                      words: [
                        {(join)}
                        {(-t)}
                        {(SQ (Token id:Id.Lit_Chars val:'|' span_id:17621))}
                        {(-o)}
                        {(1.1) (Id.Lit_Comma ',') (1.2) (Id.Lit_Comma ',') (1.3) (Id.Lit_Comma ',') (1.4) 
                          (Id.Lit_Comma ',') (1.5) (Id.Lit_Comma ',') (1.6) (Id.Lit_Comma ',') (2.2) (Id.Lit_Comma ',') (1.8)
                        }
                        {($ Id.VSub_Number '$3') (-oldlines)}
                        {(newhashes)}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:17649)
                          fd: -1
                          arg_word: {($ Id.VSub_Number '$3') (-newlines)}
                        )
                      ]
                    )
                    (command.Pipeline
                      children: [
                        (C {(sort)} {($ Id.VSub_Number '$3') (-oldlines)})
                        (C {(comm)} {(-13)} {(-)} {($ Id.VSub_Number '$3')})
                        (command.Simple
                          words: [{(sort)} {(-)} {($ Id.VSub_Number '$3') (-newlines)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:17686)
                              fd: -1
                              arg_word: {($ Id.VSub_Number '$3') (.tmp)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (C {(mv)} {($ Id.VSub_Number '$3') (.tmp)} {($ Id.VSub_Number '$3')})
                    (C {(rm)} {($ Id.VSub_Number '$1') (-paths)} {(newhashes)} 
                      {($ Id.VSub_Number '$3') (-oldlines)} {($ Id.VSub_Number '$3') (-newlines)}
                    )
                    (C {(rm)} {(-rf)} {(merge/)})
                  ]
                  spids: [16334 16345]
                )
              ]
            )
            (C {(rm)} {($ Id.VSub_Number '$1')})
          ]
        )
    )
    (command.ShFunction
      name: upgrade_run
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(workdir_init)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:17756)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {(fetch_pick_server_init)}) (C {(fetch_pick_server)})]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:17778)
              cond: [
                (command.Sentence
                  child: (command.Pipeline children:[(C {(fetch_key)})] negated:T)
                  terminator: (Token id:Id.Op_Semi val:';' span_id:17783)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(fetch_pick_server)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:17792)
                          arg_word: {(1)}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:17810)
              cond: [
                (command.Sentence
                  child: (command.Pipeline children:[(C {(fetch_tag)})] negated:T)
                  terminator: (Token id:Id.Op_Semi val:';' span_id:17815)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(fetch_pick_server)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:17824)
                          arg_word: {(1)}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_tagsanity)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:17836)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_metadata)} {(INDEX-OLD)} {(INDEX-ALL)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:17854)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(upgrade_guess_components)} {(INDEX-ALL)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:17874)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_filter_metadata)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:17894)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_filter_metadata)} {(INDEX-ALL)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:17905)
                  arg_word: {(1)}
                )
              ]
            )
            (command.Simple
              words: [{(sort)} {(INDEX-OLD)} {(INDEX-ALL)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:17921)
                  fd: -1
                  arg_word: {(INDEX-OLD.tmp)}
                )
              ]
            )
            (C {(mv)} {(INDEX-OLD.tmp)} {(INDEX-OLD)})
            (C {(rm)} {(INDEX-ALL)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OLDRELNUM)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name RELNUM)}
                  spids: [17943]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RELNUM)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name TARGETRELEASE)}
                  spids: [17949]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OLDFETCHDIR)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name FETCHDIR)}
                  spids: [17955]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FETCHDIR)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH)}
                  spids: [17961]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:17980)
              cond: [
                (command.Sentence
                  child: (command.Pipeline children:[(C {(fetch_tag)})] negated:T)
                  terminator: (Token id:Id.Op_Semi val:';' span_id:17985)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(fetch_pick_server)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:17994)
                          arg_word: {(1)}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_metadata)} {(INDEX-ALL)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:18013)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(upgrade_guess_new_kernel)} {(INDEX-ALL)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:18041)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_filter_metadata)} {(INDEX-ALL)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:18061)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(upgrade_oldall_to_oldnew)} {(INDEX-OLD)} {(INDEX-ALL)} {(INDEX-NEW)})
            (C {(fetch_filter_kernel_names)} {(INDEX-NEW)} {(${ Id.VSub_Name NKERNCONF)})
            (C {(fetch_filter_kernel_names)} {(INDEX-OLD)} {(${ Id.VSub_Name KERNCONF)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_inspect_system)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:18126)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(fetch_filter_mergechanges)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(tomerge-old)})
            (C {(fetch_filter_unmodified_notpresent)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)} 
              {(tomerge-old)}
            )
            (C {(fetch_filter_allowadd)} {(INDEX-PRESENT)} {(INDEX-NEW)})
            (C {(fetch_filter_allowdelete)} {(INDEX-PRESENT)} {(INDEX-NEW)})
            (C {(fetch_filter_modified_metadata)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)})
            (C {(fetch_filter_uptodate)} {(INDEX-PRESENT)} {(INDEX-NEW)})
            (C {(fetch_files_premerge)} {(tomerge-old)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_files_prepare)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:18294)
                  arg_word: {(1)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PATCHDIR)
                  op: assign_op.Equal
                  rhs: {(to-) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH) (/bp)}
                  spids: [18304]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_files)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:18320)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(upgrade_merge)} {(tomerge-old)} {(INDEX-PRESENT)} {(INDEX-NEW)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:18340)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_create_manifest)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:18358)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(touch)} {(${ Id.VSub_Name BDHASH) (-install/kernelfirst)})
            (C {(echo)} 
              {
                (DQ ('To install the downloaded upgrades, run ') 
                  (word_part.EscapedLiteral
                    token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:18393)
                  ) ($ Id.VSub_Number '$0') (' install') 
                  (word_part.EscapedLiteral
                    token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:18396)
                  ) (.)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: install_verify
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(cat)} {($ Id.VSub_At '$@')})
                (C {(cut)} {(-f)} {(2) (Id.Lit_Comma ',') (7)} {(-d)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:18439))}
                )
                (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^f' span_id:18450))})
                (C {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:18465))})
                (command.Simple
                  words: [{(sort)} {(-u)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:18475)
                      fd: -1
                      arg_word: {(filelist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:18485)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(HASH)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:18490)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(Id.Lit_LBracket '[')} {(-f)} 
                                      {(files/) (${ Id.VSub_Name HASH) (.gz)} {(Id.Lit_RBracket ']')}
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:18510)
                            )
                          ]
                          action: [
                            (C {(echo)} {(-n)} {(DQ ('Update files missing -- '))})
                            (C {(echo)} {(DQ ('this should never happen.'))})
                            (C {(echo)} {(DQ ("Re-run '") ($ Id.VSub_Number '$0') (" fetch'."))})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:18540)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [18495 18512]
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:18550)
                  fd: -1
                  arg_word: {(filelist)}
                )
              ]
            )
            (C {(rm)} {(filelist)})
          ]
        )
    )
    (command.ShFunction
      name: install_unschg
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(cat)} {($ Id.VSub_At '$@')})
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:18598))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:18601)
                      fd: -1
                      arg_word: {(filelist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Pipeline
                  children: [
                    (command.WhileUntil
                      keyword: (Token id:Id.KW_While val:while span_id:18611)
                      cond: [
                        (command.Sentence
                          child: (C {(read)} {(F)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:18616)
                        )
                      ]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.Pipeline
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(-e)} 
                                              {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')}
                                            )
                                          ]
                                          negated: T
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:18638)
                                    )
                                  ]
                                  action: [
                                    (command.ControlFlow
                                      token: 
                                        (Token
                                          id: Id.ControlFlow_Continue
                                          val: continue
                                          span_id: 18643
                                        )
                                    )
                                  ]
                                  spids: [18621 18640]
                                )
                              ]
                              else_action: [
                                (C {(echo)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)})
                              ]
                            )
                          ]
                        )
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:18665)
                          fd: -1
                          arg_word: {(filelist)}
                        )
                      ]
                    )
                    (C {(xargs)} {(chflags)} {(noschg)})
                  ]
                  negated: F
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:18679)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(rm)} {(filelist)})
          ]
        )
    )
    (command.ShFunction
      name: backup_kernel_finddir
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CNT)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [18707]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:18711)
              cond: [
                (command.Sentence
                  child: (C {(true)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:18715)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-e)} 
                                  {($ Id.VSub_DollarName '$BASEDIR') (/) 
                                    ($ Id.VSub_DollarName '$BACKUPKERNELDIR')
                                  } {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:18741)
                            )
                          ]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:18746)
                              arg_word: {(0)}
                            )
                          ]
                          spids: [18728 18743]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(-d)} 
                                  {($ Id.VSub_DollarName '$BASEDIR') (/) 
                                    ($ Id.VSub_DollarName '$BACKUPKERNELDIR')
                                  } {(-a)} {(-e)} 
                                  {($ Id.VSub_DollarName '$BASEDIR') (/) 
                                    ($ Id.VSub_DollarName '$BACKUPKERNELDIR') (/.freebsd-update)
                                  } {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:18785)
                            )
                          ]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:18790)
                              arg_word: {(0)}
                            )
                          ]
                          spids: [18763 18787]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CNT)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: 
                                      (arith_expr.VarRef
                                        token: (Token id:Id.Lit_ArithVarLike val:CNT span_id:18809)
                                      )
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                  )
                              )
                            }
                          spids: [18807]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$CNT')} {(-gt)} {(9)} 
                                  {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:18829)
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {
                                (DQ ('Could not find valid backup dir (') 
                                  ($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR') (')')
                                )
                              }
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Exit val:exit span_id:18845)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [18818 18831]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BACKUPKERNELDIR)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:18855)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (command.Pipeline
                                          children: [
                                            (C {(echo)} {($ Id.VSub_DollarName '$BACKUPKERNELDIR')})
                                            (C {(sed)} {(-Ee)} 
                                              {
                                                (SQ 
                                                  (Token
                                                    id: Id.Lit_Chars
                                                    val: 's/[0-9]$//'
                                                    span_id: 18871
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                          negated: F
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [18853]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BACKUPKERNELDIR)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name BACKUPKERNELDIR) (${ Id.VSub_Name CNT))}
                          spids: [18877]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: backup_kernel
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$BACKUPKERNEL')} 
                          {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(yes)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:18938)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:18943)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [18926 18940]
                )
              ]
            )
            (C {(backup_kernel_finddir)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-d)} 
                          {($ Id.VSub_DollarName '$BASEDIR') (/) 
                            ($ Id.VSub_DollarName '$BACKUPKERNELDIR')
                          } {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:18983)
                    )
                  ]
                  action: [
                    (C {(rm)} {(-fr)} 
                      {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR')}
                    )
                  ]
                  spids: [18972 18985]
                )
              ]
            )
            (C {(mkdir)} {(-p)} 
              {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR')}
            )
            (command.Pipeline
              children: [
                (C {(mtree)} {(-cdn)} {(-p)} 
                  {(DQ (${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name KERNELDIR))}
                )
                (command.Simple
                  words: [
                    {(mtree)}
                    {(-Ue)}
                    {(-p)}
                    {(DQ (${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name BACKUPKERNELDIR))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:19050)
                      fd: -1
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(touch)} 
              {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR') 
                (/.freebsd-update)
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-ne)} {(0)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:19079)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Could not create kernel backup directory'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:19091)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [19068 19081]
                )
              ]
            )
            (C {(Id.KW_Set set)} {(-f)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$BACKUPKERNELSYMBOLFILES')} 
                          {(Id.Lit_Equals '=')} {(yes)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:19129)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:FINDFILTER)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [19134]
                        )
                      ]
                    )
                  ]
                  spids: [19118 19131]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:FINDFILTER)
                      op: assign_op.Equal
                      rhs: {(DQ ('-a ! -name *.debug -a ! -name *.symbols'))}
                      spids: [19142]
                    )
                  ]
                )
              ]
            )
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(cd)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name KERNELDIR)})
                        (C {(find)} {(.)} {(-type)} {(f)} {($ Id.VSub_DollarName '$FINDFILTER')} {(-exec)} 
                          {(cp)} {(-pl)} {(SQ (Token id:Id.Lit_Chars val:'{}' span_id:19188))} 
                          {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name BACKUPKERNELDIR) (/) 
                            (SQ (Token id:Id.Lit_Chars val:'{}' span_id:19200))
                          } {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\;' span_id:19203))}
                        )
                      ]
                    )
                  ]
                )
            )
            (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (f)})
          ]
        )
    )
    (command.ShFunction
      name: install_from_index
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19250))} {($ Id.VSub_Number '$1')}
                )
                (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19261))} 
                  {(SQ (Token id:Id.Lit_Chars val:' ' span_id:19265))}
                )
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:19271)
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(read)} {(FPATH)} {(TYPE)} {(OWNER)} {(GROUP)} {(PERM)} {(FLAGS)} {(HASH)} 
                          {(LINK)}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:19290)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Case
                          to_match: {(${ Id.VSub_Name TYPE)}
                          arms: [
                            (case_arm
                              pat_list: [{(d)}]
                              action: [
                                (C {(install)} {(-d)} {(-o)} {(${ Id.VSub_Name OWNER)} {(-g)} 
                                  {(${ Id.VSub_Name GROUP)} {(-m)} {(${ Id.VSub_Name PERM)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)}
                                )
                              ]
                              spids: [19304 19305 19345 -1]
                            )
                            (case_arm
                              pat_list: [{(f)}]
                              action: [
                                (command.If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (command.Sentence
                                          child: 
                                            (C {(Id.Lit_LBracket '[')} {(-z)} 
                                              {(DQ (${ Id.VSub_Name LINK))} {(Id.Lit_RBracket ']')}
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:19365)
                                        )
                                      ]
                                      action: [
                                        (command.Simple
                                          words: [{(gunzip)}]
                                          redirects: [
                                            (redir.Redir
                                              op: (Token id:Id.Redir_Less val:'<' span_id:19376)
                                              fd: -1
                                              arg_word: {(files/) (${ Id.VSub_Name HASH) (.gz)}
                                            )
                                            (redir.Redir
                                              op: (Token id:Id.Redir_Great val:'>' span_id:19384)
                                              fd: -1
                                              arg_word: {(${ Id.VSub_Name HASH)}
                                            )
                                          ]
                                        )
                                        (C {(install)} {(-S)} {(-o)} {(${ Id.VSub_Name OWNER)} {(-g)} 
                                          {(${ Id.VSub_Name GROUP)} {(-m)} {(${ Id.VSub_Name PERM)} {(${ Id.VSub_Name HASH)} 
                                          {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)}
                                        )
                                        (C {(rm)} {(${ Id.VSub_Name HASH)})
                                      ]
                                      spids: [19352 19367]
                                    )
                                  ]
                                  else_action: [
                                    (C {(ln)} {(-f)} 
                                      {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name LINK)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)}
                                    )
                                  ]
                                )
                              ]
                              spids: [19348 19349 19466 -1]
                            )
                            (case_arm
                              pat_list: [{(L)}]
                              action: [
                                (C {(ln)} {(-sfh)} {(${ Id.VSub_Name HASH)} 
                                  {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)}
                                )
                              ]
                              spids: [19469 19470 19494 -1]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (command.Simple
                  words: [
                    {(tr)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19511))}
                    {(SQ (Token id:Id.Lit_Chars val:' ' span_id:19515))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:19518)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$1')}
                    )
                  ]
                )
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:19525)
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(read)} {(FPATH)} {(TYPE)} {(OWNER)} {(GROUP)} {(PERM)} {(FLAGS)} {(HASH)} 
                          {(LINK)}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:19544)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (command.AndOr
                                      ops: [Id.Op_DAmp]
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TYPE)} 
                                          {(Id.Lit_Equals '=')} {(DQ (f))} {(Id.Lit_RBracket ']')}
                                        )
                                        (command.Pipeline
                                          children: [
                                            (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name FLAGS)} 
                                              {(Id.Lit_Equals '=')} {(DQ (0))} {(Id.Lit_RBracket ']')}
                                            )
                                          ]
                                          negated: T
                                        )
                                      ]
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:19583)
                                )
                              ]
                              action: [
                                (C {(chflags)} {(${ Id.VSub_Name FLAGS)} 
                                  {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)}
                                )
                              ]
                              spids: [19549 19585]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: install_delete
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19635))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:19638)
                      fd: -1
                      arg_word: {($ Id.VSub_Number '$2')}
                    )
                  ]
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:19647)
                      fd: -1
                      arg_word: {(newfiles)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19668))} {($ Id.VSub_Number '$1')}
                )
                (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19681))} {(-v)} {(1)} {(-)} 
                  {(newfiles)}
                )
                (C {(sort)} {(-r)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19708))}
                )
                (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2)} {(-d)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19725))}
                )
                (command.Simple
                  words: [
                    {(tr)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19734))}
                    {(SQ (Token id:Id.Lit_Chars val:' ' span_id:19738))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:19741)
                      fd: -1
                      arg_word: {(killfiles)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:19751)
              cond: [
                (command.Sentence
                  child: (C {(read)} {(FPATH)} {(TYPE)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:19758)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.Case
                      to_match: {(${ Id.VSub_Name TYPE)}
                      arms: [
                        (case_arm
                          pat_list: [{(d)}]
                          action: [
                            (C {(rmdir)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)})
                          ]
                          spids: [19772 19773 19787 -1]
                        )
                        (case_arm
                          pat_list: [{(f)}]
                          action: [(C {(rm)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)})]
                          spids: [19790 19791 19805 -1]
                        )
                        (case_arm
                          pat_list: [{(L)}]
                          action: [(C {(rm)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)})]
                          spids: [19808 19809 19823 -1]
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:19831)
                  fd: -1
                  arg_word: {(killfiles)}
                )
              ]
            )
            (C {(rm)} {(newfiles)} {(killfiles)})
          ]
        )
    )
    (command.ShFunction
      name: install_files
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-f)} {($ Id.VSub_Number '$1') (/kerneldone)} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:19877)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [
                        {(grep)}
                        {(-E)}
                        {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:19887))}
                        {($ Id.VSub_Number '$1') (/INDEX-OLD)}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:19893)
                          fd: -1
                          arg_word: {(INDEX-OLD)}
                        )
                      ]
                    )
                    (command.Simple
                      words: [
                        {(grep)}
                        {(-E)}
                        {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:19903))}
                        {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:19909)
                          fd: -1
                          arg_word: {(INDEX-NEW)}
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(backup_kernel)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:19923)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(install_from_index)} {(INDEX-NEW)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:19939)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(install_delete)} {(INDEX-OLD)} {(INDEX-NEW)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:19957)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-OLD)} {(-o)} {(-s)} {(INDEX-NEW)} 
                                  {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:19982)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [{(kldxref)} {(-R)} {(${ Id.VSub_Name BASEDIR) (/boot/)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'2>' span_id:19996)
                                  fd: 2
                                  arg_word: {(/dev/null)}
                                )
                              ]
                            )
                          ]
                          spids: [19967 19984]
                        )
                      ]
                    )
                    (C {(touch)} {($ Id.VSub_Number '$1') (/kerneldone)})
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.AndOr
                                  ops: [Id.Op_DAmp]
                                  children: [
                                    (C {(Id.Lit_LBracket '[')} {(-f)} 
                                      {($ Id.VSub_Number '$1') (/kernelfirst)} {(Id.Lit_RBracket ']')}
                                    )
                                    (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-OLD)} {(-o)} {(-s)} 
                                      {(INDEX-NEW)} {(Id.Lit_RBracket ']')}
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:20046)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [{(cat)}]
                              redirects: [
                                (redir.HereDoc
                                  op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:20053)
                                  fd: -1
                                  here_begin: {(EOF)}
                                  here_end_span_id: 20064
                                  stdin_parts: [
                                    ('\n')
                                    ('Kernel updates have been installed.  Please reboot and run\n')
                                    (Id.Right_DoubleQuote '"')
                                    ($ Id.VSub_Number '$0')
                                    (' install')
                                    (Id.Right_DoubleQuote '"')
                                    (' again to finish installing updates.\n')
                                  ]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Exit val:exit span_id:20066)
                              arg_word: {(0)}
                            )
                          ]
                          spids: [20019 20048]
                        )
                      ]
                    )
                  ]
                  spids: [19865 19879]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(Id.Lit_LBracket '[')} {(-f)} {($ Id.VSub_Number '$1') (/worlddone)} 
                              {(Id.Lit_RBracket ']')}
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:20094)
                    )
                  ]
                  action: [
                    (command.Pipeline
                      children: [
                        (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20108))} 
                          {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                        )
                        (command.Simple
                          words: [
                            {(grep)}
                            {(-E)}
                            {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20122))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:20125)
                              fd: -1
                              arg_word: {(INDEX-NEW)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(install_from_index)} {(INDEX-NEW)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:20136)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (command.Pipeline
                      children: [
                        (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20151))} 
                          {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                        )
                        (C {(grep)} {(-vE)} 
                          {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20165))}
                        )
                        (command.Simple
                          words: [
                            {(grep)}
                            {(-E)}
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '^/libexec/ld-elf[^|]*\\.so\\.[0-9]+\\|'
                                  span_id: 20176
                                )
                              )
                            }
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:20179)
                              fd: -1
                              arg_word: {(INDEX-NEW)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(install_from_index)} {(INDEX-NEW)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:20190)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (command.Pipeline
                      children: [
                        (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20205))} 
                          {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                        )
                        (C {(grep)} {(-vE)} 
                          {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20219))}
                        )
                        (C {(grep)} {(-vE)} 
                          {
                            (SQ 
                              (Token
                                id: Id.Lit_Chars
                                val: '^/libexec/ld-elf[^|]*\\.so\\.[0-9]+\\|'
                                span_id: 20230
                              )
                            )
                          }
                        )
                        (command.Simple
                          words: [
                            {(grep)}
                            {(-E)}
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|'
                                  span_id: 20241
                                )
                              )
                            }
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:20244)
                              fd: -1
                              arg_word: {(INDEX-NEW)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(install_from_index)} {(INDEX-NEW)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:20255)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (command.Pipeline
                      children: [
                        (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20270))} 
                          {($ Id.VSub_Number '$1') (/INDEX-OLD)}
                        )
                        (C {(grep)} {(-vE)} 
                          {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20284))}
                        )
                        (C {(grep)} {(-vE)} 
                          {
                            (SQ 
                              (Token
                                id: Id.Lit_Chars
                                val: '^/libexec/ld-elf[^|]*\\.so\\.[0-9]+\\|'
                                span_id: 20295
                              )
                            )
                          }
                        )
                        (command.Simple
                          words: [
                            {(grep)}
                            {(-vE)}
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|'
                                  span_id: 20306
                                )
                              )
                            }
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:20309)
                              fd: -1
                              arg_word: {(INDEX-OLD)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.Pipeline
                      children: [
                        (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20319))} 
                          {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                        )
                        (C {(grep)} {(-vE)} 
                          {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20333))}
                        )
                        (C {(grep)} {(-vE)} 
                          {
                            (SQ 
                              (Token
                                id: Id.Lit_Chars
                                val: '^/libexec/ld-elf[^|]*\\.so\\.[0-9]+\\|'
                                span_id: 20344
                              )
                            )
                          }
                        )
                        (command.Simple
                          words: [
                            {(grep)}
                            {(-vE)}
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|'
                                  span_id: 20355
                                )
                              )
                            }
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:20358)
                              fd: -1
                              arg_word: {(INDEX-NEW)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(install_from_index)} {(INDEX-NEW)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:20369)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(install_delete)} {(INDEX-OLD)} {(INDEX-NEW)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:20382)
                          arg_word: {(1)}
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.AndOr
                                  ops: [Id.Op_DPipe]
                                  children: [
                                    (C {(Id.Lit_LBracket '[')} 
                                      {(${ Id.VSub_Name BASEDIR) (/etc/master.passwd)} {(-nt)} {(${ Id.VSub_Name BASEDIR) (/etc/spwd.db)} {(Id.Lit_RBracket ']')}
                                    )
                                    (C {(Id.Lit_LBracket '[')} 
                                      {(${ Id.VSub_Name BASEDIR) (/etc/master.passwd)} {(-nt)} {(${ Id.VSub_Name BASEDIR) (/etc/pwd.db)} {(Id.Lit_RBracket ']')}
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:20428)
                            )
                          ]
                          action: [
                            (C {(pwd_mkdb)} {(-d)} {(${ Id.VSub_Name BASEDIR) (/etc)} 
                              {(${ Id.VSub_Name BASEDIR) (/etc/master.passwd)}
                            )
                          ]
                          spids: [20392 20430]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} 
                                  {(${ Id.VSub_Name BASEDIR) (/etc/login.conf)} {(-nt)} {(${ Id.VSub_Name BASEDIR) (/etc/login.conf.db)} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:20473)
                            )
                          ]
                          action: [(C {(cap_mkdb)} {(${ Id.VSub_Name BASEDIR) (/etc/login.conf)})]
                          spids: [20456 20475]
                        )
                      ]
                    )
                    (C {(touch)} {($ Id.VSub_Number '$1') (/worlddone)})
                    (command.Pipeline
                      children: [
                        (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20514))} 
                          {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                        )
                        (C {(grep)} {(-E)} 
                          {
                            (SQ 
                              (Token
                                id: Id.Lit_Chars
                                val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|'
                                span_id: 20528
                              )
                            )
                          }
                        )
                        (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:20543))})
                        (command.Simple
                          words: [{(sort)}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:20551)
                              fd: -1
                              arg_word: {(newfiles)}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(grep)} {(-vE)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20563))} {($ Id.VSub_Number '$1') (/INDEX-OLD)}
                                    )
                                    (C {(grep)} {(-E)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|'
                                            span_id: 20577
                                          )
                                        )
                                      }
                                    )
                                    (C {(cut)} {(-f)} {(1)} {(-d)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'|' span_id:20592))}
                                    )
                                    (C {(sort)})
                                    (C {(join)} {(-v)} {(1)} {(-)} {(newfiles)})
                                    (C {(grep)} {(-q)} {(.)})
                                  ]
                                  negated: F
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:20621)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [{(cat)}]
                              redirects: [
                                (redir.HereDoc
                                  op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:20628)
                                  fd: -1
                                  here_begin: {(EOF)}
                                  here_end_span_id: 20642
                                  stdin_parts: [
                                    ('\n')
                                    (
'Completing this upgrade requires removing old shared object files.\n'
                                    )
                                    (
'Please rebuild all installed 3rd party software (e.g., programs\n'
                                    )
                                    ('installed from the ports tree) and then run ')
                                    (Id.Right_DoubleQuote '"')
                                    ($ Id.VSub_Number '$0')
                                    (' install')
                                    (Id.Right_DoubleQuote '"')
                                    ('\n')
                                    ('again to finish installing updates.\n')
                                  ]
                                )
                              ]
                            )
                            (C {(rm)} {(newfiles)})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Exit val:exit span_id:20649)
                              arg_word: {(0)}
                            )
                          ]
                          spids: [20556 20623]
                        )
                      ]
                    )
                    (C {(rm)} {(newfiles)})
                  ]
                  spids: [20082 20096]
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20675))} 
                  {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                )
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20689))})
                (command.Simple
                  words: [
                    {(grep)}
                    {(-E)}
                    {
                      (SQ 
                        (Token
                          id: Id.Lit_Chars
                          val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|'
                          span_id: 20700
                        )
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:20703)
                      fd: -1
                      arg_word: {(INDEX-NEW)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20713))} 
                  {($ Id.VSub_Number '$1') (/INDEX-OLD)}
                )
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20727))})
                (command.Simple
                  words: [
                    {(grep)}
                    {(-E)}
                    {
                      (SQ 
                        (Token
                          id: Id.Lit_Chars
                          val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|'
                          span_id: 20738
                        )
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:20741)
                      fd: -1
                      arg_word: {(INDEX-OLD)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_delete)} {(INDEX-OLD)} {(INDEX-NEW)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:20754)
                  arg_word: {(1)}
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20769))} 
                  {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                )
                (command.Simple
                  words: [
                    {(grep)}
                    {(-E)}
                    {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20783))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:20786)
                      fd: -1
                      arg_word: {(INDEX-NEW)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20796))} 
                  {($ Id.VSub_Number '$1') (/INDEX-OLD)}
                )
                (command.Simple
                  words: [
                    {(grep)}
                    {(-E)}
                    {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20810))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:20813)
                      fd: -1
                      arg_word: {(INDEX-OLD)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_delete)} {(INDEX-OLD)} {(INDEX-NEW)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:20826)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(rm)} {(INDEX-OLD)} {(INDEX-NEW)})
          ]
        )
    )
    (command.ShFunction
      name: install_setup_rollback
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-f)} 
                          {(${ Id.VSub_Name BDHASH) (-install/kernelfirst)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:20880)
                    )
                  ]
                  action: [
                    (C {(rm)} {(${ Id.VSub_Name BDHASH) (-install/kernelfirst)})
                    (C {(rm)} {(${ Id.VSub_Name BDHASH) (-install/kerneldone)})
                  ]
                  spids: [20868 20882]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-f)} 
                          {(${ Id.VSub_Name BDHASH) (-install/worlddone)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:20916)
                    )
                  ]
                  action: [(C {(rm)} {(${ Id.VSub_Name BDHASH) (-install/worlddone)})]
                  spids: [20904 20918]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BDHASH) (-rollback)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:20945)
                    )
                  ]
                  action: [
                    (C {(mv)} {(${ Id.VSub_Name BDHASH) (-rollback)} 
                      {(${ Id.VSub_Name BDHASH) (-install/rollback)}
                    )
                  ]
                  spids: [20933 20947]
                )
              ]
            )
            (C {(mv)} {(${ Id.VSub_Name BDHASH) (-install)} {(${ Id.VSub_Name BDHASH) (-rollback)})
          ]
        )
    )
    (command.ShFunction
      name: install_run
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} {(-n)} {(DQ ('Installing updates...'))})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_verify)} {(${ Id.VSub_Name BDHASH) (-install/INDEX-OLD)} 
                  {(${ Id.VSub_Name BDHASH) (-install/INDEX-NEW)}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21023)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_unschg)} {(${ Id.VSub_Name BDHASH) (-install/INDEX-OLD)} 
                  {(${ Id.VSub_Name BDHASH) (-install/INDEX-NEW)}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21049)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_files)} {(${ Id.VSub_Name BDHASH) (-install)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21068)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(install_setup_rollback)})
            (C {(echo)} {(DQ (' done.'))})
          ]
        )
    )
    (command.ShFunction
      name: rollback_setup_rollback
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-L)} 
                          {(${ Id.VSub_Name BDHASH) (-rollback/rollback)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:21114)
                    )
                  ]
                  action: [
                    (C {(mv)} {(${ Id.VSub_Name BDHASH) (-rollback/rollback)} {(rollback-tmp)})
                    (C {(rm)} {(-r)} {(${ Id.VSub_Name BDHASH) (-rollback/)})
                    (C {(rm)} {(${ Id.VSub_Name BDHASH) (-rollback)})
                    (C {(mv)} {(rollback-tmp)} {(${ Id.VSub_Name BDHASH) (-rollback)})
                  ]
                  spids: [21102 21116]
                )
              ]
              else_action: [
                (C {(rm)} {(-r)} {(${ Id.VSub_Name BDHASH) (-rollback/)})
                (C {(rm)} {(${ Id.VSub_Name BDHASH) (-rollback)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: rollback_files
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21207))} 
                  {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                )
                (C {(grep)} {(-E)} 
                  {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21221))}
                )
                (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21236))})
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:21244)
                      fd: -1
                      arg_word: {(INDEX-NEW.libs.flist)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21254))} 
                  {($ Id.VSub_Number '$1') (/INDEX-OLD)}
                )
                (C {(grep)} {(-E)} 
                  {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21268))}
                )
                (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21285))} {(-)}
                )
                (command.Simple
                  words: [
                    {(join)}
                    {(-t)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21298))}
                    {(-v)}
                    {(1)}
                    {(-)}
                    {(INDEX-NEW.libs.flist)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:21309)
                      fd: -1
                      arg_word: {(INDEX-OLD)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_from_index)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21320)
                  arg_word: {(1)}
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21335))} 
                  {($ Id.VSub_Number '$1') (/INDEX-OLD)}
                )
                (command.Simple
                  words: [
                    {(grep)}
                    {(-vE)}
                    {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21349))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:21352)
                      fd: -1
                      arg_word: {(INDEX-OLD)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21362))} 
                  {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                )
                (command.Simple
                  words: [
                    {(grep)}
                    {(-vE)}
                    {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21376))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:21379)
                      fd: -1
                      arg_word: {(INDEX-NEW)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_from_index)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21390)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_delete)} {(INDEX-NEW)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21403)
                  arg_word: {(1)}
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21418))} 
                  {($ Id.VSub_Number '$1') (/INDEX-OLD)}
                )
                (C {(grep)} {(-E)} 
                  {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21432))}
                )
                (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21449))} {(-)}
                )
                (command.Simple
                  words: [
                    {(join)}
                    {(-t)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21462))}
                    {(-)}
                    {(INDEX-NEW.libs.flist)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:21469)
                      fd: -1
                      arg_word: {(INDEX-OLD)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_from_index)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21480)
                  arg_word: {(1)}
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21495))} 
                  {($ Id.VSub_Number '$1') (/INDEX-OLD)}
                )
                (command.Simple
                  words: [
                    {(grep)}
                    {(-E)}
                    {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21509))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:21512)
                      fd: -1
                      arg_word: {(INDEX-OLD)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21522))} 
                  {($ Id.VSub_Number '$1') (/INDEX-NEW)}
                )
                (command.Simple
                  words: [
                    {(grep)}
                    {(-E)}
                    {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21536))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:21539)
                      fd: -1
                      arg_word: {(INDEX-NEW)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_delete)} {(INDEX-NEW)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21552)
                  arg_word: {(1)}
                )
              ]
            )
            (command.Simple
              words: [
                {(grep)}
                {(-E)}
                {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21567))}
                {($ Id.VSub_Number '$1') (/INDEX-OLD)}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:21573)
                  fd: -1
                  arg_word: {(INDEX-OLD)}
                )
              ]
            )
            (command.Simple
              words: [
                {(grep)}
                {(-E)}
                {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21583))}
                {($ Id.VSub_Number '$1') (/INDEX-NEW)}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:21589)
                  fd: -1
                  arg_word: {(INDEX-NEW)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_from_index)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21600)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_delete)} {(INDEX-NEW)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21613)
                  arg_word: {(1)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-OLD)} {(-o)} {(-s)} {(INDEX-NEW)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:21633)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(kldxref)} {(-R)} {(/boot/)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'2>' span_id:21644)
                          fd: 2
                          arg_word: {(/dev/null)}
                        )
                      ]
                    )
                  ]
                  spids: [21618 21635]
                )
              ]
            )
            (C {(rm)} {(INDEX-OLD)} {(INDEX-NEW)} {(INDEX-NEW.libs.flist)})
          ]
        )
    )
    (command.ShFunction
      name: rollback_run
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} {(-n)} {(DQ ('Uninstalling updates...'))})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BDHASH) (-install)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:21708)
                    )
                  ]
                  action: [
                    (C {(rm)} {(-r)} {(${ Id.VSub_Name BDHASH) (-install/)})
                    (C {(rm)} {(${ Id.VSub_Name BDHASH) (-install)})
                  ]
                  spids: [21696 21710]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_verify)} {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-NEW)} 
                  {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-OLD)}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21755)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_unschg)} {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-NEW)} 
                  {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-OLD)}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21781)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(rollback_files)} {(${ Id.VSub_Name BDHASH) (-rollback)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:21800)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(rollback_setup_rollback)})
            (C {(echo)} {(DQ (' done.'))})
          ]
        )
    )
    (command.ShFunction
      name: IDS_compare
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [
                {(cut)}
                {(-f)}
                {(1-5) (Id.Lit_Comma ',') (7-8)}
                {(-d)}
                {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21869))}
                {($ Id.VSub_Number '$1')}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:21874)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$1') (.noflags)}
                )
              ]
            )
            (command.Simple
              words: [
                {(sort)}
                {(-k)}
                {(1) (Id.Lit_Comma ',') (1)}
                {(-t)}
                {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21891))}
                {($ Id.VSub_Number '$1') (.noflags)}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:21897)
                  fd: -1
                  arg_word: {($ Id.VSub_Number '$1') (.sorted)}
                )
              ]
            )
            (command.Pipeline
              children: [
                (C {(cut)} {(-f)} {(1-5) (Id.Lit_Comma ',') (7-8)} {(-d)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21914))} {($ Id.VSub_Number '$2')}
                )
                (C {(comm)} {(-13)} {($ Id.VSub_Number '$1') (.noflags)} {(-)})
                (C {(fgrep)} {(-v)} {(SQ (Token id:Id.Lit_Chars val:'|-|||||' span_id:21939))})
                (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} 
                  {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21956))}
                )
                (command.Simple
                  words: [
                    {(join)}
                    {(-t)}
                    {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21967))}
                    {($ Id.VSub_Number '$1') (.sorted)}
                    {(-)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:21975)
                      fd: -1
                      arg_word: {(INDEX-NOTMATCHING)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (command.ForEach
                  iter_name: X
                  iter_words: [{(${ Id.VSub_Name IDSIGNOREPATHS)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {(INDEX-NOTMATCHING)})
                      ]
                    )
                )
                (C {(sort)} {(-u)})
                (command.Simple
                  words: [{(comm)} {(-13)} {(-)} {(INDEX-NOTMATCHING)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:22033)
                      fd: -1
                      arg_word: {(INDEX-NOTMATCHING.tmp)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(mv)} {(INDEX-NOTMATCHING.tmp)} {(INDEX-NOTMATCHING)})
            (C {(local)} {(Id.Lit_VarLike 'IFS=') (SQ (Token id:Id.Lit_Chars val:'|' span_id:22054))})
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:22058)
              cond: [
                (command.Sentence
                  child: 
                    (C {(read)} {(FPATH)} {(TYPE)} {(OWNER)} {(GROUP)} {(PERM)} {(HASH)} {(LINK)} {(P_TYPE)} 
                      {(P_OWNER)} {(P_GROUP)} {(P_PERM)} {(P_HASH)} {(P_LINK)}
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:22087)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TYPE))} 
                                      {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_TYPE))} {(Id.Lit_RBracket ']')}
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:22117)
                            )
                          ]
                          action: [
                            (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name FPATH) (' is a '))})
                            (command.Case
                              to_match: {(DQ (${ Id.VSub_Name P_TYPE))}
                              arms: [
                                (case_arm
                                  pat_list: [{(f)}]
                                  action: [(C {(echo)} {(-n)} {(DQ ('regular file, '))})]
                                  spids: [22145 22146 22157 -1]
                                )
                                (case_arm
                                  pat_list: [{(d)}]
                                  action: [(C {(echo)} {(-n)} {(DQ ('directory, '))})]
                                  spids: [22160 22161 22172 -1]
                                )
                                (case_arm
                                  pat_list: [{(L)}]
                                  action: [(C {(echo)} {(-n)} {(DQ ('symlink, '))})]
                                  spids: [22175 22176 22187 -1]
                                )
                              ]
                            )
                            (C {(echo)} {(-n)} {(DQ ('but should be a '))})
                            (command.Case
                              to_match: {(DQ (${ Id.VSub_Name TYPE))}
                              arms: [
                                (case_arm
                                  pat_list: [{(f)}]
                                  action: [(C {(echo)} {(-n)} {(DQ ('regular file.'))})]
                                  spids: [22213 22214 22225 -1]
                                )
                                (case_arm
                                  pat_list: [{(d)}]
                                  action: [(C {(echo)} {(-n)} {(DQ (directory.))})]
                                  spids: [22228 22229 22240 -1]
                                )
                                (case_arm
                                  pat_list: [{(L)}]
                                  action: [(C {(echo)} {(-n)} {(DQ (symlink.))})]
                                  spids: [22243 22244 22255 -1]
                                )
                              ]
                            )
                            (C {(echo)})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Continue val:continue span_id:22273)
                            )
                          ]
                          spids: [22096 22119]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name OWNER))} 
                                      {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_OWNER))} {(Id.Lit_RBracket ']')}
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:22305)
                            )
                          ]
                          action: [
                            (C {(echo)} {(-n)} 
                              {
                                (DQ (${ Id.VSub_Name FPATH) (' is owned by user id ') 
                                  (${ Id.VSub_Name P_OWNER) (', ')
                                )
                              }
                            )
                            (C {(echo)} 
                              {(DQ ('but should be owned by user id ') (${ Id.VSub_Name OWNER) (.))}
                            )
                          ]
                          spids: [22284 22307]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name GROUP))} 
                                      {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_GROUP))} {(Id.Lit_RBracket ']')}
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:22366)
                            )
                          ]
                          action: [
                            (C {(echo)} {(-n)} 
                              {
                                (DQ (${ Id.VSub_Name FPATH) (' is owned by group id ') 
                                  (${ Id.VSub_Name P_GROUP) (', ')
                                )
                              }
                            )
                            (C {(echo)} 
                              {(DQ ('but should be owned by group id ') (${ Id.VSub_Name GROUP) (.))}
                            )
                          ]
                          spids: [22345 22368]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.AndOr
                                  ops: [Id.Op_DAmp]
                                  children: [
                                    (command.Pipeline
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name PERM))} 
                                          {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_PERM))} {(Id.Lit_RBracket ']')}
                                        )
                                      ]
                                      negated: T
                                    )
                                    (command.Pipeline
                                      children: [
                                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TYPE))} 
                                          {(Id.Lit_Equals '=')} {(DQ (L))} {(Id.Lit_RBracket ']')}
                                        )
                                      ]
                                      negated: T
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:22460)
                            )
                          ]
                          action: [
                            (C {(echo)} {(-n)} 
                              {
                                (DQ (${ Id.VSub_Name FPATH) (' has ') (${ Id.VSub_Name P_PERM) 
                                  (' permissions, ')
                                )
                              }
                            )
                            (C {(echo)} 
                              {(DQ ('but should have ') (${ Id.VSub_Name PERM) (' permissions.'))}
                            )
                          ]
                          spids: [22418 22462]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name HASH))} 
                                      {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_HASH))} {(Id.Lit_RBracket ']')}
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:22521)
                            )
                          ]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TYPE))} 
                                          {(Id.Lit_Equals '=')} {(DQ (L))} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:22543)
                                    )
                                  ]
                                  action: [
                                    (C {(echo)} {(-n)} 
                                      {
                                        (DQ (${ Id.VSub_Name FPATH) (' is a symlink to ') 
                                          (${ Id.VSub_Name P_HASH) (', ')
                                        )
                                      }
                                    )
                                    (C {(echo)} 
                                      {
                                        (DQ ('but should be a symlink to ') (${ Id.VSub_Name HASH) (.))
                                      }
                                    )
                                  ]
                                  spids: [22526 22545]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TYPE))} 
                                          {(Id.Lit_Equals '=')} {(DQ (f))} {(Id.Lit_RBracket ']')}
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:22595)
                                    )
                                  ]
                                  action: [
                                    (C {(echo)} {(-n)} 
                                      {
                                        (DQ (${ Id.VSub_Name FPATH) (' has SHA256 hash ') 
                                          (${ Id.VSub_Name P_HASH) (', ')
                                        )
                                      }
                                    )
                                    (C {(echo)} 
                                      {
                                        (DQ ('but should have SHA256 hash ') (${ Id.VSub_Name HASH) (.))
                                      }
                                    )
                                  ]
                                  spids: [22578 22597]
                                )
                              ]
                            )
                          ]
                          spids: [22500 22523]
                        )
                      ]
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:22648)
                  fd: -1
                  arg_word: {(INDEX-NOTMATCHING)}
                )
              ]
            )
            (C {(rm)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$1') (.noflags)} 
              {($ Id.VSub_Number '$1') (.sorted)} {($ Id.VSub_Number '$2')} {(INDEX-NOTMATCHING)}
            )
          ]
        )
    )
    (command.ShFunction
      name: IDS_run
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(workdir_init)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:22690)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {(fetch_pick_server_init)}) (C {(fetch_pick_server)})]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:22712)
              cond: [
                (command.Sentence
                  child: (command.Pipeline children:[(C {(fetch_key)})] negated:T)
                  terminator: (Token id:Id.Op_Semi val:';' span_id:22717)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(fetch_pick_server)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:22726)
                          arg_word: {(1)}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:22744)
              cond: [
                (command.Sentence
                  child: (command.Pipeline children:[(C {(fetch_tag)})] negated:T)
                  terminator: (Token id:Id.Op_Semi val:';' span_id:22749)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(fetch_pick_server)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:22758)
                          arg_word: {(1)}
                        )
                      ]
                    )
                  ]
                )
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_tagsanity)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:22770)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_metadata)} {(INDEX-OLD)} {(INDEX-ALL)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:22788)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_filter_metadata)} {(INDEX-OLD)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:22808)
                  arg_word: {(1)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_filter_metadata)} {(INDEX-ALL)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:22819)
                  arg_word: {(1)}
                )
              ]
            )
            (command.Simple
              words: [{(sort)} {(INDEX-OLD)} {(INDEX-ALL)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:22835)
                  fd: -1
                  arg_word: {(INDEX-ALL.tmp)}
                )
              ]
            )
            (C {(mv)} {(INDEX-ALL.tmp)} {(INDEX-ALL)})
            (C {(rm)} {(INDEX-OLD)})
            (C {(fetch_filter_kernel_names)} {(INDEX-ALL)} {(${ Id.VSub_Name KERNCONF)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_inspect_system)} {(INDEX-ALL)} {(INDEX-PRESENT)} {(/dev/null)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:22881)
                  arg_word: {(1)}
                )
              ]
            )
            (C {(IDS_compare)} {(INDEX-ALL)} {(INDEX-PRESENT)})
          ]
        )
    )
    (command.ShFunction
      name: get_params
      body: 
        (command.BraceGroup
          children: [
            (C {(init_params)})
            (C {(parse_cmdline)} {($ Id.VSub_At '$@')})
            (C {(parse_conffile)})
            (C {(default_params)})
          ]
        )
    )
    (command.ShFunction
      name: cmd_fetch
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-t)} {(0)} {(-a)} 
                          {($ Id.VSub_DollarName '$NOTTYOK')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:22971)
                    )
                  ]
                  action: [
                    (C {(echo)} {(-n)} 
                      {
                        (DQ 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:22981)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (' fetch should not ')
                        )
                      }
                    )
                    (C {(echo)} {(DQ ('be run non-interactively.'))})
                    (C {(echo)} 
                      {
                        (DQ ('Run ') 
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:23003)
                            command_list: 
                              (command.CommandList
                                children: [(C {(basename)} {($ Id.VSub_Number '$0')})]
                              )
                          ) (' cron instead.')
                        )
                      }
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:23014)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [22952 22973]
                )
              ]
            )
            (C {(fetch_check_params)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(fetch_run)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:23029)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: cmd_cron
      body: 
        (command.BraceGroup
          children: [
            (C {(fetch_check_params)})
            (C {(sleep)} 
              {
                (command_sub
                  left_token: (Token id:Id.Left_Backtick val:'`' span_id:23061)
                  command_list: 
                    (command.CommandList
                      children: [(C {(jot)} {(-r)} {(1)} {(0)} {(3600)})]
                    )
                )
              }
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:TMPFILE)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:23078)
                            command_list: 
                              (command.CommandList
                                children: [(C {(mktemp)} {(/tmp/freebsd-update.XXXXXX)})]
                              )
                          )
                        }
                      spids: [23077]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:23088)
                  arg_word: {(1)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe Id.Op_DPipe]
                          children: [
                            (command.Pipeline
                              children: [
                                (command.Simple
                                  words: [{(fetch_run)}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_DGreat val:'>>' span_id:23099)
                                      fd: -1
                                      arg_word: {(${ Id.VSub_Name TMPFILE)}
                                    )
                                  ]
                                )
                              ]
                              negated: T
                            )
                            (command.Pipeline
                              children: [
                                (C {(grep)} {(-q)} {(DQ ('No updates needed'))} 
                                  {(${ Id.VSub_Name TMPFILE)}
                                )
                              ]
                              negated: T
                            )
                            (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name VERBOSELEVEL)} 
                              {(Id.Lit_Equals '=')} {(DQ (debug))} {(Id.Lit_RBracket ']')}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:23138)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [
                        {(mail)}
                        {(-s)}
                        {
                          (DQ 
                            (command_sub
                              left_token: (Token id:Id.Left_Backtick val:'`' span_id:23148)
                              command_list: (command.CommandList children:[(C {(hostname)})])
                            ) (' security updates')
                          )
                        }
                        {(${ Id.VSub_Name MAILTO)}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:23160)
                          fd: -1
                          arg_word: {(${ Id.VSub_Name TMPFILE)}
                        )
                      ]
                    )
                  ]
                  spids: [23093 23140]
                )
              ]
            )
            (C {(rm)} {(${ Id.VSub_Name TMPFILE)})
          ]
        )
    )
    (command.ShFunction
      name: cmd_upgrade
      body: 
        (command.BraceGroup
          children: [
            (C {(upgrade_check_params)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(upgrade_run)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:23198)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: cmd_install
      body: 
        (command.BraceGroup
          children: [
            (C {(install_check_params)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(install_run)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:23223)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: cmd_rollback
      body: 
        (command.BraceGroup
          children: [
            (C {(rollback_check_params)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(rollback_run)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:23248)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: cmd_IDS
      body: 
        (command.BraceGroup
          children: [
            (C {(IDS_check_params)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(IDS_run)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:23273)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (C {(export)} 
      {(Id.Lit_VarLike 'PATH=') (/sbin) (Id.Lit_Other ':') (/bin) (Id.Lit_Other ':') (/usr/sbin) 
        (Id.Lit_Other ':') (/usr/bin) (Id.Lit_Other ':') (${ Id.VSub_Name PATH)
      }
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$PAGER'))} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:23317)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PAGER)
                  op: assign_op.Equal
                  rhs: {(/usr/bin/more)}
                  spids: [23322]
                )
              ]
            )
          ]
          spids: [23306 23319]
        )
      ]
    )
    (C {(export)} {(Id.Lit_VarLike 'LC_ALL=') (C)})
    (C {(get_params)} {($ Id.VSub_At '$@')})
    (command.ForEach
      iter_name: COMMAND
      iter_words: [{(${ Id.VSub_Name COMMANDS)}]
      do_arg_iter: F
      body: (command.DoGroup children:[(C {(cmd_) (${ Id.VSub_Name COMMAND)})])
    )
  ]
)