// /**
//
// (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
// Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved. <BR>
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
// Module Name:
//
// UefiShellLevel3CommandsLib.uni
//
// Abstract:
//
// String definitions for UEFI Shell 2.0 level 3 commands
//
//
// **/

/=#

#langdef   en-US "english"

#string STR_GEN_TOO_MANY          #language en-US "%H%s%N: Too many arguments\r\n"
#string STR_GEN_TOO_FEW           #language en-US "%H%s%N: Too few arguments\r\n"
#string STR_GEN_PARAM_INV         #language en-US "%H%s%N: Invalid argument - '%H%s%N'\r\n"
#string STR_GEN_PROBLEM           #language en-US "%H%s%N: Unknown flag - '%H%s%N'\r\n"
#string STR_GEN_NO_VALUE          #language en-US "%H%s%N: Missing argument for flag - '%H%s%N'\r\n"
#string STR_GEN_ERR_AD            #language en-US "%H%s%N: Access denied.\r\n"
#string STR_GEN_ERR_UK            #language en-US "%H%s%N: Status: %r\r\n"
#string STR_GEN_PARAM_CON         #language en-US "%H%s%N: Parameters conflict\r\n"
#string STR_GEN_PARAM_CONFLICT    #language en-US "%H%s%N: Flags conflict with - '%H%s%N' and '%H%s%N'\r\n"
#string STR_GEN_FILE_OPEN_FAIL    #language en-US "%H%s%N: Cannot open file - '%H%s%N'\r\n"
#string STR_GEN_FILE_AD           #language en-US "%H%s%N: Access file error - '%H%s%N'\r\n"
#string STR_GEN_CRLF              #language en-US "\r\n"
#string STR_GEN_NO_CWD            #language en-US "%H%s%N: Current directory not specified\r\n"
#string STR_GEN_NO_FILES          #language en-US "%H%s%N: No matching files were found\r\n"
#string STR_GEN_DIR_NF            #language en-US "%H%s%N: Directory not found - '%H%s%N'\r\n"
#string STR_GEN_FILE_NF           #language en-US "%H%s%N: File not found - '%H%s%N'\r\n"
#string STR_GEN_IS_DIR            #language en-US "%H%s%N: '%H%s%N' is a directory\r\n"
#string STR_NO_SCRIPT             #language en-US "The command '%H%s%N' is not allowed outside of a script\r\n"

#string STR_TYP_ERROR             #language en-US "%H%s%N: Operation was not successful on '%H%s%N'\r\n"

#string STR_TOUCH_ERROR           #language en-US "%H%s%N: Operation was not successful on '%H%s%N'\r\n"

#string STR_VER_OUTPUT_SHELL      #language en-US "UEFI %s Shell v%d.%d\r\n"
#string STR_VER_OUTPUT_SIMPLE     #language en-US "%d.%d\r\n"
#string STR_VER_OUTPUT_UEFI       #language en-US "UEFI v%d.%02d (%s, 0x%08x)\r\n"
#string STR_VER_OUTPUT_SUPPLIER   #language en-US "%s\r\n"

#string STR_ECHO_ON               #language en-US "Echo is on.\r\n"
#string STR_ECHO_OFF              #language en-US "Echo is off.\r\n"
#string STR_ECHO_INVALID_PARAM    #language en-US "%H%s%N: Invalid  - too many parameters after '%s'\r\n"

#string STR_PAUSE_PROMPT          #language en-US "Enter 'q' to quit, any other key to continue:\r\n"

#string STR_HELP_NF               #language en-US "No help could be found for command '%B%s%N'.\r\n"
#string STR_HELP_INV              #language en-US "The help data for command '%B%s%N' was incorrect format.\r\n"
#string STR_HELP_SC_HEADER        #language en-US "Character    Description\r\n"
                                                  "---------    ---------------------------------------------- \r\n"
#string STR_HELP_SC_DATA          #language en-US "<newline>    Ends a command line.\r\n"
                                                  "<space>      Ends an argument, if it is not in a quotation.\r\n"
                                                  "#            Starts a comment.\r\n"
                                                  ">            Used for output redirection.\r\n"
                                                  "<            Used for input redirection.\r\n"
                                                  "|            Used for pipe command support.\r\n"
                                                  "%            Used to delimit a variable or an argument.\r\n"
                                                  "\"            Used to delimit a quotation.\r\n"
                                                  "^            Prevents the next character from being\r\n"
                                                  "             interpreted as having special meaning.\r\n"
                                                  "             Can be used inside quoted strings.\r\n"
                                                  "*, ?, [, ]   Wildcards to specify multiple similar file names.\r\n"
#string STR_HELP_COMMAND          #language en-US "%H%-14s%N- %s\r\n"
#string STR_HELP_FOOTER           #language en-US "%N\r\nHelp usage:help [%Hcmd%N|%Hpattern%N|%Hspecial%N] [%H-usage%N] [%H-verbose%N] [%H-section name%N][%H-b%N]\r\n"

#string STR_HELP_PAGE_COMMAND     #language en-US "%N%s\r\n"

#string STR_ALIAS_OUTPUT          #language en-US "%1c %10s:%s\r\n"

#string STR_GET_MTC_OUTPUT        #language en-US "%016Lx\r\n"

#string STR_GET_HELP_HELP         #language en-US ""
".TH help 0 "Displays help information from the UEFI Shell."\r\n"
".SH NAME\r\n"
"Displays the UEFI Shell command list or verbose command help.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"HELP [cmd | pattern | special] [-usage] [-verbose] [-section sectionname][-b]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -usage      - Displays the usage information for the command. The same as\r\n"
"                specifying "-section NAME" and "-section SYNOPSIS" \r\n"
"  -section    - Displays the specified section of the help information.\r\n"
"  -b          - Displays one page on screen and allows user to continue\r\n"
"                to next page\r\n"
"  cmd         - Specifies a command to display help about.\r\n"
"  pattern     - Specifies a pattern which describes the commands to be displayed.\r\n"
"  special     - Displays a list of the special characters used in the shell\r\n"
"                command line.\r\n"
"  sectionname - Specifies a section name. Supported options are:\r\n"
"                  - NAME\r\n"
"                  - SYNOPSIS\r\n"
"                  - OPTIONS\r\n"
"                  - DESCRIPTION\r\n"
"                  - EXAMPLES\r\n"
"                  - RETURNVALUES\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. The HELP command displays information about one or more shell commands.\r\n"
"  2. If no other options are specified, each command will be displayed along\r\n"
"     with a brief description of its function.\r\n"
"  3. If -verbose is specified, then display all help information for the\r\n"
"     specified commands.\r\n"
"  4. If -section is specified, only the help section specified will be\r\n"
"     displayed.\r\n"
"  5. If -usage is specified, then the command, a brief description\r\n"
"     and the usage will be displayed.\r\n"
"  6. The help text is gathered from UCS-2 text files found in the directory\r\n"
"     where the shell or shell command executable was located. The files have\r\n"
"     the name commandname.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display the list of commands in the UEFI Shell and break after one\r\n"
"    screen:\r\n"
"    Shell> help -b\r\n"
" \r\n"
"  * To display help information of a Shell command - ls:\r\n"
"    Shell> help ls\r\n"
"    Shell> -? ls\r\n"
"    Shell> ls -?\r\n"
" \r\n"
"  * To display the list of commands that start with character 'p':\r\n"
"    Shell> help p*\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  0  The help was displayed\r\n"
"  1  No command help was displayed\r\n"

#string STR_GET_HELP_ALIAS        #language en-US ""
".TH alias 0 "Handles aliases in the Shell."\r\n"
".SH NAME\r\n"
"Displays, creates, or deletes UEFI Shell aliases.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"ALIAS [-d|-v] [alias-name] [command-name]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -d           - Deletes an alias. Command-name must not be specified.\r\n"
"  -v           - Makes the alias volatile.\r\n"
"  alias-name   - Specifies an alias name.\r\n"
"  command-name - Specifies an original command's name or path.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command displays, creates, or deletes aliases in the UEFI Shell\r\n"
"     environment.\r\n"
"  2. An alias provides a new name for an existing UEFI Shell\r\n"
"     command or UEFI application. Once the alias is created, it can be used\r\n"
"     to run the command or launch the UEFI application.\r\n"
"  3. There are some aliases that are predefined in the UEFI Shell environment.\r\n"
"     These aliases provide the MS-DOS and UNIX equivalent names for the file\r\n"
"     manipulation commands.\r\n"
"  4. Aliases will be retained even after exiting the shell unless the -v option\r\n"
"     is specified. If -v is specified then the alias will not be valid after\r\n"
"     leaving the shell.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display all aliases in the UEFI Shell environment:\r\n"
"    Shell> alias\r\n"
" \r\n"
"  * To create an alias in the UEFI Shell environment:\r\n"
"    Shell> alias shutdown "reset -s" \r\n"
" \r\n"
"  * To delete an alias in the UEFI Shell environment:\r\n"
"    Shell> alias -d shutdown\r\n"
" \r\n"
"  * To add a volatile alias in the current UEFI environment, which has a star *\r\n"
"    at the line head. This volatile alias will disappear at next boot.\r\n"
"    Shell> alias -v fs0 floppy\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"
"  SHELL_OUT_OF_RESOURCES    A request to set a variable in a non-volatile\r\n"
"                            fashion could not be completed. The resulting\r\n"
"                            non-volatile request has been converted into\r\n"
"                            a volatile request.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"

#string STR_GET_HELP_CLS          #language en-US ""
".TH cls 0 "clear screen"\r\n"
".SH NAME\r\n"
"Clears standard output and optionally changes background color.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"CLS [color]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  color - Sets a new background color:\r\n"
"            0 - Black\r\n"
"            1 - Blue\r\n"
"            2 - Green\r\n"
"            3 - Cyan\r\n"
"            4 - Red\r\n"
"            5 - Magenta\r\n"
"            6 - Yellow\r\n"
"            7 - Light gray\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command clears the standard output device with an optional\r\n"
"     background color attribute. If a color is not specified, then the\r\n"
"     background color does not change.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To clear standard output without changing the background color:\r\n"
"    fs0:\> cls\r\n"
" \r\n"
"  * To clear standard output and change the background color to cyan:\r\n"
"    fs0:\> cls 3\r\n"
" \r\n"
"  * To clear standard output and change the background to the default color:\r\n"
"    fs0:\> cls 0\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_INVALID_PARAMETER   One of the passed-in parameters was incorrectly\r\n"
"                            formatted or its value was out of bounds.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_NOT_FOUND           The requested file was not found.\r\n"

#string STR_GET_HELP_ECHO         #language en-US ""
".TH echo 0 "display text or control text output"\r\n"
".SH NAME\r\n"
"Controls script file command echoing or displays a message.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"ECHO [-on|-off]\r\n"
"ECHO [message]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -on     - Enables display when reading commands from script files.\r\n"
"  -off    - Disables display when reading commands from script files.\r\n"
"  message - Specifies a message to display.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. The first form of this command controls whether script commands are\r\n"
"     displayed as they are read from the script file. If no argument is given,\r\n"
"     the current "on" or "off" status is displayed.\r\n"
"  2. The second form prints the given message to the display.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display a message string of 'Hello World':\r\n"
"    fs0:\> echo Hello World\r\n"
" \r\n"
"  * To turn command echoing on:\r\n"
"    fs0:\> echo -on\r\n"
" \r\n"
"  * To execute HelloWorld.nsh, and display when reading lines from the script\r\n"
"    file:\r\n"
"    fs0:\> HelloWorld.nsh\r\n"
"    +HelloWorld.nsh> echo Hello World\r\n"
" \r\n"
"  * To turn command echoing off:\r\n"
"    fs0:\> echo -off\r\n"
" \r\n"
"  * To display the current echo setting:\r\n"
"    fs0:\> echo\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"

#string STR_GET_HELP_GETMTC       #language en-US ""
".TH getmtc 0 "gets the MTC count"\r\n"
".SH NAME\r\n"
"Gets the MTC from BootServices and displays it.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"GETMTC\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command displays the current monotonic counter value. The lower 32\r\n"
"     bits increment every time this command is executed. Every time the system\r\n"
"     is reset, the upper 32 bits will be incremented, and the lower 32 bits\r\n"
"     will be reset to 0.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display the current monotonic counter value:\r\n"
"    fs0:\> getmtc\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS              The action was completed as requested.\r\n"
"  SHELL_DEVICE_ERROR         The underlying device was not working correctly.\r\n"
"  SHELL_SECURITY_VIOLATION   This function was not performed due to a security\r\n"
"                             violation.\r\n"

#string STR_GET_HELP_PAUSE        #language en-US ""
".TH pause 0 "pauses scripts"\r\n"
".SH NAME\r\n"
"Pauses a script and waits for an operator to press a key.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"PAUSE [-q]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -q - Does not display a test output prompt.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. The PAUSE command prints a message to the display, then suspends script\r\n"
"     file execution, and waits for keyboard input. Pressing any key resumes\r\n"
"     execution, except for q or Q. If either q or Q is pressed, script\r\n"
"     processing terminates; otherwise, execution continues with the next line\r\n"
"     after the pause command.\r\n"
"  2. The PAUSE command is available only in scripts. Switch -q can hide the\r\n"
"     message and it's optional.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * Following script is a sample of 'pause' command:\r\n"
"    fs0:\> type pause.nsh\r\n"
"    #\r\n"
"    # Example script for 'pause' command\r\n"
"    #\r\n"
"    echo pause.nsh begin..\r\n"
"    date\r\n"
"    time\r\n"
"    pause\r\n"
"    echo pause.nsh done.\r\n"
" \r\n"
"  * To execute the script with echo on:\r\n"
"    fs0:\> pause.nsh\r\n"
"    +pause.nsh> echo pause.nsh begin..\r\n"
"    pause.nsh begin..\r\n"
"    +pause.nsh> date\r\n"
"    06/19/2001\r\n"
"    +pause.nsh> time\r\n"
"    00:51:45\r\n"
"    +pause.nsh> pause\r\n"
"    Enter 'q' to quit, or any other key to continue:\r\n"
"    +pause.nsh> echo pause.nsh done.\r\n"
"    pause.nsh done.\r\n"
" \r\n"
"  * To execute the script with echo off:\r\n"
"    fs0:\> echo -off\r\n"
"    fs0:\> pause.nsh\r\n"
"    pause.nsh begin..\r\n"
"    06/19/2001\r\n"
"    00:52:50\r\n"
"    Enter 'q' to quit, or any other key to continue: q\r\n"
"    fs0:\>\r\n"

#string STR_GET_HELP_TOUCH        #language en-US ""
".TH touch 0 "Touch a file to update a directory"\r\n"
".SH NAME\r\n"
"Updates the filename timestamp with the current system date and time.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"TOUCH [-r] file [file ...]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -r   - Sets the update as recurse into subdirectories.\r\n"
"  file - Specifies the name or pattern of the file or directory. There can be multiple \r\n"
"         files on the command-line.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command updates to the current time and date the time and date on\r\n"
"     the file that is specified by the file parameter.\r\n"
"  2. If multiple files are specified on the command line, it will continue\r\n"
"     processing. It will touch the files one by one and errors will be\r\n"
"     ignored.\r\n"
"  3. TOUCH cannot change the time and date of read-only files and directories.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To update the timestamp of a specific file:\r\n"
"    fs0:\> touch for.nsh\r\n"
" \r\n"
"  * To touch a directory recursively:\r\n"
"    fs0:\> touch -r efi1.1\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS             The action was completed as requested.\r\n"
"  SHELL_NOT_FOUND           The target file or set of files were not found.\r\n"
"  SHELL_SECURITY_VIOLATION  This function was not performed due to a security\r\n"
"                            violation.\r\n"
"  SHELL_WRITE_PROTECTED     The media was write-protected or the file had a\r\n"
"                            read-only attribute associated with it.\r\n"

#string STR_GET_HELP_TYPE         #language en-US ""
".TH type 0 "print a file to StdOut"\r\n"
".SH NAME\r\n"
"Sends the contents of a file to the standard output device.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"TYPE [-a|-u] file [file...]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -a   - Displays the file as if it is encoded as 8-bit ASCII\r\n"
"  -u   - Displays the file as if it were encoded as UCS-2 Unicode.\r\n"
"  file - Specifies the name of the file to display.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command sends the contents of a file to the standard output device.\r\n"
"     If no options are used, then the command attempts to automatically detect\r\n"
"     the file type. If it fails, then UCS-2 is presumed.\r\n"
"  2. If the -a option is specified, the file is sent to the standard output\r\n"
"     device as a stream of ASCII characters.\r\n"
"  3. If the -u option is specified, the file is sent to the standard output\r\n"
"     device as a stream of Unicode (UCS-2) characters.\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display a file in UCS-2 format:\r\n"
"    fs0:\> type -u pause.nsh\r\n"
" \r\n"
"  * To display a file in ASCII format:\r\n"
"    fs0:\> type -a pause.nsh\r\n"
" \r\n"
"  * To display multiple files:\r\n"
"    fs0:\> type test.*\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS               The action was completed as requested.\r\n"
"  SHELL_INVALID_PARAMETER     One of the passed in parameters was incorrectly\r\n"
"                              formatted or its value was out of bounds.\r\n"
"  SHELL_SECURITY_VIOLATION    This function was not performed due to a security\r\n"
"                              violation.\r\n"
"  SHELL_NOT_FOUND             The target file or set of files were not found.\r\n"

#string STR_GET_HELP_VER          #language en-US ""
".TH ver 0 "prints out version info"\r\n"
".SH NAME\r\n"
"Displays UEFI Firmware version information.\r\n"
".SH SYNOPSIS\r\n"
" \r\n"
"VER [-s|-terse]\r\n"
".SH OPTIONS\r\n"
" \r\n"
"  -s     -  Displays only the UEFI Shell version.\r\n"
"  -terse -  Displays only the first part of the data.\r\n"
".SH DESCRIPTION\r\n"
" \r\n"
"NOTES:\r\n"
"  1. This command displays the version information for this UEFI Firmware, or\r\n"
"     the version information for the UEFI Shell itself. The information is\r\n"
"     retrieved through the UEFI System Table or the Shell image.\r\n"
" \r\n"
"  2. Standard format for ver output as shown below with a sample:\r\n"
"       UEFI <support-level> Shell v<uefi-shell-version>\r\n"
"       shell-supplier-specific-data\r\n"
"       UEFI v<uefi-firmware-version> (<firmware vendor name>, 0x<firmware vendor\r\n"
"       version as 32-bit hex value> <optional additional vendor version>)\r\n"
"       #\r\n"
"       # Sample \r\n"
"       #\r\n"
"       UEFI Basic Shell v2.0\r\n"
"       Copyright 2008 by Intel(R) Corporation.\r\n"
"       UEFI v2.31 (Intel(R) Corporation., 0x00010100)\r\n"
" \r\n"
"  3. UEFI version tag information:\r\n"
"       <support-level>\r\n"
"         0 = Minimal\r\n"
"         1 = Scripting\r\n"
"         2 = Basic\r\n"
"         3 = Interactive\r\n"
"       <uefi-shell-version>\r\n"
"         Comes from the Shell specification upon which the Shell\r\n"
"         implementation is based.\r\n"
"      <shell-supplier-specific-data>\r\n"
"         Build, copyright, etc.\r\n"
"      <uefi-firmware-version>\r\n"
"         Comes from the UEFI specification upon which the firmware\r\n"
"         implementation is based\r\n"
"      <firmware vendor name>\r\n"
"         Indicates Vendor Name\r\n"
"      <firmware vendor version>\r\n"
"         Indicates Vendor's firmware version\r\n"
".SH EXAMPLES\r\n"
" \r\n"
"EXAMPLES:\r\n"
"  * To display UEFI Firmware version information:\r\n"
"    fs0:\> ver\r\n"
" \r\n"
"  * To display UEFI Shell version information only:\r\n"
"    Shell> ver -s\r\n"
".SH RETURNVALUES\r\n"
" \r\n"
"RETURN VALUES:\r\n"
"  SHELL_SUCCESS   The action was completed as requested.\r\n"

